2017-12-01 9 views
1

글씨 그대로에 응용 프로그램을 배포하려고하는데, 그것은 statndalone처럼 잘 작동합니다.How do you say 나는 OSGI 번들은 사용하거나 사용하지 않을 번들

이 응용 프로그램은 버전 v1.0의 라이브러리 (JAR)의 일부 클래스를 사용합니다.

VM이 이미이 클래스를로드하고 osgi 캐시 번들에서 다른 버전을로드했기 때문에 배포가 java.lang.NoSuchMethodError으로 실패합니다.

내 버전과 함께 사용할 준비가 된 번들을 찾았지만 사용법을 이해하지 못했습니다.

VM (또는 mb GF)에게 번들 라이브러리를 사용하지 않거나 필요한 버전과 함께 jar-lib를 사용하지 않을 수 있습니까?

인용문 javax.ejb.EJBException at com.sun.ejb.containers.EJBContainerTransactionManager.processSystemException(EJBContainerTransactionManager.java:752) at com.sun.ejb.containers.EJBContainerTransactionManager.completeNewTx(EJBContainerTransactionManager.java:702) at com.sun.ejb.containers.EJBContainerTransactionManager.postInvokeTx(EJBContainerTransactionManager.java:507) at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4600) at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2108) at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2078) at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:220) at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88) at com.sun.proxy.$Proxy241.run(Unknown Source) at com.xxent.__EJB31_Generated__CollectRequest__Intf____Bean__.run(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.jboss.weld.util.reflection.Reflections.invokeAndUnwrap(Reflections.java:411) at org.jboss.weld.module.ejb.EnterpriseBeanProxyMethodHandler.invoke(EnterpriseBeanProxyMethodHandler.java:128) at org.jboss.weld.bean.proxy.EnterpriseTargetBeanInstance.invoke(EnterpriseTargetBeanInstance.java:56) at org.jboss.weld.module.ejb.InjectionPointPropagatingEnterpriseTargetBeanInstance.invoke(InjectionPointPropagatingEnterpriseTargetBeanInstance.java:68) at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:100) at com.xxent.CollectRequest$Proxy$_$$_Weld$EnterpriseProxy$.run(Unknown Source) at com.xxent.Main.collectRequest(Main.java:18) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.sun.ejb.containers.interceptors.BeanCallbackInterceptor.intercept(InterceptorManager.java:1035) at com.sun.ejb.containers.interceptors.CallbackChainImpl.invokeNext(CallbackChainImpl.java:72) at com.sun.ejb.containers.interceptors.CallbackInvocationContext.proceed(CallbackInvocationContext.java:205) at org.jboss.weld.module.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:81) at org.jboss.weld.module.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:52) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.sun.ejb.containers.interceptors.CallbackInterceptor.intercept(InterceptorManager.java:986) at com.sun.ejb.containers.interceptors.CallbackChainImpl.invokeNext(CallbackChainImpl.java:72) at com.sun.ejb.containers.interceptors.CallbackInvocationContext.proceed(CallbackInvocationContext.java:205) at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doCall(SystemInterceptorProxy.java:163) at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.init(SystemInterceptorProxy.java:125) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.sun.ejb.containers.interceptors.CallbackInterceptor.intercept(InterceptorManager.java:986) at com.sun.ejb.containers.interceptors.CallbackChainImpl.invokeNext(CallbackChainImpl.java:72) at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:412) at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:375) at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:2048) at com.sun.ejb.containers.StatelessSessionContainer.createStatelessEJB(StatelessSessionContainer.java:507) at com.sun.ejb.containers.StatelessSessionContainer.access$000(StatelessSessionContainer.java:97) at com.sun.ejb.containers.StatelessSessionContainer$SessionContextFactory.create(StatelessSessionContainer.java:698) at com.sun.ejb.containers.util.pool.NonBlockingPool.getObject(NonBlockingPool.java:246) at com.sun.ejb.containers.StatelessSessionContainer._getContext(StatelessSessionContainer.java:431) at com.sun.ejb.containers.BaseContainer.getContext(BaseContainer.java:2613) at com.sun.ejb.containers.BaseContainer.preInvoke(BaseContainer.java:2005) at com.sun.ejb.containers.BaseContainer.callEJBTimeout(BaseContainer.java:4082) at com.sun.ejb.containers.EJBTimerService.deliverTimeout(EJBTimerService.java:1200) at com.sun.ejb.containers.EJBTimerService.access$000(EJBTimerService.java:89) at com.sun.ejb.containers.EJBTimerService$TaskExpiredWork.run(EJBTimerService.java:1919) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.NoSuchMethodError: org.apache.xml.security.algorithms.JCEMapper.init(Lorg/w3c/dom/Element;)V at com.xxent.crypto.DigitalSignatureFactory.initXmlSec(DigitalSignatureFactory.java:221) at com.xxent.crypto.DigitalSignatureFactory.initDigtProvider(DigitalSignatureFactory.java:325) at com.xxent.crypto.DigitalSignatureFactory.init(DigitalSignatureFactory.java:62) at com.xxent.crypto.DigitalSignatureFactory.reinit(DigitalSignatureFactory.java:49) at com.xxent.CollectRequest.getRequest(CollectRequest.java:30) at com.xxent.CollectRequest.run(CollectRequest.java:46) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1081) at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1153) at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:4820) at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:656) at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:824) at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:608) at org.jboss.weld.module.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:72) at org.jboss.weld.module.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:52) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883) at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:823) at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:608) at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doCall(SystemInterceptorProxy.java:163) at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:140) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:883) at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:823) at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:369) at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:4792) at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:4780) at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:212) ... 57 more

