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/11/28 12:36:44 UTC

[2/3] tomee git commit: merging app properties and resources.xml services to be able to use them later

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 <rm...@apache.org>
Authored: Fri Nov 28 12:14:26 2014 +0100
Committer: Romain Manni-Bucau <rm...@apache.org>
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() +