Tenemos involucradas en esta aplicacion 3 clases, su nombre y descripción de presenta en la tabla siguiente:
|
||||||||||
// 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\"); } }
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.
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”.
Recupera el contexto Servlet, luego recupera el objeto exAlumnos de él y cierra la base de datos. Finalmente elimina el atributo contexto servlet.
// 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 ());
}
}
}
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.
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 .
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.
Libera la conexióm.
Dado un parametro Id, retorna el ex-alumno con ese parametro o en su defecto retorna null si no hay correspondencia para tal paramtro.
Tiene como paramtro un objeto de la clase ExAlumno, agrega la informacion de tal objeto a la base de datos.
Tiene como parametro Id, borra de la base de datos la información asociada a tal parametro.
Tiene como parametro una instancia de la clase ExAlumno, modificando los valores asociados al Id que forma parte de los atributos de este objeto.
Retorna una lista de todos las ex-alumnos de la base de datos.
Cierra la base de datos.
// 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; }
}
Es una clase Java que representa un ex-alumno.
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.