Executar método de EJB em outro servidor

9 respostas
E

Para executar um método de um EJB eu faço desta forma:

try

{

InitialContext context = new InitialContext();

MeuBean meuBean = (MeuBean) context.lookup(MeuBean);

meuBean.consultar();

}

catch (NamingException e)

{

}

Mas agora estou precisando chamar este mesmo método deste mesmo EJB em outro servidor, como faço isto já que em nenhum momento eu especifiquei o IP do servidor?

Eli Flávio Bortolotte

9 Respostas

mgarcia

Para fazer isso vc precisa especificar em qual servidor quer se conectar, adicionando as propriedades necessárias para conexão com tal servidor no InitialContext…
Exemplo de Jboss:

Properties properties = new Properties();   
properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");   
properties.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");   
properties.put(Context.PROVIDER_URL, "jnp://172.16.0.202:1099"); //HOST:PORT JBOSS
initialContext = new InitialContext(properties);
E

mgarcia:
Para fazer isso vc precisa especificar em qual servidor quer se conectar, adicionando as propriedades necessárias para conexão com tal servidor no InitialContext…
Exemplo de Jboss:

Properties properties = new Properties(); properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); properties.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces"); properties.put(Context.PROVIDER_URL, "jnp://172.16.0.202:1099"); //HOST:PORT JBOSS initialContext = new InitialContext(properties);

Obrigado. Mas quais seriam os 2 primeiros parâmetros para o servidor Glassfish?

viniciusfaleiro

GlasshFish.dev

How do I access a Remote EJB (3.0 or 2.x) component from a non-Java EE web container like Tomcat or Resin?
Accessing a Remote EJB component from a non-Java EE web container is similar to the stand-alone java client case. However, the complication is that most Java web servers set the default JNDI name provider for the JVM, which prevents our appserver naming provider from being instantiated when the application uses the no-arg InitialContext() constructor. The solution is to explicitly instantiate an InitialContext(Hashtable) with the properties for our naming provider, as contained in GlassFish’s jndi.properties file.

Step 1. Instantiate the InitialContext
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”, “localhost”);

// 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);

Step 2. Use the global JNDI name of the target Remote EJB in the lookup.

EJB 3.x, assuming a global JNDI name of “com.acme.FooRemoteBusiness” :

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

EJB 2.x, assuming a global JNDI name of “com.acme.FooHome” :

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

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

Step 3. Add the necessary appserver code to the web server’s classpath.
See step 3 of stand-alone client access for the list of required .jars.

Step 4. For EJB 3.0 Remote access, use at least Glassfish V2 or Java EE 5 SDK(SJS AS 9) Update 1.
Builds from this point on will contain a required bug fix.
See https://glassfish.dev.java.net/issues/show_bug.cgi?id=920 for more details.

V

Olá,

Eu também preciso executar um bean remotamente, então segui as instruções citadas acima. No entanto, quando dou o context.Lookup, aparece a mensagem “Can’t find SerialContextProvider”. Tentei colocar na propriedade org.omg.CORBA.ORBInitialHost o meu ip (onde tenho o Glassfish instalado e iniciado) e também o ip de um servidor que tenho aqui na rede, onde o loguei com o Remote Desktop e iniciei o Glassfish.
Em alguns posts que encontrei falava que esse erro é porque o Glassfish não está iniciado, mas o meu está.
Também tentei ir no Admin Console em Configuration > ORB > IIOPListeners > orb-listener-1 e coloquei meu ip no network address. A porta está 3700. No servidor fiz a mesma coisa, porém coloquei o ip dele. E mesmo assim não funciona com nenhum dos dois. Os comandos que estou colocando são esses:

Properties propriedades = new Properties();

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

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

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

propriedades.setProperty(org.omg.CORBA.ORBInitialHost,  192.168.0.24); //meu ip

propriedades.setProperty(org.omg.CORBA.ORBInitialPort, 3700);

context = new InitialContext(propriedades);

Consulta consulta = (Consulta) context.lookup(Consulta); //o erro ocorre aqui

Já conferi essas propriedades em vários lugares e as pessoas executam dessa forma. Alguém saberia se está faltando alguma coisa, ou tem alguma dica de onde eu poderia buscar essa resposta. Estou começando a trabalhar com java.

Grata,
Viviane

J

Vc conseguiu resolver esse problema com o glassfish?

G

vc conseguiu resolver esse problema com o glassfish?
estou com esse erro tambem.

F

Estou também com este problema, alguém da uma luz…

F

Esqueci de postar o ERRO:

