【问题标题】:TomEE DataSource isn't found未找到 TomEE 数据源
【发布时间】:2013-05-06 09:18:19
【问题描述】:

我有一个关于 TomEE 和使用在 tomee.xml 中指定的 DataSource 的奇怪问题。 值得注意的是,我正在使用 Netbeans、TomEE 和 MySQL。在 Ubuntu 13.04(Xubuntu 最新)上运行

tomee.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<tomee>
    <Resource id="booktablesDS" type="DataSource">
        JdbcDriver com.mysql.jdbc.Driver
        JdbcUrl jdbc:mysql:localhost:3306/book_tables
        UserName juser
        Password jpassword
        JtaManaged true
    </Resource>
</tomee>

还有一个小coden-p,测试连接池:

@Resource DataSource booktablesDS;

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {

    Connection c = booktablesDS.getConnection();
    Statement stmt = c.createStatement();
    ResultSet rs = stmt.executeQuery("SELECT * FROM BOOKS");

我从 TomEE 得到的输出是:

SEVERE: null
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'

完整的堆栈跟踪如下。

May 06, 2013 11:08:53 AM org.apache.catalina.util.LifecycleBase start
INFO: The start() method was called on component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/EJBTest]] after start() had already been called. The second call will be ignored.
May 06, 2013 11:08:54 AM MainS processRequest
SEVERE: null
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1452)
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371)
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
    at MainS.processRequest(MainS.java:35)
    at MainS.doGet(MainS.java:64)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.NullPointerException
    at sun.jdbc.odbc.JdbcOdbcDriver.getProtocol(JdbcOdbcDriver.java:524)
    at sun.jdbc.odbc.JdbcOdbcDriver.knownURL(JdbcOdbcDriver.java:493)
    at sun.jdbc.odbc.JdbcOdbcDriver.acceptsURL(JdbcOdbcDriver.java:307)
    at java.sql.DriverManager.getDriver(DriverManager.java:273)
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1437)
    ... 22 more

May 06, 2013 11:08:55 AM org.apache.catalina.startup.HostConfig deleteRedeployResources
INFO: Undeploying context [/EJBTest]

基本上感觉 netbeans 正在使用另一个 tomee.xml 文件部署项目?忽略我的 tomee.xml 中的值,它位于 tom-ee/conf/tomee.xml 下

帮助会很棒。

【问题讨论】:

    标签: java netbeans jdbc ejb apache-tomee


    【解决方案1】:

    您的网址好像有误。

    jdbc:mysql:localhost:3306/book_tables
    

    应该是

    jdbc:mysql://localhost:3306/book_tables
    

    您能否再次检查tomee/lib 文件夹中是否真的存在 MySQL 驱动程序 JAR。

    【讨论】:

    • 这就是问题所在。 // 不在那里...哦,好吧,很高兴知道!现在我遇到了一些令人讨厌的持久性问题......
    • 很高兴它现在可以工作了。当“//”位于错误的位置时,通常会出现问题。 :-)
    【解决方案2】:

    尝试像这样更改您的代码:

    @Resource(name = "booktablesDS", type = javax.sql.DataSource.class)
    DataSource booktablesDS;
    

    【讨论】:

    • 不,仍然是相同的错误输出:严重:空 org.apache.tomcat.dbcp.dbcp.SQLNestedException:无法为连接 URL 'null' 创建类 '' 的 JDBC 驱动程序
    • 你是否在 pom.xml 中添加了 jdbc 依赖(我想你使用的是 maven)?
    • NetBeans 会自动构建它,但它默认使用 maving。但是,不,我没有添加 jdbc dep,因为我认为没有必要,因为服务器在 _BASE_/lib 文件夹中拥有它。我还没有碰过 pom.xml 文件
    • 我发现了与 eclipse 相关的非常相似的问题。看看Fix Eclipse Server 部分。我的意思是,当您运行 AS 时,它似乎找不到您的数据源,因为它使用默认值。作为一种选择,尝试从命令行(而不是 IDE)部署您的应用程序并检查输出是否相同。
    • 是的,我也看到了该选项,但是 NetBeans 没有服务器的配置文件。它实际上使用服务器的安装路径。我记得当我在 Tomcat 中使用 _BASE_/conf 下的 context.xml 文件设置一个不错的连接池时,当我通过 NetBeans 运行它时,它完全可以工作。但看在上帝的份上,我不能让 TomEE 正常工作!至少不是通过 NetBeans。
    猜你喜欢
    • 2016-12-18
    • 2015-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多