Inicio > Java, JSF, NetBeans > Como crear un “Pool de Conexiones” en NetBeans 6.0 usando Java Server Faces (JSF) y MySQL

Como crear un “Pool de Conexiones” en NetBeans 6.0 usando Java Server Faces (JSF) y MySQL

abril 9, 2008

En este tutoríal vamos ha mostrar como realizar un POOL de conexiones para tener centralizada nuestra conexión a una base de datos MySQL, hay que tener en cuenta que este proceso se realiza totalmente igual si queremos conectarnos a ORACLE o a cualquier otra base de datos, esto nos evitara hacer una conexión nueva cada vez que queramos hacer una consulta nueva a la base.

Antes de empezar vamos a utilizar las siguientes herramientas:

  • NetBeans 6.0
  • MySQL

Vamos a tener creada previamente en MySQL una base de datos llamada “prueba” y dentro de ella una tabla llamada “roles” con dos columnas con las filas de datos que usted prefiera ingresarle a esta tabla, este detalle pasa por cuenta de la persona que sigue este tutorial.

¿Pero qué es un Connection Pool o Pool de conexiones?

Un JDBC connection pool es un grupo de conexiones reutilizables que el servidor de la aplicación mantiene para una base de datos en particular. Cuando una aplicación cierra una conexión, regresa a la piscina. Las conexiones agrupadas reducen el tiempo de la transacción al conectarse a una base de datos por medio de compartir el objeto de acceso a la conexión a la base de datos, esto a su vez evita una nueva conexión física o crear cada vez una conexión nueva.

Al ejecutar esto es lo que pasa cuando una aplicación se conecta a la base de datos.

1. Lookup JNDI nombre de los recursos de JDBC. Para conectar a una base de datos, la aplicación busca el JNDI nombre del recurso de JDBC (Data Source) asociado con la base de datos. El API de JNDI permite a la aplicación localizar el recurso de JDBC.

2. Localizar el JDBC connection pool. El recurso de JDBC especifica qué piscina de conexiones va a usar. La piscina define los atributos de conexión como la base de datos nombre (el URL), nombre del usuario, y contraseña.

3. Recupere la conexión del connection pool. El servidor de la aplicación recupera una conexión física de la piscina de conexiones que corresponde a la base de datos. Ahora que la aplicación esta conectada a la base de datos, la aplicación puede leer, modificar y agregar los datos a la base de datos. Las aplicaciones acceden la base de datos haciendo las llamadas al API de JDBC.

4. Cerrado de la conexión. Cuando el acceso a la base de datos a terminado, la aplicación cierra la conexión. El servidor de la aplicación devuelve la conexión a la piscina de conexión. Una vez regresada a la piscina, la conexión está disponible para una próxima aplicación.

Nombre JNDI. Cada recurso tiene un único nombre de JNDI que especifica su nombre y situación. Porque todo el recurso que los nombres de JNDI están en el contexto del java:comp/env, los nombres JNDI de un recurso de JDBC se espera en el contexto del java:comp/env/jdbc.

Creación de un Nuevo Proyecto JSF en NetBeans 6.0

Como primer paso vamos a crear un nuevo proyecto de JSF, vamos a file -> New Poyect -> Web -> Web Application -> y clic en Next

Nuevo Proyecto

Le ponemos un nombre en este caso le vamos a poner “PoolConnection” y luego clic en Next

Nombre del Proyecto

Elegimos el Framework que vamos a utilizar “Visual Web JavaServer Faces” y no cambiamos nada más, clic en Finish.

Frameworks

Una vez dentro de la parte de diseño de NetBeans vamos a arrastrar de la paleta un botón “Button” el cual va a ser el que nos conecte con la base MySQL y le vamos a poner de nombre conectar… Con esto realizado vamos a pasar a preparar la conexión a la base con la que vamos a trabajar.

Creación del Conector para la Base de Datos

Primero tenemos que ir a la parte de servicios (Ctrl + 5) en NetBeans y en Databases damos un clic derecho y ponemos en la opción de New Connection…

New Connection

En la ventana de New Database Connection vamos a poner lo siguiente:

