2013-07-30 3 views
0

OSGi 번들에서 activeMQ를 사용하려고했지만 일부 문제가 발생했습니다. 나는 지금 위의 것을 얻었고 나는 내가해야 할 일을 확신하지 못한다. 일반적으로이 오류가 발생하면 필요한 패키지를 가져 오지 않았 음을 의미하지만 이미 매니페스트 파일에 javax.naming 패키지를 추가했습니다.java.lang.ClassNotFoundException : javax.naming.Referenceable

내 매니 페스트 파일의 모양입니다.

Manifest-Version: 1.0 
Bundle-ManifestVersion: 2 
Bundle-Name: com.activemq.test 
Bundle-SymbolicName: com.activemq.test 
Bundle-Version: 1.0.0.qualifier 
Bundle-RequiredExecutionEnvironment: JavaSE-1.7 
Bundle-Activator: com.activemq.test.App 
Import-Package: javax.jms, 
javax.naming, 
org.osgi.framework 
Require-Bundle: ActiveMQExportTest;bundle-version="1.0.0" 

나는 웹 사이트에서 제공하는 activeMQ helloworld 응용 프로그램을 실행하고 있습니다. 정상적으로 실행하면 훌륭하게 작동하지만, osgi 번들에 포장하면 실패하기 시작합니다.

편집 : 관련성이 있는지는 모르지만 Required-Bundle은 필요한 패키지를 표시하기 위해 플러그인에 포장 된 activeMQ-all 병입니다.

스택 추적. 다른 것이 필요할 경우 알려주세요.

[7/30/13 9:14:17:782 CDT] 00000018 LogService-64-com.ibm.ws.org.apache.aries.proxy.1.0.2  E CWWKE0701E: FrameworkEvent ERROR Bundle:com.ibm.ws.org.apache.aries.proxy.1.0.2(id=64) java.lang.ClassFormatError: Unexpected error from weaving hook. 
    at org.eclipse.osgi.internal.baseadaptor.weaving.WeavingHookConfigurator.processClass(WeavingHookConfigurator.java:74) 
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:600) 
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:568) 
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:492) 
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:465) 
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216) 
    at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:395) 
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:464) 
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421) 
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412) 
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:690) 
    at java.lang.Class.forNameImpl(Native Method) 
    at java.lang.Class.forName(Class.java:219) 
    at org.apache.aries.proxy.impl.common.AbstractWovenProxyAdapter.visit(AbstractWovenProxyAdapter.java:228) 
    at org.objectweb.asm.ClassVisitor.visit(Unknown Source) 
    at org.objectweb.asm.commons.SerialVersionUIDAdder.visit(Unknown Source) 
    at org.apache.aries.proxy.impl.weaving.SyntheticSerialVerUIDAdder.visit(SyntheticSerialVerUIDAdder.java:60) 
    at org.objectweb.asm.ClassReader.accept(Unknown Source) 
    at org.objectweb.asm.ClassReader.accept(Unknown Source) 
    at org.apache.aries.proxy.impl.weaving.WovenProxyGenerator.getWovenProxy(WovenProxyGenerator.java:54) 
    at org.apache.aries.proxy.impl.weaving.ProxyWeavingHook.weave(ProxyWeavingHook.java:87) 
    at org.eclipse.osgi.internal.baseadaptor.weaving.WovenClassImpl.call(WovenClassImpl.java:140) 
    at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.notifyHookPrivileged(ServiceRegistry.java:1239) 
    at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.notifyHooksPrivileged(ServiceRegistry.java:1222) 
    at org.eclipse.osgi.internal.baseadaptor.weaving.WovenClassImpl.callHooks(WovenClassImpl.java:182) 
    at org.eclipse.osgi.internal.baseadaptor.weaving.WeavingHookConfigurator.processClass(WeavingHookConfigurator.java:68) 
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:600) 
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:568) 
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:492) 
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:465) 
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216) 
    at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:395) 
    at org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(SingleSourcePackage.java:35) 
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:461) 
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421) 
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412) 
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:690) 
    at com.ibm.activemq.test.App$HelloWorldProducer.run(App.java:73) 
    at java.lang.Thread.run(Thread.java:780) 
