You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2007/03/23 06:15:58 UTC

svn commit: r521589 - in /incubator/openejb/trunk/openejb3: container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ container/openejb-core/src/main/java/org/apache/openejb/config/ container/openejb-core/src/main/java/org/apache/opene...

Author: dblevins
Date: Thu Mar 22 22:15:56 2007
New Revision: 521589

URL: http://svn.apache.org/viewvc?view=rev&rev=521589
Log:
OPENEJB-225: javax.annotation.security.DeclareRoles
OPENEJB-226: javax.annotation.security.DenyAll
OPENEJB-227: javax.annotation.security.PermitAll
OPENEJB-228: javax.annotation.security.RolesAllowed
OPENEJB-229: javax.annotation.security.RunAs

Added:
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JaccPermissionsBuilder.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/
      - copied from r520838, incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/GroupPrincipal.java
      - copied, changed from r521122, incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/GroupPrincipal.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/PropertiesLoginModule.java
      - copied, changed from r521122, incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/PropertiesLoginModule.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/SecurityServiceImpl.java
      - copied, changed from r521122, incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/SecurityServiceImpl.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/UserPrincipal.java
      - copied, changed from r521122, incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/UserPrincipal.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/UsernamePasswordCallbackHandler.java
      - copied, changed from r521122, incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/UsernamePasswordCallbackHandler.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/security/
    incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/security/PropertiesLoginModuleTest.java
      - copied, changed from r520838, incubator/openejb/trunk/openejb3/server/openejb-security/src/test/java/org/apache/openejb/server/security/PropertiesLoginModuleTest.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/security/SecurityTest.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/test/resources/groups.properties
      - copied, changed from r520838, incubator/openejb/trunk/openejb3/server/openejb-security/src/test/resources/groups.properties
    incubator/openejb/trunk/openejb3/container/openejb-core/src/test/resources/login.config
      - copied, changed from r520838, incubator/openejb/trunk/openejb3/server/openejb-security/src/test/resources/login.config
    incubator/openejb/trunk/openejb3/container/openejb-core/src/test/resources/users.properties
      - copied, changed from r520838, incubator/openejb/trunk/openejb3/server/openejb-security/src/test/resources/users.properties
Removed:
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/JaccPermissionsBuilder.java
    incubator/openejb/trunk/openejb3/server/openejb-security/
Modified:
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
    incubator/openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml
    incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EjbJar.java
    incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ExcludeList.java
    incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/Method.java
    incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/MethodPermission.java
    incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/RunAs.java
    incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/SecurityIdentity.java
    incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/SecurityRoleRef.java
    incubator/openejb/trunk/openejb3/server/pom.xml

