|
Debido a dudas que puedan tener envio esta micro definicion de como usar una base de datos cuando se usan transacciones de base de datos para hacer mas de una tarea.
- Formas de uso de conexiones y try/catch.
- Uso de transacciones entre Servlets y EJBs
1.- Formas de uso de conexiones y try/catch.
a) Forma general de un metodo que se conecta a una base de datos y hace algo:
public void doSomething() throws MyException {
Connection c = getConnection()
try{
c.setAutocommit(false);
doA(c);
doB(c) ;
c.commit;
catch(exception e){
c.rollback();
throws new MyException("No se pudo hacer Something debido a:"+e.getMessage());
}
}
b) Forma general de un metodo que se No se a una base de datos y hace algo (basicamente no administra las excepciones):
public void doSomething(Connection c) throws SQLException {
doA(c);
doB(c) ;
}
2.- Uso de transacciones entre Servlets y EJBs
Cuando se usan EJB, las funciones basicas no deben ser accedidas
remotamente, sino que deben generarse funciones publicas que hagan todo el trabajo.
PD: Un servlet que desee realizar varias tareas dentro de la misma
transaccion, solo puede llamar a 1 funcion de un EJB.
Normalmente el Servlet/Action NO debe atrapar, administrar las excepciones, sino que debe incluir throws XXXException en el encabezado de la funcion doTask():
Ejemplo:
EJB:
class MYEJB {
public void doSomething() throws MyException { // funcion remota
Connection c = getConnection()
try{
c.setAutocommit(false);
doA(c);
doB(c) ;
c.commit;
}catch(exception e){
c.rollback();
throw new MyException("No se pudo hacer Something debido a:"+e.getMessage());
}
}
}
Servlet:
...
ejb.doSomething(); // ya se hizo commit automaticamente o se hizo rollback.
...
Connection c = getConnection()
try{
c.setAutocommit(false);
doA(c);
doB(c) ;
c.commit();
}catch(exception e){
c.rollback();
throws new MyException("No se pudo hacer Something debido a:"+e.getMessage());
}
|