Name: MySQL (Connector/J driver)

Driver: com.mysql.jdbc.Driver

Database URL: jdbc:mysql://localhost:3306/prueba

En esta parte ponemos el host donde va a correr la aplicación que va a ser en “localhost”, al poner el puerto debemos tener cuidado porque el puerto 3306 es el puerto por defecto de MySQL, pero debemos ponerle el puerto que le pusimos en la instalación de MySQL si por si acaso lo cambiamos, y ponemos el nombre de la base a la que queremos tener acceso que en este caso va a ser “prueba”…

Por ultimo ponemos el User y el Password con el cual entramos a MySQL… Si queremos que recuerde NetBeans el Password le ponemos Remember Password caso contrario no (No es recomendable hacerlo por problemas de seguridad) y terminamos presionando OK.

Conexión

Nos aparecerá una nueva base en el recuadro de Servicios, podremos conectarnos a ella y revisar los datos.

Conectar

Creación del Pool de Conexiones para nuestro proyecto.

Lo que vamos a hacer primero es ir a File –> New File o directamente (Ctrl + n), en la ventana de New File, en Project escogemos el proyecto con el que estamos trabajando en nuestro caso “PoolConnection”, en el lado izquierdo en Categories vamos a escoger “GlassFish” y al lado derecho en File Types vamos a escoger la primera opción que es “JDBC Connection Pool” y clic en Next.

New File

En la siguiente ventana nos pide como campo obligatorio o requerido un nombre para el pool de conexiones, le podemos dejar el que nos pone por defecto o simplemente lo cambiamos, nosotros lo vamos a dejar por defecto.

En el siguiente casillero de Extract from Existing Connection escogemos el conector que realizamos anteriormente para nuestra base de datos, y damos clic en Next.

Pool

En la siguiente ventana nos aparece Datasource Classname con un nombre bastante largo, este esta determinado por la conexión seleccionada anteriormente, nosotros lo vamos a dejar por defecto, le vamos a poner una descripción, en la tabla de propiedades podemos revisar los datos de ingreso a la base, para comprobar que estén correctos y terminamos dándole un clic en Next. (Si deseamos modificar las propiedades por defecto de la conexión, nosotros podemos cambiarlas luego editando el archivo sun-resources.xml, que se encuentra en la carpeta Server Resources de nuestro proyecto).

JDBC Connection

En la última Ventana que nos aparece con muchos campos todos los dejamos por defecto y ponemos un clic en Finish, con esto ya tenemos realizado nuestro pool de conexiones…

Acceder al Connection Pool desde una clase de Java

A través de este proceso podremos obtener un DataSource.

Lo primero que tenemos que hacer es crear el acceso a la base, vamos al código de la aplicación desde la cual queremos acceder a la base de datos, hacemos un clic derecho en el editor à escogemos Enterprise Resources à Use Database

Use DataBase

Nos aparece la ventana para escoger la base de datos, hacemos un clic en Add, nos aparecerá una nueva ventana para configurar el Data Source, le ponemos un Nombre de Referencia en este caso le vamos a poner “conBasePrueba”, luego escogemos el Project Data Source como no tenemos creado un data source anterior, le ponemos clic en Add y se nos vuelve a abrir una nueva ventana, Create Data Source en el JNDI Name le ponemos el mismo nombre anterior “conBasePrueba” y elegimos el conector de la base a la que vamos a acceder, finalmente damos un clic en OK…

Data Source

Regresamos a la ventana anterior y ya se nos carga el nombre de DataSource que ingresamos y creamos anteriormente y damos un clic en OK para confirmar…

Data Source Reference

Finalmente regresamos a la ventana de Choose DataBase ya se nos cargara la referencia a la base de datos y confirmamos haciendo un clic en OK…

Choose Database

Con este último paso estamos listos para realizar una prueba de conexión desde el código…

Probemos nuestro Pool con una conexión rápida.

Vamos hacer una prueba rápida de conexión y vamos a visualizar por consola nuestro resultado, regresaremos a nuestra interfaz de Diseño de NetBeans y vamos a hacer doble clic en el botón que colocamos al inicio de este tutorial, nuestro proyecto se ve más o menos así ahora.

