Author: rmannibucau
Date: Fri Dec 23 16:49:59 2011
New Revision: 1222746
URL: http://svn.apache.org/viewvc?rev=1222746&view=rev
Log:
copying the reconcialte classloder from openejb core jdkproxyfactory to the
openejb client one (should a specific module be created?) and updating
simple-osgi remote client test (from OSGi to a standard standalone openejb
server))
Added:
openejb/trunk/openejb/examples/simple-osgi/simple-osgi-remote-client/src/main/java/org/superbiz/calculator/client/
openejb/trunk/openejb/examples/simple-osgi/simple-osgi-remote-client/src/main/java/org/superbiz/calculator/client/ClientUtil.java
openejb/trunk/openejb/examples/simple-osgi/simple-osgi-remote-client/src/main/java/org/superbiz/calculator/client/RemoteClientActivator.java
openejb/trunk/openejb/examples/simple-osgi/simple-osgi-remote-client/src/main/java/org/superbiz/calculator/client/RemoteClientMain.java
openejb/trunk/openejb/examples/simple-osgi/standard-ejbd-server/
openejb/trunk/openejb/examples/simple-osgi/standard-ejbd-server/pom.xml
openejb/trunk/openejb/examples/simple-osgi/standard-ejbd-server/src/
openejb/trunk/openejb/examples/simple-osgi/standard-ejbd-server/src/main/
openejb/trunk/openejb/examples/simple-osgi/standard-ejbd-server/src/main/java/
openejb/trunk/openejb/examples/simple-osgi/standard-ejbd-server/src/main/java/org/
openejb/trunk/openejb/examples/simple-osgi/standard-ejbd-server/src/main/java/org/superbiz/
openejb/trunk/openejb/examples/simple-osgi/standard-ejbd-server/src/main/java/org/superbiz/StandardEjbdServer.java
Removed:
openejb/trunk/openejb/examples/simple-osgi/simple-osgi-remote-client/src/main/java/org/superbiz/calculator/RemoteClientMain.java
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/Jdk13ProxyFactory.java
openejb/trunk/openejb/examples/simple-osgi/pom.xml
openejb/trunk/openejb/examples/simple-osgi/simple-osgi-remote-client/pom.xml
openejb/trunk/openejb/examples/simple-osgi/simple-osgi-service-injection/pom.xml
openejb/trunk/openejb/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectHandler.java
openejb/trunk/openejb/server/openejb-client/src/main/java/org/apache/openejb/client/proxy/Jdk13ProxyFactory.java
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/Jdk13ProxyFactory.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/Jdk13ProxyFactory.java?rev=1222746&r1=1222745&r2=1222746&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/Jdk13ProxyFactory.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/Jdk13ProxyFactory.java
Fri Dec 23 16:49:59 2011
@@ -63,7 +63,17 @@ public class Jdk13ProxyFactory implement
* the specified invocation handler.
*/
public Object newProxyInstance(Class interfce,
org.apache.openejb.util.proxy.InvocationHandler h) throws
IllegalArgumentException {
- return Proxy.newProxyInstance(interfce.getClassLoader(), new
Class[]{interfce}, h);
+ try {
+ return Proxy.newProxyInstance(interfce.getClassLoader(), new
Class[]{ interfce }, h);
+ } catch (IllegalArgumentException iae) {
+ final ClassLoader reconciliatedCl = reconciliate(interfce);
+ try {
+ reconciliatedCl.loadClass(interfce.getName());
+ return Proxy.newProxyInstance(reconciliatedCl, new Class[]{
interfce }, h);
+ } catch (ClassNotFoundException e2) {
+ throw iae;
+ }
+ }
}
/*
@@ -102,7 +112,7 @@ public class Jdk13ProxyFactory implement
}
}
- private static ClassLoader reconciliate(Class[] interfaces) {
+ private static ClassLoader reconciliate(Class<?>... interfaces) {
Set<ClassLoader> classloaders = new LinkedHashSet<ClassLoader>();
for (Class<?> clazz : interfaces) {
classloaders.add(clazz.getClassLoader());
Modified: openejb/trunk/openejb/examples/simple-osgi/pom.xml
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/examples/simple-osgi/pom.xml?rev=1222746&r1=1222745&r2=1222746&view=diff
==============================================================================
--- openejb/trunk/openejb/examples/simple-osgi/pom.xml (original)
+++ openejb/trunk/openejb/examples/simple-osgi/pom.xml Fri Dec 23 16:49:59 2011
@@ -32,6 +32,7 @@
<module>simple-osgi-remote-client</module>
<module>simple-osgi-local-lookup-client</module>
<module>simple-osgi-service-injection</module>
+ <module>standard-ejbd-server</module>
</modules>
<name>OpenEJB :: Examples :: Simple OSGi Stateless Pojo</name>
<properties>
@@ -94,6 +95,12 @@
<version>4.0.0-beta-2-SNAPSHOT</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.osgi.core</artifactId>
+ <version>1.0.0</version>
+ <scope>provided</scope>
+ </dependency>
</dependencies>
</dependencyManagement>
Modified:
openejb/trunk/openejb/examples/simple-osgi/simple-osgi-remote-client/pom.xml
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/examples/simple-osgi/simple-osgi-remote-client/pom.xml?rev=1222746&r1=1222745&r2=1222746&view=diff
==============================================================================
---
openejb/trunk/openejb/examples/simple-osgi/simple-osgi-remote-client/pom.xml
(original)
+++
openejb/trunk/openejb/examples/simple-osgi/simple-osgi-remote-client/pom.xml
Fri Dec 23 16:49:59 2011
@@ -11,6 +11,7 @@
<artifactId>simple-osgi-remote-client</artifactId>
<name>OpenEJB :: Examples :: Simple OSGi Stateless Pojo :: Remote
Client</name>
+ <packaging>bundle</packaging>
<dependencies>
<!-- using scope compile to simplify the exec plugin usage -->
@@ -29,6 +30,10 @@
<artifactId>simple-osgi-api</artifactId>
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.osgi.core</artifactId>
+ </dependency>
</dependencies>
<build>
@@ -45,7 +50,17 @@
</execution>
</executions>
<configuration>
- <mainClass>org.superbiz.calculator.RemoteClientMain</mainClass>
+
<mainClass>org.superbiz.calculator.client.RemoteClientMain</mainClass>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <configuration>
+ <instructions>
+ <Import-Package>*</Import-Package>
+
<Bundle-Activator>org.superbiz.calculator.client.RemoteClientActivator</Bundle-Activator>
+ </instructions>
</configuration>
</plugin>
</plugins>
Added:
openejb/trunk/openejb/examples/simple-osgi/simple-osgi-remote-client/src/main/java/org/superbiz/calculator/client/ClientUtil.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/examples/simple-osgi/simple-osgi-remote-client/src/main/java/org/superbiz/calculator/client/ClientUtil.java?rev=1222746&view=auto
==============================================================================
---
openejb/trunk/openejb/examples/simple-osgi/simple-osgi-remote-client/src/main/java/org/superbiz/calculator/client/ClientUtil.java
(added)
+++
openejb/trunk/openejb/examples/simple-osgi/simple-osgi-remote-client/src/main/java/org/superbiz/calculator/client/ClientUtil.java
Fri Dec 23 16:49:59 2011
@@ -0,0 +1,23 @@
+package org.superbiz.calculator.client;
+
+import org.apache.openejb.client.RemoteInitialContextFactory;
+import org.superbiz.osgi.calculator.CalculatorRemote;
+
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import java.util.Properties;
+
+public final class ClientUtil {
+ private ClientUtil() {
+ // no-op
+ }
+
+ public static void invoke() throws Exception {
+ final Properties properties = new Properties();
+ properties.setProperty(Context.INITIAL_CONTEXT_FACTORY,
RemoteInitialContextFactory.class.getName());
+ properties.setProperty(Context.PROVIDER_URL, "ejbd://localhost:4201");
+ Context remoteContext = new InitialContext(properties);
+ CalculatorRemote calculator = (CalculatorRemote)
remoteContext.lookup("CalculatorBeanRemote");
+ System.out.println("Server answered: " + calculator.sayHello());
+ }
+}
Added:
openejb/trunk/openejb/examples/simple-osgi/simple-osgi-remote-client/src/main/java/org/superbiz/calculator/client/RemoteClientActivator.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/examples/simple-osgi/simple-osgi-remote-client/src/main/java/org/superbiz/calculator/client/RemoteClientActivator.java?rev=1222746&view=auto
==============================================================================
---
openejb/trunk/openejb/examples/simple-osgi/simple-osgi-remote-client/src/main/java/org/superbiz/calculator/client/RemoteClientActivator.java
(added)
+++
openejb/trunk/openejb/examples/simple-osgi/simple-osgi-remote-client/src/main/java/org/superbiz/calculator/client/RemoteClientActivator.java
Fri Dec 23 16:49:59 2011
@@ -0,0 +1,26 @@
+package org.superbiz.calculator.client;
+
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+public class RemoteClientActivator implements BundleActivator {
+ @Override
+ public void start(BundleContext bundleContext) throws Exception {
+ final ClassLoader oldCl =
Thread.currentThread().getContextClassLoader();
+ // set the bundle classloader to avoid to go back to AppClassloader
and not found imported classes
+
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
+ try {
+ ClientUtil.invoke();
+ } catch (Exception e) {
+ System.out.println("error: " + e.getMessage());
+ } finally {
+ Thread.currentThread().setContextClassLoader(oldCl);
+ }
+ }
+
+ @Override
+ public void stop(BundleContext bundleContext) throws Exception {
+ // no-op
+ }
+}
Added:
openejb/trunk/openejb/examples/simple-osgi/simple-osgi-remote-client/src/main/java/org/superbiz/calculator/client/RemoteClientMain.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/examples/simple-osgi/simple-osgi-remote-client/src/main/java/org/superbiz/calculator/client/RemoteClientMain.java?rev=1222746&view=auto
==============================================================================
---
openejb/trunk/openejb/examples/simple-osgi/simple-osgi-remote-client/src/main/java/org/superbiz/calculator/client/RemoteClientMain.java
(added)
+++
openejb/trunk/openejb/examples/simple-osgi/simple-osgi-remote-client/src/main/java/org/superbiz/calculator/client/RemoteClientMain.java
Fri Dec 23 16:49:59 2011
@@ -0,0 +1,11 @@
+package org.superbiz.calculator.client;
+
+public final class RemoteClientMain {
+ private RemoteClientMain() {
+ // no-op
+ }
+
+ public static void main(String[] args) throws Exception {
+ ClientUtil.invoke();
+ }
+}
Modified:
openejb/trunk/openejb/examples/simple-osgi/simple-osgi-service-injection/pom.xml
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/examples/simple-osgi/simple-osgi-service-injection/pom.xml?rev=1222746&r1=1222745&r2=1222746&view=diff
==============================================================================
---
openejb/trunk/openejb/examples/simple-osgi/simple-osgi-service-injection/pom.xml
(original)
+++
openejb/trunk/openejb/examples/simple-osgi/simple-osgi-service-injection/pom.xml
Fri Dec 23 16:49:59 2011
@@ -21,7 +21,6 @@
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.osgi.core</artifactId>
- <version>1.0.0</version>
</dependency>
</dependencies>
Added: openejb/trunk/openejb/examples/simple-osgi/standard-ejbd-server/pom.xml
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/examples/simple-osgi/standard-ejbd-server/pom.xml?rev=1222746&view=auto
==============================================================================
--- openejb/trunk/openejb/examples/simple-osgi/standard-ejbd-server/pom.xml
(added)
+++ openejb/trunk/openejb/examples/simple-osgi/standard-ejbd-server/pom.xml Fri
Dec 23 16:49:59 2011
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <parent>
+ <artifactId>simple-osgi</artifactId>
+ <groupId>org.superbiz</groupId>
+ <version>1.1-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>standard-ejbd-server</artifactId>
+ <name>OpenEJB :: Examples :: Simple OSGi Stateless Pojo :: Standard
Server</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.openejb</groupId>
+ <artifactId>javaee-api</artifactId>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.openejb</groupId>
+ <artifactId>openejb-core</artifactId>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.openejb</groupId>
+ <artifactId>openejb-ejbd</artifactId>
+ <version>4.0.0-beta-2-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>simple-osgi-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>simple-osgi-core</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>exec-maven-plugin</artifactId>
+ <version>1.2.1</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>java</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <mainClass>org.superbiz.StandardEjbdServer</mainClass>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
Added:
openejb/trunk/openejb/examples/simple-osgi/standard-ejbd-server/src/main/java/org/superbiz/StandardEjbdServer.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/examples/simple-osgi/standard-ejbd-server/src/main/java/org/superbiz/StandardEjbdServer.java?rev=1222746&view=auto
==============================================================================
---
openejb/trunk/openejb/examples/simple-osgi/standard-ejbd-server/src/main/java/org/superbiz/StandardEjbdServer.java
(added)
+++
openejb/trunk/openejb/examples/simple-osgi/standard-ejbd-server/src/main/java/org/superbiz/StandardEjbdServer.java
Fri Dec 23 16:49:59 2011
@@ -0,0 +1,33 @@
+package org.superbiz;
+
+import org.apache.openejb.OpenEjbContainer;
+import org.apache.openejb.localclient.LocalInitialContextFactory;
+
+import javax.ejb.embeddable.EJBContainer;
+import javax.naming.Context;
+import java.util.Properties;
+import java.util.concurrent.CountDownLatch;
+
+public final class StandardEjbdServer {
+ private StandardEjbdServer() {
+ // no-op
+ }
+
+ public static void main(String[] args) throws Exception {
+ final Properties properties = new Properties();
+ properties.setProperty(Context.INITIAL_CONTEXT_FACTORY,
LocalInitialContextFactory.class.getName());
+ properties.setProperty(OpenEjbContainer.OPENEJB_EMBEDDED_REMOTABLE,
Boolean.TRUE.toString());
+ final EJBContainer container =
EJBContainer.createEJBContainer(properties);
+ final CountDownLatch latch = new CountDownLatch(1);
+
+ Runtime.getRuntime().addShutdownHook(new Thread() {
+ @Override
+ public void run() {
+ latch.countDown();
+ container.close();
+ }
+ });
+
+ latch.await();
+ }
+}
Modified:
openejb/trunk/openejb/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectHandler.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectHandler.java?rev=1222746&r1=1222745&r2=1222746&view=diff
==============================================================================
---
openejb/trunk/openejb/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectHandler.java
(original)
+++
openejb/trunk/openejb/server/openejb-client/src/main/java/org/apache/openejb/client/EJBObjectHandler.java
Fri Dec 23 16:49:59 2011
@@ -131,8 +131,15 @@ public abstract class EJBObjectHandler e
interfaces.addAll(ejb.businessClasses);
}
interfaces.add(EJBObjectProxy.class);
- ejbObject = (EJBObjectProxy)
ProxyManager.newProxyInstance(interfaces.toArray(new Class[]{}), this);
+ ClassLoader oldCl = Thread.currentThread().getContextClassLoader();
+ if (oldCl != getClass().getClassLoader()) {
+
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
+ }
+ ejbObject = (EJBObjectProxy)
ProxyManager.newProxyInstance(interfaces.toArray(new Class[interfaces.size()]),
this);
+ if (oldCl != getClass().getClassLoader()) {
+
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
+ }
} catch (IllegalAccessException e) {
e.printStackTrace();
Modified:
openejb/trunk/openejb/server/openejb-client/src/main/java/org/apache/openejb/client/proxy/Jdk13ProxyFactory.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-client/src/main/java/org/apache/openejb/client/proxy/Jdk13ProxyFactory.java?rev=1222746&r1=1222745&r2=1222746&view=diff
==============================================================================
---
openejb/trunk/openejb/server/openejb-client/src/main/java/org/apache/openejb/client/proxy/Jdk13ProxyFactory.java
(original)
+++
openejb/trunk/openejb/server/openejb-client/src/main/java/org/apache/openejb/client/proxy/Jdk13ProxyFactory.java
Fri Dec 23 16:49:59 2011
@@ -19,7 +19,9 @@ package org.apache.openejb.client.proxy;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Proxy;
+import java.util.LinkedHashSet;
import java.util.Properties;
+import java.util.Set;
public class Jdk13ProxyFactory implements ProxyFactory {
@@ -114,7 +116,47 @@ public class Jdk13ProxyFactory implement
}
Jdk13InvocationHandler handler = new Jdk13InvocationHandler(h);
+ try {
+ return Proxy.newProxyInstance(interfaces[0].getClassLoader(),
interfaces, handler);
+ } catch (IllegalArgumentException iae) {
+ final ClassLoader reconciliatedCl = reconciliate(interfaces);
+ try {
+ reconciliatedCl.loadClass(interfaces[0].getName());
+ return Proxy.newProxyInstance(reconciliatedCl, interfaces,
handler);
+ } catch (ClassNotFoundException e2) {
+ throw iae;
+ }
+ }
+ }
- return Proxy.newProxyInstance(interfaces[0].getClassLoader(),
interfaces, handler);
+ private static ClassLoader reconciliate(Class<?>... interfaces) {
+ final Set<ClassLoader> classloaders = new LinkedHashSet<ClassLoader>();
+ for (Class<?> clazz : interfaces) {
+ classloaders.add(clazz.getClassLoader());
+ }
+ return new MultipleClassLoadersClassLoader(classloaders.toArray(new
ClassLoader[classloaders.size()]));
+ }
+
+ private static class MultipleClassLoadersClassLoader extends ClassLoader {
+ private ClassLoader[] delegatingClassloaders;
+
+ public MultipleClassLoadersClassLoader(final ClassLoader[]
classLoaders) {
+ super(classLoaders[0]);
+ delegatingClassloaders = classLoaders;
+ }
+
+ @Override public Class<?> loadClass(String name) throws
ClassNotFoundException {
+ ClassNotFoundException ex = null;
+ for (ClassLoader cl : delegatingClassloaders) {
+ try {
+ return cl.loadClass(name);
+ } catch (ClassNotFoundException cnfe) {
+ if (ex == null) {
+ ex = cnfe;
+ }
+ }
+ }
+ throw ex;
+ }
}
}