可跨机器使用可移植的jndi语法(EJB3.1)吗?

时间:2011-03-23 09:38:02

标签: java ejb-3.0 jndi application-server


我正在阅读几篇文章中的“可移植全局JNDI名称”,例如,在这里和那里,但我无法理解这种语法是否仅适用于入站机器查找(或者如果服务器是集群的,可能是入站服务器查找)。 即,它是否只是试图解决同一台机器/服务器上的模块和应用程序之间的查找问题? 因为我不断看到引用此功能并使用@Remote的示例,我认为它可以很好地发生在跨机器/服务器上。
如果它确实只解析了对机器/服务器的内部查找,我会很感激,如果有人可以指出我在服务器之间如何与@Remote一起使用它的正确方向(我猜我需要的地方前缀主持人姓名) 谢谢,
以太

2 个答案:

答案 0 :(得分:1)

您可以从另一台机器调用EJB组件,这就是为什么@Remote anotation存在。喜欢

    String host = "10.1.1.111";
    String port = "3700";

    Properties props = new Properties();
    props.put(Context.INITIAL_CONTEXT_FACTORY,
    "com.sun.enterprise.naming.SerialInitContextFactory");
    props.setProperty("org.omg.CORBA.ORBInitialHost", host);

    props.setProperty("org.omg.CORBA.ORBInitialPort", port);

    InitialContext ctx = new InitialContext(props);
    TestService ejb = (TestService)ctx.lookup("java:global/XXX/XXX/TestEntityFacade!com.test.service.TestService");
    ejb.findAll();

答案 1 :(得分:1)

在这种情况下,您可以在描述符文件中使用它,然后您可以使用@EJB

注入它
@EJB(name="fooejbref")
private FooRemote fooRemote;

在sun-web.xml中:

<ejb-ref>
  <ejb-ref-name>fooejbref</ejb-ref-name>
  <jndi-name>corbaname:iiop:host2:3700#Foo</jndi-name>
</ejb-ref>

详情请查看此网址http://glassfish.java.net/javaee5/ejb/EJB_FAQ.html#StandaloneRemoteEJB