0

I want to encapsulate corba service in to osgi bundle. I am using karaf as osgi container, openorb as orb implementation and blueprint to register osgi service. But when I install my corba feature to karaf, always get ClassNotFound exception. the exception stack like this:

org.omg.CORBA.INITIALIZE: can't instantiate ORB implementation org.openorb.CORBA.ORB
at org.omg.CORBA.ORB.init_orb(Unknown Source)[:1.6.0_32]
at org.omg.CORBA.ORB.init(Unknown Source)[:1.6.0_32]
....
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.6.0_32]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)[:1.6.0_32]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)[:1.6.0_32]
at java.lang.reflect.Method.invoke(Method.java:597)[:1.6.0_32]
at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:226)[10:org.apache.aries.blueprint:0.3.1]
at org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:824)[10:org.apache.aries.blueprint:0.3.1]
at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:636)[10:org.apache.aries.blueprint:0.3.1]
at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:724)[10:org.apache.aries.blueprint:0.3.1]
at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:64)[10:org.apache.aries.blueprint:0.3.1]
at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:219)[10:org.apache.aries.blueprint:0.3.1]
at org.apache.aries.blueprint.container.BlueprintRepository.createAll(BlueprintRepository.java:147)[10:org.apache.aries.blueprint:0.3.1]
at org.apache.aries.blueprint.container.BlueprintContainerImpl.instantiateEagerComponents(BlueprintContainerImpl.java:640)[10:org.apache.aries.blueprint:0.3.1]
at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:331)[10:org.apache.aries.blueprint:0.3.1]
at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:227)[10:org.apache.aries.blueprint:0.3.1]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)[:1.6.0_32]
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)[:1.6.0_32]
at java.util.concurrent.FutureTask.run(FutureTask.java:138)[:1.6.0_32]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98)[:1.6.0_32]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206)[:1.6.0_32]
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)[:1.6.0_32]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)[:1.6.0_32]
at java.lang.Thread.run(Thread.java:662)[:1.6.0_32]
Caused by: java.lang.ClassNotFoundException: org.openorb.CORBA.ORB
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)[:1.6.0_32]
at java.security.AccessController.doPrivileged(Native Method)[:1.6.0_32]
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)[:1.6.0_32]
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)[:1.6.0_32]
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)[:1.6.0_32]
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)[:1.6.0_32]
  • Fixed this problem by myself, use the following way: http://stackoverflow.com/questions/2198928/better-handling-of-thread-context-classloader-in-osgi – Allen Xudong Cheng Jun 26 '12 at 13:44

2 Answers2

1

Fixed this problem by myself, use the following way:

ClassLoader tccl = Thread.currentThread().getContextClassLoader();
try {
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
/*
 * Start threads, or establish connections, here, now
 */
} finally {
Thread.currentThread().setContextClassLoader(tccl);
}

Better handling of Thread Context ClassLoader in OSGi

Community
  • 1
  • 1
0

I think it just misses the openorb dependency. Do you import the org.openorb package?

Normally you'd get compile time errors if you forget that, but this seems to be a Class.forname, so it fails only at runtime.

Frank Lee
  • 2,728
  • 19
  • 30
  • Yes, I have imported the org.openorb package. – Allen Xudong Cheng Jun 21 '12 at 06:50
  • And you have another package exporting org.openorb? Or perhaps there are multiple bundles exporting org.openorb? That could also cause weird behaviour. It might help to check all the export statements of the other bundles. – Frank Lee Jun 21 '12 at 11:13