Páginas

27/12/14

JNDI Datasource Java JBoss. JDBC Tip.

Datasource (fuente de datos) en Java. JNDI JDBC Tip.

JNDI Datasource Java JBoss. JDBC Tip.



Una buena práctica de programación cuando estamos haciendo una aplicación web en Java es utilizar la api JNDI (Java Naming and Directory Interface), que es una API de java que nos permite buscar objetos mediante un nombre, eso quiere decir que podemos crear una fuente de datos (Datasource) en el cual vamos a declarar todo lo referente a nuestra conexión a la base de datos que vamos a utilizar, y mediante la API JNDI obtenemos la conexión para hacer nuestras consultas. Ok por si no te queda claro ahora te lo explico de otra manera con un breve ejemplo, estás en tu desarrollo de la aplicación web Java que corre en el servidor de aplicaciones JBoss, bueno ahora cuando quieres hacer una consulta a la base de datos primero tienes que conectarte a la misma mediante JDBC , obvio que si utilizamos este ejemplo en una aplicación web funcionara pero no es una buena práctica de programación ya que la aplicación web no se hace portable y aparte de eso si queremos hacer un cambio de un puerto, ip o el nombre del driver hay que hacerlo modificando el código, cuando sería una mejor practica hacerlo mediante JNDI y así cualquier cambio no implica hacer una modificación de código, aparte de eso todas las aplicaciones que corren en el mismo servidor de aplicaciones pueden utilizar el Datasource para conectarse a la base de datos. Imagina hacer una clase de conexión para cada aplicación que desarrollas y todas corren en el mismo servidor de aplicaciones, mejor práctica es hacerlo una sola vez y reutilizarlo en todas las aplicaciones que desarrollas.



Ahora vamos a la práctica, primero vamos a crear el Datasource para la conexión a nuestra base de datos, eso lo vamos hacer en el archivo "standalone.xml" de nuestro JBoss, la ruta para llegar a ese archivo es tuJBoss>standalone>configuration>standalone.xml, buscamos la etiqueta que dice
   <datasources>
   </datasources>
  
Y ahí es donde vamos a crear nuestro Datasource. Lo que necesitamos para crearlo es la cadena de conexión, el nombre del driver, usuario y contraseña. En este caso voy a crear la conexión para una base de datos Oracle y así quedaría nuestro Datasource

  <datasource jndi-name="java:jboss/datasources/datoJavaDS" pool-name="DatoJavaDS" enabled="true" use-java-context="true">
   <connection-url>jdbc:oracle:thin:@000.000.00.00:1521:bddatojava</connection-url>
   <driver>oracle</driver>
   <security>
    <user-name>datojava</user-name>
    <password>datojava</password>
   </security>
  </datasource>
 


Obviamente cambias los datos por los de tu base de datos, una vez que ya tenemos eso, vamos obtener la conexión desde nuestra clase de Java, esta clase la hacemos genérica y así todas nuestras clases que hagan consultas a la base de datos extiendan de ella y pueden implementar sus métodos, puedes hacer conexiones para distintas bases de datos. Este es el código de la clase:

import java.sql.Connection;
import java.sql.SQLException;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class GenericoDAO {

 public static final String DATASOURCE_DATOJAVA = "java:jboss/datasources/DatoJavaDS";

 public Connection getConnectionDatoJava() throws NamingException, SQLException {
  DataSource dataSource = null;
   try{
   ServiceLocator serviceLocator = ServiceLocator.getInstance();
   dataSource = locator.getDataSource(DATASOURCE_DATOJAVA);

   }catch(Exception ex){
    ex.printStackTrace();
   }
  return dataSource.getConnection();
 }
 


Ya tenemos nuestra clase para conectarnos a la base de datos mediante JNDI, ahora solo creamos una clase que extienda de la clase GenericoDAO, así queda nuestra clase final:

public class DatoJavaPLSQLDaoImple extends GenericoDAO{
 public void buscarPorId(Long id) {

  CallableStatement callableStatement = null;
  Connection connection = null;
  ResultSet resultSet = null;

  String sql = "{ CALL  PAQUETE_PRUEBA.BUSCAR_POR_ID(?) }";
  try {
   //Aqui llamamos al metodo que obtiene la conexion.
   connection = getConnectionDatoJava();

   callableStatement = connection.prepareCall(sql);
   callableStatement.setLong(1, id);

   callableStatement.execute();
   //Todo tu logica...
 }
}
 


Ya no hay nada que hacer, ya podemos conectarnos a nuestra base de datos mediante un Datasource, este dato java siempre hay que ponerlo en práctica, es mala práctica de programación la repetición de código, próximamente hablare acerca de los patrones de diseño de Java para unas buenas prácticas. Implementen lo aprendido...

No hay comentarios :

Publicar un comentario