Que tal, tengo una aplicacion Web con servlets, usaba tomcat, ahora me pidieron cambiar a OAS. Mi problema es el siguiente, en toda transacción yo guardo el usuario que se conecta en una tabla de sesion global temporary, y en todos los historicos con un trigger obtengo de la tabla de sesion el usuario. Eso con tomcat funcionaba correctamente, cuando lo hago con OAS, leí que te genera el pool de conexion, en donde cada conexion es fisica y por lo tanto es una sesion en la base de datos, pero la aplicacion al hacer una petición de conexion, genera una conexión lógica, por lo tanto 2 conexiones lógicas pueden tener la misma conexión física, o eso es lo que yo entendí, y asi es, resulta que haciendo pruebas de concurrencia, el trigger de la tabla histórico cuando hago:
select sesi_USUARIO into :new.USUA
from tabla_sesion;
Me trae el registro de tabla_sesion del otro usuario conectado, y obviamente le pone en toda la torre a mi seguridad, pues en el historico que genero se registra como que las modificaciones que yo hice las hizo el otro usario.
Que puedo hacer? bueno me conecto a OAS de la sig manera:
public Connection Conectar(HttpSession ses) throws NamingException, SQLException {
javax.naming.InitialContext ic = new javax.naming.InitialContext();
javax.sql.DataSource dataSource = (javax.sql.DataSource)ic.lookup("jdbc/NOMBRE");
java.sql.Connection conection = dataSource.getConnection();
conection.setAutoCommit(false);
try {
String Usuario = ses.getAttribute("User") == null ? "" : ses.getAttribute("User").toString();
Utilerias u = new Utilerias();
u.setTsession(conection, Usuario ,IP);
} catch(Exception e) {
conection = null;
throw new SQLException("Error al conectar: " + e.getMessage());
}
return conection;
}