Added: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JaccPermissionsBuilder.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JaccPermissionsBuilder.java?view=auto&rev=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JaccPermissionsBuilder.java (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JaccPermissionsBuilder.java Thu Mar 22 22:15:56 2007
@@ -0,0 +1,274 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.openejb.assembler.classic;
+
+import org.apache.openejb.InterfaceType;
+import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.DeploymentInfo;
+import org.apache.openejb.core.CoreDeploymentInfo;
+import org.apache.openejb.assembler.classic.ModulePermissions;
+import org.apache.openejb.assembler.classic.EjbJarInfo;
+import org.apache.openejb.assembler.classic.EnterpriseBeanInfo;
+import org.apache.openejb.assembler.classic.MethodPermissionInfo;
+import org.apache.openejb.assembler.classic.MethodInfo;
+import org.apache.openejb.assembler.classic.SecurityRoleReferenceInfo;
+
+import javax.security.auth.Subject;
+import javax.security.jacc.EJBMethodPermission;
+import javax.security.jacc.EJBRoleRefPermission;
+import java.security.Permission;
+import java.security.PermissionCollection;
+import java.security.Permissions;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class JaccPermissionsBuilder {
+
+
+    public ModulePermissions build(EjbJarInfo ejbJar, HashMap<String, DeploymentInfo> deployments) throws OpenEJBException {
+
+        ModulePermissions componentPermissions = new ModulePermissions(new Permissions(), new Permissions(), new HashMap());
+
+        for (EnterpriseBeanInfo enterpriseBean : ejbJar.enterpriseBeans) {
+            CoreDeploymentInfo deployment = (CoreDeploymentInfo) deployments.get(enterpriseBean.ejbDeploymentId);
+
+            Permissions permissions = new Permissions();
+
+            String ejbName = enterpriseBean.ejbName;
+            for (InterfaceType type : InterfaceType.values()) {
+                addToPermissions(permissions, ejbName, type.getName(), deployment.getInterface(type));
+            }
+
+            String defaultRole = null;
+            addComponentPermissions(ejbJar, enterpriseBean, defaultRole, permissions, componentPermissions);
+
+            // RunAs subject
+            String runAsName = enterpriseBean.runAs;
+            if (runAsName != null) {
+                Subject runAsSubject = null; // TODO: Turn name into subject
+                if (runAsSubject == null) {
+                    throw new OpenEJBException("No role designate found for run-as name: " + runAsName);
+                }
+                deployment.setRunAsSubject(runAsSubject);
+            }
+        }
+        return componentPermissions;
+    }
+
+    /**
+     * Fill the container moduleBuilder with the security information that it needs
+     * to create the proper interceptors.  A <code>SecurityConfiguration</code>
+     * is also filled with permissions that need to be used to fill the JACC
+     * policy configuration.
+     *
+     * @param defaultRole       default role for otherwise unassigned permissions
+     * @param notAssigned       the set of all possible permissions.  These will be
+     *                          culled so that all that are left are those that have
+     *                          not been assigned roles.
+     * @param modulePermissions the holder for the ejb's permissions
+     * @throws org.apache.openejb.OpenEJBException
+     *          if any constraints are violated
+     */
+    private void addComponentPermissions(EjbJarInfo ejbJar, EnterpriseBeanInfo beanInfo, String defaultRole, Permissions notAssigned, ModulePermissions modulePermissions) throws OpenEJBException {
+
+        PermissionCollection uncheckedPermissions = modulePermissions.getUncheckedPermissions();
+        PermissionCollection excludedPermissions = modulePermissions.getExcludedPermissions();
+        Map rolePermissions = modulePermissions.getRolePermissions();
+
+        String ejbName = beanInfo.ejbName;
+
+        //this can occur in an ear when one ejb module has security and one doesn't.  In this case we still need
+        //to make the non-secure one completely unchecked.
+        /**
+         * JACC v1.0 section 3.1.5.1
+         */
+        for (MethodPermissionInfo methodPermission : ejbJar.methodPermissions) {
+            List<String> roleNames = methodPermission.roleNames;
+            boolean unchecked = methodPermission.unchecked;
+
+            for (MethodInfo method : methodPermission.methods) {
+
+                if (!ejbName.equals(method.ejbName)) {
+                    continue;
+                }
+
+                // method name
+                String methodName = method.methodName;
+                if ("*".equals(methodName)) {
+                    // jacc uses null instead of *
+                    methodName = null;
+                }
+
+                // method interface
+                String methodIntf = method.methodIntf;
+
+                // method parameters
+                String[] methodParams;
+                if (method.methodParams != null) {
+                    List<String> paramList = method.methodParams;
+                    methodParams = paramList.toArray(new String[paramList.size()]);
+                } else {
+                    methodParams = null;
+                }
+
+                // create the permission object
+                EJBMethodPermission permission = new EJBMethodPermission(ejbName, methodName, methodIntf, methodParams);
+                notAssigned = cullPermissions(notAssigned, permission);
+
+                // if this is unchecked, mark it as unchecked; otherwise assign the roles
+                if (unchecked) {
+                    uncheckedPermissions.add(permission);
+                } else {
+                    for (String roleName : roleNames) {
+                        Permissions permissions = (Permissions) rolePermissions.get(roleName);
+                        if (permissions == null) {
+                            permissions = new Permissions();
+                            rolePermissions.put(roleName, permissions);
+                        }
+                        permissions.add(permission);
+                    }
+                }
+            }
+
+        }
+
+        /**
+         * JACC v1.0 section 3.1.5.2
+         */
+        for (MethodInfo method : ejbJar.excludeList) {
+            if (!ejbName.equals(method.ejbName)) {
+                continue;
+            }
+
+            // method name
+            String methodName = method.methodName;
+            // method interface
+            String methodIntf = method.methodIntf;
+
+            // method parameters
+            String[] methodParams;
+            if (method.methodParams != null) {
+                List<String> paramList = method.methodParams;
+                methodParams = paramList.toArray(new String[paramList.size()]);
+            } else {
+                methodParams = null;
+            }
+
+            // create the permission object
+            EJBMethodPermission permission = new EJBMethodPermission(ejbName, methodName, methodIntf, methodParams);
+
+            excludedPermissions.add(permission);
+            notAssigned = cullPermissions(notAssigned, permission);
+        }
+
+        /**
+         * JACC v1.0 section 3.1.5.3
+         */
+        for (SecurityRoleReferenceInfo securityRoleRef : beanInfo.securityRoleReferences) {
+
+            if (securityRoleRef.roleLink == null) {
+                throw new OpenEJBException("Missing role-link");
+            }
+
+            String roleLink = securityRoleRef.roleLink;
+
+            PermissionCollection roleLinks = (PermissionCollection) rolePermissions.get(roleLink);
+            if (roleLinks == null) {
+                roleLinks = new Permissions();
+                rolePermissions.put(roleLink, roleLinks);
+
+            }
+            roleLinks.add(new EJBRoleRefPermission(ejbName, securityRoleRef.roleName));
+        }
+
+        /**
+         * EJB v2.1 section 21.3.2
+         * <p/>
+         * It is possible that some methods are not assigned to any security
+         * roles nor contained in the <code>exclude-list</code> element. In
+         * this case, it is the responsibility of the Deployer to assign method
+         * permissions for all of the unspecified methods, either by assigning
+         * them to security roles, or by marking them as <code>unchecked</code>.
+         */
+        PermissionCollection permissions;
+        if (defaultRole == null) {
+            permissions = uncheckedPermissions;
+        } else {
+            permissions = (PermissionCollection) rolePermissions.get(defaultRole);
+            if (permissions == null) {
+                permissions = new Permissions();
+                rolePermissions.put(defaultRole, permissions);
+            }
+        }
+
+        Enumeration e = notAssigned.elements();
+        while (e.hasMoreElements()) {
+            Permission p = (Permission) e.nextElement();
+            permissions.add(p);
+        }
+
+    }
+
+    /**
+     * Generate all the possible permissions for a bean's interface.
+     * <p/>
+     * Method permissions are defined in the deployment descriptor as a binary
+     * relation from the set of security roles to the set of methods of the
+     * home, component, and/or web service endpoint interfaces of session and
+     * entity beans, including all their superinterfaces (including the methods
+     * of the <code>EJBHome</code> and <code>EJBObject</code> interfaces and/or
+     * <code>EJBLocalHome</code> and <code>EJBLocalObject</code> interfaces).
+     *
+     * @param permissions     the permission set to be extended
+     * @param ejbName         the name of the EJB
+     * @param methodInterface the EJB method interface
+     * @throws org.apache.openejb.OpenEJBException
+     *          in case a class could not be found
+     */
+    public void addToPermissions(Permissions permissions, String ejbName, String methodInterface, Class clazz) throws OpenEJBException {
+        if (clazz == null) return;
+        for (java.lang.reflect.Method method : clazz.getMethods()) {
+            permissions.add(new EJBMethodPermission(ejbName, methodInterface, method));
+        }
+    }
+
+    /**
+     * Removes permissions from <code>toBeChecked</code> that are implied by
+     * <code>permission</code>.
+     *
+     * @param toBeChecked the permissions that are to be checked and possibly culled
+     * @param permission  the permission that is to be used for culling
+     * @return the culled set of permissions that are not implied by <code>permission</code>
+     */
+    private Permissions cullPermissions(Permissions toBeChecked, Permission permission) {
+        Permissions result = new Permissions();
+
+        for (Enumeration e = toBeChecked.elements(); e.hasMoreElements();) {
+            Permission test = (Permission) e.nextElement();
+            if (!permission.implies(test)) {
+                result.add(test);
+            }
+        }
+
+        return result;
+    }
+}

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java?view=diff&rev=521589&r1=521588&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java Thu Mar 22 22:15:56 2007
@@ -17,8 +17,49 @@
 package org.apache.openejb.config;
 
 import org.apache.openejb.OpenEJBException;
-import org.apache.openejb.jee.*;
+import org.apache.openejb.jee.ActivationConfig;
+import org.apache.openejb.jee.ActivationConfigProperty;
+import org.apache.openejb.jee.ApplicationClient;
+import org.apache.openejb.jee.AroundInvoke;
+import org.apache.openejb.jee.AssemblyDescriptor;
+import org.apache.openejb.jee.ContainerTransaction;
+import org.apache.openejb.jee.EjbJar;
+import org.apache.openejb.jee.EjbLocalRef;
+import org.apache.openejb.jee.EjbRef;
+import org.apache.openejb.jee.EnterpriseBean;
+import org.apache.openejb.jee.EnvEntry;
+import org.apache.openejb.jee.ExcludeList;
+import org.apache.openejb.jee.InitMethod;
+import org.apache.openejb.jee.InjectionTarget;
+import org.apache.openejb.jee.Interceptor;
+import org.apache.openejb.jee.InterceptorBinding;
+import org.apache.openejb.jee.JndiConsumer;
+import org.apache.openejb.jee.JndiReference;
+import org.apache.openejb.jee.Lifecycle;
+import org.apache.openejb.jee.LifecycleCallback;
+import org.apache.openejb.jee.MessageDrivenBean;
+import org.apache.openejb.jee.MethodParams;
+import org.apache.openejb.jee.MethodPermission;
+import org.apache.openejb.jee.MethodTransaction;
+import org.apache.openejb.jee.NamedMethod;
+import org.apache.openejb.jee.PersistenceContextRef;
+import org.apache.openejb.jee.PersistenceContextType;
+import org.apache.openejb.jee.PersistenceUnitRef;
+import org.apache.openejb.jee.Property;
+import org.apache.openejb.jee.RemoteBean;
+import org.apache.openejb.jee.RemoveMethod;
+import org.apache.openejb.jee.ResAuth;
+import org.apache.openejb.jee.ResSharingScope;
+import org.apache.openejb.jee.ResourceEnvRef;
+import org.apache.openejb.jee.ResourceRef;
+import org.apache.openejb.jee.SecurityIdentity;
+import org.apache.openejb.jee.ServiceRef;
 import org.apache.openejb.jee.SessionBean;
+import org.apache.openejb.jee.StatefulBean;
+import org.apache.openejb.jee.StatelessBean;
+import org.apache.openejb.jee.TransAttribute;
+import org.apache.openejb.jee.TransactionType;
+import org.apache.openejb.jee.SecurityRoleRef;
 import org.apache.openejb.util.Logger;
 import org.apache.xbean.finder.ClassFinder;
 
@@ -26,10 +67,16 @@
 import javax.annotation.PreDestroy;
 import javax.annotation.Resource;
 import javax.annotation.Resources;
+import javax.annotation.security.DenyAll;
+import javax.annotation.security.PermitAll;
+import javax.annotation.security.RolesAllowed;
+import javax.annotation.security.RunAs;
+import javax.annotation.security.DeclareRoles;
 import javax.ejb.EJB;
 import javax.ejb.EJBHome;
 import javax.ejb.EJBLocalHome;
 import javax.ejb.EJBs;
+import javax.ejb.Init;
 import javax.ejb.Local;
 import javax.ejb.LocalHome;
 import javax.ejb.MessageDriven;
@@ -37,23 +84,21 @@
 import javax.ejb.PrePassivate;
 import javax.ejb.Remote;
 import javax.ejb.RemoteHome;
+import javax.ejb.Remove;
 import javax.ejb.Stateful;
 import javax.ejb.Stateless;
 import javax.ejb.TransactionAttribute;
 import javax.ejb.TransactionAttributeType;
 import javax.ejb.TransactionManagement;
 import javax.ejb.TransactionManagementType;
-import javax.ejb.Init;
-import javax.ejb.Remove;
-import javax.ejb.EJBContext;
+import javax.interceptor.ExcludeClassInterceptors;
+import javax.interceptor.ExcludeDefaultInterceptors;
+import javax.interceptor.Interceptors;
 import javax.persistence.PersistenceContext;
 import javax.persistence.PersistenceContexts;
 import javax.persistence.PersistenceProperty;
 import javax.persistence.PersistenceUnit;
 import javax.persistence.PersistenceUnits;
-import javax.interceptor.Interceptors;
-import javax.interceptor.ExcludeDefaultInterceptors;
-import javax.interceptor.ExcludeClassInterceptors;
 import javax.xml.ws.WebServiceRef;
 import javax.xml.ws.WebServiceRefs;
 import java.io.File;
@@ -103,6 +148,7 @@
         }
 
 //        @SuppressWarnings("unchecked")
