Foros del Web » Programación para mayores de 30 ;) » Java »

EJB en forma local

Estas en el tema de EJB en forma local en el foro de Java en Foros del Web. Como puedo hacer para que el acceso a mis EJB se haga sólo en forma local????...
  #1 (permalink)  
Antiguo 17/11/2004, 07:15
 
Fecha de Ingreso: enero-2004
Mensajes: 144
Antigüedad: 20 años, 3 meses
Puntos: 0
EJB en forma local

Como puedo hacer para que el acceso a mis EJB se haga sólo en forma local????
  #2 (permalink)  
Antiguo 17/11/2004, 11:17
Avatar de aetrejo  
Fecha de Ingreso: septiembre-2004
Ubicación: Guatemala
Mensajes: 131
Antigüedad: 19 años, 7 meses
Puntos: 0
Pues solo extiendes las interfaces locales...

Código:
public interface NombreHome extends EJBLocalHome{
   //...
}

public interface Nombre extends EJBLocalObject {
   //...
}

public abstract class NombreBean implements EntityBean {
   //...
}
No sé si es a eso a lo que te refieres???
__________________

Si algo puede fallar... fallará.
  #3 (permalink)  
Antiguo 17/11/2004, 12:32
 
Fecha de Ingreso: enero-2004
Mensajes: 144
Antigüedad: 20 años, 3 meses
Puntos: 0
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
  #4 (permalink)  
Antiguo 17/11/2004, 14:30
Avatar de aetrejo  
Fecha de Ingreso: septiembre-2004
Ubicación: Guatemala
Mensajes: 131
Antigüedad: 19 años, 7 meses
Puntos: 0
Cita:
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?
Sí, esto es cierto.

Cita:
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();
Para conectarte:
Código:
 
 XXX iEJB = null;
    try {
      Context ctx = new InitialContext();
      XXXHome iH = (XXXHome) ctx.lookup("XXX");
      iEJB  = iH.create();
Cita:
Iniciado por Machine80
y otra cosa..

Esto tambien funciona para los beans de session stateless o solo para los entities????
Gracias
Funciona para ambos.
__________________

Si algo puede fallar... fallará.
  #5 (permalink)  
Antiguo 18/11/2004, 10:11
 
Fecha de Ingreso: enero-2004
Mensajes: 144
Antigüedad: 20 años, 3 meses
Puntos: 0
Otra cosilla:

Cuando la comunicación entre mi cliente y los EJB se hace en forma local, se sigue ocupando RMI??
  #6 (permalink)  
Antiguo 24/11/2004, 07:25
 
Fecha de Ingreso: enero-2004
Mensajes: 144
Antigüedad: 20 años, 3 meses
Puntos: 0
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????
  #7 (permalink)  
Antiguo 24/11/2004, 17:31
Avatar de hugo777  
Fecha de Ingreso: enero-2002
Ubicación: Lima, Perú
Mensajes: 757
Antigüedad: 22 años, 3 meses
Puntos: 1
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..
  #8 (permalink)  
Antiguo 25/11/2004, 06:59
 
Fecha de Ingreso: enero-2004
Mensajes: 144
Antigüedad: 20 años, 3 meses
Puntos: 0
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
  #9 (permalink)  
Antiguo 25/11/2004, 19:12
Avatar de hugo777  
Fecha de Ingreso: enero-2002
Ubicación: Lima, Perú
Mensajes: 757
Antigüedad: 22 años, 3 meses
Puntos: 1
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..
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:13.