2
votes

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.

3
Are you using a JPA service provider like the one provided by Apache Aries? You can still use OpenJPA, but using it on its own in an OSGi environment usually doesn't work so well.Holly Cummins

3 Answers

3
votes

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.

1
votes

Try to add javax.api as a dependencies.

<dependencies>
    <module name="javax.api"/>
</dependencies>
0
votes

Try using -Dosgi.compatibility.bootdelegation=true this helped with my problem