2

Java EE 6 を使用して、GWT Web アプリケーションからジョブ オブジェクトを受け取るアプリケーション サーバー ベースのアプリケーションを作成しようとしましたが、それらのジョブは Java スタンドアロン アプリケーションから取得されます。クライアント アプリケーションは別のマシンで実行できる必要があるため、EJB モデルを使用するとリモート処理を簡単に実行できると考えていました。

IDE として Glassfish 3.1 と Netbeans 7.0.1 を使用しています。Eclipse Java EE を使用して同じ問題を再現しました。

私は次の困難に直面しています:

  • を見つけるのは簡単ではありませんでしInitialContextた。リモート処理を使用する唯一の方法ですか? 構成ファイルを使用して、スタンドアロン アプリからの自動コード インジェクションに@EJB/を使用できないでしょうか?@Inject
  • InitialContextメカニズムを機能させるには、ライブラリに追加する必要があることをgf-client-module.jarいくつか発見しました(ドキュメントには直接記載されていません) 。weld-osgi-bundle.jar
  • 次のエラーが表示されます。
Exception in thread "main" javax.ejb.EJBException: java.rmi.MarshalException: CORBA MARSHAL 1330446343 No; nested exception is: 
    org.omg.CORBA.MARSHAL: FINE: IOP00810007: Underflow in BufferManagerReadStream after last fragment in message  vmcid: OMG  minor code: 7  completed: No
    at ContentCreator._JobDispatcherRemote_Wrapper.getSimpleJobForProcessing(ContentCreator/_JobDispatcherRemote_Wrapper.java)
    at javaapplication1.JavaApplication1.main(JavaApplication1.java:35)
Caused by: java.rmi.MarshalException: CORBA MARSHAL 1330446343 No; nested exception is: 
    org.omg.CORBA.MARSHAL: FINE: IOP00810007: Underflow in BufferManagerReadStream after last fragment in message  vmcid: OMG  minor code: 7  completed: No
    at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.mapSystemException(Util.java:267)
    at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:213)
    at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:152)
    at com.sun.corba.ee.impl.presentation.rmi.codegen.CodegenStubBase.invoke(CodegenStubBase.java:227)
    at ContentCreator.__JobDispatcherRemote_Remote_DynamicStub.getSimpleJobForProcessing(ContentCreator/__JobDispatcherRemote_Remote_DynamicStub.java)
    ... 2 more
Caused by: org.omg.CORBA.MARSHAL: FINE: IOP00810007: Underflow in BufferManagerReadStream after last fragment in message  vmcid: OMG  minor code: 7  completed: No
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
    at com.sun.corba.ee.spi.orbutil.logex.corba.CorbaExtension.makeException(CorbaExtension.java:248)
    at com.sun.corba.ee.spi.orbutil.logex.corba.CorbaExtension.makeException(CorbaExtension.java:95)
    at com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator.handleFullLogging(WrapperGenerator.java:387)
    at com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator.access$400(WrapperGenerator.java:107)
    at com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator$2.invoke(WrapperGenerator.java:511)
    at com.sun.corba.ee.spi.orbutil.proxy.CompositeInvocationHandlerImpl.invoke(CompositeInvocationHandlerImpl.java:99)
    at $Proxy24.endOfStream(Unknown Source)
    at com.sun.corba.ee.impl.encoding.BufferManagerReadStream.underflow(BufferManagerReadStream.java:128)
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_1.grow(CDRInputStream_1_1.java:113)
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_2.alignAndCheck(CDRInputStream_1_2.java:126)
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_long(CDRInputStream_1_0.java:496)
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readValueTag(CDRInputStream_1_0.java:1810)
    at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1040)
    at com.sun.corba.ee.impl.encoding.CDRInputObject.read_value(CDRInputObject.java:531)
    at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl$14.read(DynamicMethodMarshallerImpl.java:384)
    at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl.readResult(DynamicMethodMarshallerImpl.java:483)
    at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:203)
    ... 5 more

私は自分のシナリオで Java EE 6 をリモートで使用する際に問題に直面しており、これらの問題に対する解決策はほとんど見つかりませんでした。

4

3 に答える 3

7

私の場合、同じスタックメッセージ「メッセージvmcidの最後のフラグメントの後のBufferManagerReadStreamのアンダーフロー: OMGマイナーコード: 7」があります

私のプロジェクトでは、Serializable インターフェイスを実装していないネストされたオブジェクトがありました。インターフェイスを実装することで問題が解決しました。

于 2012-11-08T10:28:34.167 に答える
0

@EJBアノテーションは、Java EE準拠のコンテナーによって処理および解釈されます。私が知る限り、コンテナーで実行されないJavaアプリケーションからこれを行う簡単な方法はありません。

ただし、Glassfishコンテナから実行している場合は、JNDIルックアップを削除できる可能性があります。

次のことを試すことができます。

@EJB(name = "RemoteService") 
private StatusService remoteService;

次に、sun-web.xmlで:

   <ejb-ref> 
            <ejb-ref-name>RemoteService</ejb-ref-name> 
            <jndi-name>java:comp/env/com//RemoteService</jndi-name> 
    </ejb-ref> 

例外を除いて、私は助けることができません。

于 2011-10-14T22:55:13.987 に答える