2017-12-01 17 views
1

私はstndaloneとしてうまく動作しているGlassfishにアプリケーションを配備しようとします。How do you say私はOSGIのバンドルを使用するかどうかはまったく使用しないでください

このアプリケーションでは、バージョンv1.0のライブラリ(JAR)のいくつかのクラスを使用しています。

VMはすでにこのクラスをロードしていますが、osgiキャッシュバンドルから別のバージョンをロードしているため、デプロイメントはjava.lang.NoSuchMethodErrorで失敗します。

私のバージョンですぐに使用できるバンドルが見つかりましたが、使用方法はわかりません。

VM(またはmb GF)に、バンドルライブラリを使用しない、または必要なバージョンでjar-libを使用しないと言うことはできますか?

BLOCKQUOTE 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)設定に関するものです。すべてのバンドルでクラスを共有する場合は、バンドルを1つ設定してエクスポートし、他のすべてのバンドルをインポートするように設定する必要があります。あなたはインポート/エクスポートの機能を誇りですか?

一部のソリューションについては、アプリのアーキテクチャに関する詳細を教えてください。影響を受けるバンドルとそのマニフェストに関する説明を投稿できますか?

+0

私はOSGIの新機能です。 実際に私はそれを使用するつもりはありませんでしたが、そうする必要があるでしょうか(そうでないかもしれません) アプリケーションは多くのjarファイルを使用し、GFのosgiキャッシュバンドルにはいくつかのクラスがあり、なぜ私はOSGIについて言及しているのですか 実際に私は必要としています。私の瓶をロードしてそのクラスを使用することです。 –

+0

よく、ステップバイステップ: 1. my-ear.earにmy-application.jarと私のアプリで使用されている多くの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やそれに基づくツール(例えばbnd-maven-pluginやbnd Gradle Pluginなど)のようなOSGiに最新のツールを使用すると、正しいバージョン範囲のインポートパッケージが生成されます。

+0

私はそれを段階的に行うことができますか? –

+0

マニフェスト行に追加します。 'Export-EJB:ALL Export-Package:com.simple;バージョン= 1.0 インポートパッケージ: org.apache.xml.security.algorithms; version = 1.4.2、com.simple; バージョン= 1.0'ですが、まだこの問題があります –

+0

どのバンドルでエラーが発生していますか?そのバンドルの完全なMANIFEST.MFをポストする必要があります。ここ –

関連する問題