Author: rmannibucau
Date: Sat May 10 18:53:23 2014
New Revision: 1593714

URL: http://svn.apache.org/r1593714
Log:
intializing a single time CdiEjbBean ejb api info + getting rid of duplication 
for isCallerAuthorized

Modified:
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/security/AbstractSecurityService.java
    
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatSecurityService.java

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java?rev=1593714&r1=1593713&r2=1593714&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/BeanContext.java
 Sat May 10 18:53:23 2014
@@ -30,6 +30,7 @@ import org.apache.openejb.core.intercept
 import org.apache.openejb.core.interceptor.InterceptorStack;
 import org.apache.openejb.core.ivm.ContextHandler;
 import org.apache.openejb.core.ivm.EjbHomeProxyHandler;
+import org.apache.openejb.core.security.AbstractSecurityService;
 import org.apache.openejb.core.timer.EjbTimerService;
 import org.apache.openejb.core.timer.EjbTimerServiceImpl;
 import org.apache.openejb.core.transaction.EjbTransactionUtil;
@@ -327,6 +328,7 @@ public class BeanContext extends Deploym
      */
     private BeanContext(final String id, final Context jndiContext, final 
ModuleContext moduleContext, final BeanType componentType, final boolean 
localBean, final Class beanClass) {
         super(id, moduleContext.getOptions());
+        set(AbstractSecurityService.AuthorizationCache.class, new 
AbstractSecurityService.AuthorizationCache());
 
         if (beanClass == null) {
             throw new NullPointerException("beanClass input parameter is 
null");

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java?rev=1593714&r1=1593713&r2=1593714&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiEjbBean.java
 Sat May 10 18:53:23 2014
@@ -63,6 +63,11 @@ public class CdiEjbBean<T> extends BaseE
     private final Map<Integer, Object> dependentSFSBToBeRemoved = new 
ConcurrentHashMap<Integer, Object>();
 
     private final BeanContext beanContext;
+    private final boolean isDependentAndStateful;
+
+    // initialized a bit later in the lifecycle but could be final otherwise
+    private BeanContext.BusinessLocalBeanHome homeLocalBean = null;
+    private BeanContext.BusinessLocalHome home = null;
 
     public CdiEjbBean(final BeanContext beanContext, final WebBeansContext 
webBeansContext, final AnnotatedType<T> at) {
         this(beanContext, webBeansContext, beanContext.getManagedClass(), at, 
new EjbInjectionTargetFactory<T>(at, webBeansContext));
@@ -75,6 +80,7 @@ public class CdiEjbBean<T> extends BaseE
         this.beanContext = beanContext;
         beanContext.set(Bean.class, this);
         passivatingId = beanContext.getDeploymentID() + 
getReturnType().getName();
+        isDependentAndStateful = getScope().equals(Dependent.class) && 
BeanType.STATEFUL.equals(beanContext.getComponentType());
     }
 
     public BeanContext getBeanContext() {
@@ -182,23 +188,18 @@ public class CdiEjbBean<T> extends BaseE
     }
 
     protected T createEjb(final CreationalContext<T> creationalContext) {
-        final List<Class> classes = beanContext.getBusinessLocalInterfaces();
         final CurrentCreationalContext currentCreationalContext = 
beanContext.get(CurrentCreationalContext.class);
         final CreationalContext existing = currentCreationalContext.get();
         currentCreationalContext.set(creationalContext);
         try {
             final T instance;
-            if (classes.size() == 0 && beanContext.isLocalbean()) {
-                final BeanContext.BusinessLocalBeanHome home = 
beanContext.getBusinessLocalBeanHome();
-                instance = (T) home.create();
+            if (homeLocalBean != null) {
+                instance = (T) homeLocalBean.create();
             } else {
-                final Class<?> mainInterface = classes.get(0);
-                final List<Class> interfaces = 
ProxyInterfaceResolver.getInterfaces(beanContext.getBeanClass(), mainInterface, 
classes);
-                final BeanContext.BusinessLocalHome home = 
beanContext.getBusinessLocalHome(interfaces, mainInterface);
                 instance = (T) home.create();
             }
 
-            if (getScope().equals(Dependent.class) && 
BeanType.STATEFUL.equals(beanContext.getComponentType())) {
+            if (isDependentAndStateful) {
                 
CreationalContextImpl.class.cast(creationalContext).addDependent(this, 
instance);
             }
 
@@ -238,6 +239,21 @@ public class CdiEjbBean<T> extends BaseE
         dependentSFSBToBeRemoved.put(System.identityHashCode(proxy), instance);
     }
 
+    public void initInternals()
+    {
+        final List<Class> classes = beanContext.getBusinessLocalInterfaces();
+        final boolean noLocalInterface = classes.isEmpty();
+        if (noLocalInterface && beanContext.isLocalbean()) {
+            homeLocalBean = beanContext.getBusinessLocalBeanHome();
+            home = null;
+        } else if (!noLocalInterface) {
+            final Class<?> mainInterface = classes.get(0);
+            final List<Class> interfaces = 
ProxyInterfaceResolver.getInterfaces(beanContext.getBeanClass(), mainInterface, 
classes);
+            home = beanContext.getBusinessLocalHome(interfaces, mainInterface);
+            homeLocalBean = null;
+        } // else remote
+    }
+
     private static class EJBBeanAttributesImpl<T> extends 
BeanAttributesImpl<T> {
         private final BeanContext beanContext;
         private final Set<Type> ejbTypes;

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java?rev=1593714&r1=1593713&r2=1593714&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java
 Sat May 10 18:53:23 2014
@@ -200,6 +200,7 @@ public class OpenEJBLifecycle implements
                 }
                 bc.mergeOWBAndOpenEJBInfo();
                 bc.set(InterceptorResolutionService.BeanInterceptorInfo.class, 
InjectionTargetImpl.class.cast(cdiEjbBean.getInjectionTarget()).getInterceptorInfo());
+                cdiEjbBean.initInternals();
             }
 
             //Start actual starting on sub-classes

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/security/AbstractSecurityService.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/security/AbstractSecurityService.java?rev=1593714&r1=1593713&r2=1593714&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/security/AbstractSecurityService.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/security/AbstractSecurityService.java
 Sat May 10 18:53:23 2014
@@ -275,20 +275,21 @@ public abstract class AbstractSecuritySe
     @Override
     public boolean isCallerAuthorized(final Method method, final InterfaceType 
type) {
         final ThreadContext threadContext = ThreadContext.getThreadContext();
-        final SecurityContext securityContext = 
threadContext.get(SecurityContext.class);
-
+        final BeanContext beanContext = threadContext.getBeanContext();
         try {
-
-            final BeanContext beanContext = threadContext.getBeanContext();
             final String ejbName = beanContext.getEjbName();
-
             String name = type == null ? null : type.getSpecName();
             if ("LocalBean".equals(name) || "LocalBeanHome".equals(name)) {
                 name = null;
             }
-
+            final Identity currentIdentity = clientIdentity.get();
+            final SecurityContext securityContext;
+            if(currentIdentity == null) {
+                securityContext= threadContext.get(SecurityContext.class);
+            } else {
+                securityContext = new 
SecurityContext(currentIdentity.getSubject());
+            }
             securityContext.acc.checkPermission(new 
EJBMethodPermission(ejbName, name, method));
-
         } catch (final AccessControlException e) {
             return false;
         }

Modified: 
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatSecurityService.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatSecurityService.java?rev=1593714&r1=1593713&r2=1593714&view=diff
==============================================================================
--- 
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatSecurityService.java
 (original)
+++ 
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatSecurityService.java
 Sat May 10 18:53:23 2014
@@ -68,30 +68,6 @@ public class TomcatSecurityService exten
     }
 
     @Override
-    public boolean isCallerAuthorized(final Method method, final InterfaceType 
type) {
-        final ThreadContext threadContext = ThreadContext.getThreadContext();
-        try {
-            final BeanContext beanContext = threadContext.getBeanContext();
-            final String ejbName = beanContext.getEjbName();
-            String name = type == null ? null : type.getSpecName();
-            if ("LocalBean".equals(name) || "LocalBeanHome".equals(name)) {
-                name = null;
-            }
-            final Identity currentIdentity = clientIdentity.get();
-            final SecurityContext securityContext;
-            if(currentIdentity == null) {
-                securityContext= threadContext.get(SecurityContext.class);
-            } else {
-                securityContext = new 
SecurityContext(currentIdentity.getSubject());
-            }
-            securityContext.acc.checkPermission(new 
EJBMethodPermission(ejbName, name, method));
-        } catch (AccessControlException e) {
-            return false;
-        }
-        return true;
-    }
-
-    @Override
     public boolean isCallerInRole(final String role) {
         final Principal principal = getCallerPrincipal();
         if (TomcatUser.class.isInstance(principal)) {


Reply via email to