You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2013/02/08 02:42:11 UTC
svn commit: r1443819 -
/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java
Author: rmannibucau
Date: Fri Feb 8 01:42:11 2013
New Revision: 1443819
URL: http://svn.apache.org/r1443819
Log:
Removable interface handling for ManagedContainer
Modified:
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java?rev=1443819&r1=1443818&r2=1443819&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/managed/ManagedContainer.java Fri Feb 8 01:42:11 2013
@@ -116,6 +116,12 @@ public class ManagedContainer implements
private Map<Method, MethodType> getLifecycleMethodsOfInterface(final BeanContext beanContext) {
final Map<Method, MethodType> methods = new HashMap<Method, MethodType>();
+ try {
+ methods.put(BeanContext.Removable.class.getDeclaredMethod("$$remove"), MethodType.REMOVE);
+ } catch (NoSuchMethodException e) {
+ throw new IllegalStateException("Internal code change: BeanContext.Removable.$$remove() method was deleted", e);
+ }
+
final List<Method> removeMethods = beanContext.getRemoveMethods();
for (final Method removeMethod : removeMethods) {
methods.put(removeMethod, MethodType.REMOVE);
@@ -457,7 +463,10 @@ public class ManagedContainer implements
final ThreadContext oldCallContext = ThreadContext.enter(callContext);
try {
// Security check
- checkAuthorization(callMethod, interfaceType);
+ boolean internalRemove = BeanContext.Removable.class == callMethod.getDeclaringClass();
+ if (!internalRemove) {
+ checkAuthorization(callMethod, interfaceType);
+ }
// If a bean managed transaction is active, the bean can not be removed
if (interfaceType.isComponent()) {
@@ -499,34 +508,36 @@ public class ManagedContainer implements
}
}
- // Register the entity managers
- registerEntityManagers(instance, callContext);
-
- // Register for synchronization callbacks
- registerSessionSynchronization(instance, callContext);
-
- // Setup for remove invocation
- callContext.setCurrentOperation(Operation.REMOVE);
- callContext.setCurrentAllowedStates(null);
- callContext.setInvokedInterface(callInterface);
- runMethod = beanContext.getMatchingBeanMethod(callMethod);
- callContext.set(Method.class, runMethod);
-
- // Do not pass arguments on home.remove(remote) calls
- final Class<?> declaringClass = callMethod.getDeclaringClass();
- if (declaringClass.equals(EJBHome.class) || declaringClass.equals(EJBLocalHome.class)) {
- args = new Object[]{};
- }
+ if (!internalRemove) {
+ // Register the entity managers
+ registerEntityManagers(instance, callContext);
+
+ // Register for synchronization callbacks
+ registerSessionSynchronization(instance, callContext);
+
+ // Setup for remove invocation
+ callContext.setCurrentOperation(Operation.REMOVE);
+ callContext.setCurrentAllowedStates(null);
+ callContext.setInvokedInterface(callInterface);
+ runMethod = beanContext.getMatchingBeanMethod(callMethod);
+ callContext.set(Method.class, runMethod);
+
+ // Do not pass arguments on home.remove(remote) calls
+ final Class<?> declaringClass = callMethod.getDeclaringClass();
+ if (declaringClass.equals(EJBHome.class) || declaringClass.equals(EJBLocalHome.class)) {
+ args = new Object[]{};
+ }
- // Initialize interceptor stack
- final List<InterceptorData> interceptors = beanContext.getMethodInterceptors(runMethod);
- final InterceptorStack interceptorStack = new InterceptorStack(instance.bean, runMethod, Operation.REMOVE, interceptors, instance.interceptors);
+ // Initialize interceptor stack
+ final List<InterceptorData> interceptors = beanContext.getMethodInterceptors(runMethod);
+ final InterceptorStack interceptorStack = new InterceptorStack(instance.bean, runMethod, Operation.REMOVE, interceptors, instance.interceptors);
- // Invoke
- if (args == null) {
- returnValue = interceptorStack.invoke();
- } else {
- returnValue = interceptorStack.invoke(args);
+ // Invoke
+ if (args == null) {
+ returnValue = interceptorStack.invoke();
+ } else {
+ returnValue = interceptorStack.invoke(args);
+ }
}
} catch (InvalidateReferenceException e) {
throw new ApplicationException(e.getRootCause());