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

JBuilder + JBoss + EJB Entity CMP

Estas en el tema de JBuilder + JBoss + EJB Entity CMP en el foro de Java en Foros del Web. Hola, esoy intentando ahora hacer un EJB Entity CMP. Me gustaria saber si alguin me puede eyudar con esto, es que como lo estoy haciendo ...
  #1 (permalink)  
Antiguo 05/09/2006, 05:58
Avatar de pyanqn  
Fecha de Ingreso: noviembre-2005
Mensajes: 331
Antigüedad: 18 años, 5 meses
Puntos: 8
Información JBuilder + JBoss + EJB Entity CMP

Hola, esoy intentando ahora hacer un EJB Entity CMP. Me gustaria saber si alguin me puede eyudar con esto, es que como lo estoy haciendo con JBuilder, no estoy seguro de que manera se integrara este ultimo con JBoss. Hasta el momento, tengo todo configurado, he podido hecer Deploy de EJB Session.

Mis dudas son:

1.- Cualquier contenedor de EJB que maneje Entitys CMP debe hacer uso de Hibernate o algo así para persistir clases?
2.- Si se trate de Entitys BMP, como debieran de gestionarse las conexiones a la base de datos? por medio de EJB Session sin estado?
3.- Para mi caso puntual de un Entity CMP me podrian enviar algunos links, sobre cuestiones como las que pregunte?

Saludos
  #2 (permalink)  
Antiguo 06/09/2006, 06:14
Avatar de pyanqn  
Fecha de Ingreso: noviembre-2005
Mensajes: 331
Antigüedad: 18 años, 5 meses
Puntos: 8
Bueno, lo anterior ya esta, logre la integracion JBuilder JBoss y desarrollar mi primer EJB Entity CMP, el tema es que ahora necesito accederlo desde una aplicación. Para ello he visto que se hae uso de un patron Facade. Bien el tema es de que manera hago cosas como:

debitar de una cuenta bancaria y acreditar en otra. Esto en una unica transacción. El facade seria un EJB Session Stateful?

Saludos
  #3 (permalink)  
Antiguo 06/09/2006, 07:17
Avatar de pyanqn  
Fecha de Ingreso: noviembre-2005
Mensajes: 331
Antigüedad: 18 años, 5 meses
Puntos: 8
Bueno tambien podria ser un ejemplito de como hacer un ABM en un EJB entity
  #4 (permalink)  
Antiguo 07/09/2006, 09:21
Avatar de pyanqn  
Fecha de Ingreso: noviembre-2005
Mensajes: 331
Antigüedad: 18 años, 5 meses
Puntos: 8
hasta ahora puedo editar datos de mi cliente, es decir puedo hacer modificaciones. Pero no puedo dar altas, creo que el problema esta por el lado del autoincremento de la clave. podrian ayudarme con esto, aqui mando un fragmento del metodo que hace el alta

public void newCliente(String nombre, String direccion) {
try {
javax.naming.Context context = new javax.naming.InitialContext();
Object object = context.lookup("java:comp/env/ejb/Clientes");
ClientesHome cliHome = (ClientesHome) javax.rmi.PortableRemoteObject.narrow(object, ClientesHome.class);
Clientes cli = cliHome.create();
cli.setNombreCliente(nombre);
cli.setDireccionCliente(direccion);
}
catch (NamingException ex) {
ex.printStackTrace();
}
catch (ClassCastException ex) {
ex.printStackTrace();
}
catch (Exception ex) {
ex.printStackTrace();
}
}

Este metodo esta en el EJB Session ClientesSes, funciona como facade del Entity Clientes.

Tambien mando el descriptor de despliegue:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jbosscmp-jdbc PUBLIC "-//JBoss//DTD JBOSSCMP-JDBC 4.0//EN" "http://www.jboss.org/j2ee/dtd/jbosscmp-jdbc_4_0.dtd">

<jbosscmp-jdbc>
<defaults>
<datasource>java:/MySqlDS</datasource>
<datasource-mapping>mySQL</datasource-mapping>
<create-table>false</create-table>
<alter-table>false</alter-table>
<remove-table>false</remove-table>
<read-only>false</read-only>
<row-locking>false</row-locking>
<unknown-pk>
<unknown-pk-class>java.lang.Integer</unknown-pk-class>
<field-name>idCliente</field-name>
<read-only>false</read-only>
<column-name>id_cliente</column-name>
<jdbc-type>INTEGER</jdbc-type>
<sql-type>INTEGER</sql-type>
</unknown-pk>
</defaults>
<enterprise-beans>
<entity>
<ejb-name>Clientes</ejb-name>
<create-table>false</create-table>
<remove-table>false</remove-table>
<read-only>false</read-only>
<row-locking>false</row-locking>
<table-name>clientes</table-name>
<cmp-field>
<field-name>idCliente</field-name>
<column-name>id_cliente</column-name>
</cmp-field>
<cmp-field>
<field-name>nombreCliente</field-name>
<column-name>nombre_cliente</column-name>
</cmp-field>
<cmp-field>
<field-name>direccionCliente</field-name>
<column-name>direccion_cliente</column-name>
</cmp-field>
<unknown-pk>
<unknown-pk-class>java.lang.Integer</unknown-pk-class>
<field-name>idCliente</field-name>
<read-only>false</read-only>
<column-name>id_cliente</column-name>
<jdbc-type>INTEGER</jdbc-type>
<sql-type>INTEGER</sql-type>
<auto-increment />
</unknown-pk>
</entity>
</enterprise-beans>
</jbosscmp-jdbc>
  #5 (permalink)  
