В настоящее время я пытаюсь использовать IIOP для доступа к удаленному EJB, но не могу заставить его работать. У меня есть два файла EAR, которые работают на двух разных машинах. Оба используют Glassfish 4.0 и Java EE 7.Доступ к удаленному EJB из другого EJB
EJB ExampleSessionBean2 в ExampleEar должен ссылаться на метод printHello() EJB ExampleSessionBean3 в ExampleEar2. Код этих EJBs и их дескрипторы развертывания заключается в следующем:
ExampleSessionBean2:
@Stateless
@LocalBean
public class ExampleSessionBean2 implements ExampleSessionBean2Interface {
@EJB(lookup="java:comp/env/ejb/ExampleSessionBean3")
ExampleSessionBean3Interface bean;
public ExampleSessionBean2() {
// TODO Auto-generated constructor stub
}
@Override
public void printHello() {
System.out.println("Hello, here Bean2");
bean.printHello();
}
ExampleSessionBean2-jar.xml EJB:
<display-name>ExampleEJB2</display-name>
<enterprise-beans>
<session>
<ejb-name>ExampleSessionBean2</ejb-name>
<transaction-type>Bean</transaction-type>
<ejb-ref>
<ejb-ref-name>ejb/ExampleSessionBean3</ejb-ref-name>
<remote>bean.ExampleSessionBean3Interface</remote>
</ejb-ref>
</session>
</enterprise-beans>
<ejb-client-jar>ExampleEJB2Client.jar</ejb-client-jar>
ExampleSessionBean2 GlassFish-EJB-jar.xml:
<enterprise-beans>
<ejb>
<ejb-name>ExampleSessionBean2</ejb-name>
<ejb-ref>
<ejb-ref-name>ejb/ExampleSessionBean3</ejb-ref-name>
<jndi-name>corbaname:iiop:[IP address]:3700#java:global/ExampleEAR2/ExampleEJB3/ExampleSessionBean3!bean.ExampleSessionBean3Interface</jndi-name>
</ejb-ref>
</ejb>
</enterprise-beans>
ExampleSessionBean3:
@Stateless(name="ExampleSessionBean3")
@LocalBean
public class ExampleSessionBean3 implements ExampleSessionBean3Interface {
ejb-jar.xml и glassfish-ejb-jar.xml указаны по умолчанию.
Когда я вызываю метод printHello() из ExampleSessionBean2, ничего не происходит. Строка состояния соединения в Eclipse останавливается в какой-то момент. Однако никаких исключений не видно. Когда я использую его локально, он работает.
Кроме того, я попробовал его с настройкой -Dorg.omg.CORBA.ORBInitialHost = [IP-адрес] в качестве аргумента для виртуальной машины, но без изменений.
Правильно ли я использую IIOP для доступа к удаленному EJB? Являются ли аннотации правильными изменениями в дескрипторах?
У меня также возникает вопрос, есть ли другие возможности, позволяющие двум EJB-сообщениям, которые НЕ находятся в том же кластере Glassfish. Например, полезны ли RessourceAdapters? Или есть другие механизмы?
Возможный дубликат [EJB, удаление между двумя приложениями-серверами (стеклянная рыба)] (http://stackoverflow.com/questions/5370559/ejb-remoting-between-two-application-servers-glassfish) –