Como se Ve

Una vez hecho doble clic en el botón, esta acción nos lleva al código de la aplicación, directamente al método del botón button1_action() el cual lo vamos a programar en este momento para hacer la conexión nuestro código debería quedar así.

public String button1_action() {
     Connection con = null;
     try {
          InitialContext ic = new InitialContext();
          //en esta parte es donde ponemos el Nombre
          //de JNDI para que traiga el datasource
          DataSource ds = (DataSource) ic.lookup("java:comp/env/conBasePrueba");
          con = ds.getConnection();
          Statement st = con.createStatement();
          System.out.println("Se ha realizado con exito la conexión a MySQL");
          //el resultSet es el encargado de traer los datos de la consulta
          ResultSet rs = st.executeQuery("select * from roles");
          while(rs.next()){
               System.out.println(" "+rs.getString(1)+" "+rs.getString(2));
          }
     }catch (SQLException ex) {
          Logger.getLogger( Page1.class.getName() ).log(Level.SEVERE, null, ex);
     }catch (NamingException ex) {
          Logger.getLogger( Page1.class.getName() ).log(Level.SEVERE, null, ex);
     }finally {
          try {
               con.close();
               System.out.println("Conexion Cerrada con Exito...");
          }catch (SQLException ex) {
               Logger.getLogger( Page1.class.getName() ).log(Level.SEVERE, null, ex);
          }
     }
}

Tenemos en nuestra base una tabla llamada “roles” la cual tiene 2 columnas, en el resultSet se almacena los datos obtenidos de la consulta y mientras haya datos en él se lo puede ir descomponiendo en columnas, con un while lo podemos ir recorriendo hasta llegar a la última fila…

Se debe hacer estas importaciones para que la aplicación pueda funcionar sin ningún problema aparte de las que ya aparecen al crear el nuevo proyecto.

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.Resource;
import javax.faces.FacesException;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

Tutorial creado por:

christmo