Antiguo 07/09/2006, 11:02
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
No se si lo entiendo bien, ¿se supone que nos tenemos que montar una aplicación con los trozos que nos pones, poner el resto de descriptores, montarnos la bdd, el JBoss, etc etc... y adivinar las peticiones que haces y el mensaje de error que te da?

¿No es un ponerlo un poco difícil para que te ayuden?

Respecto a las preguntas originales, quizá sería bueno empezar por la especificación de EJB y algún tutorial básico sobre el tema, por que esos son conceptos generales que deberías tener muy claros antes de empezar a trabajar con EJB. Es un tema bastante complejo como para abordarlo "al asalto" directamente sobre pruebas .

Suerte
  #6 (permalink)  
Antiguo 08/09/2006, 06:57
Avatar de pyanqn  
Fecha de Ingreso: noviembre-2005
Mensajes: 331
Antigüedad: 18 años, 5 meses
Puntos: 8
Envio los descriptores:

jboss:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 4.0//EN" "http://www.jboss.org/j2ee/dtd/jboss_4_0.dtd">

<jboss>
<enterprise-beans>
<entity>
<ejb-name>Clientes</ejb-name>
<local-jndi-name>Clientes</local-jndi-name>
<call-by-value>true</call-by-value>
<read-only>false</read-only>
</entity>
<session>
<ejb-name>ClientesSes</ejb-name>
<jndi-name>ClientesSes</jndi-name>
</session>
</enterprise-beans>
</jboss>

ejb-jar

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">

<ejb-jar>
<display-name>EJBMod02</display-name>
<enterprise-beans>
<entity>
<ejb-name>Clientes</ejb-name>
<local-home>ejb_entidad_02.ClientesHome</local-home>
<local>ejb_entidad_02.Clientes</local>
<ejb-class>ejb_entidad_02.ClientesBean</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>java.lang.Object</prim-key-class>
<reentrant>False</reentrant>
<cmp-version>2.x</cmp-version>
<abstract-schema-name>Clientes</abstract-schema-name>
<cmp-field>
<field-name>idCliente</field-name>
</cmp-field>
<cmp-field>
<field-name>nombreCliente</field-name>
</cmp-field>
<cmp-field>
<field-name>direccionCliente</field-name>
</cmp-field>
</entity>
<session>
<ejb-name>ClientesSes</ejb-name>
<home>ejb_entidad_02.ClientesSesHome</home>
<remote>ejb_entidad_02.ClientesSes</remote>
<ejb-class>ejb_entidad_02.ClientesSesBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
<ejb-local-ref>
<ejb-ref-name>ejb/Clientes</ejb-ref-name>
<ejb-ref-type>Entity</ejb-ref-type>
<local-home>ejb_entidad_02.ClientesHome</local-home>
<local>ejb_entidad_02.Clientes</local>
<ejb-link>Clientes</ejb-link>
</ejb-local-ref>
</session>
</enterprise-beans>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>Clientes</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
<container-transaction>
<method>
<ejb-name>ClientesSes</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>

y por ultimo jbosscmp-jdbc

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jbosscmp-jdbc PUBLIC "-//JBoss//DTD JBOSSCMP-JDBC 4.0//EN" "http://www.jboss.org/j2ee/dtd/jbosscmp-jdbc_4_0.dtd">

