использование компонента EJB 3.1 через удаленное автономное приложение Java - PullRequest
2 голосов
/ 13 октября 2011

Я пытался использовать Java EE 6 для создания приложения на основе сервера приложений, которое должно получать объекты Job из веб-приложения GWT, и эти задания будут извлекаться из автономного приложения Java.Я думал, что модель EJB предоставит мне простой способ сделать удаленное взаимодействие, потому что мое клиентское приложение должно быть в состоянии работать на другом компьютере.

Я использую Glassfish 3.1 и Netbeans 7.0.1 в качестве своей IDEЯ также использовал затмение 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 в моем сценарии и нашел небольшую помощь для этих проблем, любая помощь будет принята с благодарностью.

Ответы [ 3 ]

7 голосов
/ 08 ноября 2012

В моем случае у меня такое же сообщение стека "Underflow в BufferManagerReadStream после последнего фрагмента в сообщении vmcid: OMG вспомогательный код: 7"

В моем проекте у меня был вложенный объект, который не реализует интерфейс Serializable. Реализация Inteface решила мою проблему.

1 голос
/ 01 января 2014

Вы позаботились о том, чтобы класс объекта, который вы передаете в качестве аргумента при rmi-вызове метода getSimpleJobForProcessing, реализовывал интерфейс java.io.Serializable?Это была одна из причин, почему у меня тоже были такие исключения.

0 голосов
/ 15 октября 2011

Аннотация @EJB обрабатывается и интерпретируется контейнером, совместимым с Java EE, поэтому, насколько я знаю, не существует простого способа сделать это из приложения Java, которое не запускается в контейнере.

Однако, если вы работаете из контейнера Glassfish, вы можете избавиться от поиска JNDI.

Вы можете попробовать следующее:

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

и затем на солнце-web.xml:

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

За исключением, я не могу помочь.

...