2

我一直在尝试使用 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 的问题,并且对这些问题几乎没有帮助,任何帮助将不胜感激。

4

3 回答 3

7

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

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

于 2012-11-08T10:28:34.167 回答
1

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

于 2014-01-01T04:35:04.750 回答
0

The @EJB annotation is processed and interpreted by a Java EE compliant container, so as far as I know there is no simple way to do this from a Java application that doesn't run in a container.

However, if you are running from a Glassfish container, you might be able to get rid of the JNDI lookup.

You can try the following:

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

and then in your sun-web.xml:

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

With the exception, I cannot help.

于 2011-10-14T22:55:13.987 回答