You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by an...@apache.org on 2010/01/12 15:12:11 UTC

svn commit: r898334 - /tuscany/sca-java-2.x/trunk/distribution/tomcat/tomcat-hook/src/main/java/org/apache/tuscany/sca/tomcat/TuscanyStandardContext.java

Author: antelder
Date: Tue Jan 12 14:12:11 2010
New Revision: 898334

URL: http://svn.apache.org/viewvc?rev=898334&view=rev
Log:
Start an empty node to initialize the endpoint regsitry before any sca apps are started

Modified:
    tuscany/sca-java-2.x/trunk/distribution/tomcat/tomcat-hook/src/main/java/org/apache/tuscany/sca/tomcat/TuscanyStandardContext.java

Modified: tuscany/sca-java-2.x/trunk/distribution/tomcat/tomcat-hook/src/main/java/org/apache/tuscany/sca/tomcat/TuscanyStandardContext.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/distribution/tomcat/tomcat-hook/src/main/java/org/apache/tuscany/sca/tomcat/TuscanyStandardContext.java?rev=898334&r1=898333&r2=898334&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/distribution/tomcat/tomcat-hook/src/main/java/org/apache/tuscany/sca/tomcat/TuscanyStandardContext.java (original)
+++ tuscany/sca-java-2.x/trunk/distribution/tomcat/tomcat-hook/src/main/java/org/apache/tuscany/sca/tomcat/TuscanyStandardContext.java Tue Jan 12 14:12:11 2010
@@ -20,6 +20,7 @@
 package org.apache.tuscany.sca.tomcat;
 
 import java.io.File;
+import java.lang.reflect.Constructor;
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.util.logging.Logger;
@@ -47,6 +48,9 @@
     // ?? is that comment still true?
     private static URLClassLoader tuscanyClassLoader;
 
+    public TuscanyStandardContext() {
+    }
+    
     /**
      * Overrides the getLoader method in the Tomcat StandardContext as its a convenient
      * point to insert the Tuscany initilization. This gets called the first time during
@@ -62,6 +66,9 @@
 
         ClassLoader parent = getParentClassLoader();
         if (isSCAApp = isSCAApplication()) {
+            if (tuscanyClassLoader == null) {
+                initTuscany();
+            }
             setParentClassLoader(getTuscanyClassloader(parent));
             setDefaultWebXml("conf/tuscany-web.xml");
         }
@@ -121,7 +128,16 @@
         return true;
     }
 
-    private synchronized URLClassLoader getTuscanyClassloader(ClassLoader parent) {
+    private URLClassLoader getTuscanyClassloader(ClassLoader parent) {
+        return tuscanyClassLoader;
+    }
+
+    private void initTuscany() {
+        initTuscanyClassloader(getParentClassLoader());
+        initDomain();
+    }
+    
+    private void initTuscanyClassloader(ClassLoader parent) {
         if (tuscanyClassLoader == null) {
             File tuscanyWar = new File(System.getProperty(TuscanyLifecycleListener.TUSCANY_WAR_PROP));
             File[] runtimeJars = new File(tuscanyWar, "tuscany-lib").listFiles();
@@ -131,12 +147,25 @@
                     jarURLs[i] = runtimeJars[i].toURI().toURL();
                 }
                 tuscanyClassLoader = new URLClassLoader(jarURLs, parent);
-                return tuscanyClassLoader;
+                
             } catch (Exception e) {
                 throw new RuntimeException(e);
             }
         }
-        return tuscanyClassLoader;
+    }
+
+    private void initDomain() {
+        ClassLoader oldCL = Thread.currentThread().getContextClassLoader();
+        try {
+            Thread.currentThread().setContextClassLoader(tuscanyClassLoader);
+            Class<?> domainNodeClass = Class.forName("org.apache.tuscany.sca.domain.node.DomainNode", true, tuscanyClassLoader);
+            Constructor<?> domainNodeConstructor = domainNodeClass.getConstructor(new Class[] {String.class, new String[0].getClass()});
+            domainNodeConstructor.newInstance(TuscanyLifecycleListener.getDomainURI(), new String[0]);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        } finally {
+            Thread.currentThread().setContextClassLoader(oldCL);
+        }
     }
     
 }