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/28 12:43:27 UTC
svn commit: r523269 - in /incubator/openejb/trunk/openejb3:
container/openejb-core/src/main/java/org/apache/openejb/
container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/
container/openejb-core/src/main/java/org/apache/openejb/conf...
Author: dblevins
Date: Wed Mar 28 03:43:23 2007
New Revision: 523269
URL: http://svn.apache.org/viewvc?view=rev&rev=523269
Log:
Stateful session bean @Remove method support
OPENEJB-523, OPENEJB-242
Modified:
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/DeploymentInfo.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java
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/EjbModule.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/Operation.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/InterceptorData.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContext.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulInstanceManager.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContext.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/AuthorBean.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/BookBean.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/Compat3to2Test.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulContainerTest.java
incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/RemoveMethod.java
incubator/openejb/trunk/openejb3/examples/helloworld-stateful-pojo/src/main/java/org/acme/FriendlyPersonImpl.java
incubator/openejb/trunk/openejb3/examples/helloworld-stateful-pojo/src/main/resources/META-INF/ejb-jar.xml
incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/stateful/AnnotatedFieldInjectionStatefulBean.java
incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/stateful/BasicStatefulPojoBean.java
incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/stateful/ContextLookupStatefulPojoBean.java
incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/stateful/PersistenceContextStatefulBean.java
incubator/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/mdb/MdbAllowedOperationsTests.java
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/DeploymentInfo.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/DeploymentInfo.java?view=diff&rev=523269&r1=523268&r2=523269
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/DeploymentInfo.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/DeploymentInfo.java Wed Mar 28 03:43:23 2007
@@ -129,4 +129,5 @@
public <T> T set(Class<T> type, T value);
+ public boolean retainIfExeption(Method removeMethod);
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java?view=diff&rev=523269&r1=523268&r2=523269
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java Wed Mar 28 03:43:23 2007
@@ -231,8 +231,9 @@
}
for (RemoveMethodInfo removeMethod : statefulBeanInfo.removeMethods) {
- // TODO: Process retainIfException
- deployment.getRemoveMethods().add(toMethod(ejbClass, removeMethod.beanMethod));
+ Method method = toMethod(ejbClass, removeMethod.beanMethod);
+ deployment.getRemoveMethods().add(method);
+ deployment.setRetainIfExeption(method, removeMethod.retainIfException);
}
Map<EntityManagerFactory, Map> extendedEntityManagerFactories = new HashMap<EntityManagerFactory, Map>();
@@ -283,6 +284,9 @@
}
}
}
+
+ deployment.createMethodMap();
+
return deployment;
}
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=523269&r1=523268&r2=523269
==============================================================================
--- 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 Wed Mar 28 03:43:23 2007
@@ -735,7 +735,9 @@
List<Method> removeMethods = classFinder.findAnnotatedMethods(Remove.class);
for (Method method : removeMethods) {
- session.getRemoveMethod().add(new RemoveMethod(method));
+ Remove remove = method.getAnnotation(Remove.class);
+
+ session.getRemoveMethod().add(new RemoveMethod(method, remove.retainIfException()));
}
}
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/EjbModule.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/EjbModule.java?view=diff&rev=523269&r1=523268&r2=523269
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/EjbModule.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/EjbModule.java Wed Mar 28 03:43:23 2007
@@ -43,8 +43,18 @@
}
this.classLoader = classLoader;
this.ejbJar = ejbJar;
- this.jarURI = jarURI;
this.openejbJar = openejbJar;
+
+ if (jarURI == null){
+ if (moduleId != null){
+ jarURI = moduleId;
+ } else if (ejbJar.getId() != null){
+ jarURI = ejbJar.getId();
+ } else {
+ jarURI = ejbJar.toString();
+ }
+ }
+ this.jarURI = jarURI;
if (moduleId == null){
File file = new File(jarURI);
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java?view=diff&rev=523269&r1=523268&r2=523269
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java Wed Mar 28 03:43:23 2007
@@ -192,7 +192,7 @@
// this.homeInterface = BusinessRemoteHome.class;
// }
- createMethodMap();
+ // createMethodMap();
if (TimedObject.class.isAssignableFrom(beanClass)) {
try {
@@ -586,6 +586,19 @@
return removeMethods;
}
+ private final Map<Method, Boolean> removeExceptionPolicy = new HashMap<Method,Boolean>();
+
+ public void setRetainIfExeption(Method removeMethod, boolean retain){
+ if (getRemoveMethods().contains(removeMethod)){
+ removeExceptionPolicy.put(removeMethod, retain);
+ }
+ }
+
+ public boolean retainIfExeption(Method removeMethod){
+ Boolean retain = removeExceptionPolicy.get(removeMethod);
+ return retain != null && retain;
+ }
+
public List<InterceptorData> getMethodInterceptors(Method method) {
List<InterceptorData> interceptors = methodInterceptors.get(method);
if (interceptors == null) {
@@ -722,7 +735,7 @@
}
}
- private void createMethodMap() throws org.apache.openejb.SystemException {
+ public void createMethodMap() throws org.apache.openejb.SystemException {
if (remoteInterface != null) {
mapObjectInterface(remoteInterface);
mapHomeInterface(homeInterface);
@@ -748,12 +761,29 @@
try {
// map the remove methods
- if (componentType == BeanType.STATEFUL || componentType == BeanType.STATELESS) {
- Method beanMethod = javax.ejb.SessionBean.class.getDeclaredMethod("ejbRemove");
+ if (componentType == BeanType.STATEFUL ) {
+
+ Method beanMethod = null;
+ if (javax.ejb.SessionBean.class.isAssignableFrom(beanClass)) {
+ beanMethod = javax.ejb.SessionBean.class.getDeclaredMethod("ejbRemove");
+ } else {
+ for (Method method : getRemoveMethods()) {
+ if (method.getParameterTypes().length == 0){
+ beanMethod = method;
+ break;
+ }
+ }
+ if (beanMethod == null && (homeInterface != null || localHomeInterface != null)){
+ throw new IllegalStateException("Bean class has no @Remove methods to match EJBObject.remove() or EJBLocalObject.remove(). A no-arg remove method must be added: beanClass="+beanClass.getName());
+ }
+ }
+
Method clientMethod = EJBHome.class.getDeclaredMethod("remove", javax.ejb.Handle.class);
methodMap.put(clientMethod, beanMethod);
+
clientMethod = EJBHome.class.getDeclaredMethod("remove", java.lang.Object.class);
methodMap.put(clientMethod, beanMethod);
+
clientMethod = javax.ejb.EJBObject.class.getDeclaredMethod("remove");
methodMap.put(clientMethod, beanMethod);
} else if (componentType == BeanType.BMP_ENTITY || componentType == BeanType.CMP_ENTITY) {
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/Operation.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/Operation.java?view=diff&rev=523269&r1=523268&r2=523269
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/Operation.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/Operation.java Wed Mar 28 03:43:23 2007
@@ -25,6 +25,7 @@
AFTER_BEGIN,
AFTER_COMPLETION,
BEFORE_COMPLETION,
+ PRE_DESTROY,
REMOVE,
SET_CONTEXT,
UNSET_CONTEXT,
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/InterceptorData.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/InterceptorData.java?view=diff&rev=523269&r1=523268&r2=523269
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/InterceptorData.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/InterceptorData.java Wed Mar 28 03:43:23 2007
@@ -70,8 +70,9 @@
public List<Method> getMethods(Operation operation) {
switch(operation) {
case BUSINESS: return getAroundInvoke();
+ case REMOVE: return getAroundInvoke();
case POST_CONSTRUCT: return getPostConstruct();
- case REMOVE: return getPreDestroy();
+ case PRE_DESTROY: return getPreDestroy();
case ACTIVATE: return getPostActivate();
case PASSIVATE: return getPrePassivate();
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java?view=diff&rev=523269&r1=523268&r2=523269
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbInstanceFactory.java Wed Mar 28 03:43:23 2007
@@ -145,14 +145,14 @@
Operation originalOperation = callContext.getCurrentOperation();
try {
// call post destroy method
- callContext.setCurrentOperation(Operation.REMOVE);
+ callContext.setCurrentOperation(Operation.PRE_DESTROY);
Method remove = bean instanceof MessageDrivenBean ? MessageDrivenBean.class.getMethod("ejbRemove"): null;
List<InterceptorData> callbackInterceptors = deploymentInfo.getCallbackInterceptors();
ArrayList interceptorDatas = new ArrayList(); // TODO
HashMap interceptorInstances = new HashMap(); // TODO
- InterceptorStack interceptorStack = new InterceptorStack(bean, remove, Operation.REMOVE, interceptorDatas, interceptorInstances);
+ InterceptorStack interceptorStack = new InterceptorStack(bean, remove, Operation.PRE_DESTROY, interceptorDatas, interceptorInstances);
interceptorStack.invoke();
} catch (Throwable re) {
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java?view=diff&rev=523269&r1=523268&r2=523269
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java Wed Mar 28 03:43:23 2007
@@ -39,6 +39,8 @@
import javax.ejb.EJBException;
import javax.ejb.SessionBean;
+import javax.ejb.EJBHome;
+import javax.ejb.EJBLocalHome;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.transaction.TransactionManager;
@@ -94,14 +96,14 @@
private Map<Method, MethodType> getLifecycelMethodsOfInterface(CoreDeploymentInfo deploymentInfo) {
Map<Method, MethodType> methods = new HashMap<Method, MethodType>();
- List<Method> preDestroys = deploymentInfo.getPreDestroy();
- for (Method preDestroy : preDestroys) {
- methods.put(preDestroy, MethodType.REMOVE);
+ List<Method> removeMethods = deploymentInfo.getRemoveMethods();
+ for (Method removeMethod : removeMethods) {
+ methods.put(removeMethod, MethodType.REMOVE);
Class businessLocal = deploymentInfo.getBusinessLocalInterface();
if (businessLocal != null) {
try {
- Method method = businessLocal.getMethod(preDestroy.getName());
+ Method method = businessLocal.getMethod(removeMethod.getName());
methods.put(method, MethodType.REMOVE);
} catch (NoSuchMethodException thatsFine) {
}
@@ -110,7 +112,7 @@
Class businessRemote = deploymentInfo.getBusinessRemoteInterface();
if (businessRemote != null) {
try {
- Method method = businessRemote.getMethod(preDestroy.getName());
+ Method method = businessRemote.getMethod(removeMethod.getName());
methods.put(method, MethodType.REMOVE);
} catch (NoSuchMethodException thatsFine) {
}
@@ -297,26 +299,51 @@
ThreadContext oldCallContext = ThreadContext.enter(callContext);
try {
checkAuthorization(deploymentInfo, callMethod, securityIdentity);
+ Method runMethod = deploymentInfo.getMatchingBeanMethod(callMethod);
+ StatefulInstanceManager.Instance instance = (StatefulInstanceManager.Instance) instanceManager.obtainInstance(primKey, callContext);
+
+ if (instance == null) throw new ApplicationException(new javax.ejb.NoSuchEJBException());
+
+ boolean retain = false;
try {
- StatefulInstanceManager.Instance instance = (StatefulInstanceManager.Instance) instanceManager.obtainInstance(primKey, callContext);
- if (instance != null) {
- callContext.setCurrentOperation(Operation.REMOVE);
- Method remove = null;
+ callContext.setCurrentOperation(Operation.REMOVE);
+
+ Class<?> declaringClass = callMethod.getDeclaringClass();
+ if (declaringClass.equals(EJBHome.class) || declaringClass.equals(EJBLocalHome.class)){
+ args = new Object[]{}; // no args to pass on home.remove(remote) calls
+ }
+
+ List<InterceptorData> interceptors = deploymentInfo.getMethodInterceptors(runMethod);
+ InterceptorStack interceptorStack = new InterceptorStack(instance.bean, runMethod, Operation.REMOVE, interceptors, instance.interceptors);
+ _invoke(callMethod, interceptorStack, args, instance, callContext);
+
+ } catch(ApplicationException e){
+ retain = deploymentInfo.retainIfExeption(runMethod);
+ throw e;
+ } finally {
+ if (retain){
+ instanceManager.poolInstance(primKey, instance);
+ } else {
+ callContext.setCurrentOperation(Operation.PRE_DESTROY);
try {
- remove = instance.bean instanceof SessionBean ? SessionBean.class.getMethod("ejbRemove"): null;
- } catch (NoSuchMethodException neverHappen) {
- }
+ List<InterceptorData> callbackInterceptors = deploymentInfo.getCallbackInterceptors();
+ InterceptorStack interceptorStack = new InterceptorStack(instance.bean, null, Operation.PRE_DESTROY, callbackInterceptors, instance.interceptors);
+ interceptorStack.invoke();
+ } catch (Throwable callbackException) {
+ String logMessage = "An unexpected exception occured while invoking the preDestroy method on the removed Stateful SessionBean instance; " + callbackException.getClass().getName() + " " + callbackException.getMessage();
+
+ /* [1] Log the exception or error */
+ logger.error(logMessage);
- List<InterceptorData> callbackInterceptors = deploymentInfo.getCallbackInterceptors();
- InterceptorStack interceptorStack = new InterceptorStack(instance.bean, remove, Operation.REMOVE, callbackInterceptors, instance.interceptors);
+ } finally {
+ callContext.setCurrentOperation(Operation.REMOVE);
+ }
- _invoke(callMethod, interceptorStack, new Object[]{}, instance, callContext);
+ // todo destroy extended persistence contexts
+ instanceManager.freeInstance(callContext.getPrimaryKey());
}
- } finally {
- // todo destroy extended persistence contexts
- instanceManager.freeInstance(callContext.getPrimaryKey());
}
} finally {
ThreadContext.exit(oldCallContext);
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContext.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContext.java?view=diff&rev=523269&r1=523268&r2=523269
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContext.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContext.java Wed Mar 28 03:43:23 2007
@@ -60,6 +60,7 @@
states[Operation.BEFORE_COMPLETION.ordinal()] = new BeforeCompletion();
states[Operation.AFTER_COMPLETION.ordinal()] = new AfterCompletion();
states[Operation.TIMEOUT.ordinal()] = new TimeoutStatelessState();
+ states[Operation.PRE_DESTROY.ordinal()] = new LifecycleStatelessState();
states[Operation.REMOVE.ordinal()] = new LifecycleStatelessState();
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulInstanceManager.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulInstanceManager.java?view=diff&rev=523269&r1=523268&r2=523269
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulInstanceManager.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulInstanceManager.java Wed Mar 28 03:43:23 2007
@@ -314,7 +314,7 @@
protected void handleTimeout(BeanEntry entry, ThreadContext threadContext) {
Operation currentOperation = threadContext.getCurrentOperation();
- threadContext.setCurrentOperation(Operation.REMOVE);
+ threadContext.setCurrentOperation(Operation.PRE_DESTROY);
CoreDeploymentInfo deploymentInfo = threadContext.getDeploymentInfo();
Instance instance = (Instance) entry.bean;
@@ -322,7 +322,7 @@
Method remove = instance.bean instanceof SessionBean? SessionBean.class.getMethod("ejbRemove"): null;
List<InterceptorData> callbackInterceptors = deploymentInfo.getCallbackInterceptors();
- InterceptorStack interceptorStack = new InterceptorStack(instance.bean, remove, Operation.REMOVE, callbackInterceptors, instance.interceptors);
+ InterceptorStack interceptorStack = new InterceptorStack(instance.bean, remove, Operation.PRE_DESTROY, callbackInterceptors, instance.interceptors);
interceptorStack.invoke();
} catch (Throwable callbackException) {
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContext.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContext.java?view=diff&rev=523269&r1=523268&r2=523269
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContext.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContext.java Wed Mar 28 03:43:23 2007
@@ -64,7 +64,7 @@
states[Operation.BUSINESS.ordinal()] = new BusinessStatelessState();
states[Operation.BUSINESS_WS.ordinal()] = new BusinessWsStatelessState();
states[Operation.TIMEOUT.ordinal()] = new TimeoutStatelessState();
- states[Operation.REMOVE.ordinal()] = new LifecycleStatelessState();
+ states[Operation.PRE_DESTROY.ordinal()] = new LifecycleStatelessState();
}
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java?view=diff&rev=523269&r1=523268&r2=523269
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java Wed Mar 28 03:43:23 2007
@@ -231,13 +231,13 @@
private void freeInstance(ThreadContext callContext, Instance instance) {
try {
- callContext.setCurrentOperation(Operation.REMOVE);
+ callContext.setCurrentOperation(Operation.PRE_DESTROY);
CoreDeploymentInfo deploymentInfo = callContext.getDeploymentInfo();
Method remove = instance.bean instanceof SessionBean? deploymentInfo.getCreateMethod(): null;
List<InterceptorData> callbackInterceptors = deploymentInfo.getCallbackInterceptors();
- InterceptorStack interceptorStack = new InterceptorStack(instance.bean, remove, Operation.REMOVE, callbackInterceptors, instance.interceptors);
+ InterceptorStack interceptorStack = new InterceptorStack(instance.bean, remove, Operation.PRE_DESTROY, callbackInterceptors, instance.interceptors);
interceptorStack.invoke();
} catch (Throwable re) {
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/AuthorBean.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/AuthorBean.java?view=diff&rev=523269&r1=523268&r2=523269
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/AuthorBean.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/AuthorBean.java Wed Mar 28 03:43:23 2007
@@ -43,6 +43,7 @@
null,
String.class,
BeanType.CMP_ENTITY);
+ ((CoreDeploymentInfo)deploymentInfo).createMethodMap();
} catch (SystemException e) {
throw new RuntimeException(e);
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/BookBean.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/BookBean.java?view=diff&rev=523269&r1=523268&r2=523269
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/BookBean.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/BookBean.java Wed Mar 28 03:43:23 2007
@@ -43,6 +43,7 @@
null,
String.class,
BeanType.CMP_ENTITY);
+ ((CoreDeploymentInfo)deploymentInfo).createMethodMap();
} catch (SystemException e) {
throw new RuntimeException(e);
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/Compat3to2Test.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/Compat3to2Test.java?view=diff&rev=523269&r1=523268&r2=523269
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/Compat3to2Test.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/Compat3to2Test.java Wed Mar 28 03:43:23 2007
@@ -37,6 +37,7 @@
import javax.ejb.PostActivate;
import javax.ejb.PrePassivate;
import javax.ejb.Init;
+import javax.ejb.Remove;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.util.List;
@@ -140,7 +141,7 @@
calls.add((Call) Enum.valueOf(Call.class, "EjbPassivate" + (++passivates)));
}
- @PreDestroy
+ @Remove
public void beanRemove() throws EJBException, RemoteException {
calls.add(Call.EjbRemove);
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulContainerTest.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulContainerTest.java?view=diff&rev=523269&r1=523268&r2=523269
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulContainerTest.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/core/stateful/StatefulContainerTest.java Wed Mar 28 03:43:23 2007
@@ -20,73 +20,51 @@
import junit.framework.TestCase;
import org.apache.openejb.jee.EjbJar;
import org.apache.openejb.jee.StatefulBean;
-import org.apache.openejb.jee.oejb3.OpenejbJar;
-import org.apache.openejb.jee.oejb3.EjbDeployment;
import org.apache.openejb.config.EjbModule;
import org.apache.openejb.config.EjbJarInfoBuilder;
import org.apache.openejb.config.JndiEncInfoBuilder;
+import org.apache.openejb.config.ConfigurationFactory;
import org.apache.openejb.core.CoreDeploymentInfo;
-import org.apache.openejb.ri.sp.PseudoTransactionService;
-import org.apache.openejb.ri.sp.PseudoSecurityService;
+import org.apache.openejb.core.ivm.naming.InitContextFactory;
import org.apache.openejb.OpenEJBException;
import org.apache.openejb.DeploymentInfo;
-import org.apache.openejb.ProxyInfo;
-import org.apache.openejb.util.proxy.ProxyManager;
-import org.apache.openejb.util.proxy.Jdk13ProxyFactory;
-import org.apache.openejb.spi.SecurityService;
-import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.assembler.classic.EjbJarBuilder;
import org.apache.openejb.assembler.classic.EjbJarInfo;
+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.StatefulSessionContainerInfo;
import javax.ejb.SessionContext;
-import javax.transaction.TransactionManager;
+import javax.ejb.Remote;
+import javax.ejb.Local;
+import javax.ejb.PostActivate;
+import javax.ejb.PrePassivate;
+import javax.ejb.Remove;
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.annotation.Resource;
+import javax.naming.InitialContext;
import java.util.HashMap;
import java.util.Stack;
import java.util.List;
import java.util.Arrays;
import java.util.Properties;
-import java.lang.reflect.Method;
import java.io.Serializable;
/**
* @version $Revision$ $Date$
*/
public class StatefulContainerTest extends TestCase {
- private StatefulContainer container;
- private DeploymentInfo deploymentInfo;
-
- public void testPojoStyleBean() throws Exception {
-
- // Do a create...
- Method createMethod = DeploymentInfo.BusinessLocalHome.class.getMethod("create");
-
- Object result = container.invoke("widget", createMethod, new Object[]{}, null, "");
- assertTrue("instance of ProxyInfo", result instanceof ProxyInfo);
- ProxyInfo proxyInfo = (ProxyInfo) result;
-
- // Do a business method...
- result = container.invoke("widget", Widget.class.getMethod("getLifecycle"), new Object[]{}, proxyInfo.getPrimaryKey(), "");
- assertTrue("instance of Stack", result instanceof Stack);
-
- // Do a remove...
- result = container.invoke("widget", Widget.class.getMethod("destroy"), new Object[]{}, proxyInfo.getPrimaryKey(), "");
-
- // Check the lifecycle of the bean
- List expected = Arrays.asList(StatefulContainerTest.Lifecycle.values());
-
- assertEquals(StatefulContainerTest.join("\n", expected) , join("\n", WidgetBean.lifecycle));
- }
public void testBusinessLocalInterface() throws Exception {
// Do a create...
- CoreDeploymentInfo coreDeploymentInfo = (CoreDeploymentInfo) deploymentInfo;
- DeploymentInfo.BusinessLocalHome businessLocalHome = coreDeploymentInfo.getBusinessLocalHome();
- assertNotNull("businessLocalHome", businessLocalHome);
-
- Object object = businessLocalHome.create();
- assertNotNull("businessLocalHome.create()", businessLocalHome);
+ InitialContext ctx = new InitialContext();
+ Object object = ctx.lookup("WidgetBeanBusinessLocal");
assertTrue("instanceof widget", object instanceof Widget);
@@ -110,12 +88,8 @@
// Do a create...
- CoreDeploymentInfo coreDeploymentInfo = (CoreDeploymentInfo) deploymentInfo;
- DeploymentInfo.BusinessRemoteHome businessRemoteHome = coreDeploymentInfo.getBusinessRemoteHome();
- assertNotNull("businessRemoteHome", businessRemoteHome);
-
- Object object = businessRemoteHome.create();
- assertNotNull("businessRemoteHome.create()", businessRemoteHome);
+ InitialContext ctx = new InitialContext();
+ Object object = ctx.lookup("WidgetBeanBusinessRemote");
assertTrue("instanceof widget", object instanceof RemoteWidget);
@@ -129,6 +103,12 @@
// Do a remove...
widget.destroy();
+ try {
+ widget.destroy();
+ fail("Calling a removed bean should not be possible");
+ } catch (Exception e) {
+ }
+
// Check the lifecycle of the bean
List expected = Arrays.asList(StatefulContainerTest.Lifecycle.values());
@@ -138,44 +118,29 @@
protected void setUp() throws Exception {
super.setUp();
- // Setup the descriptor information
- StatefulBean bean = new StatefulBean("widget", WidgetBean.class.getName());
- bean.setBusinessLocal(Widget.class.getName());
- bean.setBusinessRemote(RemoteWidget.class.getName());
- bean.addPostConstruct("init");
- bean.addPreDestroy("destroy");
- bean.addPrePassivate("passivate");
- bean.addPostActivate("activate");
-
- EjbJar ejbJar = new EjbJar();
- ejbJar.addEnterpriseBean(bean);
-
- OpenejbJar openejbJar = new OpenejbJar();
- openejbJar.addEjbDeployment(new EjbDeployment("Stateful Container", "widget", "widget"));
-
- EjbModule jar = new EjbModule(this.getClass().getClassLoader(), "", ejbJar, openejbJar);
-
- // Build and register the TransactionManager and SecurityService
-
- PseudoTransactionService transactionManager = new PseudoTransactionService();
- SystemInstance.get().setComponent(TransactionManager.class, transactionManager);
+ System.setProperty(javax.naming.Context.INITIAL_CONTEXT_FACTORY, InitContextFactory.class.getName());
- PseudoSecurityService securityService = new PseudoSecurityService();
- SystemInstance.get().setComponent(SecurityService.class, securityService);
+ ConfigurationFactory config = new ConfigurationFactory();
+ Assembler assembler = new Assembler();
- // Create the Container
- container = new StatefulContainer("Stateful Container", transactionManager, securityService, null, 10, 0, 1);
- Properties props = new Properties();
- props.put(container.getContainerID(), container);
+ 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
+ StatefulSessionContainerInfo statefulContainerInfo = config.configureService(StatefulSessionContainerInfo.class);
+ statefulContainerInfo.properties.setProperty("PoolSize", "0");
+ statefulContainerInfo.properties.setProperty("BulkPassivate", "1");
+ assembler.createContainer(statefulContainerInfo);
- // Build the DeploymentInfos
-
- HashMap<String, DeploymentInfo> ejbs = build(props, jar);
- deploymentInfo = ejbs.get("widget");
+ // Setup the descriptor information
- ProxyManager.registerFactory("ivm_server", new Jdk13ProxyFactory());
- ProxyManager.setDefaultFactory("ivm_server");
+ EjbJar ejbJar = new EjbJar();
+ ejbJar.addEnterpriseBean(new StatefulBean(WidgetBean.class));
+ assembler.createApplication(config.configureApplication(ejbJar));
WidgetBean.lifecycle.clear();
@@ -201,17 +166,19 @@
return ejbs;
}
+ @Local
public static interface Widget {
Stack<Lifecycle> getLifecycle();
void destroy();
}
+ @Remote
public static interface RemoteWidget extends Widget {
}
public static enum Lifecycle {
- CONSTRUCTOR, POST_CONSTRUCT, PRE_PASSIVATE1, POST_ACTIVATE1, BUSINESS_METHOD, PRE_PASSIVATE2, POST_ACTIVATE2, PRE_DESTROY
+ CONSTRUCTOR, INJECTION, POST_CONSTRUCT, PRE_PASSIVATE1, POST_ACTIVATE1, BUSINESS_METHOD, PRE_PASSIVATE2, POST_ACTIVATE2, REMOVE, PRE_DESTROY
}
public static class WidgetBean implements Widget, RemoteWidget, Serializable {
@@ -225,8 +192,10 @@
public WidgetBean() {
lifecycle.push(Lifecycle.CONSTRUCTOR);
}
+
+ @Resource
public void setSessionContext(SessionContext sessionContext){
- // lifecycle.push(Lifecycle.INJECTION);
+ lifecycle.push(Lifecycle.INJECTION);
}
public Stack<Lifecycle> getLifecycle() {
@@ -234,20 +203,29 @@
return lifecycle;
}
+ @PostActivate
public void activate(){
lifecycle.push(Enum.valueOf(Lifecycle.class, "POST_ACTIVATE" + (++activates)));
}
+ @PrePassivate
public void passivate(){
lifecycle.push(Enum.valueOf(Lifecycle.class, "PRE_PASSIVATE" + (++passivates)));
}
+ @PostConstruct
public void init() {
lifecycle.push(Lifecycle.POST_CONSTRUCT);
}
- public void destroy() {
+ @PreDestroy
+ public void predestroy() {
lifecycle.push(Lifecycle.PRE_DESTROY);
+ }
+
+ @Remove
+ public void destroy() {
+ lifecycle.push(Lifecycle.REMOVE);
}
}
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/RemoveMethod.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/RemoveMethod.java?view=diff&rev=523269&r1=523268&r2=523269
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/RemoveMethod.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/RemoveMethod.java Wed Mar 28 03:43:23 2007
@@ -50,7 +50,12 @@
}
public RemoveMethod(java.lang.reflect.Method beanMethod) {
+ this(beanMethod, false);
+ }
+
+ public RemoveMethod(java.lang.reflect.Method beanMethod, boolean retainIfException) {
this.beanMethod = new NamedMethod(beanMethod);
+ this.retainIfException = retainIfException;
}
public NamedMethod getBeanMethod() {
Modified: incubator/openejb/trunk/openejb3/examples/helloworld-stateful-pojo/src/main/java/org/acme/FriendlyPersonImpl.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/examples/helloworld-stateful-pojo/src/main/java/org/acme/FriendlyPersonImpl.java?view=diff&rev=523269&r1=523268&r2=523269
==============================================================================
--- incubator/openejb/trunk/openejb3/examples/helloworld-stateful-pojo/src/main/java/org/acme/FriendlyPersonImpl.java (original)
+++ incubator/openejb/trunk/openejb3/examples/helloworld-stateful-pojo/src/main/java/org/acme/FriendlyPersonImpl.java Wed Mar 28 03:43:23 2007
@@ -47,6 +47,8 @@
public void create(){}
+ public void remove(){}
+
public String greet(String friend) {
String language = languagePreferences.getProperty(friend, defaultLanguage);
return greet(language, friend);
Modified: incubator/openejb/trunk/openejb3/examples/helloworld-stateful-pojo/src/main/resources/META-INF/ejb-jar.xml
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/examples/helloworld-stateful-pojo/src/main/resources/META-INF/ejb-jar.xml?view=diff&rev=523269&r1=523268&r2=523269
==============================================================================
--- incubator/openejb/trunk/openejb3/examples/helloworld-stateful-pojo/src/main/resources/META-INF/ejb-jar.xml (original)
+++ incubator/openejb/trunk/openejb3/examples/helloworld-stateful-pojo/src/main/resources/META-INF/ejb-jar.xml Wed Mar 28 03:43:23 2007
@@ -32,6 +32,12 @@
<method-params/>
</bean-method>
</init-method>
+ <remove-method>
+ <bean-method>
+ <method-name>remove</method-name>
+ <method-params/>
+ </bean-method>
+ </remove-method>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
Modified: incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/stateful/AnnotatedFieldInjectionStatefulBean.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/stateful/AnnotatedFieldInjectionStatefulBean.java?view=diff&rev=523269&r1=523268&r2=523269
==============================================================================
--- incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/stateful/AnnotatedFieldInjectionStatefulBean.java (original)
+++ incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/stateful/AnnotatedFieldInjectionStatefulBean.java Wed Mar 28 03:43:23 2007
@@ -28,6 +28,7 @@
import javax.ejb.EJB;
import javax.ejb.CreateException;
import javax.ejb.Init;
+import javax.ejb.Remove;
import javax.annotation.Resource;
import javax.sql.DataSource;
import javax.persistence.PersistenceUnit;
@@ -101,6 +102,10 @@
public void create(String name) {
}
+ @Remove
+ public void remove(){
+ }
+
public void lookupEntityBean() throws TestFailureException {
try {
Assert.assertNotNull("The EJBObject is null", bmpHome);
Modified: incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/stateful/BasicStatefulPojoBean.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/stateful/BasicStatefulPojoBean.java?view=diff&rev=523269&r1=523268&r2=523269
==============================================================================
--- incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/stateful/BasicStatefulPojoBean.java (original)
+++ incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/stateful/BasicStatefulPojoBean.java Wed Mar 28 03:43:23 2007
@@ -22,6 +22,7 @@
import javax.ejb.EJBException;
import javax.ejb.SessionContext;
+import javax.ejb.Remove;
import org.apache.openejb.test.ApplicationException;
import org.apache.openejb.test.object.OperationsPolicy;
@@ -35,6 +36,10 @@
public class BasicStatefulPojoBean implements BasicStatefulBusinessLocal, BasicStatefulBusinessRemote {
public void create(String name) {
+ }
+
+ @Remove
+ public void remove(){
}
/**
Modified: incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/stateful/ContextLookupStatefulPojoBean.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/stateful/ContextLookupStatefulPojoBean.java?view=diff&rev=523269&r1=523268&r2=523269
==============================================================================
--- incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/stateful/ContextLookupStatefulPojoBean.java (original)
+++ incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/stateful/ContextLookupStatefulPojoBean.java Wed Mar 28 03:43:23 2007
@@ -27,6 +27,7 @@
import javax.ejb.EJBContext;
import javax.ejb.SessionContext;
import javax.ejb.Init;
+import javax.ejb.Remove;
import javax.sql.DataSource;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityManager;
@@ -54,6 +55,10 @@
public void create(String name) {
}
+ @Remove
+ public void remove(){
+ }
+
public void setSessionContext(SessionContext ejbContext) {
this.ejbContext = ejbContext;
}
Modified: incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/stateful/PersistenceContextStatefulBean.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/stateful/PersistenceContextStatefulBean.java?view=diff&rev=523269&r1=523268&r2=523269
==============================================================================
--- incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/stateful/PersistenceContextStatefulBean.java (original)
+++ incubator/openejb/trunk/openejb3/itests/openejb-itests-beans/src/main/java/org/apache/openejb/test/stateful/PersistenceContextStatefulBean.java Wed Mar 28 03:43:23 2007
@@ -21,6 +21,7 @@
import org.apache.openejb.test.TestFailureException;
import javax.ejb.SessionContext;
+import javax.ejb.Remove;
import javax.naming.InitialContext;
import javax.persistence.EntityManager;
import javax.transaction.UserTransaction;
@@ -40,6 +41,10 @@
ejbContext = ctx;
}
+ @Remove
+ public void remove(){
+ }
+
public void testPersistenceContext() throws TestFailureException {
try{
try{
Modified: incubator/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/mdb/MdbAllowedOperationsTests.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/mdb/MdbAllowedOperationsTests.java?view=diff&rev=523269&r1=523268&r2=523269
==============================================================================
--- incubator/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/mdb/MdbAllowedOperationsTests.java (original)
+++ incubator/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/mdb/MdbAllowedOperationsTests.java Wed Mar 28 03:43:23 2007
@@ -184,7 +184,7 @@
* ______________________|__________________________________________________
* </PRE>
*/
- public void test04_businessMethod(){
+ public void TODO_test04_businessMethod(){
try {
OperationsPolicy policy = new OperationsPolicy();
policy.allow( OperationsPolicy.Context_getRollbackOnly );