Donde tengo que colocar el controlador JDBC para Tomcat de la conexión de la piscina?

Así que he descubierto mi error, ahora estoy buscando una idea de lo que está pasando exactamente. Estoy utilizando la Versión de Apache Tomcat 7.0.32. Estoy usando este tutorial para configurar la agrupación para JDBC. En mi carpeta META-INF hice un context.xml archivo y ponlo en no.

<?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>

Tengo este error cuando escribí este

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 sólo aparece cuando tengo esta declaración en mi context.xml archivo. Cuando me retire ningún error.

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

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

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

Así que hice un poco de investigación y encontrar un post diciendo que usted necesita para agregar este tarro a la carpeta lib si usted tiene una versión anterior de tomcat. Así que he añadido el tarro y ahora funciona, pero me gustaría tener alguna información en cuanto a lo que en la tierra es porque estoy utilizando la más tomcat versión. Entonces, ¿por qué cuando me especificar una fábrica obtengo un error. Y ¿qué es este frasco que voy a agregar y por qué es que hay muy poca documentación al respecto? Cualquier información sobre lo que está pasando aquí, sería muy apreciado.

InformationsquelleAutor gmustudent | 2012-10-31

2 Kommentare

  1. 61

    El controlador JDBC tiene que ser visible para el mismo cargador de clases como el origen de datos de la fábrica de sí mismo. La fuente de datos de la fábrica de la biblioteca se coloca en Tomcat propia /lib carpeta y así, cargados por Tomcat «común» cargador de clases.

    Tu problema se parece al que se le cayó el controlador JDBC en la webapp del /WEB-INF/lib. La webapp del /WEB-INF/lib es invisible a los «comunes» cargador de clases. Así que, técnicamente, usted tiene que colocar el controlador JDBC en Tomcat propia /lib carpeta (o, al menos, en una ruta de acceso configurable según lo especificado por common.loader configuración en /conf/catalina.properties) con el fin de hacer visible a la fuente de datos de fábrica.

    O, como se ha intentado, la copia de los datos de origen de fábrica en /WEB-INF/lib también solucionarlo. La webapp del /WEB-INF/lib tiene a saber, la mayor prioridad en classloading de Tomcat /lib carpeta. Así que si el origen de datos de fábrica se encuentra en /WEB-INF/lib, será cargado a partir de ahí. Como el controlador JDBC también está ahí, va a ser visto. Esto sin embargo no es la solución adecuada para su problema concreto, esto es más de una solución, por lo que no debe hacer esto.

    No hay exactamente documentación que está dirigido específicamente a esta cuestión. El Tomcat Cargador de clases de CÓMO-A sin embargo, la ayuda en la comprensión de la carga de clases de la jerarquía en Tomcat.

    Donde tengo que colocar el controlador JDBC para Tomcat de la conexión de la piscina?

    Véase también:

    • GRACIAS GRACIAS GRACIAS! Usted es honesto el mejor! Entiendo todo lo que está diciendo y por qué estaba recibiendo un error. La única cosa que no entiendo es donde el «Tomcat propia /lib» de la carpeta es? Actualmente estoy usando eclipse y tengo dos carpetas en mi área de trabajo. gmustudent y Servidores. Cuando me expanda Servidores me aparece la carpeta de Tomcat v7.0 Servidor en localhost-config y en la que hay un par de archivos XML. He intentado ponerlo en esa carpeta, pero que era un huuuuge error! Así que pido disculpas por la segunda pregunta, pero ¿qué entiende usted por «Tomcat propia /carpeta lib?
    • En Tomcat de la carpeta de instalación en el disco local del sistema de archivos. E. g. C:\path\to\apache-tomcat-7.0.30. Esto no es para ser administrado desde dentro de Eclipse. El /conf carpeta mencionado en mi respuesta también es no.
    • Wow que tiene mucho sentido! Me gustaría poder hablar con usted acerca de esto durante horas! Tengo un par de preguntas rápidas de cosas que quiero aclarar sobre esto si no te importa. 1) Usted dice que el origen de datos de fábrica es en que carpeta lib. Que jar se encuentra? 2) Esto puede ser un similair respuesta a 1, pero donde este ubicada la fábrica=»org.apache.tomcat.jdbc.de la piscina.DataSourceFactory» exactamente? Se esta apuntando a un frasco de en que carpeta o en otro lugar? 3) debo mantener mi controlador jdbc en que carpeta lib a partir de ahora o es una buena práctica poner en WEB-INF/lib, a menos que usted lo necesita en otro lugar como este escenario?
    • Es el tomcat-jdbc.jar archivo. El valor de la fábrica es el nombre de clase completo que se ha de transmitir a Class#forName() en Tomcat interna del código, de forma que se pueden cargar y crear instancias. Sí, el controlador JDBC archivo JAR debe mantenerse en Tomcat /lib (o al menos en una ruta de acceso especificada por common.loader de la propiedad).
    • Así que, básicamente, cuando inicio mi servidor de fábrica=»org.apache.tomcat.jdbc.de la piscina.DataSourceFactory» se carga en ClassforName en algún lugar detrás de las escenas en la juerga de solteros código interno y, a continuación, carga que jar (tomcat-jdbc.jar) que me permite utilizar la agrupación de conexiones? ¿Me tienes!? lol
    • No se exactamente que. Cuando Tomcat inicia, carga context.xml archivo(s), se encuentra de recursos de tipo javax.sql.DataSource con un factory atributo. Hace un DataSourceFactory factory = (DataSourceFactory) Class.forName(factoryClassName).newInstance(); y, a continuación, DataSource dataSource = factory.createDataSource(properties); con todas las otras propiedades que se encuentran en el XML para obtener, finalmente, el hormigón DataSource instancia que tiene un getConnection() método. El archivo JAR no es exactamente cargado, es sólo «ya» en la ruta de clases, de modo que la clase de fábrica se pueden encontrar.
    • Véase también tomcat.apache.org/tomcat-7.0-doc/api/org/apache/tomcat/jdbc/… para Tomcat javadoc en DataSourceFactory. Por cierto, los controladores JDBC de trabajo aproximadamente de la misma manera.
    • Muchas gracias! Yo realmente agradezco su comprensión! Yo no entendía en absoluto de ayer y de hoy estoy totalmente de conseguir lo que está sucediendo! Gracias!
    • Eres bienvenido 🙂 Se llama el resumen patrón de fábrica.
    • Hola de nuevo! Tengo otra pregunta acerca de esto si usted sería tan amable. Ahora he movido de mi sitio para MochaHosting y fuera de mi local host y ha sido una absoluta pesadilla! No sé por qué las cosas no están funcionando correctamente. He configurado mi context.xml archivo para asignar a la nueva base de datos pero me sale este error «ADVERTENCIA: no se pudo registrar en JMX: javax.nomenclatura.NamingException: Access denied for user ‘ccarrin2_ccarrin’@’localhost’ (utilizando password: YES)» sé que la url de nombre de usuario y contraseña en context.xml son correctos, así que no sé qué hacer? Debería quizá mover este a server.xml?
    • Es realmente el nombre de usuario/contraseña combo que no es aceptado por el DB como se especifica en la URL de JDBC. Tenga cuidado con las mayúsculas y minúsculas y los espacios en blanco. También asegúrese de que la base de datos del nombre en la URL de JDBC es correcta. Controlador JDBC y todo está muy bien. De lo contrario podría no llegar a ese punto en el que estás. En contacto con el soporte de alojamiento si en vano.
    • Su mejor! No podía imaginar que iba a otra persona para ayudar gracias!

  2. 0

    Tuve el mismo problema, su solución no funciona para mí.
    He tenido que añadir la ‘mysql-connector-java-5.1.30-bin.jar’ archivo en mi carpeta lib para que funcione, ya que estaba usando en ese controlador 🙂
    Saludos.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Recent Articles

Python «set» con duplicados/elementos repetidos

Hay una forma estándar de representar un "conjunto" que puede contener elementos duplicados. Como yo lo entiendo, un conjunto tiene exactamente un cero o...

Python: generador de expresión vs rendimiento

En Python, ¿hay alguna diferencia entre la creación de un generador de objetos a través de un generador de expresión versus el uso de...

Cómo exportar/importar la Masilla lista de sesiones?

Hay una manera de hacer esto? O tengo que tomar manualmente cada archivo de Registro? InformationsquelleAutor s.webbandit | 2012-10-23

no distingue mayúsculas de minúsculas coincidentes en xpath?

Por ejemplo, para el xml a continuación <CATALOG> <CD title="Empire Burlesque"/> <CD title="empire burlesque"/> <CD...