Tutorial: EJB, Persistencia y PostgreSQL en NetBeans 6.5


Hola a todos de nuevo por aquí retomando la creación de pequeños tutoriales en base a las prácticas desarrollando en mi diario aprendizaje. Esta vez veremos una forma rápida de como crear y usar un EJB utilizando persitencia de datos con TopLink y nuestro querido gestor de base de datos, PostgreSQL. No hablare sobre la parte teórica, porque como dije anteriormente eso lo podemos encontrar en cualquier página de internet que trate el tema. Bueno entonces manos a la obra…

Para empezar lo primero que debemos tener es una conexión activa a nuestra base de datos creado desde Netbeans; para este caso trabajare con una base de datos bd_tutorial que tengo de prueba, la cual tiene 2 tablas (Productos y DetalleProductos) y la que muestro a continuación.

tablasUna vez validado esto, ahora crearemos nuestro modulo EJB; para esto lo hacemos desde nuestro NetBeans, click en nuevo y luego seleccionamos Java EE y dentro de esta opción escogemos «EJB Module», ponemos el nombre, del módulo en este caso EJBDemo, seleccionamos como servidor a GlassFish y finalizamos.

crearejb

Ya tenemos nuestro módulo EJB listo para crearle toda la lógica necesaria para obtener la información de las tablas de nuestra base de datos.

Ahora lo que haremos sera crear las clases entidad que representaran a nuestras tablas de la base de datos. Para esto hacemos click derecho en el módulo creado y nos dirigimos a la opción «Other» y luego en la ventana de opciones, seleccionamos «Persitence» y una vez alli seleccionamos «Entity Classes From DataBase»

entitdad

Le damos click en siguiente y nos aparecera una ventana en donde podemos ver la opción «Data Source», desplegamos y seleccionamos «New Data source» y luego alli se nos mostrara una pequeña ventana en donde ingresaremos el nombre que reprentara a nuestro «Data Source», que en este caso le pondremos jdbc/ejb y el «Database Connection» que es en donde escogeremos la conexión a la base de datos que habiamos agregado al inicio.

conexion

Una vez realizado este proceso, automaticamente se nos mostrara en el panel izquierdo todas las tablas creadas en esta base de datos. Ahora seleccionaremos la(s) tabla(s) con la que trabajaremos; para este caso seleccionaremos solo la tabla «Productos», y ésta como se muestra en la imagen pasaria al panel derecho.

entidadproducto

Le damos click en siguiente y a continuación se nos muestra una ventana en donde tenemos el nombre de la tabla (lado izquierdo) y el nombre de la clase que representa a esta tabla (lado derecho), el nombre del proyecto, ingresaremos el nombre del paquete en donde se guardara la clase al cual llamaremos org.ejb.entidad.

entidadproducto_1

fijense que en la parte de abajo tenemos un boton que dice «Create Persistence Unit» le damos click alli y se nos mostrara una ventana con lo siguiente

unit

Alli podemos ver el nombre de la unidad de persistencia, el framework que proporcionara la persitencia y el Data Source que habiamos creado en un paso anterior; y luego click en crear.

Una vez hecho esto le damos click en siguiente a la ventana activa y alli vemos el tipo de mapeo de los datos, que para este caso lo dejamos por defecto y luego finalizar. Luego de esto tendremos la siguiene estructura

ejbcreadoVemos el «persistence.xml» que es en donde tenemos referencia a la base de datos mediante el DataSource, el nombre del proveedor para la persistencia (TopLink) y el nombre de unidad de persistencia, observamos las tablas de la base de datos y la clase «Productos.java».

Ahora lo que haremos sera crear las clases que implementaran los métodos para toda la lógica, estas clases serán del tipo SessionBean, entonces lo que haremos es darle click derecho al proyecto, New y nos ubicamos en «persistence» y luego seleccionamos «Session Beans For Entity Classes», que como nos podemos dar cuenta, creara las clases en base a la clase que representa la entidad, que en este caso es «Productos.java», le damos click en siguiente y vemos la clase  Producto en el panel izquierdo, lo seleccionamos y damos click en Add para pasarlo al panel derecho. Luego click en siguiente y nos aparecera una ventana con los datos recogidos anteriormente, si gustan el nombre del paquete lo pueden cambiar para de esta forma tener estas clases separadas de las entidades, para este caso le puse  org.ejb.beans y luego seleccionamos Remote para el tipo de interface y finalizar.

