You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2014/10/02 15:13:37 UTC
svn commit: r1628966 -
/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
Author: rmannibucau
Date: Thu Oct 2 13:13:36 2014
New Revision: 1628966
URL: http://svn.apache.org/r1628966
Log:
TOMEE-1372 JtaManaged shouldn't be mandatory to be able to use a datasource with jpa
Modified:
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.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=1628966&r1=1628965&r2=1628966&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 Oct 2 13:13:36 2014
@@ -102,6 +102,8 @@ import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
+import static java.util.Arrays.asList;
+
public class AutoConfig implements DynamicDeployer, JndiConstants {
public static final String ORIGIN_ANNOTATION = "Annotation";
@@ -1358,11 +1360,43 @@ public class AutoConfig implements Dynam
final String prefix = app.getModuleId() + "/";
String jtaDataSourceId = null;
- if (!resourceLocal) {
+ String nonJtaDataSourceId = null;
+
+ // first try exact matching without JtaManaged which is not mandatory actually (custom DS + JTADataSourceWrapperFactory)
+ final String jtaWithJavaAndSlash = replaceJavaAndSlash(unit.getJtaDataSource());
+ for (final String potentialName : asList(prefix + jtaWithJavaAndSlash, jtaWithJavaAndSlash)) {
+ final ResourceInfo jtaInfo = configFactory.getResourceInfo(potentialName);
+ if (jtaInfo != null) {
+ if (!"false".equalsIgnoreCase(jtaInfo.properties.getProperty("JtaManaged")) // don't test true since it can be missing
+ && (jtaInfo.types.contains("DataSource") || jtaInfo.types.contains(DataSource.class.getName()))) {
+ jtaDataSourceId = jtaInfo.id;
+ break;
+ } else {
+ logger.warning("Found matching datasource: " + jtaInfo.id + " but this one is not a JTA datasource");
+ }
+ }
+ }
+
+ final String nonJtaWithJavaAndSlash = replaceJavaAndSlash(unit.getNonJtaDataSource());
+ for (final String potentialName : asList(prefix + nonJtaWithJavaAndSlash, nonJtaWithJavaAndSlash)) {
+ final ResourceInfo info = configFactory.getResourceInfo(potentialName);
+ if (info != null) {
+ if (!"true".equalsIgnoreCase(info.properties.getProperty("JtaManaged"))
+ && (info.types.contains("DataSource") || info.types.contains(DataSource.class.getName()))) {
+ nonJtaDataSourceId = info.id;
+ break;
+ } else {
+ logger.warning("Found matching datasource: " + info.id + " but this one is a JTA datasource");
+ }
+ }
+ }
+
+ // then that's ok to force configuration
+ if (jtaDataSourceId == null && !resourceLocal) {
required.put("JtaManaged", "true");
- jtaDataSourceId = findResourceId(prefix + replaceJavaAndSlash(unit.getJtaDataSource()), "DataSource", required, null);
+ jtaDataSourceId = findResourceId(prefix + jtaWithJavaAndSlash, "DataSource", required, null);
if (jtaDataSourceId == null) { // test with javax.sql.DataSource before DataSource since RA can register resources without our shortcut
- jtaDataSourceId = findResourceId(replaceJavaAndSlash(unit.getJtaDataSource()), "javax.sql.DataSource", required, null);
+ jtaDataSourceId = findResourceId(jtaWithJavaAndSlash, "javax.sql.DataSource", required, null);
}
/* this shouldn't be mandatory anymore since our DataSource has as alias javax.sql.DataSource
if (jtaDataSourceId == null) {
@@ -1371,10 +1405,12 @@ public class AutoConfig implements Dynam
*/
}
- required.put("JtaManaged", "false");
- String nonJtaDataSourceId = findResourceId(prefix + replaceJavaAndSlash(unit.getNonJtaDataSource()), "DataSource", required, null);
if (nonJtaDataSourceId == null) {
- nonJtaDataSourceId = findResourceId(replaceJavaAndSlash(unit.getNonJtaDataSource()), "DataSource", required, null);
+ required.put("JtaManaged", "false");
+ nonJtaDataSourceId = findResourceId(prefix + nonJtaWithJavaAndSlash, "DataSource", required, null);
+ if (nonJtaDataSourceId == null) {
+ nonJtaDataSourceId = findResourceId(nonJtaWithJavaAndSlash, "DataSource", required, null);
+ }
}
if ((jtaDataSourceId != null || resourceLocal) && nonJtaDataSourceId != null) {
@@ -1429,8 +1465,8 @@ public class AutoConfig implements Dynam
//
required.put("JtaManaged", ServiceUtils.ANY);
- final String possibleJta = findResourceId(replaceJavaAndSlash(unit.getJtaDataSource()), "DataSource", required, null);
- final String possibleNonJta = findResourceId(replaceJavaAndSlash(unit.getNonJtaDataSource()), "DataSource", required, null);
+ final String possibleJta = findResourceId(jtaWithJavaAndSlash, "DataSource", required, null);
+ final String possibleNonJta = findResourceId(nonJtaWithJavaAndSlash, "DataSource", required, null);
if (possibleJta != null && possibleJta.equals(possibleNonJta)) {
final ResourceInfo dataSource = configFactory.getResourceInfo(possibleJta);
@@ -2287,7 +2323,8 @@ public class AutoConfig implements Dynam
for (final Resource r : appModule.getResources()) {
final String type = r.getType();
if (type != null) {
- for (final String t : type.trim().split(",")) {
+ final String[] types = type.trim().split(",");
+ for (final String t : types) {
List<String> ids = resourceIdsByType.get(t);
if (ids == null) {
ids = new ArrayList<String>();