You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2013/11/24 09:50:07 UTC
svn commit: r1544946 - in /cayenne/main/trunk/cayenne-server/src:
main/java/org/apache/cayenne/configuration/osgi/
test/java/org/apache/cayenne/configuration/osgi/
Author: aadamchik
Date: Sun Nov 24 08:50:07 2013
New Revision: 1544946
URL: http://svn.apache.org/r1544946
Log:
CAY-1882 Porting to OSGi environment
explicitly setting bundle ClassLoader in OSGi module
Modified:
cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/OsgiModule.java
cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/SplitClassLoaderAdhocObjectFactory.java
cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/osgi/SplitClassLoaderAdhocObjectFactoryTest.java
Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/OsgiModule.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/OsgiModule.java?rev=1544946&r1=1544945&r2=1544946&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/OsgiModule.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/OsgiModule.java Sun Nov 24 08:50:07 2013
@@ -29,8 +29,33 @@ import org.apache.cayenne.di.Module;
*/
public class OsgiModule implements Module {
+ /**
+ * A factory method that creates a new OsgiModule, initialized with any
+ * class from the OSGi bundle that contains Cayenne mapping and persistent
+ * classes. This is likely the the bundle that is calling this method.
+ */
+ public static OsgiModule forProject(Class<?> typeFromProjectBundle) {
+
+ if (typeFromProjectBundle == null) {
+ throw new NullPointerException("Null 'typeFromProjectBundle'");
+ }
+
+ OsgiModule module = new OsgiModule();
+ module.typeFromProjectBundle = typeFromProjectBundle;
+ return module;
+ }
+
+ private Class<?> typeFromProjectBundle;
+
+ private OsgiModule() {
+ }
+
@Override
public void configure(Binder binder) {
- binder.bind(AdhocObjectFactory.class).to(SplitClassLoaderAdhocObjectFactory.class);
+ binder.bind(AdhocObjectFactory.class).toInstance(configureObjectFactory());
+ }
+
+ private AdhocObjectFactory configureObjectFactory() {
+ return new SplitClassLoaderAdhocObjectFactory(typeFromProjectBundle.getClassLoader());
}
}
Modified: cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/SplitClassLoaderAdhocObjectFactory.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/SplitClassLoaderAdhocObjectFactory.java?rev=1544946&r1=1544945&r2=1544946&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/SplitClassLoaderAdhocObjectFactory.java (original)
+++ cayenne/main/trunk/cayenne-server/src/main/java/org/apache/cayenne/configuration/osgi/SplitClassLoaderAdhocObjectFactory.java Sun Nov 24 08:50:07 2013
@@ -32,10 +32,12 @@ public class SplitClassLoaderAdhocObject
private static final String CAYENNE_PACKAGE = "org/apache/cayenne";
private static final String CAYENNE_DI_PACKAGE_SUFFIX = "/di";
+ private ClassLoader applicationClassLoader;
private ClassLoader cayenneServerClassLoader;
private ClassLoader cayenneDiClassLoader;
- public SplitClassLoaderAdhocObjectFactory() {
+ public SplitClassLoaderAdhocObjectFactory(ClassLoader applicationClassLoader) {
+ this.applicationClassLoader = applicationClassLoader;
this.cayenneDiClassLoader = AdhocObjectFactory.class.getClassLoader();
this.cayenneServerClassLoader = SplitClassLoaderAdhocObjectFactory.class.getClassLoader();
}
@@ -58,7 +60,7 @@ public class SplitClassLoaderAdhocObject
}
protected ClassLoader applicationClassLoader(String resourceName) {
- return super.getClassLoader(resourceName);
+ return applicationClassLoader;
}
protected ClassLoader cayenneDiClassLoader() {
Modified: cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/osgi/SplitClassLoaderAdhocObjectFactoryTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/osgi/SplitClassLoaderAdhocObjectFactoryTest.java?rev=1544946&r1=1544945&r2=1544946&view=diff
==============================================================================
--- cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/osgi/SplitClassLoaderAdhocObjectFactoryTest.java (original)
+++ cayenne/main/trunk/cayenne-server/src/test/java/org/apache/cayenne/configuration/osgi/SplitClassLoaderAdhocObjectFactoryTest.java Sun Nov 24 08:50:07 2013
@@ -29,11 +29,7 @@ public class SplitClassLoaderAdhocObject
final ClassLoader diCl = mock(ClassLoader.class);
final ClassLoader serverCl = mock(ClassLoader.class);
- SplitClassLoaderAdhocObjectFactory factory = new SplitClassLoaderAdhocObjectFactory() {
- @Override
- protected ClassLoader applicationClassLoader(String resourceName) {
- return appCl;
- }
+ SplitClassLoaderAdhocObjectFactory factory = new SplitClassLoaderAdhocObjectFactory(appCl) {
@Override
protected ClassLoader cayenneDiClassLoader() {