2013-07-26 2 views
0

В настоящее время я пытаюсь использовать 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? Или есть другие механизмы?

+0

Возможный дубликат [EJB, удаление между двумя приложениями-серверами (стеклянная рыба)] (http://stackoverflow.com/questions/5370559/ejb-remoting-between-two-application-servers-glassfish) –

ответ

0

Только на поверхности: вы используете @LocalBean на обоих бобах ... тот, который должен быть удален удален (Bean3?), Должен быть аннотирован как @Remote.

+0

Я попытался аннотировать его с помощью Remote. Однако это тоже не сработало. Кроме того, обратите внимание, что интерфейс Bean уже был аннотирован с помощью Remote. – Daria

Смежные вопросы