Caused by: java.lang.NoClassDefFoundError: javax.naming.Referenceable 
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClassHoldingLock(ClasspathManager.java:632) 
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:607) 
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:568) 
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:492) 
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:465) 
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216) 
    at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:395) 
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:464) 
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421) 
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412) 
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:690) 
    at java.lang.Class.forNameImpl(Native Method) 
    at java.lang.Class.forName(Class.java:219) 
    at org.apache.aries.proxy.impl.common.AbstractWovenProxyAdapter.checkInterfacesForSerializability(AbstractWovenProxyAdapter.java:308) 
    at org.apache.aries.proxy.impl.common.AbstractWovenProxyAdapter.visit(AbstractWovenProxyAdapter.java:231) 
    at org.objectweb.asm.ClassVisitor.visit(Unknown Source) 
    at org.objectweb.asm.commons.SerialVersionUIDAdder.visit(Unknown Source) 
    at org.apache.aries.proxy.impl.weaving.SyntheticSerialVerUIDAdder.visit(SyntheticSerialVerUIDAdder.java:60) 
    at org.objectweb.asm.ClassReader.accept(Unknown Source) 
    at org.objectweb.asm.ClassReader.accept(Unknown Source) 
    at org.apache.aries.proxy.impl.weaving.WovenProxyGenerator.getWovenProxy(WovenProxyGenerator.java:54) 
    at org.apache.aries.proxy.impl.weaving.ProxyWeavingHook.weave(ProxyWeavingHook.java:87) 
    at org.eclipse.osgi.internal.baseadaptor.weaving.WovenClassImpl.call(WovenClassImpl.java:140) 
    at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.notifyHookPrivileged(ServiceRegistry.java:1239) 
    at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.notifyHooksPrivileged(ServiceRegistry.java:1222) 
    at org.eclipse.osgi.internal.baseadaptor.weaving.WovenClassImpl.callHooks(WovenClassImpl.java:182) 
    at org.eclipse.osgi.internal.baseadaptor.weaving.WeavingHookConfigurator.processClass(WeavingHookConfigurator.java:68) 
    ... 40 more 
Caused by: java.lang.ClassNotFoundException: javax.naming.Referenceable 
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:501) 
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421) 
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412) 
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:690) 
    at java.lang.ClassLoader.defineClassImpl(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:295) 
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188) 
    ... 68 more 

누구나 제안 사항이 있으면 기꺼이 받아들입니다. 감사!

답변

0

일반적으로 누락 된 클래스/인터페이스에 대한 정적 참조가 NoClassDefFoundError이되는 경우 확인 된 예외 ClassNotFoundException은 일반적으로 누군가 Class.forName 또는 그 변형 중 하나를 호출하면 발생합니다.

제 생각에는 위의 매니 페스트를 가진 번들에서 예외가 발생하지 않는다는 것입니다. 나는. 의존성 중 하나가 반사를 사용하여 javax.naming.Reference에 종속되는 클래스를로드 할 수 있지만 해당 번들은 패키지를 가져 오지 않을 수 있습니다.

아마도 전체 스택 추적을 게시하면 문제를 밝힐 수 있습니다. 이 정보로 귀하의 질문을 업데이트하십시오. 나는 무엇이든을 본다면이 답변을 업데이트 할 것입니다.

+0

스택 추적을 게시했습니다. 이 프로젝트에는 두 개의 번들 만 있고 그 중 하나는 ActiveMQ jar가 번들로 묶여 일부 패키지와 helloworld 번들을 내 보냅니다. 현재 필자는 javax.naming을 가져 오는 helloworld 번들을 가지고 있습니다. ActiveMQ를 가져 오려고하면 javax.naming eclipse가 게시되지 않습니다. ActiveMQExportTest_1.0.0을 해결하지 못했습니다. : 불만족스러운 가져 오기 패키지 javax.naming_0.0.0. – Almightyzero

+0

"Eclipse는 게시하지 않습니다."... 그게 무슨 뜻입니까 ?? 이 오류가 런타임에서 발생합니까 아니면 툴링 문제입니까? 'javax.naming'은 JRE에서 가져온 것이므로 시스템 번들에 의해 게시됩니다. 프레임 워크 내보내기를 완전히 덮어 쓰지 않는 한 어떻게 해결되지 않을지 알 수 없습니다. –

+0

죄송합니다. Eclipse에서 서버를 마우스 오른쪽 단추로 클릭하고 게시를 선택하면 최신 코드가 배포됩니다. 내가 이렇게하면 위의 오류가 발생합니다. 그리고 저는 당신과 함께 있습니다. 어떻게 그것이 무엇인지 모릅니다. – Almightyzero

관련 문제