sessionbean2

Ahora tendremos la siguiente estructura, ya con las clases del tipo SessionBean creadas y los métodos implelementados.

estructura1

Una vez hecho todo esto, solo nos quedaria deployarlo, para esto click derecho en el proyecto y seleccionamos deploy, si todo salio bien ya tendremos desplegado nuestro EJB en nuestro servidor Glassfish como podemos ver en la imagen.

glassfish

Bueno, con esto ya tenemos desplegado nuestro EJB pero ahora necesitamos utilizarlo en algún sitio. Para esto crearemos un proyecto web (imagino que ya saben como xD) al que llamaremos «AppWeb_EJB» y luego dentro del  proyecto crearemos un servlet al que llamaremos «appservlet_ejb» el cual es el que se encargaria de invocar a nuestro EJB.

Para esto dentro del método processRequest del servlet hacemos click derecho y seleccionamos la opción «Insert Code» y nos aparecera un menú emergente en el que escogemos la opción «Call Enterprise Bean..» y luego alli escogemos nuestro bean que en este caso es ProductosFacade como indica la figura

call1

Le damos click en OK y veremos que se agregó la referencia del EJB a nuestro proyecto en la parte de las librerias asi como en nuestro servlet como se puede observar en la figura

referenciaEntoces solo nos quedaria utilizar los metodos proporcionado por este EJB, para este caso utilizaremos el método «findAll» que es el que se encargaría de mostrarme toda la lista de productos, el cual mostramos en el siguiente código

servlet

Y luego desde nuestra página index,jsp solo crearemos la referencia a este servlet de la siguiente manera

index

Y listo, ejecutamos el proyecto web y estaremos mostrando los productos existentes.

Bueno, espero se haya entendido, trate de hacerlo lo mas «explicable» posible; como entenderan a veces es algo dificil poder plasmar en palabras este tipo de procesos, pero se hace lo que se puede.

Descarga el ejemplo: EJB