run: org.omg.CORBA.COMM_FAILURE: vmcid: SUN minor code: 201 completed: No at com.sun.corba.ee.impl.logging.ORBUtilSystemException.connectFailure(ORBUtilSystemException.java:3431) at com.sun.corba.ee.impl.logging.ORBUtilSystemException.connectFailure(ORBUtilSystemException.java:3452) at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.<init>(SocketOrChannelConnectionImpl.java:256) at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.<init>(SocketOrChannelConnectionImpl.java:269) at com.sun.corba.ee.impl.transport.SocketOrChannelContactInfoImpl.createConnection(SocketOrChannelContactInfoImpl.java:125) at com.sun.corba.ee.impl.protocol.CorbaClientRequestDispatcherImpl.beginRequest(CorbaClientRequestDispatcherImpl.java:188) at com.sun.corba.ee.impl.protocol.CorbaClientDelegateImpl.request(CorbaClientDelegateImpl.java:186) at com.sun.corba.ee.impl.protocol.CorbaClientDelegateImpl.is_a(CorbaClientDelegateImpl.java:352) at org.omg.CORBA.portable.ObjectImpl._is_a(ObjectImpl.java:112) at org.omg.CosNaming.NamingContextHelper.narrow(NamingContextHelper.java:69) at com.sun.enterprise.naming.impl.SerialContext.narrowProvider(SerialContext.java:355) at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:327) at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:271) at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:430) at javax.naming.InitialContext.lookup(InitialContext.java:392) at br.com.eeco.siceejb.patterns.ServiceLocator.getRemoteEJB(ServiceLocator.java:54) at br.com.eeco.sice.io.das.AbstractCtrl.getEJB(AbstractCtrl.java:37) at br.com.eeco.sice.io.das.AbstractCtrl.execConsulta(AbstractCtrl.java:53) at br.com.fenix.gui.components.IFrPesquisaSimples.pesquisar(IFrPesquisaSimples.java:225) at br.com.fenix.gui.generic.PGenericFiltro.pesquisar(PGenericFiltro.java:33) at br.com.fenix.gui.components.PanelPesquisaSimples.btnOkActionPerformed(PanelPesquisaSimples.java:138) at br.com.fenix.gui.components.PanelPesquisaSimples.access$100(PanelPesquisaSimples.java:23) at br.com.fenix.gui.components.PanelPesquisaSimples$2.actionPerformed(PanelPesquisaSimples.java:79) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272) at java.awt.Component.processMouseEvent(Component.java:6267) at javax.swing.JComponent.processMouseEvent(JComponent.java:3267) at java.awt.Component.processEvent(Component.java:6032) at java.awt.Container.processEvent(Container.java:2041) at java.awt.Component.dispatchEventImpl(Component.java:4630) at java.awt.Container.dispatchEventImpl(Container.java:2099) at java.awt.Component.dispatchEvent(Component.java:4460) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168) at java.awt.Container.dispatchEventImpl(Container.java:2085) at java.awt.Window.dispatchEventImpl(Window.java:2478) at java.awt.Component.dispatchEvent(Component.java:4460) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) Caused by: java.lang.RuntimeException: java.net.ConnectException: Connection refused: connect at org.glassfish.enterprise.iiop.impl.IIOPSSLSocketFactory.createSocket(IIOPSSLSocketFactory.java:340) at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.<init>(SocketOrChannelConnectionImpl.java:239) ... 46 more Caused by: java.net.ConnectException: Connection refused: connect at sun.nio.ch.Net.connect(Native Method) at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:507) at com.sun.corba.ee.impl.orbutil.ORBUtility.openSocketChannel(ORBUtility.java:106) at org.glassfish.enterprise.iiop.impl.IIOPSSLSocketFactory.createSocket(IIOPSSLSocketFactory.java:325) ... 47 more javax.naming.NamingException: Lookup failed for 'java:global/sice_ea_1.0/sice_ea_1.0-ejb/ManutencaoUsuarioBean' in SerialContext targetHost=192.168.0.116,targetPort=3700,orb'sInitialHost=localhost,orb'sInitialPort=3700 [Root exception is javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext targetHost=192.168.0.116,targetPort=3700,orb'sInitialHost=localhost,orb'sInitialPort=3700 [Root exception is org.omg.CORBA.COMM_FAILURE: vmcid: SUN minor code: 201 completed: No]] at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:442) at javax.naming.InitialContext.lookup(InitialContext.java:392) at br.com.eeco.siceejb.patterns.ServiceLocator.getRemoteEJB(ServiceLocator.java:54) at br.com.eeco.sice.io.das.AbstractCtrl.getEJB(AbstractCtrl.java:37) at br.com.eeco.sice.io.das.AbstractCtrl.execConsulta(AbstractCtrl.java:53) at br.com.fenix.gui.components.IFrPesquisaSimples.pesquisar(IFrPesquisaSimples.java:225) at br.com.fenix.gui.generic.PGenericFiltro.pesquisar(PGenericFiltro.java:33) at br.com.fenix.gui.components.PanelPesquisaSimples.btnOkActionPerformed(PanelPesquisaSimples.java:138) at br.com.fenix.gui.components.PanelPesquisaSimples.access$100(PanelPesquisaSimples.java:23) at br.com.fenix.gui.components.PanelPesquisaSimples$2.actionPerformed(PanelPesquisaSimples.java:79) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272) at java.awt.Component.processMouseEvent(Component.java:6267) at javax.swing.JComponent.processMouseEvent(JComponent.java:3267) at java.awt.Component.processEvent(Component.java:6032) at java.awt.Container.processEvent(Container.java:2041) at java.awt.Component.dispatchEventImpl(Component.java:4630) at java.awt.Container.dispatchEventImpl(Container.java:2099) at java.awt.Component.dispatchEvent(Component.java:4460) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168) at java.awt.Container.dispatchEventImpl(Container.java:2085) at java.awt.Window.dispatchEventImpl(Window.java:2478) at java.awt.Component.dispatchEvent(Component.java:4460) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) Caused by: javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext targetHost=192.168.0.116,targetPort=3700,orb'sInitialHost=localhost,orb'sInitialPort=3700 [Root exception is org.omg.CORBA.COMM_FAILURE: vmcid: SUN minor code: 201 completed: No] at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:276) at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:430) ... 35 more Caused by: org.omg.CORBA.COMM_FAILURE: vmcid: SUN minor code: 201 completed: No at com.sun.corba.ee.impl.logging.ORBUtilSystemException.connectFailure(ORBUtilSystemException.java:3431) at com.sun.corba.ee.impl.logging.ORBUtilSystemException.connectFailure(ORBUtilSystemException.java:3452) at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.<init>(SocketOrChannelConnectionImpl.java:256) at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.<init>(SocketOrChannelConnectionImpl.java:269) at com.sun.corba.ee.impl.transport.SocketOrChannelContactInfoImpl.createConnection(SocketOrChannelContactInfoImpl.java:125) at com.sun.corba.ee.impl.protocol.CorbaClientRequestDispatcherImpl.beginRequest(CorbaClientRequestDispatcherImpl.java:188) at com.sun.corba.ee.impl.protocol.CorbaClientDelegateImpl.request(CorbaClientDelegateImpl.java:186) at com.sun.corba.ee.impl.protocol.CorbaClientDelegateImpl.is_a(CorbaClientDelegateImpl.java:352) at org.omg.CORBA.portable.ObjectImpl._is_a(ObjectImpl.java:112) at org.omg.CosNaming.NamingContextHelper.narrow(NamingContextHelper.java:69) at com.sun.enterprise.naming.impl.SerialContext.narrowProvider(SerialContext.java:355) at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:327) at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:271) ... 36 more Caused by: java.lang.RuntimeException: java.net.ConnectException: Connection refused: connect at org.glassfish.enterprise.iiop.impl.IIOPSSLSocketFactory.createSocket(IIOPSSLSocketFactory.java:340) at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.<init>(SocketOrChannelConnectionImpl.java:239) ... 46 more Caused by: java.net.ConnectException: Connection refused: connect at sun.nio.ch.Net.connect(Native Method) at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:507) at com.sun.corba.ee.impl.orbutil.ORBUtility.openSocketChannel(ORBUtility.java:106) at org.glassfish.enterprise.iiop.impl.IIOPSSLSocketFactory.createSocket(IIOPSSLSocketFactory.java:325) ... 47 more Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at br.com.eeco.sice.io.das.AbstractCtrl.execConsulta(AbstractCtrl.java:53) at br.com.fenix.gui.components.IFrPesquisaSimples.pesquisar(IFrPesquisaSimples.java:225) at br.com.fenix.gui.generic.PGenericFiltro.pesquisar(PGenericFiltro.java:33) at br.com.fenix.gui.components.PanelPesquisaSimples.btnOkActionPerformed(PanelPesquisaSimples.java:138) at br.com.fenix.gui.components.PanelPesquisaSimples.access$100(PanelPesquisaSimples.java:23) at br.com.fenix.gui.components.PanelPesquisaSimples$2.actionPerformed(PanelPesquisaSimples.java:79) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272) at java.awt.Component.processMouseEvent(Component.java:6267) at javax.swing.JComponent.processMouseEvent(JComponent.java:3267) at java.awt.Component.processEvent(Component.java:6032) at java.awt.Container.processEvent(Container.java:2041) at java.awt.Component.dispatchEventImpl(Component.java:4630) at java.awt.Container.dispatchEventImpl(Container.java:2099) at java.awt.Component.dispatchEvent(Component.java:4460) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168) at java.awt.Container.dispatchEventImpl(Container.java:2085) at java.awt.Window.dispatchEventImpl(Window.java:2478) at java.awt.Component.dispatchEvent(Component.java:4460) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

F

RESOLVIDO:

Properties props = new Properties(); props.put("java.naming.provider.url", "iiop://192.168.0.116:3700"); props.setProperty("org.omg.CORBA.ORBInitialHost", "192.168.0.116"); props.setProperty("org.omg.CORBA.ORBInitialPort", "3700"); jndiContext = new InitialContext(props);

No meu caso funcionou correto…

Abraços…

Criado 8 de fevereiro de 2010
Ultima resposta 30 de nov. de 2010
Respostas 9
Participantes 7