style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

CRUD con jsf sin persistencia

Compañeros la duda es como poder realizar un SELECT, INSERT, UPDATE, DELETE con JSF, EJBS y MySQL he estado intentando hacerlo sin persistencia porque la mayoria de ejemplos que encuentro estan de esa forma y por requerimientos no puedo utilizar JPA.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

JDBC

Supongo que cuando dices sin persistencia te refieres a JPA o Hibernate o algun ORM, por lo tanto necesitas CRUD con JDBC directo.

De todas formas necesitas un DataSource hacia la base de datos. Te recomiendo que uses el modulo de JDBC de Spring, te va a simplificar mucho las cosas, ya que puedes hacer algo como esto, usando la clase SimpleJdbcTemplate:

jdbc.update("INSERT INTO tabla (campo1, campo2) values (?, ?)", valor1, valor2);

en vez de tener que abrir conexion, crear el PreparedStatement, ponerle los parametros, ejecutarlo, cerrarlo, cerrar la conexion.

Igualmente para queries:

jdbc.queryForList("SELECT campo1, campo2 FROM tabla WHERE condicion=? AND otracond=?", condicion1, condicion2);

Te va a devolver una lista de mapas, cada mapa representa una tupla, en vez de tener que abrir conexion, crear PreparedStatement, pasarle parametros, correr query, recorrer ResultSet, cerrarlo, cerrar el statement y cerrar la conexion.

Mas detalles en mi blog.

Imagen de Nopalin

Con EJB's?

Pero dice que puede utilizar EJB's, y que yo sepa los ejb's estan hechos para trabajar con JPA que no?

Imagen de luxspes

Tal ves seria conveniente

Tal ves seria conveniente que Santiago explicara cuales son los "requerimientos" que le impieden usar JPA (cuando al mismo tiempo puede usar EJB)... Tal ves le estan pidiendo algo para EJB 2.x (solo de pensarlo me dan escalofrios de terror)

Imagen de luxspes

Por otro lado, cuando dice

Por otro lado, cuando dice CRUD sin persistencia... tal ves se refiere deberas a sin persistencia... (haciendo CRUD sobre un java.util.List en la HttpSession)... aunque como menciona a MySQL... pues como que no hace sentido...

Imagen de benek

Un caso...

Este es un caso para la araña...

Necesitamos más detalle del requerimiento que te dieron Santiago. :-)

Saludos.

--
Javier Ramírez Jr.

Lo siento por la ausencia y

Lo siento por la ausencia y la demora en responder pero habia estado lejos de una pc por un buen rato... les comento un poco mi problema tengo proyecto de graduacion que debe implementar una aplicacion cliente para entidades y otra para operaciones, ademas un modulo ejb que sea la capa intermedio para mis operaciones con la interfaz visual que seria un proyecto web jsf, sin utilizar persistencia a la hora de realizar los mantenimientos.

De ante mando gracias y otra vez disculpas por la demora.

ezamudio, Lo triste del caso

ezamudio,

Lo triste del caso que asi tienen que ser creando los mantenimientos de la forma tradicional te muestro un ejemplo:

public ArrayList obtenerClientes() throws SQLException {
Connection cn = null;
Conexion oCon = new Conexion();
ResultSet rs = null;
Clientes clie;
try {
oCon.Conectar("root", "root");
cn = oCon.getCon();
Statement st = cn.createStatement();
rs = st.executeQuery("SELECT * FROM clientes");
while (rs.next()) {
clie = new Clientes(rs.getInt("idcliente"), rs.getString("nombre"), rs.getString("organizacion"), rs.getString("telefonos"), rs.getString("direccion"), rs.getString("fecha"));
listado.add(clie.toString());
}
} catch(SQLException ex) {
ex.printStackTrace();
}
return listado();
}

para serles sincero donde estoy teniendo mayor dificultad es como conectar los managed beans(JSF) con los ejbs, he estado leyendo un poco sobre initialcontext y todo eso pero no logro dar una, si me dieran una mano con eso se los agradeceria de por vida.

Herramientas

Estoy utilizando NetBeans 6.7, servidor GlassFish 2.1 y base de datos MySQL

Problemas con ArrayList

Ya logre conectar el ejb con el managed bean pero cuando quiero pasar un arraylist de un lugar a otro se pierde que podra ser?

Imagen de ezamudio

return listado() ?

