You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by da...@apache.org on 2007/04/12 08:57:02 UTC
svn commit: r527791 [1/2] - 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/openej...
Author: dain
Date: Wed Apr 11 23:56:57 2007
New Revision: 527791
URL: http://svn.apache.org/viewvc?view=rev&rev=527791
Log:
Add support for applications with rollback
Process applications exception annotations
Remove the stateless proxy remove code; stateless proxies can't really be removed
Added:
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ApplicationExceptionInfo.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ExceptionType.java
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/Assembler.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarInfo.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/EjbJarInfoBuilder.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/cmp/CmpContainer.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContainer.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MessageDrivenBeanManagedTxPolicy.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/SessionSynchronizationTxPolicy.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulBeanManagedTxPolicy.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/StatefulContainerManagedTxPolicy.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessBeanManagedTxPolicy.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContainer.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEjbHomeHandler.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEjbObjectHandler.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TransactionPolicy.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxManditory.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxNever.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxNotSupported.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxRequired.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxRequiresNew.java
incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxSupports.java
incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ApplicationException.java
incubator/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/stateless/StatelessEjbObjectTests.java
incubator/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/stateless/StatelessHandleTests.java
incubator/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/stateless/StatelessPojoEjbLocalObjectTests.java
incubator/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/stateless/StatelessPojoEjbObjectTests.java
incubator/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/stateless/StatelessPojoHandleTests.java
incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/StatelessEJBHomeHandler.java
incubator/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/StatelessEJBObjectHandler.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=527791&r1=527790&r2=527791
==============================================================================
--- 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 Apr 11 23:56:57 2007
@@ -18,13 +18,13 @@
import org.apache.openejb.core.interceptor.InterceptorData;
import org.apache.openejb.core.timer.EjbTimerService;
+import org.apache.openejb.core.ExceptionType;
import java.lang.reflect.Method;
import java.util.Collection;
import java.util.Map;
import java.util.List;
import javax.naming.Context;
-import javax.security.auth.Subject;
public interface DeploymentInfo {
@@ -125,6 +125,8 @@
public Method getEjbTimeout();
public EjbTimerService getEjbTimerService();
+
+ public ExceptionType getExceptionType(Throwable e);
public interface BusinessLocalHome extends javax.ejb.EJBLocalHome {
Object create();
Added: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ApplicationExceptionInfo.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ApplicationExceptionInfo.java?view=auto&rev=527791
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ApplicationExceptionInfo.java (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ApplicationExceptionInfo.java Wed Apr 11 23:56:57 2007
@@ -0,0 +1,23 @@
+/**
+ *
+ * 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;
+
+public class ApplicationExceptionInfo extends InfoObject {
+ public String exceptionClass;
+ public boolean rollback;
+}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?view=diff&rev=527791&r1=527790&r2=527791
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java Wed Apr 11 23:56:57 2007
@@ -422,6 +422,19 @@
}
+ // process application exceptions
+ for (ApplicationExceptionInfo exceptionInfo : ejbJar.applicationException) {
+ try {
+ Class exceptionClass = classLoader.loadClass(exceptionInfo.exceptionClass);
+ for (DeploymentInfo deploymentInfo : deployments.values()) {
+ CoreDeploymentInfo coreDeploymentInfo = (CoreDeploymentInfo) deploymentInfo;
+ coreDeploymentInfo.addApplicationException(exceptionClass, exceptionInfo.rollback);
+ }
+ } catch (ClassNotFoundException e) {
+ logger.error("Application class invalid: class=" + exceptionInfo.exceptionClass + ". Exception: " + e.getMessage(), e);
+ }
+ }
+
for (EnterpriseBeanInfo beanInfo : ejbJar.enterpriseBeans) {
logger.info("Created Ejb(deployment-id="+beanInfo.ejbDeploymentId+", ejb-name="+beanInfo.ejbName+", container="+beanInfo.containerId+")");
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarInfo.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarInfo.java?view=diff&rev=527791&r1=527790&r2=527791
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarInfo.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarInfo.java Wed Apr 11 23:56:57 2007
@@ -30,6 +30,5 @@
public final List<InterceptorInfo> interceptors = new ArrayList<InterceptorInfo>();
public final List<InterceptorBindingInfo> interceptorBindings = new ArrayList<InterceptorBindingInfo>();
public final List<MethodInfo> excludeList = new ArrayList<MethodInfo>();
-
-
+ public final List<ApplicationExceptionInfo> applicationException = new ArrayList<ApplicationExceptionInfo>();
}
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=527791&r1=527790&r2=527791
==============================================================================
--- 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 Apr 11 23:56:57 2007
@@ -91,6 +91,7 @@
import javax.ejb.TransactionAttributeType;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
+import javax.ejb.ApplicationException;
import javax.interceptor.ExcludeClassInterceptors;
import javax.interceptor.ExcludeDefaultInterceptors;
import javax.interceptor.Interceptors;
@@ -227,6 +228,18 @@
if (messageBean.getEjbClass() == null) {
messageBean.setEjbClass(beanClass.getName());
}
+ }
+
+ classes = finder.findAnnotatedClasses(ApplicationException.class);
+ if (!classes.isEmpty()) {
+ if (ejbJar.getAssemblyDescriptor() == null) {
+ ejbJar.setAssemblyDescriptor(new AssemblyDescriptor());
+ }
+ }
+ for (Class<?> exceptionClass : classes) {
+ ApplicationException annotation = exceptionClass.getAnnotation(ApplicationException.class);
+ org.apache.openejb.jee.ApplicationException exception = new org.apache.openejb.jee.ApplicationException(exceptionClass.getName(), annotation.rollback());
+ ejbJar.getAssemblyDescriptor().getApplicationException().add(exception);
}
return ejbModule;
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/EjbJarInfoBuilder.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/EjbJarInfoBuilder.java?view=diff&rev=527791&r1=527790&r2=527791
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/EjbJarInfoBuilder.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/EjbJarInfoBuilder.java Wed Apr 11 23:56:57 2007
@@ -37,6 +37,7 @@
import org.apache.openejb.assembler.classic.SecurityRoleReferenceInfo;
import org.apache.openejb.assembler.classic.StatefulBeanInfo;
import org.apache.openejb.assembler.classic.StatelessBeanInfo;
+import org.apache.openejb.assembler.classic.ApplicationExceptionInfo;
import org.apache.openejb.jee.ActivationConfig;
import org.apache.openejb.jee.ActivationConfigProperty;
import org.apache.openejb.jee.CallbackMethod;
@@ -70,6 +71,7 @@
import org.apache.openejb.jee.TransactionType;
import org.apache.openejb.jee.ExcludeList;
import org.apache.openejb.jee.ResultTypeMapping;
+import org.apache.openejb.jee.ApplicationException;
import org.apache.openejb.jee.oejb3.EjbDeployment;
import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.util.Logger;
@@ -163,6 +165,7 @@
initMethodPermissions(jar, ejbds, ejbJar);
initExcludesList(jar, ejbds, ejbJar);
initMethodTransactions(jar, ejbds, ejbJar);
+ initApplicationExceptions(jar, ejbJar);
for (EnterpriseBeanInfo bean : ejbJar.enterpriseBeans) {
resolveRoleLinks(jar, bean, items.get(bean.ejbName));
@@ -301,6 +304,15 @@
info.transAttribute = cTx.getTransAttribute().toString();
info.methods.addAll(getMethodInfos(cTx.getMethod(), ejbds));
ejbJarInfo.methodTransactions.add(info);
+ }
+ }
+
+ private void initApplicationExceptions(EjbModule jar, EjbJarInfo ejbJarInfo) {
+ for (ApplicationException applicationException : jar.getEjbJar().getAssemblyDescriptor().getApplicationException()) {
+ ApplicationExceptionInfo info = new ApplicationExceptionInfo();
+ info.exceptionClass = applicationException.getExceptionClass();
+ info.rollback = applicationException.getRollback();
+ ejbJarInfo.applicationException.add(info);
}
}
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=527791&r1=527790&r2=527791
==============================================================================
--- 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 Apr 11 23:56:57 2007
@@ -33,6 +33,7 @@
import javax.ejb.MessageDrivenBean;
import javax.ejb.TimedObject;
import javax.ejb.Timer;
+import javax.ejb.ApplicationException;
import javax.persistence.EntityManagerFactory;
import javax.naming.Context;
@@ -132,6 +133,7 @@
private final List<Injection> injections = new ArrayList<Injection>();
private Index<EntityManagerFactory,Map> extendedEntityManagerFactories;
private final Map<Class, InterfaceType> interfaces = new HashMap<Class, InterfaceType>();
+ private final Map<Class, ExceptionType> exceptions = new HashMap<Class, ExceptionType>();
public Class getInterface(InterfaceType interfaceType) {
switch(interfaceType){
@@ -257,6 +259,34 @@
for (Class clazz : interfce.getInterfaces()) {
addInterface(clazz, type);
+ }
+ }
+
+ public void addApplicationException(Class exception, boolean rollback) {
+ if (rollback) {
+ exceptions.put(exception, ExceptionType.APPLICATION_ROLLBACK);
+ } else {
+ exceptions.put(exception, ExceptionType.APPLICATION);
+ }
+ }
+
+ public ExceptionType getExceptionType(Throwable e) {
+ // Errors are always system exceptions
+ if (!(e instanceof Exception)) {
+ return ExceptionType.SYSTEM;
+ }
+
+ // check the registered app exceptions
+ ExceptionType type = exceptions.get(e.getClass());
+ if (type != null) {
+ return type;
+ }
+
+ // Unregistered - runtime exceptions are system exception and the rest are application exceptions
+ if (e instanceof RuntimeException) {
+ return ExceptionType.SYSTEM;
+ } else {
+ return ExceptionType.APPLICATION;
}
}
Added: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ExceptionType.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ExceptionType.java?view=auto&rev=527791
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ExceptionType.java (added)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ExceptionType.java Wed Apr 11 23:56:57 2007
@@ -0,0 +1,7 @@
+package org.apache.openejb.core;
+
+public enum ExceptionType {
+ APPLICATION,
+ APPLICATION_ROLLBACK,
+ SYSTEM,
+}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java?view=diff&rev=527791&r1=527790&r2=527791
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/cmp/CmpContainer.java Wed Apr 11 23:56:57 2007
@@ -56,6 +56,7 @@
import org.apache.openejb.core.CoreDeploymentInfo;
import org.apache.openejb.core.Operation;
import org.apache.openejb.core.ThreadContext;
+import org.apache.openejb.core.ExceptionType;
import org.apache.openejb.core.timer.EjbTimerService;
import org.apache.openejb.core.timer.EjbTimerServiceImpl;
import org.apache.openejb.core.entity.EntityContext;
@@ -524,17 +525,17 @@
returnValue = runMethod.invoke(bean, args);
} catch (InvocationTargetException ite) {
-
- if (!isApplicationException(callContext.getDeploymentInfo(), ite.getTargetException())) {
+ ExceptionType type = callContext.getDeploymentInfo().getExceptionType(ite.getTargetException());
+ if (type == ExceptionType.SYSTEM) {
/* System Exception ****************************/
txPolicy.handleSystemException(ite.getTargetException(), bean, txContext);
} else {
/* Application Exception ***********************/
- txPolicy.handleApplicationException(ite.getTargetException(), txContext);
+ txPolicy.handleApplicationException(ite.getTargetException(), type == ExceptionType.APPLICATION_ROLLBACK, txContext);
}
} catch (NoSuchObjectException e) {
- txPolicy.handleApplicationException(e, txContext);
+ txPolicy.handleApplicationException(e, false, txContext);
} catch (Throwable e) {
/* System Exception ****************************/
txPolicy.handleSystemException(e, bean, txContext);
@@ -546,11 +547,6 @@
return returnValue;
}
- @SuppressWarnings({"UnusedDeclaration"})
- private boolean isApplicationException(DeploymentInfo deploymentInfo, Throwable e) {
- return e instanceof Exception && !(e instanceof RuntimeException);
- }
-
private Object homeMethod(Method callMethod, Object[] args, ThreadContext callContext) throws OpenEJBException {
CoreDeploymentInfo deploymentInfo = callContext.getDeploymentInfo();
TransactionPolicy txPolicy = deploymentInfo.getTransactionPolicy(callMethod);
@@ -583,14 +579,14 @@
bean = null; // poof
} catch (InvocationTargetException ite) {
-
- if (!isApplicationException(callContext.getDeploymentInfo(), ite.getTargetException())) {
+ ExceptionType type = callContext.getDeploymentInfo().getExceptionType(ite.getTargetException());
+ if (type == ExceptionType.SYSTEM) {
/* System Exception ****************************/
txPolicy.handleSystemException(ite.getTargetException(), bean, txContext);
} else {
/* Application Exception ***********************/
- txPolicy.handleApplicationException(ite.getTargetException(), txContext);
+ txPolicy.handleApplicationException(ite.getTargetException(), type == ExceptionType.APPLICATION_ROLLBACK, txContext);
}
} catch (Throwable e) {
/* System Exception ****************************/
@@ -661,12 +657,13 @@
}
} catch (InvocationTargetException ite) {// handle enterprise bean exceptions
- if (!isApplicationException(callContext.getDeploymentInfo(), ite.getTargetException())) {
+ ExceptionType type = callContext.getDeploymentInfo().getExceptionType(ite.getTargetException());
+ if (type == ExceptionType.SYSTEM) {
/* System Exception ****************************/
txPolicy.handleSystemException(ite.getTargetException(), bean, txContext);
} else {
/* Application Exception ***********************/
- txPolicy.handleApplicationException(ite.getTargetException(), txContext);
+ txPolicy.handleApplicationException(ite.getTargetException(), type == ExceptionType.APPLICATION_ROLLBACK, txContext);
}
} catch (CreateException e) {
txPolicy.handleSystemException(e, bean, txContext);
@@ -707,7 +704,7 @@
// create a new ProxyInfo based on the deployment info and primary key
return new ProxyInfo(deploymentInfo, primaryKey, objectInterface, this);
} catch (javax.ejb.FinderException fe) {
- txPolicy.handleApplicationException(fe, txContext);
+ txPolicy.handleApplicationException(fe, false, txContext);
} catch (Throwable e) {// handle reflection exception
txPolicy.handleSystemException(e, null, txContext);
} finally {
@@ -772,7 +769,7 @@
}
}
} catch (javax.ejb.FinderException fe) {
- txPolicy.handleApplicationException(fe, txContext);
+ txPolicy.handleApplicationException(fe, false, txContext);
} catch (Throwable e) {// handle reflection exception
txPolicy.handleSystemException(e, null, txContext);
} finally {
@@ -866,7 +863,7 @@
ejbRemove(entityBean);
cmpEngine.removeBean(callContext);
} catch (NoSuchObjectException e) {
- txPolicy.handleApplicationException(e, txContext);
+ txPolicy.handleApplicationException(e, false, txContext);
} catch (Throwable e) {// handle reflection exception
txPolicy.handleSystemException(e, null, txContext);
} finally {
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContainer.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContainer.java?view=diff&rev=527791&r1=527790&r2=527791
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContainer.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/entity/EntityContainer.java Wed Apr 11 23:56:57 2007
@@ -49,6 +49,7 @@
import org.apache.openejb.core.CoreDeploymentInfo;
import org.apache.openejb.core.Operation;
import org.apache.openejb.core.ThreadContext;
+import org.apache.openejb.core.ExceptionType;
import org.apache.openejb.core.timer.EjbTimerService;
import org.apache.openejb.core.timer.EjbTimerServiceImpl;
import org.apache.openejb.core.transaction.TransactionContainer;
@@ -218,17 +219,18 @@
ejbStore_If_No_Transaction(callContext, bean);
instanceManager.poolInstance(callContext, bean);
} catch (java.lang.reflect.InvocationTargetException ite) {// handle enterprise bean exceptions
- if (!isApplicationException(callContext.getDeploymentInfo(), ite.getTargetException())) {
+ ExceptionType type = callContext.getDeploymentInfo().getExceptionType(ite.getTargetException());
+ if (type == ExceptionType.SYSTEM) {
/* System Exception ****************************/
txPolicy.handleSystemException(ite.getTargetException(), bean, txContext);
} else {
/* Application Exception ***********************/
instanceManager.poolInstance(callContext, bean);
- txPolicy.handleApplicationException(ite.getTargetException(), txContext);
+ txPolicy.handleApplicationException(ite.getTargetException(), type == ExceptionType.APPLICATION_ROLLBACK, txContext);
}
} catch (org.apache.openejb.ApplicationException e) {
- txPolicy.handleApplicationException(e.getRootCause(), txContext);
+ txPolicy.handleApplicationException(e.getRootCause(), false, txContext);
} catch (org.apache.openejb.SystemException se) {
txPolicy.handleSystemException(se.getRootCause(), bean, txContext);
} catch (Throwable iae) {// handle reflection exception
@@ -249,10 +251,6 @@
return returnValue;
}
- private boolean isApplicationException(DeploymentInfo deploymentInfo, Throwable e) {
- return e instanceof Exception && !(e instanceof RuntimeException);
- }
-
public void ejbLoad_If_No_Transaction(ThreadContext callContext, EntityBean bean) throws Exception {
Operation orginalOperation = callContext.getCurrentOperation();
BaseContext.State[] originalAllowedStates = callContext.getCurrentAllowedStates();
@@ -389,13 +387,14 @@
// update pool
instanceManager.poolInstance(callContext, bean);
} catch (java.lang.reflect.InvocationTargetException ite) {// handle enterprise bean exceptions
- if (!isApplicationException(callContext.getDeploymentInfo(), ite.getTargetException())) {
+ ExceptionType type = callContext.getDeploymentInfo().getExceptionType(ite.getTargetException());
+ if (type == ExceptionType.SYSTEM) {
/* System Exception ****************************/
txPolicy.handleSystemException(ite.getTargetException(), bean, txContext);
} else {
/* Application Exception ***********************/
instanceManager.poolInstance(callContext, bean);
- txPolicy.handleApplicationException(ite.getTargetException(), txContext);
+ txPolicy.handleApplicationException(ite.getTargetException(), type == ExceptionType.APPLICATION_ROLLBACK, txContext);
}
} catch (OpenEJBException e) {
txPolicy.handleSystemException(e.getRootCause(), bean, txContext);
@@ -504,17 +503,18 @@
didRemove(bean, callContext);
instanceManager.poolInstance(callContext, bean);
} catch (org.apache.openejb.ApplicationException e) {
- txPolicy.handleApplicationException(e.getRootCause(), txContext);
+ txPolicy.handleApplicationException(e.getRootCause(), false, txContext);
} catch (org.apache.openejb.SystemException se) {
txPolicy.handleSystemException(se.getRootCause(), bean, txContext);
} catch (Exception e) {// handle reflection exception
- if (!isApplicationException(callContext.getDeploymentInfo(), e)) {
+ ExceptionType type = callContext.getDeploymentInfo().getExceptionType(e);
+ if (type == ExceptionType.SYSTEM) {
/* System Exception ****************************/
txPolicy.handleSystemException(e, bean, txContext);
} else {
/* Application Exception ***********************/
instanceManager.poolInstance(callContext, bean);
- txPolicy.handleApplicationException(e, txContext);
+ txPolicy.handleApplicationException(e, type == ExceptionType.APPLICATION_ROLLBACK, txContext);
}
} finally {
txPolicy.afterInvoke(bean, txContext);
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java?view=diff&rev=527791&r1=527790&r2=527791
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MdbContainer.java Wed Apr 11 23:56:57 2007
@@ -29,7 +29,6 @@
import org.apache.openejb.core.ThreadContext;
import org.apache.openejb.core.interceptor.InterceptorData;
import org.apache.openejb.core.interceptor.InterceptorStack;
-import org.apache.openejb.core.mdb.Instance;
import org.apache.openejb.core.transaction.TransactionContainer;
import org.apache.openejb.core.transaction.TransactionContext;
import org.apache.openejb.core.transaction.TransactionPolicy;
@@ -335,7 +334,7 @@
} else {
//
// Application Exception ***********************
- mdbCallContext.txPolicy.handleApplicationException(ite.getTargetException(), mdbCallContext.txContext);
+ mdbCallContext.txPolicy.handleApplicationException(ite.getTargetException(), false, mdbCallContext.txContext);
}
} catch (Throwable re) {// handle reflection exception
// Any exception thrown by reflection; not by the enterprise bean. Possible
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MessageDrivenBeanManagedTxPolicy.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MessageDrivenBeanManagedTxPolicy.java?view=diff&rev=527791&r1=527790&r2=527791
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MessageDrivenBeanManagedTxPolicy.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/MessageDrivenBeanManagedTxPolicy.java Wed Apr 11 23:56:57 2007
@@ -76,7 +76,9 @@
}
}
- public void handleApplicationException(Throwable appException, TransactionContext context) throws ApplicationException {
+ public void handleApplicationException(Throwable appException, boolean rollback, TransactionContext context) throws ApplicationException, SystemException {
+ if (rollback && context.currentTx != null) markTxRollbackOnly(context.currentTx);
+
throw new ApplicationException(appException);
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/SessionSynchronizationTxPolicy.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/SessionSynchronizationTxPolicy.java?view=diff&rev=527791&r1=527790&r2=527791
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/SessionSynchronizationTxPolicy.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/SessionSynchronizationTxPolicy.java Wed Apr 11 23:56:57 2007
@@ -19,12 +19,13 @@
import org.apache.openejb.ApplicationException;
import org.apache.openejb.InvalidateReferenceException;
import org.apache.openejb.ContainerType;
+import org.apache.openejb.SystemException;
import org.apache.openejb.core.transaction.TransactionContext;
import org.apache.openejb.core.transaction.TransactionPolicy;
import javax.ejb.SessionSynchronization;
-public class SessionSynchronizationTxPolicy extends org.apache.openejb.core.transaction.TransactionPolicy {
+public class SessionSynchronizationTxPolicy extends TransactionPolicy {
protected TransactionPolicy policy;
@@ -39,7 +40,7 @@
}
- public void beforeInvoke(Object instance, TransactionContext context) throws org.apache.openejb.SystemException, org.apache.openejb.ApplicationException {
+ public void beforeInvoke(Object instance, TransactionContext context) throws SystemException, ApplicationException {
policy.beforeInvoke(instance, context);
if (context.currentTx == null) return;
@@ -60,15 +61,15 @@
}
}
- public void afterInvoke(Object instance, TransactionContext context) throws org.apache.openejb.ApplicationException, org.apache.openejb.SystemException {
+ public void afterInvoke(Object instance, TransactionContext context) throws ApplicationException, SystemException {
policy.afterInvoke(instance, context);
}
- public void handleApplicationException(Throwable appException, TransactionContext context) throws ApplicationException {
- policy.handleApplicationException(appException, context);
+ public void handleApplicationException(Throwable appException, boolean rollback, TransactionContext context) throws ApplicationException, SystemException {
+ policy.handleApplicationException(appException, rollback, context);
}
- public void handleSystemException(Throwable sysException, Object instance, TransactionContext context) throws org.apache.openejb.ApplicationException, org.apache.openejb.SystemException {
+ public void handleSystemException(Throwable sysException, Object instance, TransactionContext context) throws ApplicationException, SystemException {
try {
policy.handleSystemException(sysException, instance, context);
} catch (ApplicationException e) {
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulBeanManagedTxPolicy.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulBeanManagedTxPolicy.java?view=diff&rev=527791&r1=527790&r2=527791
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulBeanManagedTxPolicy.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulBeanManagedTxPolicy.java Wed Apr 11 23:56:57 2007
@@ -86,7 +86,8 @@
}
}
- public void handleApplicationException(Throwable appException, TransactionContext context) throws ApplicationException {
+ public void handleApplicationException(Throwable appException, boolean rollback, TransactionContext context) throws ApplicationException, SystemException {
+ if (rollback && context.currentTx != null) markTxRollbackOnly(context.currentTx);
throw new ApplicationException(appException);
}
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=527791&r1=527790&r2=527791
==============================================================================
--- 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 Apr 11 23:56:57 2007
@@ -16,7 +16,6 @@
*/
package org.apache.openejb.core.stateful;
-import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.rmi.RemoteException;
import java.rmi.dgc.VMID;
@@ -43,6 +42,7 @@
import org.apache.openejb.core.CoreDeploymentInfo;
import org.apache.openejb.core.Operation;
import org.apache.openejb.core.ThreadContext;
+import org.apache.openejb.core.ExceptionType;
import org.apache.openejb.core.interceptor.InterceptorData;
import org.apache.openejb.core.interceptor.InterceptorStack;
import org.apache.openejb.core.transaction.TransactionContainer;
@@ -285,7 +285,7 @@
Method createOrInit = deploymentInfo.getMatchingBeanMethod(callMethod);
- InterceptorStack interceptorStack = new InterceptorStack(instance.bean, createOrInit, Operation.CREATE, new ArrayList(), new HashMap());
+ InterceptorStack interceptorStack = new InterceptorStack(instance.bean, createOrInit, Operation.CREATE, new ArrayList<InterceptorData>(), new HashMap<String,Object>());
_invoke(callMethod, interceptorStack, args, instance, createContext);
}
@@ -419,19 +419,9 @@
} else {
returnValue = interceptorStack.invoke(args);
}
- } catch (InvocationTargetException ite) {// handle enterprise bean exception
- if (!isApplicationException(callContext.getDeploymentInfo(), ite.getTargetException())) {
- /* System Exception ****************************/
-
- txPolicy.handleSystemException(ite.getTargetException(), bean, txContext);
- } else {
- /* Application Exception ***********************/
- instanceManager.poolInstance(callContext.getPrimaryKey(), bean);
-
- txPolicy.handleApplicationException(ite.getTargetException(), txContext);
- }
} catch (Throwable re) {// handle reflection exception
- if (!isApplicationException(callContext.getDeploymentInfo(), re)) {
+ ExceptionType type = callContext.getDeploymentInfo().getExceptionType(re);
+ if (type == ExceptionType.SYSTEM) {
/* System Exception ****************************/
txPolicy.handleSystemException(re, bean, txContext);
@@ -439,29 +429,14 @@
/* Application Exception ***********************/
instanceManager.poolInstance(callContext.getPrimaryKey(), bean);
- txPolicy.handleApplicationException(re, txContext);
+ txPolicy.handleApplicationException(re, type == ExceptionType.APPLICATION_ROLLBACK, txContext);
}
- /*
- Any exception thrown by reflection; not by the enterprise bean. Possible
- Exceptions are:
- IllegalAccessException - if the underlying method is inaccessible.
- IllegalArgumentException - if the number of actual and formal parameters differ, or if an unwrapping conversion fails.
- NullPointerException - if the specified object is null and the method is an instance method.
- ExceptionInitializerError - if the initialization provoked by this method fails.
- */
-
- txPolicy.handleSystemException(re, bean, txContext);
-
} finally {
unregisterEntityManagers(callContext);
txPolicy.afterInvoke(bean, txContext);
}
return returnValue;
- }
-
- private boolean isApplicationException(DeploymentInfo deploymentInfo, Throwable e) {
- return e instanceof Exception && !(e instanceof RuntimeException);
}
private Index<EntityManagerFactory, EntityManager> createEntityManagers(CoreDeploymentInfo deploymentInfo) {
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainerManagedTxPolicy.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainerManagedTxPolicy.java?view=diff&rev=527791&r1=527790&r2=527791
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainerManagedTxPolicy.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainerManagedTxPolicy.java Wed Apr 11 23:56:57 2007
@@ -19,10 +19,11 @@
import org.apache.openejb.ApplicationException;
import org.apache.openejb.InvalidateReferenceException;
import org.apache.openejb.ContainerType;
+import org.apache.openejb.SystemException;
import org.apache.openejb.core.transaction.TransactionContext;
import org.apache.openejb.core.transaction.TransactionPolicy;
-public class StatefulContainerManagedTxPolicy extends org.apache.openejb.core.transaction.TransactionPolicy {
+public class StatefulContainerManagedTxPolicy extends TransactionPolicy {
protected TransactionPolicy policy;
@@ -38,19 +39,19 @@
return policy.policyToString();
}
- public void beforeInvoke(Object instance, TransactionContext context) throws org.apache.openejb.SystemException, org.apache.openejb.ApplicationException {
+ public void beforeInvoke(Object instance, TransactionContext context) throws SystemException, ApplicationException {
policy.beforeInvoke(instance, context);
}
- public void afterInvoke(Object instance, TransactionContext context) throws org.apache.openejb.ApplicationException, org.apache.openejb.SystemException {
+ public void afterInvoke(Object instance, TransactionContext context) throws ApplicationException, SystemException {
policy.afterInvoke(instance, context);
}
- public void handleApplicationException(Throwable appException, TransactionContext context) throws ApplicationException {
- policy.handleApplicationException(appException, context);
+ public void handleApplicationException(Throwable appException, boolean rollback, TransactionContext context) throws ApplicationException, SystemException {
+ policy.handleApplicationException(appException, rollback, context);
}
- public void handleSystemException(Throwable sysException, Object instance, TransactionContext context) throws org.apache.openejb.ApplicationException, org.apache.openejb.SystemException {
+ public void handleSystemException(Throwable sysException, Object instance, TransactionContext context) throws ApplicationException, SystemException {
try {
policy.handleSystemException(sysException, instance, context);
} catch (ApplicationException e) {
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessBeanManagedTxPolicy.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessBeanManagedTxPolicy.java?view=diff&rev=527791&r1=527790&r2=527791
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessBeanManagedTxPolicy.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessBeanManagedTxPolicy.java Wed Apr 11 23:56:57 2007
@@ -18,6 +18,7 @@
import org.apache.openejb.ApplicationException;
import org.apache.openejb.ContainerType;
+import org.apache.openejb.SystemException;
import org.apache.openejb.core.transaction.TransactionContainer;
import org.apache.openejb.core.transaction.TransactionContext;
import org.apache.openejb.core.transaction.TransactionPolicy;
@@ -38,12 +39,12 @@
return "TX_BeanManaged: ";
}
- public void beforeInvoke(Object instance, TransactionContext context) throws org.apache.openejb.SystemException, org.apache.openejb.ApplicationException {
+ public void beforeInvoke(Object instance, TransactionContext context) throws SystemException, ApplicationException {
context.clientTx = suspendTransaction(context);
}
- public void afterInvoke(Object instance, TransactionContext context) throws org.apache.openejb.ApplicationException, org.apache.openejb.SystemException {
+ public void afterInvoke(Object instance, TransactionContext context) throws ApplicationException, SystemException {
try {
/*
* The Container must detect the case in which a transaction was started, but
@@ -53,8 +54,7 @@
if (context.currentTx == null) return;
- if (context.currentTx.getStatus() != Status.STATUS_ROLLEDBACK && context.currentTx.getStatus() != Status.STATUS_COMMITTED)
- {
+ if (context.currentTx.getStatus() != Status.STATUS_ROLLEDBACK && context.currentTx.getStatus() != Status.STATUS_COMMITTED) {
String message = "The stateless session bean started a transaction but did not complete it.";
/* [1] Log this as an application error ********/
@@ -72,18 +72,19 @@
}
} catch (javax.transaction.SystemException e) {
- throw new org.apache.openejb.SystemException(e);
+ throw new SystemException(e);
} finally {
resumeTransaction(context, context.clientTx);
}
}
- public void handleApplicationException(Throwable appException, TransactionContext context) throws ApplicationException {
+ public void handleApplicationException(Throwable appException, boolean rollback, TransactionContext context) throws ApplicationException, SystemException {
+ if (rollback && context.currentTx != null) markTxRollbackOnly(context.currentTx);
throw new ApplicationException(appException);
}
- public void handleSystemException(Throwable sysException, Object instance, TransactionContext context) throws org.apache.openejb.ApplicationException, org.apache.openejb.SystemException {
+ public void handleSystemException(Throwable sysException, Object instance, TransactionContext context) throws ApplicationException, SystemException {
try {
context.currentTx = context.getTransactionManager().getTransaction();
} catch (javax.transaction.SystemException e) {
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContainer.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContainer.java?view=diff&rev=527791&r1=527790&r2=527791
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContainer.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContainer.java Wed Apr 11 23:56:57 2007
@@ -37,6 +37,7 @@
import org.apache.openejb.core.CoreDeploymentInfo;
import org.apache.openejb.core.Operation;
import org.apache.openejb.core.ThreadContext;
+import org.apache.openejb.core.ExceptionType;
import org.apache.openejb.core.interceptor.InterceptorData;
import org.apache.openejb.core.interceptor.InterceptorStack;
import org.apache.openejb.core.timer.EjbTimerService;
@@ -196,19 +197,9 @@
InterceptorStack interceptorStack = new InterceptorStack(instance.bean, runMethod, Operation.BUSINESS, interceptors, instance.interceptors);
returnValue = interceptorStack.invoke(args);
}
- } catch (java.lang.reflect.InvocationTargetException ite) {// handle exceptions thrown by enterprise bean
- if (!isApplicationException(deploymentInfo, ite.getTargetException())) {
- /* System Exception ****************************/
-
- txPolicy.handleSystemException(ite.getTargetException(), instance, txContext);
- } else {
- /* Application Exception ***********************/
- instanceManager.poolInstance(callContext, instance);
-
- txPolicy.handleApplicationException(ite.getTargetException(), txContext);
- }
} catch (Throwable re) {// handle reflection exception
- if (!isApplicationException(deploymentInfo, re)) {
+ ExceptionType type = deploymentInfo.getExceptionType(re);
+ if (type == ExceptionType.SYSTEM) {
/* System Exception ****************************/
txPolicy.handleSystemException(re, instance, txContext);
@@ -216,17 +207,8 @@
/* Application Exception ***********************/
instanceManager.poolInstance(callContext, instance);
- txPolicy.handleApplicationException(re, txContext);
+ txPolicy.handleApplicationException(re, type == ExceptionType.APPLICATION_ROLLBACK, txContext);
}
- /*
- Any exception thrown by reflection; not by the enterprise bean. Possible
- Exceptions are:
- IllegalAccessException - if the underlying method is inaccessible.
- IllegalArgumentException - if the number of actual and formal parameters differ, or if an unwrapping conversion fails.
- NullPointerException - if the specified object is null and the method is an instance method.
- ExceptionInInitializerError - if the initialization provoked by this method fails.
- */
-// txPolicy.handleSystemException(re, bean, txContext);
} finally {
txPolicy.afterInvoke(instance, txContext);
@@ -252,13 +234,13 @@
// Add the webservice interceptor to the list of interceptor instances
- Map<String, Object> interceptors = new HashMap(instance.interceptors);
+ Map<String, Object> interceptors = new HashMap<String, Object>(instance.interceptors);
{
interceptors.put(interceptor.getClass().getName(), interceptor);
}
// Create an InterceptorData for the webservice interceptor to the list of interceptorDatas for this method
- List<InterceptorData> interceptorDatas = new ArrayList(deploymentInfo.getMethodInterceptors(runMethod));
+ List<InterceptorData> interceptorDatas = new ArrayList<InterceptorData>(deploymentInfo.getMethodInterceptors(runMethod));
{
InterceptorData providerData = new InterceptorData(interceptor.getClass());
ClassFinder finder = new ClassFinder(interceptor.getClass());
@@ -281,10 +263,6 @@
// DMB: This will be a problem if the calling method is in an interface and the
// service-endpoint interface extends that interface.
return (serviceEndpointInterface != null && serviceEndpointInterface.isAssignableFrom(callMethod.getDeclaringClass()));
- }
-
- private boolean isApplicationException(DeploymentInfo deploymentInfo, Throwable e) {
- return e instanceof Exception && !(e instanceof RuntimeException);
}
private TransactionManager getTransactionManager() {
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEjbHomeHandler.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEjbHomeHandler.java?view=diff&rev=527791&r1=527790&r2=527791
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEjbHomeHandler.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEjbHomeHandler.java Wed Apr 11 23:56:57 2007
@@ -41,29 +41,8 @@
throw new RemoveException("Session objects are private resources and do not have primary keys");
}
- /*
- * This method is different from the stateful and entity behavior because we only want the
- * stateless session bean that created the proxy to be invalidated, not all the proxies.
- *
- * TODO: this method relies on the fact that the handle implementation is a subclass
- * of IntraVM handle, which isn't neccessarily the case for arbitrary remote protocols.
- */
protected Object removeWithHandle(Method method, Object[] args, Object proxy) throws Throwable {
-
- IntraVmHandle handle = (IntraVmHandle) args[0];
- Object primKey = handle.getPrimaryKey();
- EjbObjectProxyHandler stub;
- try {
- stub = (EjbObjectProxyHandler) ProxyManager.getInvocationHandler(handle.getEJBObject());
- } catch (IllegalArgumentException e) {
-
- stub = null;
- }
-
- container.invoke(deploymentID, method, args, primKey);
- if (stub != null) {
- stub.invalidateReference();
- }
+ // stateless can't be removed
return null;
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEjbObjectHandler.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEjbObjectHandler.java?view=diff&rev=527791&r1=527790&r2=527791
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEjbObjectHandler.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessEjbObjectHandler.java Wed Apr 11 23:56:57 2007
@@ -56,9 +56,12 @@
}
}
+ public void invalidateReference() {
+ // stateless can't be removed
+ }
+
protected Object remove(Method method, Object[] args, Object proxy) throws Throwable {
- invalidateReference();
+ // stateless can't be removed
return null;
}
-
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TransactionPolicy.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TransactionPolicy.java?view=diff&rev=527791&r1=527790&r2=527791
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TransactionPolicy.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TransactionPolicy.java Wed Apr 11 23:56:57 2007
@@ -24,6 +24,11 @@
import javax.transaction.Transaction;
import javax.transaction.TransactionManager;
+import javax.transaction.InvalidTransactionException;
+import javax.transaction.HeuristicMixedException;
+import javax.transaction.HeuristicRollbackException;
+import javax.transaction.RollbackException;
+import javax.transaction.NotSupportedException;
import java.rmi.RemoteException;
public abstract class TransactionPolicy {
@@ -62,13 +67,13 @@
return policyType.toString();
}
- public abstract void handleApplicationException(Throwable appException, TransactionContext context) throws org.apache.openejb.ApplicationException;
+ public abstract void handleApplicationException(Throwable appException, boolean rollback, TransactionContext context) throws ApplicationException, SystemException;
- public abstract void handleSystemException(Throwable sysException, Object instance, TransactionContext context) throws org.apache.openejb.ApplicationException, org.apache.openejb.SystemException;
+ public abstract void handleSystemException(Throwable sysException, Object instance, TransactionContext context) throws ApplicationException, SystemException;
- public abstract void beforeInvoke(Object bean, TransactionContext context) throws org.apache.openejb.SystemException, org.apache.openejb.ApplicationException;
+ public abstract void beforeInvoke(Object bean, TransactionContext context) throws SystemException, ApplicationException;
- public abstract void afterInvoke(Object bean, TransactionContext context) throws org.apache.openejb.ApplicationException, org.apache.openejb.SystemException;
+ public abstract void afterInvoke(Object bean, TransactionContext context) throws ApplicationException, SystemException;
protected void markTxRollbackOnly(Transaction tx) throws SystemException {
try {
@@ -80,7 +85,7 @@
}
} catch (javax.transaction.SystemException se) {
logger.error("Exception during setRollbackOnly()", se);
- throw new org.apache.openejb.SystemException(se);
+ throw new SystemException(se);
}
}
@@ -93,7 +98,7 @@
return tx;
} catch (javax.transaction.SystemException se) {
logger.error("Exception during suspend()", se);
- throw new org.apache.openejb.SystemException(se);
+ throw new SystemException(se);
}
}
@@ -109,18 +114,18 @@
}
context.getTransactionManager().resume(tx);
}
- } catch (javax.transaction.InvalidTransactionException ite) {
+ } catch (InvalidTransactionException ite) {
txLogger.error("Could not resume the client's transaction, the transaction is no longer valid: " + ite.getMessage());
- throw new org.apache.openejb.SystemException(ite);
+ throw new SystemException(ite);
} catch (IllegalStateException e) {
txLogger.error("Could not resume the client's transaction: " + e.getMessage());
- throw new org.apache.openejb.SystemException(e);
+ throw new SystemException(e);
} catch (javax.transaction.SystemException e) {
txLogger.error("Could not resume the client's transaction: The transaction reported a system exception: " + e.getMessage());
- throw new org.apache.openejb.SystemException(e);
+ throw new SystemException(e);
}
}
@@ -135,32 +140,32 @@
} else {
tx.commit();
}
- } catch (javax.transaction.RollbackException e) {
+ } catch (RollbackException e) {
txLogger.info("The transaction has been rolled back rather than commited: " + e.getMessage());
- } catch (javax.transaction.HeuristicMixedException e) {
+ } catch (HeuristicMixedException e) {
txLogger.info("A heuristic decision was made, some relevant updates have been committed while others have been rolled back: " + e.getMessage());
- } catch (javax.transaction.HeuristicRollbackException e) {
+ } catch (HeuristicRollbackException e) {
txLogger.info("A heuristic decision was made while commiting the transaction, some relevant updates have been rolled back: " + e.getMessage());
} catch (SecurityException e) {
txLogger.error("The current thread is not allowed to commit the transaction: " + e.getMessage());
- throw new org.apache.openejb.SystemException(e);
+ throw new SystemException(e);
} catch (IllegalStateException e) {
txLogger.error("The current thread is not associated with a transaction: " + e.getMessage());
- throw new org.apache.openejb.SystemException(e);
+ throw new SystemException(e);
} catch (javax.transaction.SystemException e) {
txLogger.error("The Transaction Manager has encountered an unexpected error condition while attempting to commit the transaction: " + e.getMessage());
- throw new org.apache.openejb.SystemException(e);
+ throw new SystemException(e);
}
}
@@ -178,12 +183,12 @@
} catch (IllegalStateException e) {
logger.error("The TransactionManager reported an exception while attempting to rollback the transaction: " + e.getMessage());
- throw new org.apache.openejb.SystemException(e);
+ throw new SystemException(e);
} catch (javax.transaction.SystemException e) {
logger.error("The TransactionManager reported an exception while attempting to rollback the transaction: " + e.getMessage());
- throw new org.apache.openejb.SystemException(e);
+ throw new SystemException(e);
}
}
@@ -224,7 +229,7 @@
if (txLogger.isInfoEnabled()) {
txLogger.info("TX " + policyToString() + ": Started transaction " + context.getTransactionManager().getTransaction());
}
- } catch (javax.transaction.NotSupportedException nse) {
+ } catch (NotSupportedException nse) {
logger.error("", nse);
}
}
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxManditory.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxManditory.java?view=diff&rev=527791&r1=527790&r2=527791
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxManditory.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxManditory.java Wed Apr 11 23:56:57 2007
@@ -17,6 +17,9 @@
package org.apache.openejb.core.transaction;
import org.apache.openejb.ApplicationException;
+import org.apache.openejb.SystemException;
+
+import javax.transaction.TransactionRequiredException;
public class TxManditory extends TransactionPolicy {
@@ -24,7 +27,7 @@
super(Type.Mandatory, container);
}
- public void beforeInvoke(Object instance, TransactionContext context) throws org.apache.openejb.SystemException, org.apache.openejb.ApplicationException {
+ public void beforeInvoke(Object instance, TransactionContext context) throws SystemException, ApplicationException {
try {
@@ -32,27 +35,27 @@
if (context.clientTx == null) {
- throw new ApplicationException(new javax.transaction.TransactionRequiredException());
+ throw new ApplicationException(new TransactionRequiredException());
}
context.currentTx = context.clientTx;
} catch (javax.transaction.SystemException se) {
logger.error("Exception during getTransaction()", se);
- throw new org.apache.openejb.SystemException(se);
+ throw new SystemException(se);
}
}
- public void afterInvoke(Object instance, TransactionContext context) throws org.apache.openejb.ApplicationException, org.apache.openejb.SystemException {
-
+ public void afterInvoke(Object instance, TransactionContext context) throws ApplicationException, SystemException {
}
- public void handleApplicationException(Throwable appException, TransactionContext context) throws ApplicationException {
+ public void handleApplicationException(Throwable appException, boolean rollback, TransactionContext context) throws ApplicationException, SystemException {
+ if (rollback && context.currentTx != null) markTxRollbackOnly(context.currentTx);
throw new ApplicationException(appException);
}
- public void handleSystemException(Throwable sysException, Object instance, TransactionContext context) throws org.apache.openejb.ApplicationException, org.apache.openejb.SystemException {
+ public void handleSystemException(Throwable sysException, Object instance, TransactionContext context) throws ApplicationException, SystemException {
/* [1] Log the system exception or error *********/
logSystemException(sysException);
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxNever.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxNever.java?view=diff&rev=527791&r1=527790&r2=527791
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxNever.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxNever.java Wed Apr 11 23:56:57 2007
@@ -17,6 +17,9 @@
package org.apache.openejb.core.transaction;
import org.apache.openejb.ApplicationException;
+import org.apache.openejb.SystemException;
+
+import java.rmi.RemoteException;
public class TxNever extends TransactionPolicy {
@@ -24,31 +27,31 @@
super(Type.Never, container);
}
- public void beforeInvoke(Object instance, TransactionContext context) throws org.apache.openejb.SystemException, org.apache.openejb.ApplicationException {
+ public void beforeInvoke(Object instance, TransactionContext context) throws SystemException, ApplicationException {
try {
if (context.getTransactionManager().getTransaction() != null) {
- throw new ApplicationException(new java.rmi.RemoteException("Transactions not supported"));
+ throw new ApplicationException(new RemoteException("Transactions not supported"));
}
} catch (javax.transaction.SystemException se) {
logger.error("Exception during getTransaction()", se);
- throw new org.apache.openejb.SystemException(se);
+ throw new SystemException(se);
}
}
- public void afterInvoke(Object instance, TransactionContext context) throws org.apache.openejb.ApplicationException, org.apache.openejb.SystemException {
-
+ public void afterInvoke(Object instance, TransactionContext context) throws ApplicationException, SystemException {
}
- public void handleApplicationException(Throwable appException, TransactionContext context) throws ApplicationException {
+ public void handleApplicationException(Throwable appException, boolean rollback, TransactionContext context) throws ApplicationException, SystemException {
+ if (rollback && context.currentTx != null) markTxRollbackOnly(context.currentTx);
throw new ApplicationException(appException);
}
- public void handleSystemException(Throwable sysException, Object instance, TransactionContext context) throws org.apache.openejb.ApplicationException, org.apache.openejb.SystemException {
+ public void handleSystemException(Throwable sysException, Object instance, TransactionContext context) throws ApplicationException, SystemException {
/* [1] Log the system exception or error *********/
logSystemException(sysException);
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxNotSupported.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxNotSupported.java?view=diff&rev=527791&r1=527790&r2=527791
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxNotSupported.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxNotSupported.java Wed Apr 11 23:56:57 2007
@@ -17,6 +17,9 @@
package org.apache.openejb.core.transaction;
import org.apache.openejb.ApplicationException;
+import org.apache.openejb.SystemException;
+
+import javax.transaction.InvalidTransactionException;
public class TxNotSupported extends TransactionPolicy {
@@ -24,24 +27,24 @@
super(Type.NotSupported, container);
}
- public void beforeInvoke(Object instance, TransactionContext context) throws org.apache.openejb.SystemException, org.apache.openejb.ApplicationException {
+ public void beforeInvoke(Object instance, TransactionContext context) throws SystemException, ApplicationException {
try {
context.clientTx = context.getTransactionManager().suspend();
} catch (javax.transaction.SystemException se) {
- throw new org.apache.openejb.SystemException(se);
+ throw new SystemException(se);
}
context.currentTx = null;
}
- public void afterInvoke(Object instance, TransactionContext context) throws org.apache.openejb.ApplicationException, org.apache.openejb.SystemException {
+ public void afterInvoke(Object instance, TransactionContext context) throws ApplicationException, SystemException {
if (context.clientTx != null) {
try {
context.getTransactionManager().resume(context.clientTx);
- } catch (javax.transaction.InvalidTransactionException ite) {
+ } catch (InvalidTransactionException ite) {
logger.error("Could not resume the client's transaction, the transaction is no longer valid: " + ite.getMessage());
} catch (IllegalStateException e) {
@@ -54,12 +57,13 @@
}
}
- public void handleApplicationException(Throwable appException, TransactionContext context) throws ApplicationException {
+ public void handleApplicationException(Throwable appException, boolean rollback, TransactionContext context) throws ApplicationException, SystemException {
+ if (rollback && context.currentTx != null) markTxRollbackOnly(context.currentTx);
throw new ApplicationException(appException);
}
- public void handleSystemException(Throwable sysException, Object instance, TransactionContext context) throws org.apache.openejb.ApplicationException, org.apache.openejb.SystemException {
+ public void handleSystemException(Throwable sysException, Object instance, TransactionContext context) throws ApplicationException, SystemException {
/* [1] Log the system exception or error *********/
logSystemException(sysException);
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxRequired.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxRequired.java?view=diff&rev=527791&r1=527790&r2=527791
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxRequired.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxRequired.java Wed Apr 11 23:56:57 2007
@@ -19,6 +19,7 @@
import javax.transaction.Status;
import org.apache.openejb.ApplicationException;
+import org.apache.openejb.SystemException;
public class TxRequired extends TransactionPolicy {
@@ -26,7 +27,7 @@
super(Type.Required, container);
}
- public void beforeInvoke(Object instance, TransactionContext context) throws org.apache.openejb.SystemException, org.apache.openejb.ApplicationException {
+ public void beforeInvoke(Object instance, TransactionContext context) throws SystemException, ApplicationException {
try {
@@ -40,11 +41,11 @@
} catch (javax.transaction.SystemException se) {
logger.error("Exception during getTransaction()", se);
- throw new org.apache.openejb.SystemException(se);
+ throw new SystemException(se);
}
}
- public void afterInvoke(Object instance, TransactionContext context) throws org.apache.openejb.ApplicationException, org.apache.openejb.SystemException {
+ public void afterInvoke(Object instance, TransactionContext context) throws ApplicationException, SystemException {
try {
if (context.clientTx != null) return;
@@ -57,16 +58,17 @@
} catch (javax.transaction.SystemException se) {
logger.error("Exception during getTransaction()", se);
- throw new org.apache.openejb.SystemException(se);
+ throw new SystemException(se);
}
}
- public void handleApplicationException(Throwable appException, TransactionContext context) throws ApplicationException {
+ public void handleApplicationException(Throwable appException, boolean rollback, TransactionContext context) throws ApplicationException, SystemException {
+ if (rollback && context.currentTx != null) markTxRollbackOnly(context.currentTx);
throw new ApplicationException(appException);
}
- public void handleSystemException(Throwable sysException, Object instance, TransactionContext context) throws org.apache.openejb.ApplicationException, org.apache.openejb.SystemException {
+ public void handleSystemException(Throwable sysException, Object instance, TransactionContext context) throws ApplicationException, SystemException {
/* [1] Log the system exception or error **********/
logSystemException(sysException);
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxRequiresNew.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxRequiresNew.java?view=diff&rev=527791&r1=527790&r2=527791
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxRequiresNew.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxRequiresNew.java Wed Apr 11 23:56:57 2007
@@ -17,6 +17,7 @@
package org.apache.openejb.core.transaction;
import org.apache.openejb.ApplicationException;
+import org.apache.openejb.SystemException;
import javax.transaction.Status;
@@ -26,7 +27,7 @@
super(Type.RequiresNew, container);
}
- public void beforeInvoke(Object instance, TransactionContext context) throws org.apache.openejb.SystemException, org.apache.openejb.ApplicationException {
+ public void beforeInvoke(Object instance, TransactionContext context) throws SystemException, ApplicationException {
try {
@@ -35,12 +36,12 @@
context.currentTx = context.getTransactionManager().getTransaction();
} catch (javax.transaction.SystemException se) {
- throw new org.apache.openejb.SystemException(se);
+ throw new SystemException(se);
}
}
- public void afterInvoke(Object instance, TransactionContext context) throws org.apache.openejb.ApplicationException, org.apache.openejb.SystemException {
+ public void afterInvoke(Object instance, TransactionContext context) throws ApplicationException, SystemException {
try {
@@ -51,7 +52,7 @@
}
} catch (javax.transaction.SystemException se) {
- throw new org.apache.openejb.SystemException(se);
+ throw new SystemException(se);
} finally {
if (context.clientTx != null) {
resumeTransaction(context, context.clientTx);
@@ -61,11 +62,13 @@
}
}
- public void handleApplicationException(Throwable appException, TransactionContext context) throws ApplicationException {
+ public void handleApplicationException(Throwable appException, boolean rollback, TransactionContext context) throws ApplicationException, SystemException {
+ if (rollback && context.currentTx != null) markTxRollbackOnly(context.currentTx);
+
throw new ApplicationException(appException);
}
- public void handleSystemException(Throwable sysException, Object instance, TransactionContext context) throws org.apache.openejb.ApplicationException, org.apache.openejb.SystemException {
+ public void handleSystemException(Throwable sysException, Object instance, TransactionContext context) throws ApplicationException, SystemException {
/* [1] Log the system exception or error **********/
logSystemException(sysException);
Modified: incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxSupports.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxSupports.java?view=diff&rev=527791&r1=527790&r2=527791
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxSupports.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/transaction/TxSupports.java Wed Apr 11 23:56:57 2007
@@ -17,6 +17,7 @@
package org.apache.openejb.core.transaction;
import org.apache.openejb.ApplicationException;
+import org.apache.openejb.SystemException;
public class TxSupports extends TransactionPolicy {
@@ -24,7 +25,7 @@
super(Type.Supports, container);
}
- public void beforeInvoke(Object instance, TransactionContext context) throws org.apache.openejb.SystemException, org.apache.openejb.ApplicationException {
+ public void beforeInvoke(Object instance, TransactionContext context) throws SystemException, ApplicationException {
try {
@@ -32,20 +33,21 @@
context.currentTx = context.clientTx;
} catch (javax.transaction.SystemException se) {
- throw new org.apache.openejb.SystemException(se);
+ throw new SystemException(se);
}
}
- public void afterInvoke(Object instance, TransactionContext context) throws org.apache.openejb.ApplicationException, org.apache.openejb.SystemException {
+ public void afterInvoke(Object instance, TransactionContext context) throws ApplicationException, SystemException {
}
- public void handleApplicationException(Throwable appException, TransactionContext context) throws ApplicationException {
+ public void handleApplicationException(Throwable appException, boolean rollback, TransactionContext context) throws ApplicationException, SystemException {
+ if (rollback && context.currentTx != null) markTxRollbackOnly(context.currentTx);
throw new ApplicationException(appException);
}
- public void handleSystemException(Throwable sysException, Object instance, TransactionContext context) throws org.apache.openejb.ApplicationException, org.apache.openejb.SystemException {
+ public void handleSystemException(Throwable sysException, Object instance, TransactionContext context) throws ApplicationException, SystemException {
boolean runningInTransaction = (context.currentTx != null);
Modified: incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ApplicationException.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ApplicationException.java?view=diff&rev=527791&r1=527790&r2=527791
==============================================================================
--- incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ApplicationException.java (original)
+++ incubator/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/ApplicationException.java Wed Apr 11 23:56:57 2007
@@ -57,6 +57,14 @@
@XmlID
protected String id;
+ public ApplicationException() {
+ }
+
+ public ApplicationException(String exceptionClass, boolean rollback) {
+ this.exceptionClass = exceptionClass;
+ this.rollback = rollback;
+ }
+
public String getExceptionClass() {
return exceptionClass;
}
Modified: incubator/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/stateless/StatelessEjbObjectTests.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/stateless/StatelessEjbObjectTests.java?view=diff&rev=527791&r1=527790&r2=527791
==============================================================================
--- incubator/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/stateless/StatelessEjbObjectTests.java (original)
+++ incubator/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/stateless/StatelessEjbObjectTests.java Wed Apr 11 23:56:57 2007
@@ -104,13 +104,8 @@
public void test05_remove(){
try{
ejbObject.remove();
- try{
- ejbObject.businessMethod("Should throw an exception");
- assertTrue( "Calling business method after removing the EJBObject does not throw an exception", false );
- } catch (Exception e){
- assertTrue( true );
- return;
- }
+ // you can't really remove a stateless handle
+ ejbObject.businessMethod("Should not throw an exception");
} catch (Exception e){
fail("Received Exception "+e.getClass()+ " : "+e.getMessage());
}
Modified: incubator/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/stateless/StatelessHandleTests.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/stateless/StatelessHandleTests.java?view=diff&rev=527791&r1=527790&r2=527791
==============================================================================
--- incubator/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/stateless/StatelessHandleTests.java (original)
+++ incubator/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/stateless/StatelessHandleTests.java Wed Apr 11 23:56:57 2007
@@ -80,13 +80,8 @@
public void test02_EJBHome_remove(){
try{
ejbHome.remove(ejbHandle);
- try{
- ejbObject.businessMethod("Should throw an exception");
- assertTrue( "Calling business method after removing the EJBObject does not throw an exception", false );
- } catch (Exception e){
- assertTrue( true );
- return;
- }
+ // you can't really remove a stateless handle
+ ejbObject.businessMethod("Should not throw an exception");
} catch (Exception e){
fail("Received Exception "+e.getClass()+ " : "+e.getMessage());
}
Modified: incubator/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/stateless/StatelessPojoEjbLocalObjectTests.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/stateless/StatelessPojoEjbLocalObjectTests.java?view=diff&rev=527791&r1=527790&r2=527791
==============================================================================
--- incubator/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/stateless/StatelessPojoEjbLocalObjectTests.java (original)
+++ incubator/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/stateless/StatelessPojoEjbLocalObjectTests.java Wed Apr 11 23:56:57 2007
@@ -90,14 +90,9 @@
public void test04_remove() {
try {
- try {
- ejbLocalObject.remove();
- ejbLocalObject.businessMethod("Should throw an exception");
- assertTrue("Calling business method after removing the EJBObject does not throw an exception", false);
- } catch (Exception e) {
- assertTrue(true);
- return;
- }
+ ejbLocalObject.remove();
+ // you can't really remove a stateless handle
+ ejbLocalObject.businessMethod("Should not throw an exception");
} catch (Exception e) {
fail("Received Exception " + e.getClass() + " : " + e.getMessage());
}
Modified: incubator/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/stateless/StatelessPojoEjbObjectTests.java
URL: http://svn.apache.org/viewvc/incubator/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/stateless/StatelessPojoEjbObjectTests.java?view=diff&rev=527791&r1=527790&r2=527791
==============================================================================
--- incubator/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/stateless/StatelessPojoEjbObjectTests.java (original)
+++ incubator/openejb/trunk/openejb3/itests/openejb-itests-client/src/main/java/org/apache/openejb/test/stateless/StatelessPojoEjbObjectTests.java Wed Apr 11 23:56:57 2007
@@ -105,15 +105,8 @@
public void test04_remove() {
try {
ejbObject.remove();
- try {
- ejbObject.businessMethod("Should throw an exception");
- assertTrue(
- "Calling business method after removing the EJBObject does not throw an exception",
- false);
- } catch (Exception e) {
- assertTrue(true);
- return;
- }
+ // you can't really remove a stateless handle
+ ejbObject.businessMethod("Should not throw an exception");
} catch (Exception e) {
fail("Received Exception " + e.getClass() + " : " + e.getMessage());
}