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 2011/12/21 16:00:51 UTC

svn commit: r1221754 - in /openejb/trunk/openejb/container/openejb-osgi/src/main: java/org/apache/openejb/core/osgi/impl/ resources/META-INF/org.apache.openejb/ resources/META-INF/services/org/apache/activemq/broker/

Author: rmannibucau
Date: Wed Dec 21 15:00:50 2011
New Revision: 1221754

URL: http://svn.apache.org/viewvc?rev=1221754&view=rev
Log:
using openejb bundle  as fallback classloader to be able to get services in OSGi

Removed:
    openejb/trunk/openejb/container/openejb-osgi/src/main/resources/META-INF/org.apache.openejb/
    openejb/trunk/openejb/container/openejb-osgi/src/main/resources/META-INF/services/org/apache/activemq/broker/
Modified:
    openejb/trunk/openejb/container/openejb-osgi/src/main/java/org/apache/openejb/core/osgi/impl/Activator.java
    openejb/trunk/openejb/container/openejb-osgi/src/main/java/org/apache/openejb/core/osgi/impl/Deployer.java

Modified: openejb/trunk/openejb/container/openejb-osgi/src/main/java/org/apache/openejb/core/osgi/impl/Activator.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-osgi/src/main/java/org/apache/openejb/core/osgi/impl/Activator.java?rev=1221754&r1=1221753&r2=1221754&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-osgi/src/main/java/org/apache/openejb/core/osgi/impl/Activator.java (original)
+++ openejb/trunk/openejb/container/openejb-osgi/src/main/java/org/apache/openejb/core/osgi/impl/Activator.java Wed Dec 21 15:00:50 2011
@@ -36,7 +36,7 @@ import java.util.Properties;
 public class Activator implements BundleActivator {
     private static final Logger LOGGER = LoggerFactory.getLogger(Activator.class);
     private static final String SERVICE_MANAGER_NAME = "org.apache.openejb.server.ServiceManager";
-    private static final long TRACKER_TIMEOUT = 60000;
+    private static final long TRACKER_TIMEOUT = Integer.getInteger("openejb.osgi.tracker.timeout", 60000);
 
     private OpenEJBInstance openejb;
     private Object serviceManager;
@@ -79,7 +79,7 @@ public class Activator implements Bundle
         } catch (InterruptedException ie) {
             LOGGER.warn("can't find service manager");
         } catch (Exception e) {
-            LOGGER.error("can't start OpenEJB services", e);
+            LOGGER.error("can't start OpenEJB services");
         } finally {
             if (serviceManagerTracker != null) {
                 serviceManagerTracker.close();
@@ -87,7 +87,7 @@ public class Activator implements Bundle
         }
 
         LOGGER.info("Registering OSGified OpenEJB Deployer");
-        context.addBundleListener(new Deployer());
+        context.addBundleListener(new Deployer(context.getBundle()));
     }
 
     private static ServiceTracker getServiceManger(BundleContext context) throws InterruptedException {

Modified: openejb/trunk/openejb/container/openejb-osgi/src/main/java/org/apache/openejb/core/osgi/impl/Deployer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-osgi/src/main/java/org/apache/openejb/core/osgi/impl/Deployer.java?rev=1221754&r1=1221753&r2=1221754&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-osgi/src/main/java/org/apache/openejb/core/osgi/impl/Deployer.java (original)
+++ openejb/trunk/openejb/container/openejb-osgi/src/main/java/org/apache/openejb/core/osgi/impl/Deployer.java Wed Dec 21 15:00:50 2011
@@ -57,6 +57,12 @@ public class Deployer implements BundleL
     private Map<Bundle, List<ServiceRegistration>> registrations = new ConcurrentHashMap<Bundle, List<ServiceRegistration>>();
     private Map<Bundle, AppContext> appContexts = new ConcurrentHashMap<Bundle, AppContext>();
 
+    private final Bundle openejbBundle;
+
+    public Deployer(Bundle classLoader) {
+        openejbBundle = classLoader;
+    }
+
     public void bundleChanged(BundleEvent event) {
         switch (event.getType()) {
             case BundleEvent.STARTED:
@@ -77,7 +83,7 @@ public class Deployer implements BundleL
 
     private void deploy(Bundle bundle) {
         final ClassLoader oldCl = Thread.currentThread().getContextClassLoader();
-        final ClassLoader osgiCl = new OSGIClassLoader(bundle);
+        final ClassLoader osgiCl = new OSGIClassLoader(bundle, openejbBundle);
         Thread.currentThread().setContextClassLoader(osgiCl);
 
         try {
@@ -235,14 +241,22 @@ public class Deployer implements BundleL
 
     private static class OSGIClassLoader extends ClassLoader {
         private final Bundle backingBundle;
+        private final Bundle fallbackBundle;
 
-        public OSGIClassLoader(Bundle bundle) {
+        public OSGIClassLoader(Bundle bundle, Bundle openejbClassloader) {
             super(null);
             backingBundle = bundle;
+            fallbackBundle = openejbClassloader;
         }
 
         protected Class findClass(String name) throws ClassNotFoundException {
             try {
+                return fallbackBundle.loadClass(name);
+            } catch (Exception ignored) {
+                // no-op
+            }
+
+            try {
                 return this.backingBundle.loadClass(name);
             } catch (ClassNotFoundException cnfe) {
                 throw new ClassNotFoundException(name + " not found from bundle [" + backingBundle.getSymbolicName() + "]", cnfe);
@@ -254,10 +268,22 @@ public class Deployer implements BundleL
         }
 
         protected URL findResource(String name) {
+            URL url = fallbackBundle.getResource(name);
+            if (url != null) {
+                return url;
+            }
             return backingBundle.getResource(name);
         }
 
         protected Enumeration findResources(String name) throws IOException {
+            try {
+                Enumeration<URL> urls = fallbackBundle.getResources(name);
+                if (urls != null && urls.hasMoreElements()) {
+                    return urls;
+                }
+            } catch (IOException ignored) {
+                // no-op
+            }
             return backingBundle.getResources(name);
         }