41 comentarios en “Tutorial: EJB, Persistencia y PostgreSQL en NetBeans 6.5

  1. Hola Nachxs

    Muchas gracias por el tutorial. Empiezo a trabajar con aplicaciones web y me ha sacado de bastantes dudas.
    Echare un vistazo al blog a ver si encuentro mas cosas que me ayuden.

    Muchas gracias.

  2. Hola!!!

    El tutorial es muy bueno pero no me saca de la duda de para que sirve la unidad de persistencia, lo que pasa es que estoy haciendo un proyecto pero quiero saber en que me sirve la unidad de persistencia sino puedo conectar la base de datos, agradeceria tu ayuda y me pudieras escribir a mi correo

    saludos

  3. hola sos un capo al poner estos tutos…son demasiado utiles y lo mejor es justamente que no hay teoria solo practica.
    Este es un tema espinoso para mi ya q no se por donde comenzar con la Persistencia en Java, si tenes algun tuto recomendado para sacarmme esa duda bienvenido sea…y gracias de antemano

  4. hola muchas gracias y si he creado una datasource y ahora no lo uso poruqe quedo mal creado y deseo eliminarlo como lo hago????

    ya que necesito usar ese mismo nombre que le puse al datasource que cree de manera erronea

    es decir donde uno le pone el nombre al datasource y le da la conexion a la bd

    he creado un datasource malo y deseo eliminarlo como lo hago??

    gracias

  5. hola, buen tutorial, pero podrias explicar como insertar datos en el detalle de productos, ya que se crean 2 clases entidad puesto que hay 2 llaves primarias.

    • Julia, perdona la tardanza para responder, bueno con respecto a tu inquietud dejarme crear un pequeño tutorial con respecto a lo que me dices y lo estaré publicando.
      Gracias por leer el blog.

      Saludos.

  6. hola.Primero quiero agradecerte por este tutorial, ya que me parecio muy bueno y practico, y segundo que todo queria saber que debo hacer si en vez de utilizar un proyecto web, deseo crear una aplicacion de escritorio.
    De antemano muchas gracias..

  7. Hola,soy programador en .net y estoy empezando a entrar el extenso mundo de java. Despues de muchas horas buscando por internet todo tipo de información encontré este blog que me sacado de muchísimas dudas que tenía, te felicito por tu forma de explicar, clara y sencilla, para novatos como nosotros es fundamental, asi que gracias por tu tiempo y dedicatoria y te animo a que continues porque vale la pena lo que haces.
    Saludos cordiales.

  8. My buen tutorial. Es simple y sensillo, pero tiene todo lo necesario para realizarlo paso a paso. Además, no es un ejemplo como el que se encuentra en cualquier web, este funciona.
    Saludos y felicitaciones.

  9. HOLA. MUCHAS GRACIAS AL AUTOR DE ESTE TUTORIAL PUES ESTA MUY BIEN EXPLICADO Y YA PUDE CONECTAR LAS BASES DE DATOS. DESEO QUE DIOS TE BENDIGA Y TE DE MAS INTELIGENCIA Y SABIDURIA YA QUE ERES UN GENIO.
    CHAO.
    DESDE BOYACA COLOMBIA.

  10. HOLA OTRA VEZ, QUIERO SABER COMO SE LE AGREGAN, BORRAN Y MODIFICAN DATOS A LA BASE DE DATOS, AHI MISMO. SIN TENER QUE ABRIR OTRO PROYECTO U CONECTAR CON OTRO PROGRAMA.
    GRACIAS, Y ESPERO TU RESPUESTA EN MI CORREO.

  11. Hola Nachxs veo que eres muy bueno en netbeans oye me podrias ayudar con un ejemplo en netbeans para la captura de calificaciones, mmm es que aun no se como hacerle asi que si me puedes ayudar te lo agradeceria infinitamente

  12. que tal nachxs tengo un serio problema que logro entender. realice el tutorial con la diferencia que use mi conexion a una bd en oracle 10g la cual funciona corectamente. como tiene una totalidad de casi 500 mil registros use la funcion count para realizar una prueba rapida. Pero me arroja un error en la consola de error while binding jndi name org.ejb.beans.Deta200701FacadeRemote…(y mas..)
    … mas abajo
    NameAlreadyBoundException: Use rebind to override

    Lo mas raro de todo esto es que la primera vez compilo apage mi ordenador quise probarlo y este error salio y no ha dejado de salir
    Ojala puedes leer mi peticion y mejor aun me puedas ayudar gracias

  13. solo para aclarar algo
    1 No logro entender el error nose por que ahora no me arroja el resultado de la primera vez (cargaba el navegador y arrojaba el count d la tabla)

    2 ahora no carga y tan solo me muestra en la consola ese error del override
    gracias

  14. Hola como todos te voy a decir lo mismo, el tuto esta lo mas de bueno para personas que se inician, te cuento yo ya hice lo mismo que tu hiciste pero para llegar a eso me pase un monoton de tiempo y no entiendo porq no vi este tuto antes, ya que en serio se ve que sabe del asunto queria ver si puedes ayudarme un poquito con la insersion de una imagen y la recuperacion de la misma, en jsp encuentro algunos tutoriales pero hablan de tomcat y eso y la verdad no me sale, ante todo te agradezco el hecho de tan solo leer este mensaje, Te cuidas y Q.D.B.

  15. Buenas.

    estoy con netbeans 6.8, estoy intentando añadir el session bean for entity clases, para eso hago lo que pones, New>Other>Persistence —> y en esta parte me aparecen todas las opciones que te aparecen a ti, menos Session Bean For Entity Classes 😯

    Sabes a que puede deberse?

    Muchas gracias

  16. Hola excelente tutorial amigo, bueno te explico que lleve a cabo los pasos que mencionas y todo salio bien, el problema que tengo es el siguiente:

    Estoy corriendo la aplicacion y trayendome los datos de la tabla Productos, hasta ahi perfecto, pero al momento de yo agregar directamente productos a esa tabla, cuando le vuelvo a dar clic al link de productos no me lista el nuevo producto que agregue, me lista los productos viejos solamente, tengo que hacer un nuevo deploy para que asi me muestre los productos. Saludos y espero me puedes ayudar.

  17. Buenas noches

    Estoy comenzando a programar en Java .. por lo cual estoy Usando Netbeans y conectándome por JDBC a la base de datos Sybase 11 … buscando como conectarme opte por usar persistencia … por lo cual en internet hay ejemplos pero con Mysql … pero al querer hacerlo con mi base de datos Sybase … los asistentes en la creación de Entidades no me funcionan, no me parecen las tablas para seleccionar …. por lo cual me genera un gran inconveniente ya que tendria q crear mis propias entidades a mano … y son mas de 100 tablas … no se si me podiran ayudar en este tema

    Se lo agradecería mucho …

    Gracias

Replica a leandro Cancelar la respuesta