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