Está usted en Indice > Construcción > Lenguajes > Java > Lecciones y Paso a Paso > Construir un pool de objetos en Java
Construcción
Maletín
Utilidades
Cursos
Promoción
Rentabilidad
Zona Novatos
Foros
Acceso a tu cuenta

Construir un pool de objetos en Java (2)

Cuando encontramos un objeto válido, lo movemos a la tabla de bloqueados y lo entregamos al proceso o aplicación que lo ha llamado. Si la tabla de no bloqueados está vacía, o no contiene objetos válidos, tendremos que instanciar nuevo objeto.

synchronized Object checkOut() {
  long ahora = System.currentTimeMillis();
  Object o;
  if( nobloqueados.size() > 0 ){ 
    Enumeration e = nobloqueados.keys();
    while( e.hasMoreElements() ){
      o = e.nextElement();
      if( ( ahora - ( ( Long ) nobloqueados.get( o ) ).longValue() )
> tiempoExpiracion ){ // el objeto ha expirado nobloqueados.remove( o ); expirar( o ); o = null; } else{ if( validar( o ) ){ nobloqueados.remove( o ); bloqueados.put( o, new Long( ahora ) ); return( o ); } else{ // no es un objeto válido nobloqueados.remove( o ); expirar( o ); o = null; } } } } // no hay objetos disponibles, por lo que creamos uno nuevo o = crear(); bloqueados.put( o, new Long( ahora ) ); return( o ); }

Ya pasó lo peor, de aquí en adelante todo se vuelve cuesta abajo. El método checkIn() simplemente mueve el objeto, dado por parámetros, desde la tabla de bloqueados ha la de los no bloqueados.

synchronized void checkIn( Object o ){
  bloqueados.remove( o ); 
  nobloqueados.put( o, new Long( System.currentTimeMillis() ) );
}
        

Los tres métodos restantes son abstractos, por lo que tendremos que implementarlos en la subclase. Una aplicación interesante y frecuente del pool de objetos es la de implementar un pool de conexiones a una base de datos. A continuación, la clase encargada de todo esto: JDBCConnectionPool.

import java.sql.*; 

public class JDBCConnectionPool extends PoolObjetos { 
  
  private String servidor, usuario, contraseña, bd;
 
  public JDBCConnectionPool(String driver, 
                            String servidor,
                            String usuario,
                            String contraseña, String bd ){
    ...
  } 

  Object crear() {...} 
  boolean validar( Object o ) { ... } 
  void expirar( Object o ) {...}
  public Connection getConnection() { ... }
  public void returnConnection( Connection c ) { ... }

}
        

El pool de conexiones necesitará que nuestra aplicación le especifique el driver de nuestra base de datos, el servidor, nombre de usuario, contraseña y base de datos a través del constructor. Esto último son conceptos específicos de la API JDBC (Java DataBase Connectivity).

public JDBCConnectionPool(String driver,
                          String servidor,
                          String usuario, 
                          String contraseña, 
                          String bd )
{
  try {
    Class.forName( driver ).newInstance(); 
  }
  catch( Exception e ){
    e.printStackTrace();
  }
  this.servidor = servidor;
  this.usuario = usuario;
  this.contraseña = contraseña;
  this.bd = bd;
}
        

Ahora procederemos a implementar los métodos abstractos definidos en la clase PoolObjetos: crear(), expirar() y validar().

Como ya vimos en el checkOut() , la clase PoolObjetos invocará el método crear() desde la subclase, cuando necesite instanciar un nuevo objeto. Para nuestro pool de conexiones, todo lo que tenemos que hacer es crear un nuevo objeto de tipo Connection y devolverlo. De nuevo, para no complicar este artículo, simplemente se capturan las posibles excepciones y no hacemos nada al respecto.

Object crear(){
  try {
    return(DriverManager.getConnection(  jdbc:mysql://" +
       servidor + ":3306/" + bd +
       "?user="+usuario+";password="+contraseña ) );
  }
  catch( SQLException e ) {
    e.printStackTrace();
    return( null );
  }
}
        


Usuarios que han visto este tema también han visto...

- Java y XML, JDOM
- Forzar la Finalización y la Recolección de Basura en Java
- Clases e instancias en Java.
- Instalación de GWT 1.5
- Cómo crear una clase en Java que lea desde el teclado.


Versión imprimible - Versión imprimible de este documento
Enviar e-mail - Enviar por e-mail este documento
Publicidad

Información legal | Política de Privacidad | Contacte con nosotros

Otro proyecto de Factoría de Internet. Copyright© 2003-2008 Factoría de Internet S.L.. Todos los derechos reservados.


Página generada el 02-12-2008 a las 05:37:43