0

我目前正在尝试使用 IIOP 访问远程 EJB,但无法使其工作。我有两个 EAR 文件,它们在两台不同的机器上运行。两者都使用 Glassfish 4.0 和 Java EE 7。

ExampleEar 中的 EJB ExampleSessionBean2 应该调用 ExampleEar2 中 EJB ExampleSessionBean3 的 printHello() 方法。这些 EJB 的代码及其部署描述符如下:

示例会话Bean2:

@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 ejb-jar.xml:

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

示例会话Bean3:

@Stateless(name="ExampleSessionBean3")
@LocalBean
public class ExampleSessionBean3 implements ExampleSessionBean3Interface {

ejb-jar.xml 和 glassfish-ejb-jar.xml 是默认的。

当我调用 ExampleSessionBean2 的方法 printHello() 时,它什么也没发生。Eclipse 中连接的状态栏在某个点停止。但是,没有显示异常。当我在本地使用它时,它可以工作。

此外,我尝试使用设置 -Dorg.omg.CORBA.ORBInitialHost=[IP address] 作为 VM 的参数,但没有改变。

我使用 IIOP 访问远程 EJB 的方式是否正确?注释和描述符的变化对吗?

我还有一个问题,是否还有其他可能让两个不在同一个 Glassfish 集群中的 EJB 进行通信。例如,RessourceAdapters 对此有用吗?还是有其他机制?

4

1 回答 1

0

只是表面上:您@LocalBean在两个 bean 上都使用...要远程访问的那个(Bean3?)应该注释为@Remote.

于 2013-07-27T19:55:52.840 回答