About these ads
Categorías:Java, JSF, NetBeans
  1. ummm
    abril 22, 2009 en 5:25 pm | #1

    hola este tutorial esta muy bueno pero hay dos lines que me confunden (no quiero tragar entero XD!!!):

    InitialContext ic = new InitialContext();
    DataSource ds = (DataSource) ic.lookup(“java:comp/env/conBasePrueba”);

    porfavor diganme que hacen en espesifico cada linea porfavor!!!!
    (depronto para algunas es una pregunta obia pero XD yo apenas empieso en esto!!!)

    espero sus respuestas!!!!

  2. n_n
    junio 26, 2009 en 7:19 pm | #2

    maravilloso tutorial.. muchas gracias!!

    solo qiero agregar que en la version Netbeans 6.5, en el paso a la hora de crear el DataSource (en la parte: Acceder al Connection Pool desde una clase de Java), en el manual dice que hay qe ir al codigo y luego hacemos un clic derecho en el editor y escogemos Enterprise Resources luego Use Database….

    en el netbeans 6.5 a la hora de intentar esto, el menu enterprice resources no se encuentra (en mi caso ), asi que en su lugar habra qe ir a la opcion Insert Code… (o Alt + Insertar) y ahi es donde la opcion Use Database se encuentra.. lo demas es exactamente lo mismo.

    espero le sirva de ayuda a alguien.. bueno.. feliz dia =)

  3. daniel
    octubre 2, 2009 en 9:34 am | #3

    christmo tengo el problema que no me aparece la opcion Enterprise Resources, a que se debe, estoy trabajando con la version 6.5.
    Gracias

  4. octubre 2, 2009 en 10:36 am | #4

    hola daniel te ruego que revises el comentario anterior al tuyo el de @n_n allí nos dice como ha podido solucionar este problema que en el cambio de versión ya no tenemos el nterprise Resources.

    Gracias a n_n por aportar con nosotros al conocimiento colectivo…

    saludos

    christmo

  5. Juan Carlos
    noviembre 12, 2009 en 5:49 pm | #5

    hola Christmo. bueno lo de tu blog.. pero mira que hago todo paso a paso bn hechesito.. y me carga la paginita con el boton… pero cuando doy en el boton.. me sale error…

    HTTP Status 500 -

    type Status report

    message

    descriptionThe server encountered an internal error () that prevented it from fulfilling this request.
    Sun Java System Application Server 9.1_01

    y no se que haces.. le he dado vueltas y nada.. agradezco la rta… saludos desde Colombia..

  6. jomaac
    enero 26, 2010 en 4:16 pm | #6

    Tengo un problema, cuando voy a consultar, el programa me genera un error:

    Error al asignar una conexión. Causa: Las conexiones en uso son iguales al tamaño de conjunto máximo y el tiempo de espera máximo caducado. No se pueden asignar más conexiones.

    Me podrian ayudar con este problema y a que se debe?

  7. vasgano
    agosto 15, 2010 en 2:41 pm | #7

    Hola,

    Como hago la llamada via JNDI a un DataSource ya creado en GlassFish, no por asistente en netbeans, sino lo he creado en Glassfish en la interfaz de administrador, tanto el pool como el Datasource, aunque la conexion se realiza por lo que veo en le log desde el codigo en netbeans, me sale que no hay base de datos disponibles, otra cosa, con estos pasos que habeis mostrado se podria llevar el proyecto a otra PC y ejecutarlo alli sin problemas?, o solo funciona en una maquina local tipo desarrollo, gracias.

  8. Eddy
    septiembre 27, 2010 en 10:45 pm | #8

    Hola esta chevere tu ayuda una consulta bueno dos.
    El pull de conecciones se lo puede hacer con Tomcat.
    La otra consulta es como puedo pasar parametros entre una pagina o otra que se llama atraves del archivo de configuracion faces en xml?

    Gracias

  9. Yordan
    octubre 29, 2010 en 8:18 am | #9

    Muy buen post, el tutorial esta muy bueno. Felicitaciones.

  10. wymar
    diciembre 6, 2010 en 9:12 pm | #11

    como puedo llamar a una procediemiento almacenado en este ejemplo, en q parte del codigo tengo q modificar o sera q no se puedo por favor sera q me pueden echar una mano tengo q presentar un proyecto en la facu, con procedimientos almacenados (netbeans y oracle) ayuda por favor.ahhh felicitaciones por tu gran ayuda CHRISTMO y a todos los participes de este foro

    • diciembre 6, 2010 en 10:23 pm | #12

      @Wymar

      Para llamar a un SP, simplemente donde esta la consulta la deberías realizar llamando al Procedimiento Almacenado de la siguiente manera:

      String sql = “CALL NombreDelProcedimientoAlmacenado()”;
      st.executeUpdate(sql);

      y con eso obtendrás que el motor de base de datos haga lo suyo ;-)

      Espero que te sirva…

      Saludos

      christmo

  11. diciembre 6, 2010 en 10:18 pm | #13

    Hola a todos,

    La verdad me he quedado mudo en algunas preguntas ya que no soy un experto, pero aquí podemos compartir las respuestas a sus preguntas si alguien sabe como solucionar cierto problema planteado aquí mismo.

    Saludos

    christmo

  12. ignacio
    diciembre 25, 2010 en 1:51 pm | #14

    estimado

    tengo un problema con el codigo…..no puedo llegar a mi jndi y por lo tanto
    no puedo iniciar la conexion a mi base de datos. Por consola glassfish me manda
    un null pointer exception, si me puede ayudar te lo agradeceria

  13. ignacio
    diciembre 25, 2010 en 2:00 pm | #15

    ignacio :
    estimado
    tengo un problema con el codigo…..no puedo llegar a mi jndi y por lo tanto
    no puedo iniciar la conexion a mi base de datos. Por consola glassfish me manda
    un null pointer exception, si me puede ayudar te lo agradeceria

    Mi problema exactemente es el siguiente:

    javax.naming.NameNotFoundException: No object bound to name java:comp/env/jdbc/simuladores

    mi codigo no encuentra mi jndi llamamdo jdbc/simuladores

    si me ayudas te lo agradeceria

  14. pajadito
    septiembre 21, 2011 en 10:50 am | #16

    hola esta muy bien yo estoy intentando lo mismo pero en servlets y en jsp el codigo funciona perfecto en una pagina jsp pero dentro de un servlet existe un problema no reconoce el getConnection, del objeto DataSource y la verdad ya no se como resolverlo me gustaria obtener una respuesta por favor a mi correo kinro_20@hotmail.com

    • septiembre 25, 2011 en 12:22 pm | #17

      yo tamb lo necesito en servlets si ya lo resolviste ayudame nicky_2987@hotmail.com

    • Ulises Escobar
      octubre 25, 2011 en 4:28 pm | #18

      Tarde… pero para que sea de utilidad para otros!
      En el servlet, deben sobreescribir uno de sus métodos, deben definir una variable DataSource y luego:

      private DataSource fuenteDatos = null;

      public void init(ServletConfig config) throws ServletException {
      try {
      Context contextoInicial;
      contextoInicial = new InitialContext();
      Context contexto = (Context) contextoInicial.lookup(“java:comp/env”);
      fuenteDatos = (DataSource) contexto.lookup(“jdbc/PrbOra”);
      } catch (NamingException ex) {
      ex.printStackTrace();
      }
      }

      En un servlet, este método se ejecuta antes. Consulten para más información ciclo de vida de un servlet.

      Luego, pueden conectarse
      Connect conn = fuenteDatos.getConnection();

      Saludos,

  15. Shrenky
    noviembre 13, 2011 en 1:53 pm | #19

    Hola, oye como se puede aplicar esto en un programa que se ejecuta en la misma maquina, es decir la una aplicación que no sea web, el pool se crea y se accesa de la misma manera?

  16. Isa
    febrero 13, 2012 en 5:30 pm | #20

    Muchas gracias me sirvió de mucho :)

    • marzo 28, 2012 en 2:57 pm | #21

      Gracias, es bueno leer esas palabras de aliento ;-)

  17. Catalina
    marzo 28, 2012 en 2:08 pm | #22

    Soy nueva en esto de jsf, queria preguntarte que me recomiendas para empezar a desarrollar aplicaciones con este framework.
    Gracias un saludo.

  18. andy
    agosto 6, 2012 en 11:42 pm | #24

    muy bueno christmo ,se te agredece ,nomas haber si sigues publicando mas temas de java emprearial o la coneccion desde glassfish. chauuuuuuu

  19. diciembre 17, 2012 en 4:04 pm | #25

    HAYY MUCHACHOS DE CASUALIDAD ALGUIEN ME PUEDE PRESTAR ALGUN PROYECTO QUE ESTE HECHO EN NEETBEANS Y QUE TENGA JSF Y MYSQL … ES QUE ME INTERESA MUCHO EL TEMA, PEOR NO HE ENCONTRADO MUCHOS EJEMPLOS :(… LES AGRADEZCO SI ME LO PUEDEN ENVIAR GRACIAS……… KASTHANEDA@GMAIL.COM

  20. diciembre 22, 2012 en 2:33 pm | #26

    You have made some good points there. I checked on the web to learn more about the issue
    and found most people will go along with your views on this site.

  21. marzo 2, 2013 en 12:50 pm | #27

    What’s Taking place i am new to this, I stumbled upon this I’ve found It absolutely useful and it has
    aided me out loads. I’m hoping to contribute & assist other customers like its aided me. Good job.

  22. marzo 25, 2013 en 2:52 pm | #28

    I’m not sure where you are getting your info, but good topic. I needs to spend some time learning more or understanding more. Thanks for excellent info I was looking for this information for my mission.

  23. marzo 30, 2013 en 1:26 am | #29

    Oh my goodness! Awesome article dude! Many thanks,
    However I am going through troubles with your RSS.

    I don’t know why I can’t join it. Is there anybody else having
    identical RSS problems? Anyone who knows the solution can you kindly respond?
    Thanks!!

  24. mayo 16, 2013 en 8:45 am | #30

    Greetings! Very helpful advice within this post!
    It is the little changes that will make the greatest changes.
    Thanks for sharing!

Comment pages
1 2 14
Los comentarios están cerrados.
Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

%d personas les gusta esto: