2010-09-03 6 views
2

Я хочу использовать два отдельных сервера: один для веб-контейнера и один для ejb-контейнера. Оба этих двух контейнера - Glassfish V3.Доступ к удаленному EJB, работающему в другой Glassfish (EJB-Container) от другой Glassfish (Web-Container)

Но, как использовать аннотацию @EJB в своем веб-проекте для доступа к ejb-контейнерам удаленного ejb-контейнера.

В Ejb 2.0 мы должны использовать дескрипторы ejb, но что произошло в Ejb3.0 и glassfish v3?

благодаря

+0

Возможный дубликат [Как я могу развернуть Session Bean на другом компьютере с помощью JSP/Servlet клиента) (http://stackoverflow.com/questions/3614802/how-can-i-deploy-session-bean-on -another-computer-with-client-jsp-servlet) –

+0

Проверьте это - полный пример: http://stackoverflow.com/questions/4763960/accessing-a- апатридом-EJB-с-другим-например-в-GlassFish/10194057 # 10194057 –

ответ

2

Я никогда лично сделал это, потому что я предпочитаю использовать локальные интерфейсы в той же JVM, как это существенно повышает производительность.

Но вы можете проверить это:

https://glassfish.dev.java.net/javaee5/ejb/EJB_FAQ.html#StandaloneRemoteEJB

Но вы можете дать этому попытку:

Properties props = new Properties(); 

    props.setProperty("java.naming.factory.initial", 
        "com.sun.enterprise.naming.SerialInitContextFactory"); 

    props.setProperty("java.naming.factory.url.pkgs", 
        "com.sun.enterprise.naming"); 

    props.setProperty("java.naming.factory.state", 
        "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl"); 


    // optional. Defaults to localhost. Only needed if web server is running 
    // on a different host than the appserver 
    props.setProperty("org.omg.CORBA.ORBInitialHost", "ejb_server_ip_or_host_name"); 

    // optional. Defaults to 3700. Only needed if target orb port is not 3700. 
    props.setProperty("org.omg.CORBA.ORBInitialPort", "3700"); 

    InitialContext ic = new InitialContext(props); 

Шаг 2. Использовать глобальное имя JNDI целевого удаленного EJB в Погляди.

EJB 3.x, предполагая, что глобальное имя JNDI из "com.acme.FooRemoteBusiness":

FooRemoteBusiness foo = (FooRemoteBusiness) ic.lookup("com.acme.FooRemoteBusiness"); 

EJB 2.x, предполагая, что глобальное имя JNDI из "com.acme.FooHome":

Object obj = ic.lookup("com.acme.FooHome"); 

    FooHome fooHome = (FooHome) PortableRemoteObject.narrow(obj, FooHome.class);