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)) {