2010-09-22 18 views
6

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.

Respuesta

7

Entonces, ¿el servlet contiene y los servidores de aplicaciones vienen con sus propios controladores JDBC?

Algunos lo hacen (por ejemplo, WebLogic).

Will ours conflict?

No deberían. Sin embargo, no estoy seguro si se seleccionará el tuyo al crear un grupo de conexiones independiente en el nivel de la aplicación (todo depende del modo de delegación del cargador de clases).

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.

Tiene una lista de versiones compatibles.

Actualmente utilizamos beans fuente de datos Spring, pero estamos en el proceso de pasar a la búsqueda JNDI para la fuente de datos.

Si con esto que escriba usando la agrupación de conexiones proporcionada por un servidor de aplicaciones, controladores deben instalarse a nivel contenedor, no a nivel de aplicación. Y esto de alguna manera termina la discusión.

+0

@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

+4

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

+0

@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. –

6

En la mayoría de las aplicaciones, los controladores JDBC no se envían como parte de la aplicación.

Si envía los controladores JDBC, eso significa que tiene que dar los controladores para toda la base de datos que desea admitir. Agrega muchas bibliotecas innecesarias.

Simplemente no agregue ningún controlador, y diga al usuario que coloque el archivo JAR relevante en las bibliotecas del servidor si es necesario.

3

Aparte de los méritos técnicos de incluir el controlador en el archivo war, también debe verificar la licencia del controlador y asegurarse de que sea distribuible por un tercero.

Cuestiones relacionadas