sqljdbc4 para libreria example descargar java tomcat jdbc connection-pooling

java - libreria - ¿Dónde debo colocar el controlador JDBC para el conjunto de conexiones de Tomcat?



sqljdbc4-4.0.jar download (2)

El controlador JDBC debe estar visible para el mismo cargador de clases que la fábrica de origen de datos. La biblioteca de la fábrica de fuentes de datos se coloca en la carpeta /lib de Tomcat y, por lo tanto, se carga mediante el cargador de clases "común" de Tomcat.

Su problema suena muy parecido a que dejó caer el controlador JDBC en webapp /WEB-INF/lib . El webapp /WEB-INF/lib es invisible para el cargador de clases "común". Así que, técnicamente, debe colocar el controlador JDBC en la carpeta /lib propia de Tomcat (o, al menos, en una ruta configurable como se especifica en la configuración de /conf/catalina.properties en /conf/catalina.properties ) para que sea visible para los datos fuente de fábrica.

O, como lo intentó, copiar la fábrica de origen de datos en /WEB-INF/lib también lo arreglará. La webapp /WEB-INF/lib tiene una prioridad mayor en la carga de clases que la carpeta /lib de Tomcat. Entonces, si la fábrica de la fuente de datos se encuentra en /WEB-INF/lib , se cargará desde allí. Como el controlador JDBC también está allí, se verá. Sin embargo, esta no es la solución correcta para su problema concreto, esto es más una solución, por lo que no debería hacer esto.

No hay exactamente documentación específicamente dirigida a este tema. Sin embargo, el Tomcat Class Loader HOW-TO ayudará a comprender la jerarquía de carga de clases en Tomcat.

Ver también:

Así que he descubierto mi error, ahora solo estoy buscando información sobre lo que está sucediendo exactamente. Estoy usando Apache Tomcat Version 7.0.32. Estoy usando este tutorial para configurar el pooling para JDBC. En mi carpeta META-INF hice un archivo context.xml y lo coloqué allí.

<?xml version="1.0" encoding="UTF-8"?> <Context> <Resource type="javax.sql.DataSource" name="jdbc/gmustudent" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/official" username="root" password="root" maxActive="100" maxIdle="20" minIdle="15" initialSize="15" maxWait="10000" /> </Context>

Obtuve este error cuando escribí esto

WARNING: Unexpected exception resolving reference java.sql.SQLException: com.mysql.jdbc.Driver at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:254) at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:182) at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:699) at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:631) at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:485) at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:143) at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:116) at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:103) at org.apache.tomcat.jdbc.pool.DataSourceFactory.createDataSource(DataSourceFactory.java:539) at org.apache.tomcat.jdbc.pool.DataSourceFactory.getObjectInstance(DataSourceFactory.java:237) at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:143) at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304) at org.apache.naming.NamingContext.lookup(NamingContext.java:843) at org.apache.naming.NamingContext.lookup(NamingContext.java:154) at org.apache.naming.NamingContext.lookup(NamingContext.java:831) at org.apache.naming.NamingContext.lookup(NamingContext.java:168) at org.apache.catalina.core.NamingContextListener.addResource(NamingContextListener.java:1061) at org.apache.catalina.core.NamingContextListener.createNamingContext(NamingContextListener.java:671) at org.apache.catalina.core.NamingContextListener.lifecycleEvent(NamingContextListener.java:270) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5173) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:680) Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:247) at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:246) ... 29 more Oct 31, 2012 11:23:25 AM org.apache.catalina.core.NamingContextListener addResource WARNING: Failed to register in JMX: javax.naming.NamingException: com.mysql.jdbc.Driver Oct 31, 2012 11:23:25 AM org.apache.coyote.AbstractProtocol start INFO: Starting ProtocolHandler ["http-bio-8086"] Oct 31, 2012 11:23:25 AM org.apache.coyote.AbstractProtocol start INFO: Starting ProtocolHandler ["ajp-bio-8009"] Oct 31, 2012 11:23:25 AM org.apache.catalina.startup.Catalina start INFO: Server startup in 794 ms

Este error solo aparece cuando tengo esta declaración en mi archivo context.xml. Cuando lo elimino no hay error.

factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"

La razón por la que quiero asegurarme de que la tengo es porque en el tutorial de apache tomcat dice

factory is required, and the value should be org.apache.tomcat.jdbc.pool.DataSourceFactory

Entonces hice un poco de investigación sobre SO y encontré una publicación que decía que necesitas agregar este jar a tu carpeta lib si tienes una versión anterior de tomcat. Así que agregué el tarro y ahora funciona, pero me gustaría tener algo de información sobre qué sucede porque estoy usando la versión más nueva de tomcat. Entonces, ¿por qué cuando especifico una fábrica obtengo un error? ¿Y qué es esta jarra que agrego y por qué hay muy poca documentación al respecto? Cualquier información sobre lo que está sucediendo aquí sería muy apreciada.


Tuve el mismo problema, tu solución no funcionó para mí. Tuve que agregar el archivo ''mysql-connector-java-5.1.30-bin.jar'' a mi carpeta lib para que funcionara, ya que estaba usando ese controlador :) Saludos.