Author: rmannibucau Date: Wed Sep 25 09:27:03 2013 New Revision: 1526142 URL: http://svn.apache.org/r1526142 Log: TOMEE-1047 TOMEE-1046 allowing to deploy N times resource adapters (could be great to find a better config than system properties) + allowing to use existing resource as jta datasource - skipping some check if it comes from a resource adapter. In clear we can now use tranql
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/AppModule.java tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ServiceUtils.java Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=1526142&r1=1526141&r2=1526142&view=diff ============================================================================== --- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java (original) +++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java Wed Sep 25 09:27:03 2013 @@ -775,6 +775,7 @@ public class Assembler extends Assembler } for (final ResourceInfo outbound : connector.outbound) { createResource(outbound); + outbound.properties.setProperty("openejb.connector", "true"); // set it after as a marker but not as an attribute (no getOpenejb().setConnector(...)) } for (final MdbContainerInfo inbound : connector.inbound) { createContainer(inbound); Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/AppModule.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/AppModule.java?rev=1526142&r1=1526141&r2=1526142&view=diff ============================================================================== --- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/AppModule.java (original) +++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/AppModule.java Wed Sep 25 09:27:03 2013 @@ -77,28 +77,32 @@ public class AppModule implements Deploy this(classLoader, jarLocation, null, false); } - public <T extends DeploymentModule> AppModule(final T module) { + public <T extends DeploymentModule> AppModule(final T... modules) { + final T firstModule = modules[0]; + this.standaloneModule = true; - this.classLoader = module.getClassLoader(); - this.application = new Application(module.getModuleId()); + this.classLoader = firstModule.getClassLoader(); + this.application = new Application(firstModule.getModuleId()); - this.id = new ID(null, application, null, module.getFile(), module.getModuleUri(), this); + this.id = new ID(null, application, null, firstModule.getFile(), firstModule.getModuleUri(), this); this.validation = new ValidationContext(this); - final Class<? extends DeploymentModule> type = module.getClass(); + for (final T module : modules) { + final Class<? extends DeploymentModule> type = module.getClass(); - if (type == EjbModule.class) { - getEjbModules().add((EjbModule) module); - } else if (type == ClientModule.class) { - getClientModules().add((ClientModule) module); - } else if (type == ConnectorModule.class) { - getConnectorModules().add((ConnectorModule) module); - } else if (type == WebModule.class) { - getWebModules().add((WebModule) module); - } else if (type == PersistenceModule.class) { - addPersistenceModule((PersistenceModule) module); - } else { - throw new IllegalArgumentException("Unknown module type: " + type.getName()); + if (type == EjbModule.class) { + getEjbModules().add((EjbModule) module); + } else if (type == ClientModule.class) { + getClientModules().add((ClientModule) module); + } else if (type == ConnectorModule.class) { + getConnectorModules().add((ConnectorModule) module); + } else if (type == WebModule.class) { + getWebModules().add((WebModule) module); + } else if (type == PersistenceModule.class) { + addPersistenceModule((PersistenceModule) module); + } else { + throw new IllegalArgumentException("Unknown module type: " + type.getName()); + } } } 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=1526142&r1=1526141&r2=1526142&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 Wed Sep 25 09:27:03 2013 @@ -1366,9 +1366,14 @@ public class AutoConfig implements Dynam if (!resourceLocal) { required.put("JtaManaged", "true"); jtaDataSourceId = findResourceId(prefix + replaceJavaAndSlash(unit.getJtaDataSource()), "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); + } + /* this shouldn't be mandatory anymore since our DataSource has as alias javax.sql.DataSource if (jtaDataSourceId == null) { jtaDataSourceId = findResourceId(replaceJavaAndSlash(unit.getJtaDataSource()), "DataSource", required, null); } + */ } required.put("JtaManaged", "false"); Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java?rev=1526142&r1=1526141&r2=1526142&view=diff ============================================================================== --- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java (original) +++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java Wed Sep 25 09:27:03 2013 @@ -185,8 +185,28 @@ public class DeploymentLoader implements final String jarLocation = URLs.toFilePath(baseUrl); final ConnectorModule connectorModule = createConnectorModule(jarLocation, jarLocation, getOpenEJBClassLoader(), null); + final List<ConnectorModule> connectorModules = new ArrayList<ConnectorModule>(); + + // let it be able to deploy the same connector several times + final String id = connectorModule.getModuleId(); + if (!"true".equalsIgnoreCase(SystemInstance.get().getProperty("openejb.connector." + id + ".skip-default", "false"))) { + connectorModules.add(connectorModule); + } + + final String aliases = SystemInstance.get().getProperty("openejb.connector." + id + ".aliases"); + if (aliases != null) { + for (final String alias : aliases.split(",")) { + final ConnectorModule aliasModule = createConnectorModule(jarLocation, jarLocation, getOpenEJBClassLoader(), alias); + connectorModules.add(aliasModule); + } + } + + + // Wrap the resource module with an Application Module - return new AppModule(connectorModule); + final AppModule appModule = new AppModule(connectorModules.toArray(new ConnectorModule[connectorModules.size()])); + + return appModule; } if (WebModule.class.equals(moduleClass)) { Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ServiceUtils.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ServiceUtils.java?rev=1526142&r1=1526141&r2=1526142&view=diff ============================================================================== --- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ServiceUtils.java (original) +++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ServiceUtils.java Wed Sep 25 09:27:03 2013 @@ -160,7 +160,11 @@ public class ServiceUtils { return null; } - public static boolean implies(Properties required, Properties available){ + public static boolean implies(Properties required, Properties available) { + if (available.containsKey("openejb.connector")) { // created from a connector so our JtaManaged etc can't be used + return true; + } + for (Map.Entry<Object, Object> entry : required.entrySet()) { Object value = available.get(entry.getKey());