Estoy usando una aplicación web Java en un servidor Tomcat y me gustaría saber cuál es la "mejor práctica" en términos de acceder a una conexión de base de datos desde el JNDI de Tomcat?Forma correcta de invocar el origen de datos JNDI dentro de Tomcat
Actualmente esto es básicamente lo que estoy haciendo cada vez que necesite acceder a la base de datos:
Context envContext = null;
DataSource dataSource = null;
try {
envContext = (Context)ctx.lookup("java:/comp/env");
dataSource = (DataSource)envContext.lookup("jdbc/datasource");
return dataSource.getConnection();
} catch (Exception e){
e.printStackTrace();
return null;
}finally {
if(envContext != null){
try{
envContext.close();
} catch (NamingException e){
e.printStackTrace();
}
}
}
Sin embargo, es esta la forma correcta para buscar una conexión desde JNDI cada vez que quiera acceder a la base de datos ? ¿Debo hacer una referencia al Contexto o al Datasource en su lugar?
Exactamente el tipo de respuesta que estaba buscando, gracias. Otra pregunta, ¿hay mucho sobrecarga en la creación de un nuevo contexto cada vez que estoy haciendo acceso a los datos? – Avanst
Relativamente hablando, no lo creo. Pero si lo marcaste y crearas un Contexto cada vez frente a simplemente almacenar en caché el origen de datos, sospecharía que verías una diferencia. Pero, en términos prácticos, la cantidad de veces que obtiene un DataSource (o Contexto) es mínimo en comparación con el resto de las actividades en el procesamiento de una solicitud. –
Las búsquedas JNDI no son costosas, las búsquedas 'InitialContext' son ** MUY CARO ** en cada contenedor de aplicaciones y solo deben hacerse una vez al inicio de la aplicación. La mayoría de la gente no sabe la diferencia. –