I am using OpenJPA as JPA provider. I have created the small OSGI bundle project with the JPA2.0 support. This bundle provides the persistnce functionality to its clients.
I created another client bundle to consume the above persistence service. When I start the client bundle service using Felix framework I am getting bellow error,
java.lang.NoClassDefFoundError: javax/naming/NamingException
Complete stacktrace
org.osgi.framework.BundleException: Activator start error in bundle StudentServiceConsumer [120].
at org.apache.felix.framework.Felix.activateBundle(Felix.java:2027)
at org.apache.felix.framework.Felix.startBundle(Felix.java:1895)
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:944)
at org.apache.felix.gogo.command.Basic.start(Basic.java:729)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.felix.gogo.runtime.Reflective.invoke(Reflective.java:137)
at org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:82)
at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:477)
at org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:403)
at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:183)
at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:120)
at org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:89)
at org.apache.felix.gogo.shell.Console.run(Console.java:62)
at org.apache.felix.gogo.shell.Shell.console(Shell.java:203)
at org.apache.felix.gogo.shell.Shell.gosh(Shell.java:128)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.felix.gogo.runtime.Reflective.invoke(Reflective.java:137)
at org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:82)
at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:477)
at org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:403)
at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)
at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:183)
at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:120)
at org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:89)
at org.apache.felix.gogo.shell.Activator.run(Activator.java:75)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NoClassDefFoundError: javax/naming/NamingException
at com.student.serviceprovider.serviceimpl.StudentDAOService.persist(StudentDAOService.java:19)
at com.student.serviceconsumer.activator.Activator.start(Activator.java:30)
at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:645)
at org.apache.felix.framework.Felix.activateBundle(Felix.java:1977)
... 32 more
Caused by: java.lang.ClassNotFoundException: javax.naming.NamingException not found by org.apache.openjpa [109]
at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1460)
at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:72)
at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1843)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 36 more
**java.lang.NoClassDefFoundError: javax/naming/NamingException**
Currently bellow bundles are in active state
ID|State |Level|Name
0|Active | 0|System Bundle (4.0.3)
1|Active | 1|file:/C:/Felix/felix-framework-4.0.3/bundle/junit.jar (0.0.0)
2|Active | 1|Apache Felix Bundle Repository (1.6.6)
3|Active | 1|Apache Felix Gogo Command (0.12.0)
4|Active | 1|Apache Felix Gogo Runtime (0.10.0)
5|Active | 1|Apache Felix Gogo Shell (0.10.0)
7|Active | 1|WS_J2EE_persistence (7.0.0)
105|Active | 1|file:/C:/Felix/felix-framework-4.0.3/bundle/commons-logging-4.0.6.jar (0.0.0)
106|Active | 1|Apache Commons Lang (2.6.0.v201205030909)
107|Active | 1|Apache Commons Logging Plug-in (1.0.4.v201101211617)
109|Active | 1|OpenJPA Plug-in (1.2.1.201001181728)
114|Active | 1|file:/C:/Felix/felix-framework-4.0.3/bundle/rt.jar (0.0.0)
119|Active | 1|StudentServiceProvider (1.0.0.201303061113)
MENIFEST.MF(Service Bundle)
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: StudentServiceProvider
Bundle-SymbolicName: StudentServiceProvider
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: com.student.serviceprovider.activator.Activator
Import-Package: org.osgi.framework
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Meta-Persistence: META-INF/persistence.xml
Export-Package: com.student.serviceprovider.model,
com.student.serviceprovider.service,
com.student.serviceprovider.serviceimpl
Bundle-ClassPath: ../lib/com.ibm.ws.jpa.jar,
../lib/commons-collections-20040616.jar,
../lib/j2ee.jar,
../lib/mysql-connector-java-5.1.7-bin.jar,
.
Require-Bundle: org.apache.openjpa;bundle-version="1.2.1",
org.apache.commons.logging;bundle-version="1.0.4"
MENIFEST.MF(Client Bundle)
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: StudentServiceConsumer
Bundle-SymbolicName: StudentServiceConsumer
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: com.student.serviceconsumer.activator.Activator
Import-Package: com.student.serviceprovider.model,
com.student.serviceprovider.service,
com.student.serviceprovider.serviceimpl,
org.osgi.framework
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Export-Package: com.student.serviceconsumer.activator
I am very new to OSGI bundle development. Please help me to resolve this issue.
Your client bundle need to import package javax.naming
. Add this to the list of imported packages indicated by Import-Package
.
By the way you might have additional dependencies that will be found to be missing after you resolve the problem with javax.naming
. You really shouldn't write your MANIFEST.MF by hand because it is error-prone and contains duplicate information. You should use a tool like bnd or Bndtools.
Update: In fact, OpenJPA itself fails to import the package javax.naming
, as shown by the following part of the stack trace: "javax.naming.NamingException not found by org.apache.openjpa [109]".
Therefore, OpenJPA is broken.