| |||
Pero esto lo que hace que las conexiones a mis EJB se realicen sólo desde el mismo computador, o sea, remotamente es imposible conectarse cierto? y otra cosa. como me conecto a ellos?? por que así no me funciona XXX iEJB = null; try { Context ctx = new InitialContext(); XXXHome iH = (XXXHome) javax.rmi.PortableRemoteObject.narrow(ctx.lookup(" XXX"), XXXHome.class); iEJB = iH.create(); y otra cosa.. Esto tambien funciona para los beans de session stateless o solo para los entities???? Gracias Última edición por Machine80; 17/11/2004 a las 12:40 |
| ||||
Cita: Sí, esto es cierto.
Iniciado por Machine80 Pero esto lo que hace que las conexiones a mis EJB se realicen sólo desde el mismo computador, o sea, remotamente es imposible conectarse cierto? Cita: Para conectarte:
Iniciado por Machine80 y otra cosa. como me conecto a ellos?? por que así no me funciona XXX iEJB = null; try { Context ctx = new InitialContext(); XXXHome iH = (XXXHome) javax.rmi.PortableRemoteObject.narrow(ctx.lookup(" XXX"), XXXHome.class); iEJB = iH.create();
Código:
XXX iEJB = null; try { Context ctx = new InitialContext(); XXXHome iH = (XXXHome) ctx.lookup("XXX"); iEJB = iH.create(); Cita: Funciona para ambos.
Iniciado por Machine80 y otra cosa.. Esto tambien funciona para los beans de session stateless o solo para los entities???? Gracias
__________________ Si algo puede fallar... fallará. |
| |||
No resulta conectarlo localmente. este es parte de mi xml de configuracion: <session> <ejb-name>Interconsultas</ejb-name> <ejb-class>interconsultas.InterconsultasBean</ejb-class> <local-home> interconsultas.InterconsultasHome </local-home> <local> interconsultas.Interconsultas </local> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> </session> Interconsultas f1EJB=null; try { Context ctx = new InitialContext(); InterconsultasHome iH = (InterconsultasHome) ctx.lookup("Interconsultas"); f1EJB = iH.create(); Me dice que no encuentra la clase que puede estar pasando???? |
| ||||
Hola Machine80, lo que dice aetrejo es ok, para conectarse de forma local a los EJB, solo para resumir: 1) Implementar las interfaces locales en los EJB, en lugar de las remotas. Ahora que si quieres acceder local y remotamente, se puede implementar ambas interfaces a la vez, claro ya no tendrias tres, sino cinco archivos. 2) En el ejb-jar.xml debes registrar las interfaces locales. Segun veo el codigo de tu descriptor ya lo has hecho. 3) Para acceder, es a travès del InitialContext directamente haciendo un lookup. tal como el codigo de aetrejo te lo muestra. Esto implica que el cliente y el EJB se encuentren en la misma JVM, es decir dentro del mismo servidor de aplicaciones corriendo. Recuerda que ya yu cliente no podria ser un cliente desktop, porque estaria fuera del contexto del servidor de aplicaciones. Aqui tu cliente tiene que ser un servlet, un JSP, u otro EJB. 4) En las comunicaciones locales, efectivamente ya no interviene RMI. Por eso, ya no se necesita manejar las RemoteException, ni utilizar el PortableRemoteObject. Para detectar el error, primero verifica que el EJB este correctamente deployado. En tu servidor de aplicaciones te debe salir si esta en estado activo el EJB, y verifica cual es JNDI local que le has configurado en el descriptor. Luego verifica que el programa cliente sea uno de los que te mencione y este dentro del mismo servidor de aplicaciones corriendo. El error que mencionas, dice que no encuentra la clase, es probable que falte incluir algun jar a tu lib de tu aplicacion, o que esten el cliente y el EJB dentro de un EAR, asi ambos podran verse. Espero te ayude,
__________________ Saludos, H@C.. |
| |||
Tengo otro error, ya no de la clase sino de localización jboss.xml en conteiner EJB <session> <ejb-name>Interconsultas</ejb-name> <jndi-name>Interconsultas</jndi-name> </session> ejb-jar.xml en el container <session> <ejb-name>Interconsultas</ejb-name> <ejb-class>interconsultas.InterconsultasBean</ejb-class> <local-home> interconsultas.InterconsultasHome </local-home> <local> interconsultas.Interconsultas </local> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> </session> public interface Interconsultas extends EJBLocalObject { ...declara metodos } public class InterconsultasBean implements SessionBean { ... implementa metodos } public interface InterconsultasHome extends EJBLocalHome { public Interconsultas create() throws CreateException; } el EJB (Interconsultas) esta correctamente deployado Log de jboss: ... 08:53:32,531 INFO [DLQ] Bound to JNDI name: queue/DLQ 08:53:32,546 INFO [JmsXA] Bound connection factory for resource adapter for ConnectionManager 'jboss.jca:service=TxCM,name=JmsXA to JNDI name 'java:/JmsXA' 08:53:33,562 INFO [EjbModule] Deploying Interconsultas 08:53:33,843 INFO [EjbModule] Deploying Especialidad .... El error que me sale es: 08:55:04,640 INFO [STDOUT] javax.naming.NameNotFoundException: Interconsultas not bound 08:55:04,640 INFO [STDOUT] at org.jnp.server.NamingServer.getBinding(NamingServe r.java:495) 08:55:04,640 INFO [STDOUT] at org.jnp.server.NamingServer.getBinding(NamingServe r.java:503) 08:55:04,640 INFO [STDOUT] at org.jnp.server.NamingServer.getObject(NamingServer .java:509) 08:55:04,640 INFO [STDOUT] at org.jnp.server.NamingServer.lookup(NamingServer.ja va:282) 08:55:04,640 INFO [STDOUT] at org.jnp.interfaces.NamingContext.lookup(NamingCont ext.java:530) 08:55:04,640 INFO [STDOUT] at org.jnp.interfaces.NamingContext.lookup(NamingCont ext.java:509) 08:55:04,640 INFO [STDOUT] at javax.naming.InitialContext.lookup(InitialContext. java:347) 08:55:04,640 INFO [STDOUT] at interconsultas.formulario1.SFormularioGeneral.doGe t(SFormularioGeneral.java:61) 08:55:04,640 INFO [STDOUT] at javax.servlet.http.HttpServlet.service(HttpServlet .java:697) la linea 61 de SFormularioGeneral.java (q es un servltet) es 57 Interconsultas f1EJB=null; 58 try { 59 60 Context ctx = new InitialContext(); 61 InterconsultasHome iH = (InterconsultasHome) ctx.lookup("Interconsultas"); 62 f1EJB = iH.create(); O sea, no encuentra Interconsultas en jboss.xml hay algun tag especial para indicar el jndi localmentemente???? Estoy usando jboss (que incorpora tomcat 5) Última edición por Machine80; 25/11/2004 a las 07:04 |
| ||||
HOla, haber prueba cambiando: 1) El descriptor de tu EJB a: <?xml version="1.0" encoding="UTF-8"?> <jboss> <enterprise-bean> <ejb-name>ArticuloEJB</ejb-name> <local-jndi-name>ejb/ArticuloEJBLocal</local-jndi-name> </enterprise-bean> </jboss> 2) La llamada de tu EJB desde tu cliente: Context ctx = new InitialContext(); LocalArticuloEJBHome articuloHome = (LocalArticuloEJBHome)ctx.lookup("local/ArticuloEJB"); articulos = articuloHome.findAllArticulos(); System.out.println( "Size articulos Entity: " + articulos.size() ); Espero te ayude,
__________________ Saludos, H@C.. |