<jbosscmp-jdbc>
<defaults>
<datasource>java:/MySqlDS</datasource>
<datasource-mapping>mySQL</datasource-mapping>
<create-table>false</create-table>
<alter-table>false</alter-table>
<remove-table>false</remove-table>
<row-locking>false</row-locking>
<unknown-pk>
<unknown-pk-class>java.lang.Integer</unknown-pk-class>
<field-name>idCliente</field-name>
<column-name>id_cliente</column-name>
<jdbc-type>INTEGER</jdbc-type>
<sql-type>INTEGER</sql-type>
<auto-increment />
</unknown-pk>
<entity-command name="mysql-get-generated-keys" />
</defaults>
<enterprise-beans>
<entity>
<ejb-name>Clientes</ejb-name>
<datasource>MySqlDS</datasource>
<datasource-mapping>mySQL</datasource-mapping>
<create-table>false</create-table>
<remove-table>false</remove-table>
<read-only>false</read-only>
<row-locking>false</row-locking>
<table-name>clientes</table-name>
<cmp-field>
<field-name>idCliente</field-name>
<column-name>id_cliente</column-name>
</cmp-field>
<cmp-field>
<field-name>nombreCliente</field-name>
<column-name>nombre_cliente</column-name>
</cmp-field>
<cmp-field>
<field-name>direccionCliente</field-name>
<column-name>direccion_cliente</column-name>
</cmp-field>
<unknown-pk>
<unknown-pk-class>java.lang.Integer</unknown-pk-class>
<field-name>idCliente</field-name>
<read-only>false</read-only>
<column-name>id_cliente</column-name>
<jdbc-type>INTEGER</jdbc-type>
<sql-type>INTEGER</sql-type>
</unknown-pk>
</entity>
</enterprise-beans>
</jbosscmp-jdbc>

Utilizando el codigo enviado anteriormente, esto es capaz de modificar datos, pero no de insertar datos en la base.

Tambien mando

Clientes.java

package ejb_entidad_02;

import javax.ejb.EJBLocalObject;

public interface Clientes
extends EJBLocalObject {

public Object getIdCliente();

public void setNombreCliente(String nombreCliente);

public String getNombreCliente();

public void setDireccionCliente(String direccionCliente);

public String getDireccionCliente();
}

ClientesBeans

package ejb_entidad_02;

import javax.ejb.EntityBean;
import javax.ejb.EntityContext;
import javax.ejb.CreateException;
import javax.ejb.RemoveException;

public abstract class ClientesBean
implements EntityBean {
EntityContext entityContext;
public Object ejbCreate() throws CreateException {
return null;
}

public void ejbPostCreate() throws CreateException {
}

public void ejbRemove() throws RemoveException {
}

public abstract void setIdCliente(Object idCliente);

public abstract Object getIdCliente();

public abstract void setNombreCliente(String nombreCliente);

public abstract String getNombreCliente();

public abstract void setDireccionCliente(String direccionCliente);

public abstract String getDireccionCliente();

public void ejbLoad() {
}

public void ejbStore() {
}

public void ejbActivate() {
}

public void ejbPassivate() {
}

public void unsetEntityContext() {
this.entityContext = null;
}

public void setEntityContext(EntityContext entityContext) {
this.entityContext = entityContext;
}
}

ClientesHome

package ejb_entidad_02;

import javax.ejb.EJBLocalHome;
import javax.ejb.CreateException;
import javax.ejb.FinderException;

public interface ClientesHome
extends EJBLocalHome {

public Clientes create() throws CreateException;

public Clientes findByPrimaryKey(Object pk) throws FinderException;
}
  #7 (permalink)  
Antiguo 08/09/2006, 07:55
Avatar de pyanqn  
Fecha de Ingreso: noviembre-2005
Mensajes: 331
Antigüedad: 18 años, 5 meses
Puntos: 8
por si me olvide, la taba en la base de datos se llama clientes y tiene los campos id_cliente, nombre_cliente, direccion_cliente. Todo no aceptan valores nulos. id_cliente, es la clave primaria y es autonumerica.
  #8 (permalink)  
Antiguo 08/09/2006, 09:08
Avatar de pyanqn  
Fecha de Ingreso: noviembre-2005
Mensajes: 331
Antigüedad: 18 años, 5 meses
Puntos: 8
Ahora si esta es la salida de JBoss de pues de disparar newCliente(String,String) desde el cliente. Como sigue hago la llamada al cliente...

public void btnNuevo_actionPerformed(ActionEvent actionEvent) {
String nombre = txtNombre.getText();
String dire = txtDireccion.getText();
try{
clienteEJB.newCliente(nombre, dire);
}
catch(Exception err){err.printStackTrace();}
}

Y defino el contexto:

public Frame1() {
try {
setDefaultCloseOperation(EXIT_ON_CLOSE);
jbInit();
//A continuacion se carga el contexto y otras cosas
p.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.int erfaces.NamingContextFactory");
p.put(Context.PROVIDER_URL,"jnp://srv_backup_xp:1099");
Context contexto = new InitialContext(p);
Object ref = contexto.lookup("ClientesSes");
System.out.println("Contexto encontrado...");
clientesSesHome = (ClientesSesHome) PortableRemoteObject.narrow(ref,ClientesSesHome.cl ass);
clienteEJB = clientesSesHome.create();
}
catch (Exception exception) {
exception.printStackTrace();
}
}
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 08:56.