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/05/30 23:03:05 UTC

svn commit: r542932 - in /incubator/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/stateful: StatefulContainer.java StatefulInstanceManager.java

Author: dblevins
Date: Wed May 30 14:03:04 2007
New Revision: 542932

URL: http://svn.apache.org/viewvc?view=rev&rev=542932
Log:
Remove/transaction restriction only applies to component interfaces, does not apply to business interface removes.  See EJB 3.0 section 4.4.4 
Do not associate the BeanEntry (i.e. bean instance) with a transaction during a create.  See EJB 3.0 Figure 5


Modified:
    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/StatefulInstanceManager.java

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=542932&r1=542931&r2=542932
==============================================================================
--- 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 May 30 14:03:04 2007
@@ -65,7 +65,7 @@
     private static final Logger logger = Logger.getInstance("OpenEJB", "org.apache.openejb.util.resources");
 
     private final Object containerID;
-    private final TransactionManager transactionManager;  
+    private final TransactionManager transactionManager;
     private final SecurityService securityService;
     private final StatefulInstanceManager instanceManager;
     // todo this should be part of the constructor
@@ -305,7 +305,8 @@
         try {
             checkAuthorization(deploymentInfo, callMethod, callInterface);
 
-            if (instanceManager.getBeanTransaction(callContext) != null) {
+            InterfaceType type = deploymentInfo.getInterfaceType(callInterface);
+            if (type.isComponent() && instanceManager.getBeanTransaction(callContext) != null) {
                 throw new ApplicationException(new RemoveException("A stateful EJB enrolled in a transaction can not be removed"));
             }
 
@@ -332,7 +333,6 @@
             } catch(InvalidateReferenceException e){
                 throw e;
             } catch(ApplicationException e){
-                InterfaceType type = deploymentInfo.getInterfaceType(callInterface);
                 if (type.isBusiness()){
                     retain = deploymentInfo.retainIfExeption(runMethod);
                     throw e;

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=542932&r1=542931&r2=542932
==============================================================================
--- 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 May 30 14:03:04 2007
@@ -382,10 +382,12 @@
         }
 
         if (entry.beanTransaction == null) {
-            try {
-                entry.beanTransaction = transactionManager.getTransaction();
-            } catch (javax.transaction.SystemException se) {
-                throw new SystemException("TransactionManager failure");
+            if (callContext.getCurrentOperation() != Operation.CREATE){
+                try {
+                    entry.beanTransaction = transactionManager.getTransaction();
+                } catch (javax.transaction.SystemException se) {
+                    throw new SystemException("TransactionManager failure");
+                }
             }
 
             // only put in LRU if no current transaction