Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Problema con OAS y tablas de sesion

Estas en el tema de Problema con OAS y tablas de sesion en el foro de Oracle en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 28/07/2008, 18:16
 
Fecha de Ingreso: junio-2008
Mensajes: 12
Antigüedad: 15 años, 10 meses
Puntos: 0
Problema con OAS y tablas de sesion

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;
}
  #2 (permalink)  
Antiguo 30/07/2008, 14:44
 
Fecha de Ingreso: junio-2008
Ubicación: D.F.
Mensajes: 62
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Problema con OAS y tablas de sesion

Que Tal,

Si de hecho así es como funciona los pool de conexiones, te mantienen siempre una conexión viva y cada que haces una petición al servidor lo que hace
el pool es crearte un conexión de dos Fases la Maestra es la que siempre esta viva y desde donde se controlan commits y rollbacks, y la segunda es la que realiza los procesos de tu aplicación, por lo tanto la Global Temporary table siempre va a verse igual para todos los procesos de tu aplicación , ya que para oracle es la misma sessión y por lo tanto no cumpliría su proposito de naturaleza.

Más bien la solución debería de darse desde el front, ya sea creando un ejb de sessión o manejando varias conexiones en el pool, una por cada usuario


Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:16.