【问题标题】:using an EJB 3.1 bean through a remote java stand-alone application通过远程 Java 独立应用程序使用 EJB 3.1 bean
【发布时间】:2011-10-13 09:21:01
【问题描述】:

我一直在尝试使用 Java EE 6 创建一个基于应用程序服务器的应用程序,该应用程序将从 GWT Web 应用程序接收作业对象,并且这些作业将从 Java 独立应用程序中提取。我一直认为 EJB 模型将为我提供一种简单的远程处理方法,因为我的客户端应用程序应该能够在不同的机器上运行。

我使用 Glassfish 3.1 和 Netbeans 7.0.1 作为我的 IDE,我也使用 eclipse Java EE 来重现同样的问题。

我一直面临着下一个困难:

  • InitialContext不容易查到,是不是只能用remoting?我不应该能够使用@EJB/@Inject 使用一些配置文件从我的独立应用程序中进行一些自动代码注入吗?
  • 我发现了一些方法(未直接在文档中找到),要使 InitialContext 机制工作,我需要添加到我的库中:gf-client-module.jarweld-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 的问题,并且对于这些问题几乎没有发现任何帮助,我们将不胜感激。

【问题讨论】:

    标签: rmi java-ee-6 glassfish-3 corba netbeans-7


    【解决方案1】:

    在我的情况下,我有相同的堆栈消息“在消息 vmcid 中的最后一个片段之后,BufferManagerReadStream 中的下溢:OMG 次要代码:7”

    在我的项目中,我有一个未实现 Serializable 接口的嵌套对象。实现接口解决了我的问题。

    【讨论】:

      【解决方案2】:

      在 rmi 调用 getSimpleJobForProcessing 方法时,您是否注意作为参数传递的对象的类实现了接口 java.io.Serializable? 这也是为什么我有这样的例外的原因之一。

      【讨论】:

        【解决方案3】:

        @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> 
        

        除了例外,我无能为力。

        【讨论】:

        • 这并没有解决异常......这是我最大的担心
        • 是的。这正是我在回复中所说的。我回答了您关于 @EJB 注释的问题,但无法解决异常。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-02
        • 1970-01-01
        • 2012-03-25
        • 2023-03-29
        • 1970-01-01
        • 2013-04-30
        • 1970-01-01
        相关资源
        最近更新 更多