You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2008/10/27 12:02:35 UTC

svn commit: r708133 - in /servicemix/components/shared-libraries/trunk/servicemix-common/src: main/java/org/apache/servicemix/common/xbean/ClassLoaderXmlPreprocessor.java test/java/org/apache/servicemix/common/xbean/XBeanDeployerTest.java

Author: gnodet
Date: Mon Oct 27 04:02:35 2008
New Revision: 708133

URL: http://svn.apache.org/viewvc?rev=708133&view=rev
Log:
SM-1662: When deployed in smx4, the JBI SUs do not have access to the whole JRE

Modified:
    servicemix/components/shared-libraries/trunk/servicemix-common/src/main/java/org/apache/servicemix/common/xbean/ClassLoaderXmlPreprocessor.java
    servicemix/components/shared-libraries/trunk/servicemix-common/src/test/java/org/apache/servicemix/common/xbean/XBeanDeployerTest.java

Modified: servicemix/components/shared-libraries/trunk/servicemix-common/src/main/java/org/apache/servicemix/common/xbean/ClassLoaderXmlPreprocessor.java
URL: http://svn.apache.org/viewvc/servicemix/components/shared-libraries/trunk/servicemix-common/src/main/java/org/apache/servicemix/common/xbean/ClassLoaderXmlPreprocessor.java?rev=708133&r1=708132&r2=708133&view=diff
==============================================================================
--- servicemix/components/shared-libraries/trunk/servicemix-common/src/main/java/org/apache/servicemix/common/xbean/ClassLoaderXmlPreprocessor.java (original)
+++ servicemix/components/shared-libraries/trunk/servicemix-common/src/main/java/org/apache/servicemix/common/xbean/ClassLoaderXmlPreprocessor.java Mon Oct 27 04:02:35 2008
@@ -190,7 +190,7 @@
                 sls.add(library);
             }
             if (sls.size() > 0 && component.getContainer().getType() != Container.Type.ServiceMix3) {
-                throw new IllegalStateException("Can not reference shared libraries if the component is not deployed in ServiceMix");
+                throw new IllegalStateException("Can not reference shared libraries if the component is not deployed in ServiceMix 3");
             }
 
             // Add components
@@ -202,7 +202,7 @@
                 components.add(component);
             }
             if (components.size() > 0 && component.getContainer().getType() != Container.Type.ServiceMix3) {
-                throw new IllegalStateException("Can not reference other components if the component is not deployed in ServiceMix");
+                throw new IllegalStateException("Can not reference other components if the component is not deployed in ServiceMix 3");
             }
 
             // convert the paths to URLS
@@ -221,7 +221,7 @@
                 urls = getDefaultLocations();
             }
 
-            // create the classloader
+            // populate the list of parent classloaders
             List<ClassLoader> parents = new ArrayList<ClassLoader>();
             parents.add(getParentClassLoader(applicationContext));
             for (String library : sls) {
@@ -238,6 +238,12 @@
                 }
                 parents.add(cl);
             }
+            // In smx4, add the system classloader as a parent so that the whole JRE classes are available
+            // to the SU, and not only the packages used by the components themselves
+            if (component.getContainer().getType() == Container.Type.ServiceMix4) {
+                parents.add(ClassLoader.getSystemClassLoader());
+            }
+            // now actually create the classloader
             classLoader = new JarFileClassLoader(applicationContext.getDisplayName(),
                                                  urls, 
                                                  parents.toArray(new ClassLoader[parents.size()]),

Modified: servicemix/components/shared-libraries/trunk/servicemix-common/src/test/java/org/apache/servicemix/common/xbean/XBeanDeployerTest.java
URL: http://svn.apache.org/viewvc/servicemix/components/shared-libraries/trunk/servicemix-common/src/test/java/org/apache/servicemix/common/xbean/XBeanDeployerTest.java?rev=708133&r1=708132&r2=708133&view=diff
==============================================================================
--- servicemix/components/shared-libraries/trunk/servicemix-common/src/test/java/org/apache/servicemix/common/xbean/XBeanDeployerTest.java (original)
+++ servicemix/components/shared-libraries/trunk/servicemix-common/src/test/java/org/apache/servicemix/common/xbean/XBeanDeployerTest.java Mon Oct 27 04:02:35 2008
@@ -22,6 +22,7 @@
 import org.apache.servicemix.common.ServiceUnit;
 import org.apache.servicemix.common.ServiceMixComponent;
 import org.apache.servicemix.common.DefaultComponent;
+import org.apache.servicemix.common.Container;
 import org.apache.xbean.classloader.JarFileClassLoader;
 
 import junit.framework.TestCase;
@@ -37,7 +38,7 @@
     }
     
     public void testDeployWithProperties() throws Exception {
-        MyXBeanDeployer deployer = new MyXBeanDeployer(new DefaultComponent());
+        MyXBeanDeployer deployer = new MyXBeanDeployer(new MyComponent());
         ServiceUnit su = deployer.deploy("xbean", getServiceUnitPath("xbean"));
         assertNotNull(su);
         assertEquals(1, su.getEndpoints().size());
@@ -46,7 +47,7 @@
     }
     
     public void testDeployWithClasspathXml() throws Exception {
-        MyXBeanDeployer deployer = new MyXBeanDeployer(new DefaultComponent() { });
+        MyXBeanDeployer deployer = new MyXBeanDeployer(new MyComponent() { });
         ServiceUnit su = deployer.deploy("xbean-cp", getServiceUnitPath("xbean-cp"));
         assertNotNull(su);
         ClassLoader cl = su.getConfigurationClassLoader();
@@ -57,7 +58,7 @@
     }
     
     public void testDeployWithInlineClasspath() throws Exception {
-        MyXBeanDeployer deployer = new MyXBeanDeployer(new DefaultComponent() { });
+        MyXBeanDeployer deployer = new MyXBeanDeployer(new MyComponent() { });
         ServiceUnit su = deployer.deploy("xbean-inline", getServiceUnitPath("xbean-inline"));
         assertNotNull(su);
         ClassLoader cl = su.getConfigurationClassLoader();
@@ -68,7 +69,7 @@
     }
     
     public void testDeployWithDefaultClasspath() throws Exception {
-        MyXBeanDeployer deployer = new MyXBeanDeployer(new DefaultComponent() { });
+        MyXBeanDeployer deployer = new MyXBeanDeployer(new MyComponent() { });
         ServiceUnit su = deployer.deploy("xbean-lib", getServiceUnitPath("xbean-lib"));
         assertNotNull(su);
         ClassLoader cl = su.getConfigurationClassLoader();
@@ -85,6 +86,15 @@
         }
         
     }
+
+
+    protected static class MyComponent extends DefaultComponent {
+        public MyComponent() {
+            this.container = new Container.Smx3Container(null);
+        }
+    }
+
+
     
     protected String getServiceUnitPath(String name) {
         URL url = getClass().getClassLoader().getResource(name + "/xbean.xml");