Não é possível encontrar a classe org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory no Tomcat7 / Ubuntu 12.10? (Possível bug)

2

Tomcat7: 7.0.30-0ubuntu1.1

O Tomcat 7 tem os arquivos jar commons-dbcp.jar e tomcat-dbcp.jar, mas no tomcat-dbcp.jar, é a classe org.apache.tomcat. dbcp .BasicDataSourceFactory de org.apache.tomcat. dbcp.dbcp .BasicDataSourceFactory que está procurando.

causa raiz

javax.naming.NamingException: Could not create resource factory instance [Root exception is java.lang.ClassNotFoundException: org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory]
    org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:121)
    javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321)
    org.apache.naming.NamingContext.lookup(NamingContext.java:843)
    org.apache.naming.NamingContext.lookup(NamingContext.java:154)
    org.apache.naming.NamingContext.lookup(NamingContext.java:831)
    org.apache.naming.NamingContext.lookup(NamingContext.java:168)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    java.lang.Thread.run(Thread.java:722)
    
por Joe 15.03.2013 / 19:42

2 respostas

5

Uma solução é dada para problema no StackOverflow modificando a tag de recurso em conf / context.xml para usar factory="org.apache.commons.dbcp.BasicDataSourceFactory" em vez do padrão do Tomcat 7 factory. Você pode ver a causa desse problema.

A tag do recurso será algo como (tirado da resposta referenciada):

<Resource name="jdbc/myDataSource"
    auth="Container"
    type="javax.sql.DataSource"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost:3306/myDatabase"
    username="username" password="password"
    validationQuery="SELECT COUNT(*) FROM MY_TABLE"
    factory="org.apache.commons.dbcp.BasicDataSourceFactory" />
    
por Mohamad Fakih 22.07.2013 / 20:55
3

A fábrica DataSource padrão no tomcat 7 é org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory. Isto está contido em um arquivo jar que os mantenedores do Debian não distribuem.

O Tomcat 7 agora inclui outra implementação do conjunto de conexões que pode ser usada, mas não é o padrão.

org.apache.tomcat.jdbc.pool.DataSourceFactory

Poderíamos mudar a fábrica padrão para isso que já está incluída na distribuição atual e assim resolver esse problema.

Versão do Ubuntu: 12.10

tomcat7: 7.0.30-0ubuntu1.1

    
por Joe 20.03.2013 / 09:46