Tenemos un producto de software comercial en desarrollo. Admite backends Oracle, MySQL y SQL * Server (también utilizamos H2 para pruebas). Hacemos nuestras pruebas de integración contra esas bases de datos diferentes usando controladores JDBC de una versión específica. Maven maneja todo esto maravillosamente.¿Deben incluirse los controladores JDBC en una GUERRA?
Al empaquetar la aplicación como GUERRA, ¿está bien si incluimos los controladores JDBC? ¿Cuál es la práctica estándar?
Dado que no sabemos qué base de datos se puede utilizar antes de tiempo, tendríamos que incluirlos a todos. Los contenedores de servlets dirigidos son Tomcat y Jetty, pero algunos clientes también querrán ejecutar dentro de WebSphere y JBoss.
¿El servlet contiene y los servidores de aplicaciones vienen con sus propios controladores JDBC? ¿Nuestro conflicto? Otra preocupación es que hemos desarrollado y probado con una versión del controlador y si un cliente usa otra versión, podemos tener problemas.
Actualmente utilizamos beans fuente de datos Spring, pero estamos en el proceso de pasar a la búsqueda JNDI para la fuente de datos.
@Pascal Thivent: (relevante para el párrafo sobre el grupo de conexiones) ¿podría agregar algunos enlaces o explicar un poco? Estoy de acuerdo con su punto (y lo hice como usted lo describe varias veces porque es la forma más intuitiva), pero me dijeron que es una mala práctica (porque las mismas bibliotecas en la aplicación implementada y en el servidor de aplicaciones pueden causar conflictos) y todas las bibliotecas deben estar empaquetadas en el archivo war de la aplicación. Esto es más real para los casos, cuando se implementa más de 1 aplicación en el mismo servidor (tomcat en mi caso). – Roman
Para expandir en la última oración: un origen de datos JNDI es contenedor administrado y * implícitamente requiere * que el controlador esté presente en la biblioteca del contenedor. El contenedor no explorará las bibliotecas WAR para los controladores. Esto de hecho termina la discusión :) – BalusC
@Roman Sure, vea el [Apache Tomcat 6.0 Class Loader HOW-TO] (http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html). Si desea utilizar el grupo de conexiones ** integrado ** de Tomcat, el controlador debe estar disponible en $ CATALINA_HOME/lib o Tomcat no podrá cargarlo. –