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);
         }
 


Reply via email to