2

JPAプロバイダーとしてOpenJPAを使用しています。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 バンドル開発に非常に慣れていません。この問題を解決するのを手伝ってください。

4

3 に答える 3

3

クライアント バンドルは package をインポートする必要がありますjavax.naming。で示されるインポートされたパッケージのリストにこれを追加しますImport-Package

ところで、 で問題を解決した後に欠落していることが判明する追加の依存関係がある場合がありますjavax.naming。エラーが発生しやすく、重複した情報が含まれているため、手動で MANIFEST.MF を記述しないでください。bndBndtoolsなどのツールを使用する必要があります。

更新:実際、スタック トレースの次の部分で示されるように、OpenJPA 自体はパッケージのインポートに失敗しjavax.namingます: "javax.naming.NamingException not found by org.apache.openjpa [109]"。

したがって、OpenJPA は壊れています。

于 2013-03-06T07:01:18.990 に答える
1

依存関係として javax.api を追加してみてください。

<dependencies>
    <module name="javax.api"/>
</dependencies>
于 2013-05-13T06:42:01.073 に答える