在使用JPA支持访问OSGI包时获取java.lang.NoClassDefFoundError:javax / naming / NamingException错误

时间:2013-03-06 05:52:11

标签: java osgi openjpa apache-felix osgi-bundle

我使用OpenJPA作为JPA提供程序。我已经创建了具有JPA2.0支持的小型OSGI包项目。此捆绑包为其客户端提供持久性功能。

我创建了另一个客户端包以使用上述持久性服务。当我使用 Felix框架启动客户端捆绑服务时,我收到了以下错误,

java.lang.NoClassDefFoundError:javax / naming / NamingException

完成堆栈跟踪

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**

目前波纹管束处于活动状态

 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(服务套装)

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(客户端套装)

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

我是OSGI捆绑开发的新手。请帮我解决这个问题。

3 个答案:

答案 0 :(得分:3)

您的客户端捆绑包需要导入包javax.naming。将其添加到Import-Package指示的导入包列表中。

顺便说一下,在使用javax.naming解决问题后,您可能会发现其他依赖项缺失。你真的不应该手写你的MANIFEST.MF,因为它容易出错并且包含重复的信息。您应该使用bndBndtools等工具。

更新:实际上,OpenJPA本身无法导入包javax.naming,如堆栈跟踪的以下部分所示:“org未找到javax.naming.NamingException。 apache.openjpa [109]“。

因此,OpenJPA被打破了。

答案 1 :(得分:1)

尝试将javax.api添加为依赖项。

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

答案 2 :(得分:0)

尝试使用-Dosgi.compatibility.bootdelegation = true 这有助于解决我的问题

相关问题