tienes un método que se llama listado()? no deberías devolver simplemente listado, que es el ArrayList que estás llenando (y que no sé dónde lo creas porque no es en el método que pusiste)? Tal vez listado() crea el arreglo nuevamente cada vez que lo invocas y por eso no llegan datos del otro lado. Haz pruebas unitarias para determinar la causa de tu problema y luego ya te vas a los EJB.

Te muestro el codigo para

Te muestro el codigo para que veas como lo estoy probando son 4 proyectos:

1 donde estan las entidades (jar)
2 donde estan las operaciones de las entidades (jar)
3 el ejb donde se maneja la logica del negocio (ejb)
4 donde estan los jsf (war)

Esto viene del jar de operaciones:

    public ArrayList obtenerClientes() throws SQLException {
        ResultSet rs = null;
        Clientes clie;
        try {
            Conectar("root", "root");
            Statement st = getCn().createStatement();
            rs = st.executeQuery("SELECT * FROM clientes");
            while (rs.next()) {
                clie = new Clientes(rs.getInt("idcliente"), rs.getString("nombre"), rs.getString("organizacion"), rs.getString("telefonos"), rs.getString("direccion"), rs.getString("fecha"));
                listado.add(clie);
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return listado;
    }

Este del ejb ClientesBean:
(Aqui es donde se genera la exception cuando hace el return listado)

    public ArrayList obtenerClientes() throws SQLException {
        DatosClientes dClie = new DatosClientes();
        ArrayList listado = dClie.obtenerClientes();
        return listado;
    }

y este es donde se invoca el metodo en el managed bean:

    public void obtenerClientes() {
        try {
            InitialContext ic = new InitialContext();
            java.lang.Object obj = ic.lookup("ejb/ClientesBean");
            beans.ClientesRemoteHome home = (beans.ClientesRemoteHome) javax.rmi.PortableRemoteObject.narrow(obj, beans.ClientesRemoteHome.class);
            beans.ClientesRemote remote = (beans.ClientesRemote) home.create();
            listado = remote.obtenerClientes();
        } catch (Exception ex) {
            Logger.getLogger(ClientesBacking.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

La exception que me genera es:

(java.rmi.MarshaException) java.rmi.MarshalException: CORBA MARSHAL 1398079745 Maybe; nested org.omg.CORBA.MARSHAL: vmcid: SUN minor code: 257 completed: Maybe

Imagen de ezamudio

Serializable

Tu clase Clientes es Serializable?

Si aqui te dejo la

Si aqui te dejo la clase:

Esta es del jar entidades:

import java.io.Serializable;

public class Clientes implements Serializable {

    private int idcliente;
    private String nombre;
    private String organizacion;
    private String telefonos;
    private String direccion;
    private String fecha;

    public Clientes() {
    }

    public Clientes(int idcliente, String nombre, String organizacion, String telefonos, String direccion, String fecha) {
        this.setIdcliente(idcliente);
        this.setNombre(nombre);
        this.setOrganizacion(organizacion);
        this.setTelefonos(telefonos);
        this.setDireccion(direccion);
        this.setFecha(fecha);
    }

    /**
     * @return the idcliente
     */
    public int getIdcliente() {
        return idcliente;
    }

    /**
     * @param idcliente the idcliente to set
     */
    public void setIdcliente(int idcliente) {
        this.idcliente = idcliente;
    }

    /**
     * @return the nombre
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * @param nombre the nombre to set
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * @return the organizacion
     */
    public String getOrganizacion() {
        return organizacion;
    }

    /**
     * @param organizacion the organizacion to set
     */
    public void setOrganizacion(String organizacion) {
        this.organizacion = organizacion;
    }

    /**
     * @return the telefonos
     */
    public String getTelefonos() {
        return telefonos;
    }

    /**
     * @param telefonos the telefonos to set
     */
    public void setTelefonos(String telefonos) {
        this.telefonos = telefonos;
    }

    /**
     * @return the direccion
     */
    public String getDireccion() {
        return direccion;
    }

    /**
     * @param direccion the direccion to set
     */
    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }

    /**
     * @return the fecha
     */
    public String getFecha() {
        return fecha;
    }

    /**
     * @param fecha the fecha to set
     */
    public void setFecha(String fecha) {
        this.fecha = fecha;
    }

}

Espeficificacion

La especificacion para el modulo ejb es j2ee 1.4 para ver si esta relacionado al problema.

Problema solucionado

Gracias compañeros pude resolver el problema.

Como resolviste este problema

Santiago, estoy teniendo el mismo problema, como lo resolviste pera ver si resuelvo el mio.

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">