Las Clases de la Aplicación

Tenemos involucradas en esta aplicacion 3 clases, su nombre y descripción de presenta en la tabla siguiente:

electronica.ContextListener Esta clase crea un objeto de la clase ExAlumnosBD y lo almacena como un atributo de contexto con el nombreBaseDatos.
electronica.ExAlumnosBD Es una clase que representa la base de datos de ex-alumnos. Su constructor establece una conexión a la base de datos (utilizando el objeto ExAlumnosBD que se obtiene del atributo de contexto BaseDatos), y la sesión se puede compartir entre varias sesiones web. La clase proporciona varios métodos de acceso a la base de datos (para insertar, borrar, modificar u obtener registros de la base de datos).
electronica.ExAlumno Es una clase Java que representa un ex-alumno. Las páginas JSP de la aplicación utilizan esta clase como un Bean contenedor de datos para mostrarlos.

Table 1. Clases

electronica.ContextListener

Codigo

// ContextListener.java //
package electronica;
import javax.servlet.*;

public final class ContextListener implements ServletContextListener {

  public void contextInitialized (ServletContextEvent servletContextEvent) {
    ServletContext servletContext = servletContextEvent.getServletContext ();
     try { 
       ExAlumnosBD exAlumnosBD = new ExAlumnosBD (); 
       servletContext.setAttribute (\"BaseDatos\", exAlumnosBD);
     } catch (Exception e) { 
         servletContext.log (\"No se pudo crear el atributo BaseDatos: \" + e.getMessage ()); 
       } 
     }

  public void contextDestroyed (ServletContextEvent servletContextEvent) 
  {
    ServletContext servletContext = servletContextEvent.getServletContext (); 
    ExAlumnosBD exAlumnosBD= (ExAlumnosBD) servletContext.getAttribute (\"BaseDatos\"); 
    exAlumnosBD.close (); 
    servletContext.removeAttribute (\"BaseDatos\"); 
  }

}

Objetivos

Es un oyente del contexto selvlet al que se llamara cuando arranca y cuando se para la aplicacion electronica. Cuando se arranca se crea una instancia de la clase ExAlumnosBD y se almacena en un atributo de contexto; cuando la aplicacion se cierra se recupera el objeto de ExAlumnosBD del atributo de contexto y se cierra la conexion con la base de datos.

Las JSP recuperan el objeto ExAlumnosBD cada vez que quieran acceder a la base de datos.

Metodos

contextInitialized

Primero recupera el contexto servlet, despues crea una instancia de la clase ExAlumnosBD logrando con ello conexión a la base de datos, posteriormente almacena este objeto el el contexto servlet ”BaseDatos”.

contextDestroyed

Recupera el contexto Servlet, luego recupera el objeto exAlumnos de él y cierra la base de datos. Finalmente elimina el atributo contexto servlet.

electronica.ExAlumnosBD

Codigo

// ExAlumnosBD.java //
package electronica;

import java.sql.*; 
import java.util.*; 
import javax.sql.*; 
import javax.naming.*;

public class ExAlumnosBD { 
  
  Connection connection; 
  private boolean connectionFree = true; 
  private ArrayList exAlumnos;
  
  public ExAlumnosBD () throws Exception { 
    try { 
      InitialContext initialContext = new InitialContext ();
      Context e nvContext = (Context) initialContext.lookup (\"java:comp/env\");
      DataSource dataSource = (DataSource) envContext.lookup (\"jdbc/electronica\"); 
      this.connection = dataSource.getConnection (); 
    } catch (Exception e) { 
        throw new Exception (\"No se pudo abrir la base de datos electronica: \" + e.getMessage ()); 
      } 
  }

  protected synchronized Connection getConnection () { 
    while (this.connectionFree == false) { 
      try { 
        wait (); 
      } catch (InterruptedException e) { } 
    } 
    this.connectionFree = false; 
    notify (); 
    return this.connection; 
  }

  protected synchronized void releaseConnection () { 
    while (this.connectionFree == true) { 
      try { 
        wait (); 
      } catch (InterruptedException e) 
          { 
          } 
        } 
    this.connectionFree = true; 
    notify (); 
  }

  public ExAlumno getExAlumno (String id) { 
    try { 
      this.getConnection (); 
      PreparedStatement preparedStatement = this.connection.prepareStatement (\"SELECT id, nombre, ingreso, trabajo, mail, fono FROM exalumno WHERE id = ?\");
      preparedStatement.setString (1, id); 
      ResultSet resultSet = preparedStatement.executeQuery ();
      if (resultSet.next ()) { 
        ExAlumno exAlumno = new ExAlumno ( 
          resultSet.getString (1), resultSet.getString (2), 
          resultSet.getString (3), resultSet.getString (4), 
          resultSet.getString (5), resultSet.getString (6) );
        preparedStatement.close (); 
        this.releaseConnection (); 
        return exAlumno; 
    } else 
      { 
        preparedStatement.close (); 
        this.releaseConnection (); 
        return null; 
      } 
    } 
    catch (SQLException e) { 
      this.releaseConnection (); 
      return null; 
    } 
  }

  public int insertarExAlumno (ExAlumno exAlumno) { 
    int rowsAffected = 0; 
    try { 
      this.getConnection (); 
      PreparedStatement preparedStatement = this.connection.prepareStatement            (\"INSERT INTO exalumno (nombre, ingreso, trabajo, mail, fono) VALUES ( ?,         ?, ?, ?, ?)\");
      preparedStatement.setString (1, exAlumno.getNombre ());
      preparedStatement.setString (2, exAlumno.getIngreso ());
      preparedStatement.setString (3, exAlumno.getTrabajo ());
      preparedStatement.setString (4, exAlumno.getMail ());
      preparedStatement.setString (5, exAlumno.getFono ()); 
      rowsAffected = preparedStatement.executeUpdate (); 
      preparedStatement.close (); 
      this.releaseConnection (); 
    } catch (SQLException e) { 
        this.releaseConnection (); 
        return 0; 
      }    
    return rowsAffected; 
  }

public int borrarExAlumno (String id){ 
    int rowsAffected = 0; 
    try { 
      this.getConnection (); 
      PreparedStatement preparedStatement = this.connection.prepareStatement (\"DELETE FROM exalumno WHERE id = ?\"); 
      preparedStatement.setString (1, id); 
      rowsAffected = preparedStatement.executeUpdate ();
      preparedStatement.close (); 
      this.releaseConnection (); 
    } catch (SQLException e) { 
        this.releaseConnection ();
        return 0; 
      }
    return rowsAffected;
  }

  public int modificarExAlumno (ExAlumno exAlumno) { 
    int rowsAffected = 0; 
    try { 
      this.getConnection (); 
      PreparedStatement preparedStatement = this.connection.prepareStatement (\"UPDATE exalumno SET nombre=?, ingreso=?, trabajo=?, mail=?, fono=? WHERE id =?\"); 
      preparedStatement.setString (1, exAlumno.getNombre ());
      preparedStatement.setString (2, exAlumno.getIngreso ());
      preparedStatement.setString (3, exAlumno.getTrabajo ());
      preparedStatement.setString (4, exAlumno.getMail ());
      preparedStatement.setString (5, exAlumno.getFono ());
      preparedStatement.setString (6, exAlumno.getId()); 
      rowsAffected = preparedStatement.executeUpdate (); 
      preparedStatement.close (); 
      this.releaseConnection (); 
    } catch (SQLException e) { 
        this.releaseConnection (); 
        return 0; 
      } 
    return rowsAffected; 
  }

  public Collection getExAlumnos () { 
    exAlumnos = new ArrayList (); 
    try { 
      this.getConnection (); 
      PreparedStatement preparedStatement = this.connection.prepareStatement (\"SELECT id, nombre, ingreso, trabajo, mail, fono FROM exalumno\"); 
      ResultSet resultSet = preparedStatement.executeQuery (); 
      while (resultSet.next ()) { 
        ExAlumno exAlumno = new ExAlumno ( 
          resultSet.getString (1), resultSet.getString (2), 
          resultSet.getString (3), resultSet.getString (4), 
          resultSet.getString (5), resultSet.getString (6) ); 
        exAlumnos.add (exAlumno); 
      } 
      preparedStatement.close (); 
    } catch (SQLException e) { 
        return null; 
      } this.releaseConnection ();
    return exAlumnos; 
  }

  public void close () { 
    try { 
      this.connection.close (); 
    } catch (SQLException e) { 
        System.out.println (e.getMessage ()); 
      } 
  }
}

Objetivos

El proposito de esta clase es establecer una conexion con la base de datos, y proporcionar metodos para realizar los accesos necesarios para la aplicación, estos metodos no crean conflictos entre si.

Metodos

ExAlumnosBD

Corresponde al constructor de la clase, genera la conexion con la base de datos

Primero se recupera el javax.naming.InitialContext para que se pueda realizar una búsqueda JNDI:

  InitialContext initialContext = new InitialContext ();

Después se recupera el contexto de la aplicación Electronica:

Context envContext = (Context) initialContext.lookup (\"java:comp/env\");

Luego se recupera el propio DataSource:

DataSource dataSource = (DataSource) envContext.lookup (\"jdbc/electronica\");

Y por último se recupera la conexión desde el DataSource:

this.connection = dataSource.getConnection ();

Todos los parámetros del DataSource tenemos que definirlos en el fichero Electronica.xml, aunque también se pueden modificar usando las facilidades de administración de Tomcat, con la dirección http://localhost:8080/admin .

getConnection

Usado para compartir la base de datos de forma segura, espera a que esta se encuentre libre, cuando lo esta notofica de esto y retorna la conexion.

releaseConection

Libera la conexióm.

getExAlumno

Dado un parametro Id, retorna el ex-alumno con ese parametro o en su defecto retorna null si no hay correspondencia para tal paramtro.

insertarExAlumno

Tiene como paramtro un objeto de la clase ExAlumno, agrega la informacion de tal objeto a la base de datos.

borrarExAlumno

Tiene como parametro Id, borra de la base de datos la información asociada a tal parametro.

modificarExAlumno

Tiene como parametro una instancia de la clase ExAlumno, modificando los valores asociados al Id que forma parte de los atributos de este objeto.

getExAlumnos

Retorna una lista de todos las ex-alumnos de la base de datos.

close

Cierra la base de datos.

ExAlumno

Codigo

// ExAlumno.java //

package electronica;

public class ExAlumno { 
  private String id = null; 
  private String nombre = null; 
  private String ingreso = null; 
  private String trabajo = null; 
  private String mail = null; 
  private String fono = null;

  public ExAlumno (String id, String nombre, String ingreso, String trabajo, String mail, String fono) { 
    this.id = id; 
    this.nombre = nombre; 
    this.ingreso = ingreso; 
    this.trabajo = trabajo; 
    this.mail = mail; 
    this.fono = fono;
  }

  public String getId () {return this.id; }
  public String getNombre () { return this.nombre; }
  public String getIngreso () { return this.ingreso; }
  public String getTrabajo () { return this.trabajo; } 
  public String getMail () { return this.mail; }
  public String getFono () { return this.fono; } 
}

Objetivos

Es una clase Java que representa un ex-alumno.

Metodos

ExAlumno

Es el constructor del metodo, tiene por parametros los datos de un ex-alumno, almacenando tales valores.

getId, getNombre, getIngreso, getTrabajo, getMail, getFono

Cada uno de estos metodos retorno el valor denotado en su nombre.

<Principal>