+
         public EjbModule deploy(EjbModule ejbModule) throws OpenEJBException {
             ClassFinder finder;
             if (ejbModule.getJarURI() != null) {
@@ -231,7 +277,8 @@
 
                 ClassFinder inheritedClassFinder = createInheritedClassFinder(clazz);
 
-                inheritedClassFinder.getClass();
+                processCallbacks(bean, inheritedClassFinder);
+
                 if (bean.getTransactionType() == null) {
                     TransactionManagement tx = clazz.getAnnotation(TransactionManagement.class);
                     TransactionManagementType transactionType = TransactionManagementType.CONTAINER;
@@ -303,13 +350,61 @@
                     }
                 }
 
-                processCallbacks(bean, inheritedClassFinder);
+                RolesAllowed rolesAllowed = clazz.getAnnotation(RolesAllowed.class);
+                if (rolesAllowed != null) {
+                    MethodPermission methodPermission = new MethodPermission();
+                    methodPermission.getRoleName().addAll(Arrays.asList(rolesAllowed.value()));
+                    methodPermission.getMethod().add(new org.apache.openejb.jee.Method(ejbName, "*"));
+                    assemblyDescriptor.getMethodPermission().add(methodPermission);
+                }
+
+                for (Method method : classFinder.findAnnotatedMethods(RolesAllowed.class)) {
+                    MethodPermission methodPermission = new MethodPermission();
+                    methodPermission.getRoleName().addAll(Arrays.asList(rolesAllowed.value()));
+                    methodPermission.getMethod().add(new org.apache.openejb.jee.Method(ejbName, method));
+                    assemblyDescriptor.getMethodPermission().add(methodPermission);
+                }
+
+                PermitAll permitAll = clazz.getAnnotation(PermitAll.class);
+                if (permitAll != null) {
+                    MethodPermission methodPermission = new MethodPermission();
+                    methodPermission.setUnchecked(true);
+                    methodPermission.getMethod().add(new org.apache.openejb.jee.Method(ejbName, "*"));
+                    assemblyDescriptor.getMethodPermission().add(methodPermission);
+                }
+
+                for (Method method : classFinder.findAnnotatedMethods(PermitAll.class)) {
+                    MethodPermission methodPermission = new MethodPermission();
+                    methodPermission.setUnchecked(true);
+                    methodPermission.getMethod().add(new org.apache.openejb.jee.Method(ejbName, method));
+                    assemblyDescriptor.getMethodPermission().add(methodPermission);
+                }
+
+                for (Method method : classFinder.findAnnotatedMethods(DenyAll.class)) {
+                    ExcludeList excludeList = assemblyDescriptor.getExcludeList();
+                    excludeList.addMethod(new org.apache.openejb.jee.Method(ejbName, method));
+                }
+
+                RunAs runAs = clazz.getAnnotation(RunAs.class);
+                if (runAs != null && bean.getSecurityIdentity() == null) {
+                    SecurityIdentity securityIdentity = new SecurityIdentity();
+                    securityIdentity.setRunAs(runAs.value());
+                }
+
+                DeclareRoles declareRoles = clazz.getAnnotation(DeclareRoles.class);
+                if (declareRoles != null && bean instanceof RemoteBean){
+                    RemoteBean remoteBean = (RemoteBean) bean;
+                    List<SecurityRoleRef> securityRoleRefs = remoteBean.getSecurityRoleRef();
+                    for (String role : declareRoles.value()) {
+                        securityRoleRefs.add(new SecurityRoleRef(role));
+                    }
+                }
 
                 Interceptors interceptors = clazz.getAnnotation(Interceptors.class);
-                if (interceptors != null){
+                if (interceptors != null) {
                     EjbJar ejbJar = ejbModule.getEjbJar();
                     for (Class interceptor : interceptors.value()) {
-                        if (ejbJar.getInterceptor(interceptor.getName()) == null){
+                        if (ejbJar.getInterceptor(interceptor.getName()) == null) {
                             ejbJar.addInterceptor(new Interceptor(interceptor.getName()));
                         }
                     }
@@ -324,10 +419,10 @@
 
                 for (Method method : classFinder.findAnnotatedMethods(Interceptors.class)) {
                     interceptors = method.getAnnotation(Interceptors.class);
-                    if (interceptors != null){
+                    if (interceptors != null) {
                         EjbJar ejbJar = ejbModule.getEjbJar();
                         for (Class interceptor : interceptors.value()) {
-                            if (ejbJar.getInterceptor(interceptor.getName()) == null){
+                            if (ejbJar.getInterceptor(interceptor.getName()) == null) {
                                 ejbJar.addInterceptor(new Interceptor(interceptor.getName()));
                             }
                         }
@@ -344,7 +439,7 @@
                 }
 
                 ExcludeDefaultInterceptors excludeDefaultInterceptors = clazz.getAnnotation(ExcludeDefaultInterceptors.class);
-                if (excludeDefaultInterceptors != null){
+                if (excludeDefaultInterceptors != null) {
                     InterceptorBinding binding = assemblyDescriptor.addInterceptorBinding(new InterceptorBinding(bean));
                     binding.setExcludeDefaultInterceptors(true);
                 }
@@ -356,7 +451,7 @@
                 }
 
                 ExcludeClassInterceptors excludeClassInterceptors = clazz.getAnnotation(ExcludeClassInterceptors.class);
-                if (excludeClassInterceptors != null){
+                if (excludeClassInterceptors != null) {
                     InterceptorBinding binding = assemblyDescriptor.addInterceptorBinding(new InterceptorBinding(bean));
                     binding.setExcludeClassInterceptors(true);
                 }
@@ -366,7 +461,7 @@
                     binding.setExcludeClassInterceptors(true);
                     binding.setMethod(new NamedMethod(method));
                 }
-                
+
                 if (bean instanceof RemoteBean) {
                     RemoteBean remoteBean = (RemoteBean) bean;
 
@@ -377,7 +472,7 @@
                             try {
                                 Method create = null;
                                 for (Method method : homeClass.getMethods()) {
-                                    if (method.getName().startsWith("create")){
+                                    if (method.getName().startsWith("create")) {
                                         create = method;
                                         break;
                                     }
@@ -400,7 +495,7 @@
                             try {
                                 Method create = null;
                                 for (Method method : homeClass.getMethods()) {
-                                    if (method.getName().startsWith("create")){
+                                    if (method.getName().startsWith("create")) {
                                         create = method;
                                         break;
                                     }
@@ -578,7 +673,7 @@
             List<Class> parents = new ArrayList();
             parents.add(clazz);
             Class parent = clazz;
-            while ((parent = parent.getSuperclass()) != null){
+            while ((parent = parent.getSuperclass()) != null) {
                 parents.add(parent);
             }
 
@@ -629,7 +724,7 @@
                     InitMethod initMethod = new InitMethod(method);
 
                     Init init = method.getAnnotation(Init.class);
-                    if (init.value() != null && !init.value().equals("")){
+                    if (init.value() != null && !init.value().equals("")) {
                         initMethod.setCreateMethod(init.value());
                     }
 
@@ -763,11 +858,11 @@
 
             List<PersistenceContext> persistenceContextList = new ArrayList<PersistenceContext>();
             PersistenceContexts persistenceContexts = clazz.getAnnotation(PersistenceContexts.class);
-            if(persistenceContexts != null){
+            if (persistenceContexts != null) {
                 persistenceContextList.addAll(Arrays.asList(persistenceContexts.value()));
             }
             PersistenceContext persistenceContext = clazz.getAnnotation(PersistenceContext.class);
-            if (persistenceContext != null){
+            if (persistenceContext != null) {
                 persistenceContextList.add(persistenceContext);
             }
             for (PersistenceContext pCtx : persistenceContextList) {
@@ -841,63 +936,63 @@
                     break;
                 }
             }
-            
-            
-            if(reference == null) {
+
+
+            if (reference == null) {
                 String type = null;
-                if(resource.type() != java.lang.Object.class) {
+                if (resource.type() != java.lang.Object.class) {
                     type = resource.type().getName();
                 } else {
-                    type = member.getType().getName();                
+                    type = member.getType().getName();
                 }
                 /* TODO message-destination-refs have not been considered . Currently the types that are
                  *  not in the types in knownConnectionFactoryTypes array are considered resource-env-refs
                  *  This approach needs to be changed as it is just a hack to get the functionality working.
                  */
-                
-                 
-                String[] knownConnectionFactoryTypes = {"javax.sql.DataSource","javax.jms.ConnectionFactory","javax.jms.QueueConnectionFactory","javax.jms.TopicConnectionFactory","javax.mail.Session","java.net.URL"};
-                String[] knownEnvironmentEntries = {"java.lang.String", "java.lang.Character", "java.lang.Integer", "java.lang.Boolean", "java.lang.Double", 
-                        "java.lang.Byte", "java.lang.Short", "java.lang.Long", "java.lang.Float","int","char","boolean","double","byte","short","long","float"};
-                if (type.equals("javax.ejb.SessionContext")){
+
+
+                String[] knownConnectionFactoryTypes = {"javax.sql.DataSource", "javax.jms.ConnectionFactory", "javax.jms.QueueConnectionFactory", "javax.jms.TopicConnectionFactory", "javax.mail.Session", "java.net.URL"};
+                String[] knownEnvironmentEntries = {"java.lang.String", "java.lang.Character", "java.lang.Integer", "java.lang.Boolean", "java.lang.Double",
+                        "java.lang.Byte", "java.lang.Short", "java.lang.Long", "java.lang.Float", "int", "char", "boolean", "double", "byte", "short", "long", "float"};
+                if (type.equals("javax.ejb.SessionContext")) {
                     ResourceEnvRef ref = new ResourceEnvRef();
                     ref.setResourceEnvRefName(refName);
                     ref.setResourceEnvRefType(type);
                     consumer.getResourceEnvRef().add(ref);
                     reference = ref;
-                } else if (contains(knownConnectionFactoryTypes,type)) {
+                } else if (contains(knownConnectionFactoryTypes, type)) {
                     ResourceRef resourceRef = null;
                     List<ResourceRef> resourceRefs = consumer.getResourceRef();
                     for (ResourceRef resRef : resourceRefs) {
-                        if( resRef.getName().equals(refName)) {
+                        if (resRef.getName().equals(refName)) {
                             resourceRef = resRef;
                             break;
-                        }                
+                        }
                     }
-                            
+
                     if (resourceRef == null) {
                         resourceRef = new ResourceRef();
                         resourceRef.setName(refName);
                         resourceRefs.add(resourceRef);
                     }
-                
+
                     if (resourceRef.getResAuth() == null) {
-                        if (resource.authenticationType() == Resource.AuthenticationType.APPLICATION){
+                        if (resource.authenticationType() == Resource.AuthenticationType.APPLICATION) {
                             resourceRef.setResAuth(ResAuth.APPLICATION);
                         } else {
                             resourceRef.setResAuth(ResAuth.CONTAINER);
                         }
                     }
-                
+
                     if (resourceRef.getResType() == null || ("").equals(resourceRef.getResType())) {
                         if (resource.type() != java.lang.Object.class) {
                             resourceRef.setResType(resource.type().getName());
                         } else {
                             resourceRef.setResType(member.getType().getName());
-                        }                
+                        }
                     }
-                
-                    if (resourceRef.getResSharingScope() == null){
+
+                    if (resourceRef.getResSharingScope() == null) {
                         if (resource.shareable()) {
                             resourceRef.setResSharingScope(ResSharingScope.SHAREABLE);
                         } else {
@@ -905,31 +1000,32 @@
                         }
                     }
                     reference = resourceRef;
-                } else if (!contains(knownEnvironmentEntries,type)){             
-                                        
+                } else if (!contains(knownEnvironmentEntries, type)) {
+
                     List<ResourceEnvRef> resourceEnvRefs = consumer.getResourceEnvRef();
                     ResourceEnvRef resourceEnvRef = null;
                     for (ResourceEnvRef resEnvRef : resourceEnvRefs) {
-                        if(resEnvRef.getName().equals(refName)) {
+                        if (resEnvRef.getName().equals(refName)) {
                             resourceEnvRef = resEnvRef;
                             break;
-                        }                    
+                        }
                     }
                     if (resourceEnvRef == null) {
                         resourceEnvRef = new ResourceEnvRef();
                         resourceEnvRef.setName(refName);
                         resourceEnvRefs.add(resourceEnvRef);
                     }
-                    if (resourceEnvRef.getResourceEnvRefType() == null || ("").equals(resourceEnvRef.getResourceEnvRefType())) {
+                    if (resourceEnvRef.getResourceEnvRefType() == null || ("").equals(resourceEnvRef.getResourceEnvRefType()))
+                    {
                         if (resource.type() != java.lang.Object.class) {
                             resourceEnvRef.setResourceEnvRefType(resource.type().getName());
                         } else {
                             resourceEnvRef.setResourceEnvRefType(member.getType().getName());
-                        }                
-                    }  
+                        }
+                    }
                     reference = resourceEnvRef;
                 }
-            }                        
+            }
             if (reference == null) {
                 return;
             }
@@ -999,6 +1095,7 @@
 
         /**
          * Refer 16.11.2.1 Overriding Rules of EJB Core Spec for overriding rules
+         *
          * @param consumer
          * @param persistenceContext
          * @param member
@@ -1006,17 +1103,17 @@
          */
         private void buildPersistenceContext(JndiConsumer consumer, PersistenceContext persistenceContext, Member member) throws OpenEJBException {
             String refName = persistenceContext.name();
-            
-            if(refName.equals("")) {
+
+            if (refName.equals("")) {
                 refName = (member == null) ? null : member.getDeclaringClass().getName() + "/" + member.getName();
             }
-            
-            if(refName == null) {
+
+            if (refName == null) {
                 throw new OpenEJBException("The name attribute is not specified for the class level annotation @PersistenceContext with unitName="
-                     + persistenceContext.unitName() + ". It is mandatory for all class level PersistenceContext annotations.");
+                        + persistenceContext.unitName() + ". It is mandatory for all class level PersistenceContext annotations.");
             }
             PersistenceContextRef persistenceContextRef = null;
-            
+
             List<PersistenceContextRef> persistenceContextRefs = consumer.getPersistenceContextRef();
             for (PersistenceContextRef pcRef : persistenceContextRefs) {
                 if (pcRef.getPersistenceContextRefName().equals(refName)) {
@@ -1024,62 +1121,64 @@
                     break;
                 }
             }
-            
+
             if (persistenceContextRef == null) {
                 persistenceContextRef = new PersistenceContextRef();
                 persistenceContextRef.setPersistenceUnitName(persistenceContext.unitName());
                 persistenceContextRef.setPersistenceContextRefName(refName);
-                if(persistenceContext.type() == javax.persistence.PersistenceContextType.EXTENDED) {
+                if (persistenceContext.type() == javax.persistence.PersistenceContextType.EXTENDED) {
                     persistenceContextRef.setPersistenceContextType(PersistenceContextType.EXTENDED);
                 } else {
                     persistenceContextRef.setPersistenceContextType(PersistenceContextType.TRANSACTION);
-                }                
+                }
                 persistenceContextRefs.add(persistenceContextRef);
             } else {
-                if (persistenceContextRef.getPersistenceUnitName() == null || ("").equals(persistenceContextRef.getPersistenceUnitName())) {
+                if (persistenceContextRef.getPersistenceUnitName() == null || ("").equals(persistenceContextRef.getPersistenceUnitName()))
+                {
                     persistenceContextRef.setPersistenceUnitName(persistenceContext.unitName());
                 }
-                if (persistenceContextRef.getPersistenceContextType() == null || ("").equals(persistenceContextRef.getPersistenceContextType())) {
-                    if(persistenceContext.type() == javax.persistence.PersistenceContextType.EXTENDED) {
+                if (persistenceContextRef.getPersistenceContextType() == null || ("").equals(persistenceContextRef.getPersistenceContextType()))
+                {
+                    if (persistenceContext.type() == javax.persistence.PersistenceContextType.EXTENDED) {
                         persistenceContextRef.setPersistenceContextType(PersistenceContextType.EXTENDED);
                     } else {
                         persistenceContextRef.setPersistenceContextType(PersistenceContextType.TRANSACTION);
-                    }                
-                }                
+                    }
+                }
             }
-            
+
             List<Property> persistenceProperties = persistenceContextRef.getPersistenceProperty();
             if (persistenceProperties == null) {
                 persistenceProperties = new ArrayList<Property>();
                 persistenceContextRef.setPersistenceProperty(persistenceProperties);
             }
-            
+
             Property property = null;
-            for(PersistenceProperty persistenceProperty : persistenceContext.properties()) {
+            for (PersistenceProperty persistenceProperty : persistenceContext.properties()) {
                 boolean flag = true;
-                for(Property prpty : persistenceProperties) {
-                    if(prpty.getName().equals(persistenceProperty.name())) {
+                for (Property prpty : persistenceProperties) {
+                    if (prpty.getName().equals(persistenceProperty.name())) {
                         flag = false;
                         break;
-                    } 
+                    }
                 }
-                if(flag) {
+                if (flag) {
                     property = new Property();
                     property.setName(persistenceProperty.name());
                     property.setValue(persistenceProperty.value());
                     persistenceProperties.add(property);
                 }
             }
-                        
+
             if (member != null) {
                 // Set the member name where this will be injected
                 InjectionTarget target = new InjectionTarget();
                 target.setInjectionTargetClass(member.getDeclaringClass().getName());
                 target.setInjectionTargetName(member.getName());
                 persistenceContextRef.getInjectionTarget().add(target);
-            }                        
+            }
         }
-        
+
         private void buildEjbRef(JndiConsumer consumer, EJB ejb, Member member) {
             EjbRef ejbRef = new EjbRef();
 
@@ -1169,7 +1268,7 @@
             return new ArrayList<Class<?>>(classes);
         }
 
-        private boolean contains(Object[] types,Object type){
+        private boolean contains(Object[] types, Object type) {
             int size = types.length;
             for (int i = 0; i < size; i++) {
                 if (type.equals(types[i])) {
@@ -1178,7 +1277,7 @@
             }
             return false;
         }
-        
+
         private void addContainerTransaction(TransactionAttribute attribute, String ejbName, Method method, AssemblyDescriptor assemblyDescriptor) {
             ContainerTransaction ctx = new ContainerTransaction(cast(attribute.value()), ejbName, method.getName(), asStrings(method.getParameterTypes()));
             assemblyDescriptor.getContainerTransaction().add(ctx);

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java?view=diff&rev=521589&r1=521588&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java Thu Mar 22 22:15:56 2007
@@ -290,6 +290,12 @@
         return appInfo;
     }
 
+    public EjbJarInfo configureApplication(EjbJar ejbJar) throws OpenEJBException {
+        String moduleId = (ejbJar.getId() == null) ? ejbJar.getId(): ejbJar.toString();
+        EjbModule ejbModule = new EjbModule(Thread.currentThread().getContextClassLoader(), moduleId, moduleId, ejbJar, null);
+        return configureApplication(ejbModule);
+    }
+
     public EjbJarInfo configureApplication(EjbModule ejbModule) throws OpenEJBException {
         AppModule appModule = new AppModule(ejbModule.getClassLoader(), ejbModule.getJarLocation());
         appModule.getEjbModules().add(ejbModule);

Copied: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/GroupPrincipal.java (from r521122, incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/GroupPrincipal.java)
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/GroupPrincipal.java?view=diff&rev=521589&p1=incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/GroupPrincipal.java&r1=521122&p2=incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/GroupPrincipal.java&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/GroupPrincipal.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/GroupPrincipal.java Thu Mar 22 22:15:56 2007
@@ -14,7 +14,7 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package org.apache.openejb.server.security;
+package org.apache.openejb.core.security;
 
 import java.security.Principal;
 

Copied: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/PropertiesLoginModule.java (from r521122, incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/PropertiesLoginModule.java)
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/PropertiesLoginModule.java?view=diff&rev=521589&p1=incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/PropertiesLoginModule.java&r1=521122&p2=incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/PropertiesLoginModule.java&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/PropertiesLoginModule.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/PropertiesLoginModule.java Thu Mar 22 22:15:56 2007
@@ -14,7 +14,7 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package org.apache.openejb.server.security;
+package org.apache.openejb.core.security;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;

Copied: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/SecurityServiceImpl.java (from r521122, incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/SecurityServiceImpl.java)
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/SecurityServiceImpl.java?view=diff&rev=521589&p1=incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/SecurityServiceImpl.java&r1=521122&p2=incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/SecurityServiceImpl.java&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/SecurityServiceImpl.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/SecurityServiceImpl.java Thu Mar 22 22:15:56 2007
@@ -14,10 +14,9 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package org.apache.openejb.server.security;
+package org.apache.openejb.core.security;
 
 import org.apache.openejb.spi.SecurityService;
-import org.apache.openejb.DeploymentInfo;
 import org.apache.openejb.InterfaceType;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.core.ThreadContextListener;
@@ -80,7 +79,7 @@
         ThreadContext.addThreadContextListener(this);
     }
 
-    public Serializable login(String username, String password) throws LoginException {
+    public Object login(String username, String password) throws LoginException {
         LoginContext context = new LoginContext("PropertiesLogin", new UsernamePasswordCallbackHandler(username, password));
         context.login();
 
@@ -111,7 +110,7 @@
 
         CoreDeploymentInfo deploymentInfo = newContext.getDeploymentInfo();
 
-        SecurityContext securityContext = oldContext.get(SecurityContext.class);
+        SecurityContext securityContext = (oldContext != null) ? oldContext.get(SecurityContext.class) : null;
 
         if (deploymentInfo.getRunAsSubject() != null){
 
@@ -120,7 +119,7 @@
         } else if (securityContext == null){
 
             Subject subject = clientIdentity.get();
-            // TODO: Maybe use a default subject if client subject doesn't exist 
+            // TODO: Maybe use a default subject if client subject doesn't exist
 
             securityContext = new SecurityContext(subject);
         }
@@ -131,7 +130,11 @@
 
 
     public void contextExited(ThreadContext exitedContext, ThreadContext reenteredContext) {
-        PolicyContext.setContextID(reenteredContext.getDeploymentInfo().getModuleID());
+        if (reenteredContext == null){
+            PolicyContext.setContextID(null);
+        } else {
+            PolicyContext.setContextID(reenteredContext.getDeploymentInfo().getModuleID());
+        }
     }
 
 
@@ -231,7 +234,7 @@
     }
 
     public boolean isCallerAuthorized(Object securityIdentity, Collection<String> roleNames) {
-        return false;
+        return true;
     }
 
 }

Copied: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/UserPrincipal.java (from r521122, incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/UserPrincipal.java)
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/UserPrincipal.java?view=diff&rev=521589&p1=incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/UserPrincipal.java&r1=521122&p2=incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/UserPrincipal.java&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/UserPrincipal.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/UserPrincipal.java Thu Mar 22 22:15:56 2007
@@ -14,7 +14,7 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package org.apache.openejb.server.security;
+package org.apache.openejb.core.security;
 
 import java.security.Principal;
 

Copied: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/UsernamePasswordCallbackHandler.java (from r521122, incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/UsernamePasswordCallbackHandler.java)
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/UsernamePasswordCallbackHandler.java?view=diff&rev=521589&p1=incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/UsernamePasswordCallbackHandler.java&r1=521122&p2=incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/UsernamePasswordCallbackHandler.java&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/server/openejb-security/src/main/java/org/apache/openejb/server/security/UsernamePasswordCallbackHandler.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/security/UsernamePasswordCallbackHandler.java Thu Mar 22 22:15:56 2007
@@ -14,7 +14,7 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package org.apache.openejb.server.security;
+package org.apache.openejb.core.security;
 
 import javax.security.auth.callback.Callback;
 import javax.security.auth.callback.CallbackHandler;

Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml?view=diff&rev=521589&r1=521588&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml Thu Mar 22 22:15:56 2007
@@ -216,6 +216,11 @@
           provider-type="SecurityService"
           class-name="org.apache.openejb.ri.sp.PseudoSecurityService"/>
 
+  <ServiceProvider
+          id="New Security Service"
+          provider-type="SecurityService"
+          class-name="org.apache.openejb.core.security.SecurityServiceImpl"/>
+
   <!--
   # ================================================
   # Default Transaction Manager implementation

Copied: incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/security/PropertiesLoginModuleTest.java (from r520838, incubator/openejb/trunk/openejb3/server/openejb-security/src/test/java/org/apache/openejb/server/security/PropertiesLoginModuleTest.java)
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/security/PropertiesLoginModuleTest.java?view=diff&rev=521589&p1=incubator/openejb/trunk/openejb3/server/openejb-security/src/test/java/org/apache/openejb/server/security/PropertiesLoginModuleTest.java&r1=520838&p2=incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/security/PropertiesLoginModuleTest.java&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/server/openejb-security/src/test/java/org/apache/openejb/server/security/PropertiesLoginModuleTest.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/security/PropertiesLoginModuleTest.java Thu Mar 22 22:15:56 2007
@@ -17,9 +17,9 @@
 package org.apache.openejb.core.security;
 
 import junit.framework.TestCase;
-import org.apache.openejb.server.security.GroupPrincipal;
-import org.apache.openejb.server.security.UserPrincipal;
-import org.apache.openejb.server.security.UsernamePasswordCallbackHandler;
+import org.apache.openejb.core.security.GroupPrincipal;
+import org.apache.openejb.core.security.UserPrincipal;
+import org.apache.openejb.core.security.UsernamePasswordCallbackHandler;
 
 import javax.security.auth.Subject;
 import javax.security.auth.login.FailedLoginException;

Added: incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/security/SecurityTest.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/security/SecurityTest.java?view=auto&rev=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/security/SecurityTest.java (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/security/SecurityTest.java Thu Mar 22 22:15:56 2007
@@ -0,0 +1,121 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.openejb.core.security;
+
+import junit.framework.TestCase;
+import org.apache.openejb.core.ivm.naming.InitContextFactory;
+import org.apache.openejb.config.ConfigurationFactory;
+import org.apache.openejb.config.EjbModule;
+import org.apache.openejb.assembler.classic.Assembler;
+import org.apache.openejb.assembler.classic.ProxyFactoryInfo;
+import org.apache.openejb.assembler.classic.TransactionServiceInfo;
+import org.apache.openejb.assembler.classic.SecurityServiceInfo;
+import org.apache.openejb.assembler.classic.ConnectionManagerInfo;
+import org.apache.openejb.assembler.classic.StatelessSessionContainerInfo;
+import org.apache.openejb.assembler.classic.EjbJarInfo;
+import org.apache.openejb.jee.EjbJar;
+import org.apache.openejb.jee.AssemblyDescriptor;
+import org.apache.openejb.jee.EnterpriseBean;
+import org.apache.openejb.jee.StatelessBean;
+import org.apache.openejb.jee.Interceptor;
+import org.apache.openejb.jee.InterceptorBinding;
+import org.apache.openejb.jee.NamedMethod;
+import org.apache.openejb.jee.MethodPermission;
+import org.apache.openejb.jee.Method;
+
+import javax.naming.InitialContext;
+import javax.ejb.Stateless;
+import javax.annotation.security.RolesAllowed;
+import javax.annotation.security.PermitAll;
+import javax.annotation.security.DenyAll;
+import java.util.List;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class SecurityTest extends TestCase {
+
+
+    public void test() throws Exception {
+
+    }
+    public void _test() throws Exception {
+        System.setProperty(javax.naming.Context.INITIAL_CONTEXT_FACTORY, InitContextFactory.class.getName());
+
+        ConfigurationFactory config = new ConfigurationFactory();
+        Assembler assembler = new Assembler();
+
+        assembler.createProxyFactory(config.configureService(ProxyFactoryInfo.class));
+        assembler.createTransactionManager(config.configureService(TransactionServiceInfo.class));
+        assembler.createSecurityService(config.configureService(SecurityServiceInfo.class));
+
+        assembler.createConnectionManager(config.configureService(ConnectionManagerInfo.class));
+
+        // containers
+        assembler.createContainer(config.configureService(StatelessSessionContainerInfo.class));
+
+        EjbJar ejbJar = new EjbJar("SecurityTest");
+
+        ejbJar.addEnterpriseBean(new StatelessBean(FooBean.class));
+
+        List<MethodPermission> permissions = ejbJar.getAssemblyDescriptor().getMethodPermission();
+
+        assembler.createApplication(config.configureApplication(ejbJar));
+
+        InitialContext ctx = new InitialContext();
+//        Target target = (Target) ctx.lookup("TargetBeanBusinessLocal");
+    }
+
+
+    @Stateless
+    public static class FooBean implements Foo {
+        @RolesAllowed({"Manager"})
+        public String allowManager(String s) {
+            return s;
+        }
+
+        @RolesAllowed({"Manager", "Employee"})
+        public String allowEmployee(String s) {
+            return s;
+        }
+
+        @PermitAll
+        public String allowEveryone(String s) {
+            return s;
+        }
+
+        @DenyAll
+        public String excluded(String s) {
+            return s;
+        }
+    }
+
+    public static interface Foo {
+
+        @RolesAllowed({"Manager"})
+        String allowManager(String s);
+
+        @RolesAllowed({"Manager","Employee"})
+        String allowEmployee(String s);
+
+        @PermitAll
+        String allowEveryone(String s);
+
+        @DenyAll
+        String excluded(String s);
+    }
+}

Copied: incubator/openejb/trunk/openejb3/container/openejb-core/src/test/resources/groups.properties (from r520838, incubator/openejb/trunk/openejb3/server/openejb-security/src/test/resources/groups.properties)
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/test/resources/groups.properties?view=diff&rev=521589&p1=incubator/openejb/trunk/openejb3/server/openejb-security/src/test/resources/groups.properties&r1=520838&p2=incubator/openejb/trunk/openejb3/container/openejb-core/src/test/resources/groups.properties&r2=521589
==============================================================================
    (empty)

Copied: incubator/openejb/trunk/openejb3/container/openejb-core/src/test/resources/login.config (from r520838, incubator/openejb/trunk/openejb3/server/openejb-security/src/test/resources/login.config)
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/test/resources/login.config?view=diff&rev=521589&p1=incubator/openejb/trunk/openejb3/server/openejb-security/src/test/resources/login.config&r1=520838&p2=incubator/openejb/trunk/openejb3/container/openejb-core/src/test/resources/login.config&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/server/openejb-security/src/test/resources/login.config (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/test/resources/login.config Thu Mar 22 22:15:56 2007
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 PropertiesLogin {
-    org.apache.openejb.server.security.PropertiesLoginModule required
+    org.apache.openejb.core.security.PropertiesLoginModule required
         debug=true
         org.apache.openejb.jaas.properties.users="users.properties"
         org.apache.openejb.jaas.properties.groups="groups.properties";

Copied: incubator/openejb/trunk/openejb3/container/openejb-core/src/test/resources/users.properties (from r520838, incubator/openejb/trunk/openejb3/server/openejb-security/src/test/resources/users.properties)
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/test/resources/users.properties?view=diff&rev=521589&p1=incubator/openejb/trunk/openejb3/server/openejb-security/src/test/resources/users.properties&r1=520838&p2=incubator/openejb/trunk/openejb3/container/openejb-core/src/test/resources/users.properties&r2=521589
==============================================================================
    (empty)

Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EjbJar.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EjbJar.java?view=diff&rev=521589&r1=521588&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EjbJar.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/EjbJar.java Thu Mar 22 22:15:56 2007
@@ -91,6 +91,12 @@
     @XmlJavaTypeAdapter(CollapsedStringAdapter.class)
     protected String version;
 
+    public EjbJar() {
+    }
+
+    public EjbJar(String id) {
+        this.id = id;
+    }
 
     @XmlElement(name = "description", required = true)
     public Text[] getDescriptions() {

Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ExcludeList.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ExcludeList.java?view=diff&rev=521589&r1=521588&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ExcludeList.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ExcludeList.java Thu Mar 22 22:15:56 2007
@@ -68,6 +68,10 @@
         return this.method;
     }
 
+    public void addMethod(Method method){
+        getMethod().add(method);
+    }
+    
     public String getId() {
         return id;
     }

Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/Method.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/Method.java?view=diff&rev=521589&r1=521588&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/Method.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/Method.java Thu Mar 22 22:15:56 2007
@@ -231,6 +231,16 @@
     @XmlTransient
     protected TextMap description = new TextMap();
 
+    public Method(String ejbName, java.lang.reflect.Method method) {
+        this.ejbName = ejbName;
+        this.methodName = method.getName();
+        MethodParams methodParams = new MethodParams();
+        for (Class<?> type : method.getParameterTypes()) {
+            methodParams.getMethodParam().add(type.getCanonicalName());
+        }
+        this.methodParams = methodParams;
+    }
+
     public Method(String ejbName, String methodName, String... parameters) {
         this.ejbName = ejbName;
         this.methodName = methodName;

Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/MethodPermission.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/MethodPermission.java?view=diff&rev=521589&r1=521588&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/MethodPermission.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/MethodPermission.java Thu Mar 22 22:15:56 2007
@@ -87,12 +87,12 @@
         return this.roleName;
     }
 
-    public EmptyType getUnchecked() {
-        return unchecked;
+    public boolean getUnchecked() {
+        return unchecked != null;
     }
 
-    public void setUnchecked(EmptyType value) {
-        this.unchecked = value;
+    public void setUnchecked(boolean b) {
+        this.unchecked = (b) ? new EmptyType() : null;
     }
 
     public List<Method> getMethod() {

Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/RunAs.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/RunAs.java?view=diff&rev=521589&r1=521588&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/RunAs.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/RunAs.java Thu Mar 22 22:15:56 2007
@@ -51,6 +51,13 @@
     @XmlID
     protected String id;
 
+    public RunAs() {
+    }
+
+    public RunAs(String roleName) {
+        this.roleName = roleName;
+    }
+
     public List<Text> getDescription() {
         if (description == null) {
             description = new ArrayList<Text>();

Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/SecurityIdentity.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/SecurityIdentity.java?view=diff&rev=521589&r1=521588&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/SecurityIdentity.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/SecurityIdentity.java Thu Mar 22 22:15:56 2007
@@ -79,6 +79,10 @@
         this.runAs = value;
     }
 
+    public void setRunAs(String value) {
+        this.runAs = new RunAs(value);
+    }
+
     public String getId() {
         return id;
     }

Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/SecurityRoleRef.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/SecurityRoleRef.java?view=diff&rev=521589&r1=521588&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/SecurityRoleRef.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/SecurityRoleRef.java Thu Mar 22 22:15:56 2007
@@ -59,6 +59,19 @@
     @XmlTransient
     protected TextMap description = new TextMap();
 
+
+    public SecurityRoleRef() {
+    }
+
+    public SecurityRoleRef(String roleName) {
+        this.roleName = roleName;
+    }
+
+    public SecurityRoleRef(String roleName, String roleLink) {
+        this.roleName = roleName;
+        this.roleLink = roleLink;
+    }
+
     @XmlElement(name = "description", required = true)
     public Text[] getDescriptions() {
         return description.toArray();

Modified: incubator/openejb/trunk/openejb3/server/pom.xml
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/server/pom.xml?view=diff&rev=521589&r1=521588&r2=521589
==============================================================================
--- incubator/openejb/trunk/openejb3/server/pom.xml (original)
+++ incubator/openejb/trunk/openejb3/server/pom.xml Thu Mar 22 22:15:56 2007
@@ -40,7 +40,6 @@
     <module>openejb-corba</module>
     <module>openejb-derbynet</module>
     <module>openejb-hsql</module>
-    <module>openejb-security</module>
   </modules>
   <dependencies>
     <!--