merging app properties and resources.xml services to be able to use them later
Project: http://git-wip-us.apache.org/repos/asf/tomee/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/0370035e Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/0370035e Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/0370035e Branch: refs/heads/develop Commit: 0370035ec727aaaad34efe85eb42f28088f7eaed Parents: d5cdca8 Author: Romain Manni-Bucau <[email protected]> Authored: Fri Nov 28 12:14:26 2014 +0100 Committer: Romain Manni-Bucau <[email protected]> Committed: Fri Nov 28 12:14:26 2014 +0100 ---------------------------------------------------------------------- .../openejb/assembler/classic/Assembler.java | 36 ++++++++++++++++++++ 1 file changed, 36 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee/blob/0370035e/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java ---------------------------------------------------------------------- diff --git a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java index 71d1be2..cd4d0c5 100644 --- a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java +++ b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java @@ -126,6 +126,7 @@ import org.apache.openejb.util.PropertyPlaceHolderHelper; import org.apache.openejb.util.References; import org.apache.openejb.util.SafeToolkit; import org.apache.openejb.util.SuperProperties; +import org.apache.openejb.util.URISupport; import org.apache.openejb.util.URLs; import org.apache.openejb.util.classloader.ClassLoaderAwareHandler; import org.apache.openejb.util.classloader.URLClassLoaderFirst; @@ -192,6 +193,7 @@ import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.net.MalformedURLException; +import java.net.URISyntaxException; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; @@ -644,6 +646,12 @@ public class Assembler extends AssemblerTool implements org.apache.openejb.spi.A } private AppContext createApplication(final AppInfo appInfo, ClassLoader classLoader, final boolean start) throws OpenEJBException, IOException, NamingException { + try { + mergeServices(appInfo); + } catch (final URISyntaxException e) { + logger.info("Can't merge resources.xml services and appInfo.properties"); + } + // The path is used in the UrlCache, command line deployer, JNDI name templates, tomcat integration and a few other places if (appInfo.appId == null) { throw new IllegalArgumentException("AppInfo.appId cannot be null"); @@ -960,6 +968,34 @@ public class Assembler extends AssemblerTool implements org.apache.openejb.spi.A } } + public static void mergeServices(final AppInfo appInfo) throws URISyntaxException { + // used lazily by JaxWsServiceObjectFactory so merge both to keep same config + // note: we could do the same for resources + for (final ServiceInfo si : appInfo.services) { + if (!appInfo.properties.containsKey(si.id)) { + final Map<String, String> query = new HashMap<>(); + if (si.types != null && !si.types.isEmpty()) { + query.put("type", si.types.iterator().next()); + } + if (si.className != null) { + query.put("class-name", si.className); + } + if (si.factoryMethod != null) { + query.put("factory-name", si.factoryMethod); + } + if (si.constructorArgs != null) { + query.put("constructor", Join.join(",", si.constructorArgs)); + } + appInfo.properties.put(si.id, "new://Service?" + URISupport.createQueryString(query)); + if (si.properties != null) { + for (final String k : si.properties.stringPropertyNames()) { + appInfo.properties.setProperty(si.id + "." + k, si.properties.getProperty(k)); + } + } + } + } + } + private static List<CommonInfoObject> listCommonInfoObjectsForAppInfo(final AppInfo appInfo) { final List<CommonInfoObject> vfs = new ArrayList<CommonInfoObject>( appInfo.clients.size() + appInfo.connectors.size() +
