Author: rmannibucau
Date: Thu Mar  7 07:20:43 2013
New Revision: 1453715

URL: http://svn.apache.org/r1453715
Log:
TOMEE-786 avoid to create jta datasource for non jta ones by default (+ back to 
defaults from the spec) - prop 
openejb.autocreate.jta-datasource-from-non-jta-one still allows to reactivate 
this behavior

Modified:
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
    
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/persistence/ResourceLocalCdiEmTest.java

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java?rev=1453715&r1=1453714&r2=1453715&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
 Thu Mar  7 07:20:43 2013
@@ -45,6 +45,7 @@ import org.apache.openejb.jee.ResourceRe
 import org.apache.openejb.jee.SessionType;
 import org.apache.openejb.jee.jpa.unit.Persistence;
 import org.apache.openejb.jee.jpa.unit.PersistenceUnit;
+import org.apache.openejb.jee.jpa.unit.TransactionType;
 import org.apache.openejb.jee.oejb3.EjbDeployment;
 import org.apache.openejb.jee.oejb3.OpenejbJar;
 import org.apache.openejb.jee.oejb3.ResourceLink;
@@ -1248,14 +1249,20 @@ public class AutoConfig implements Dynam
             return;
         }
 
-        Persistence persistence = persistenceModule.getPersistence();
-        for (PersistenceUnit unit : persistence.getPersistenceUnit()) {
+        final Persistence persistence = persistenceModule.getPersistence();
+        for (final PersistenceUnit unit : persistence.getPersistenceUnit()) {
             if (unit.getProvider() != null){
                 logger.info("Configuring 
PersistenceUnit(name="+unit.getName()+", provider="+unit.getProvider()+")");
             } else {
                 logger.info("Configuring 
PersistenceUnit(name="+unit.getName()+")");
             }
 
+            if (unit.getJtaDataSource() == null && unit.getNonJtaDataSource() 
== null) {
+                unit.setTransactionType(TransactionType.JTA); // 8.2.1.5 of 
JPA 2.0 spec
+            }
+
+            final boolean resourceLocal = 
TransactionType.RESOURCE_LOCAL.equals(unit.getTransactionType());
+
             Properties required = new Properties();
 
 //            if (unit.getJtaDataSource() == null && 
unit.getNonJtaDataSource() == null){
@@ -1302,10 +1309,13 @@ public class AutoConfig implements Dynam
 
             final String prefix = app.getModuleId() + "/";
 
-            required.put("JtaManaged", "true");
-            String jtaDataSourceId = findResourceId(prefix + 
replaceJavaAndSlash(unit.getJtaDataSource()), "DataSource", required, null);
-            if (jtaDataSourceId == null) {
-                jtaDataSourceId = 
findResourceId(replaceJavaAndSlash(unit.getJtaDataSource()), "DataSource", 
required, null);
+            String jtaDataSourceId = null;
+            if (!resourceLocal) {
+                required.put("JtaManaged", "true");
+                jtaDataSourceId = findResourceId(prefix + 
replaceJavaAndSlash(unit.getJtaDataSource()), "DataSource", required, null);
+                if (jtaDataSourceId == null) {
+                    jtaDataSourceId = 
findResourceId(replaceJavaAndSlash(unit.getJtaDataSource()), "DataSource", 
required, null);
+                }
             }
 
             required.put("JtaManaged", "false");
@@ -1314,16 +1324,11 @@ public class AutoConfig implements Dynam
                 nonJtaDataSourceId = 
findResourceId(replaceJavaAndSlash(unit.getNonJtaDataSource()), "DataSource", 
required, null);
             }
 
-            if (jtaDataSourceId != null && nonJtaDataSourceId != null){
-                // Both DataSources were explicitly configured.
-                setJtaDataSource(unit, jtaDataSourceId);
-                setNonJtaDataSource(unit, nonJtaDataSourceId);
-                continue;
-            }
-
-            if (jtaDataSourceId != null && nonJtaDataSourceId != null){
+            if ((jtaDataSourceId != null || resourceLocal) && 
nonJtaDataSourceId != null){
                 // Both DataSources were explicitly configured.
-                setJtaDataSource(unit, jtaDataSourceId);
+                if (jtaDataSourceId != null) {
+                    setJtaDataSource(unit, jtaDataSourceId);
+                }
                 setNonJtaDataSource(unit, nonJtaDataSourceId);
                 continue;
             }
@@ -1336,7 +1341,9 @@ public class AutoConfig implements Dynam
             if (jtaDataSourceId == null && nonJtaDataSourceId == null) {
                 required.put("JtaManaged", NONE);
 
-                jtaDataSourceId = findResourceId(unit.getJtaDataSource(), 
"DataSource", required, null);
+                if (!resourceLocal) {
+                    jtaDataSourceId = findResourceId(unit.getJtaDataSource(), 
"DataSource", required, null);
+                }
                 nonJtaDataSourceId = 
findResourceId(unit.getNonJtaDataSource(), "DataSource", required, null);
 
                 if (jtaDataSourceId != null || nonJtaDataSourceId != null) {
@@ -1569,9 +1576,10 @@ public class AutoConfig implements Dynam
             //  and finally setting JtaManaged=false
             //
 
-            final String deduceJtaFromNonJta = 
SystemInstance.get().getOptions().get(AUTOCREATE_JTA_DATASOURCE_FROM_NON_JTA_ONE_KEY,
 (String) null);
+            final String deduceJtaFromNonJta = 
unit.getProperty(AUTOCREATE_JTA_DATASOURCE_FROM_NON_JTA_ONE_KEY, 
SystemInstance.get().getOptions().get(AUTOCREATE_JTA_DATASOURCE_FROM_NON_JTA_ONE_KEY,
 (String) null));
             if (nonJtaDataSourceId != null && jtaDataSourceId == null
                     // hibernate uses the fact that this ds is missing to get 
a non jta em instead of a JTA one
+                    && (!resourceLocal || deduceJtaFromNonJta != null)
                     && (deduceJtaFromNonJta == null || (deduceJtaFromNonJta != 
null && Boolean.parseBoolean(deduceJtaFromNonJta)))) {
 
                 ResourceInfo nonJtaResourceInfo = 
configFactory.getResourceInfo(nonJtaDataSourceId);
@@ -1625,8 +1633,10 @@ public class AutoConfig implements Dynam
             //  via the service-jar.xml file.
             //
             if (jtaDataSourceId == null && nonJtaDataSourceId == null){
-                required.put("JtaManaged", "true");
-                jtaDataSourceId = autoCreateResource("DataSource", required, 
unit.getName());
+                if (!resourceLocal) {
+                    required.put("JtaManaged", "true");
+                    jtaDataSourceId = autoCreateResource("DataSource", 
required, unit.getName());
+                }
 
                 required.put("JtaManaged", "false");
                 nonJtaDataSourceId = autoCreateResource("DataSource", 
required, unit.getName());

Modified: 
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/persistence/ResourceLocalCdiEmTest.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/persistence/ResourceLocalCdiEmTest.java?rev=1453715&r1=1453714&r2=1453715&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/persistence/ResourceLocalCdiEmTest.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/persistence/ResourceLocalCdiEmTest.java
 Thu Mar  7 07:20:43 2013
@@ -56,6 +56,7 @@ public class ResourceLocalCdiEmTest {
         p.put("ResourceLocalCdiEmTest", "new://Resource?type=DataSource");
         p.put("ResourceLocalCdiEmTest.JdbcDriver", "org.hsqldb.jdbcDriver");
         p.put("ResourceLocalCdiEmTest.JdbcUrl", 
"jdbc:hsqldb:mem:ResourceLocalCdiEmTest");
+        p.put("ResourceLocalCdiEmTest.JtaManaged", "false");
         return p;
     }
 
@@ -68,6 +69,7 @@ public class ResourceLocalCdiEmTest {
     public Persistence persistence() {
         final PersistenceUnit unit = new PersistenceUnit("rl-unit");
         unit.setTransactionType(TransactionType.RESOURCE_LOCAL);
+        unit.setNonJtaDataSource("ResourceLocalCdiEmTest");
         unit.setProperty("openjpa.jdbc.SynchronizeMappings", 
"buildSchema(ForeignKeys=true)");
         unit.getProperties().setProperty("openjpa.RuntimeUnenhancedClasses", 
"supported");
         unit.setExcludeUnlistedClasses(true);


Reply via email to