답변

0

난 당신이 OSGI의 새로운 같아요. 문제는 아마도 클래스 로더와 Import-Package (및 Export-Package) 설정을 번들로 묶는 것에 관한 것입니다. 모든 번들에서 클래스를 공유하려면 하나의 번들을 내보내고 다른 모든 번들은 가져 오기를 설정해야합니다. 당신은 가져 오기/내보내기 기능을 제공합니까?

일부 솔루션의 경우 앱 아키텍처에 대한 추가 정보를 제공해야합니다. 영향을받는 번들 및 해당 매니페스트에 대한 설명을 게시 할 수 있습니까?

+0

네 말이 맞아. 나는 OSGI에서 새로 나온 사람이다. 실제로 그것을 사용하지는 않겠지 만,해야 할 것 같습니다 (또는 그렇지 않을 수도 있습니다) 응용 프로그램은 많은 항아리를 사용합니다. 일부 클래스는 GF의 osgi 캐시 번들에 있으며 내 대신 사용합니다. 왜 내가 OSGI를 언급했는지 그 이유는 무엇입니까? 실제로 내가 필요로하는 everithing은 - 내 항아리를로드하고 해당 클래스를 사용하는 것입니다. –

+0

글쎄, 단계별로 단계 : 1. my-application.jar을 포함하는 my-ear.ear 및 많은 lib \ * .jar 내 응용 프로그램에서 사용 (또한 같은 결과 lib \ appslib에 libs 배치하려고) 2. 내가 GF에 배포 할 때 - 오류 java.lang.NoSuchMethodError (모든 기본 환경 설정) 3. VM이 클래스 라이브러리를 사용하지 않고 GF osgi 캐시 번들 에 있음을 알게되었습니다. 4. 사용 된 벙글 : glassfish5/glassfish/modules/webservic es-osgi.jar 5.이 모듈 (및 번들)을 삭제하려고하면 서버가 나 빠졌습니다. 언로드하는 것은 나쁜 생각입니다. –

+0

전체 오류 메시지 (스택 추적)를 게시 할 수 있습니까? 프로젝트 사용 xmlsec-1.4.5.jar에서 와 함께 귀를 구축 : '@Statless 홈페이지 - – Majlanky

0

예 범위를 추가하여 가져 오는 패키지의 버전을 제한 할 수 있습니다. 다음과 같이 귀하의 수입의 범위를 추가 할 수 있습니다 당신이 라이브러리 패키지의 버전 1.0을 사용하는 경우, 예를 들어 :

Import-Package: org.apache.xml.security.algorithms; version="[1.0, 2.0)" 

이 런타임에 패키지의 잘못된 버전에 배선되는 코드를 방지 할 수 있습니다.

bnd와 같은 OSGi 또는이를 기반으로하는 도구 중 하나 (예 : bnd-maven-plugin 또는 bnd Gradle Plugin)에 최신 도구를 사용하는 경우 올바른 버전 범위의 가져 오기 패키지가 생성됩니다 .

+0

단계별로 어떻게 할 수 있습니까? –

+0

매니페스트 줄에 추가 : 'Export-EJB : ALL 내보내기 패키지 : com.simple; 버전 = 1.0 가져 오기 - 패키지 : org.apache.xml.security.algorithms; 버전 = 1.4.2, com.simple; version = 1.0'이지만 여전히이 문제가 있습니다 –

+0

어떤 번들에서 오류가 발생합니까? 해당 번들에 대해 전체 MANIFEST.MF를 게시해야합니다. 여기 –

관련 문제