0

我一直在与我的 tomcat 服务器打架,但它仍然无法正常工作。我在 Debian Wheezy上使用tomcat7PostgreSQL v9.1。我尽了一切可能,这就是我不断得到的:

database.DataBaseException: Database error while trying to get a new connection. Error information: org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
database.Connection$.getConnection(Connection.scala:20)
database.Users$.createRegisteredUser(Users.scala:58)
controllers.page.CreateAccountController.before(CreateAccountController.scala:36)
controllers.page.AbstractPageController.processRequest(AbstractPageController.scala:52)
controllers.page.AbstractPageController.doPost(AbstractPageController.scala:79)
javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

当我运行我的应用程序和我的 tomcat 服务器时,我可以访问应用程序页面,到目前为止,我为此配置了足够好的 tomcat,但是一旦我有一个涉及对数据库的请求的操作(创建用户等),我得到这个错误!

至于 Web 应用程序的一般上下文,我已经开始帮助一个已经存在的项目,我安装了 tomcat7 并在我的笔记本电脑上克隆了源代码。它与其他人一起工作很好 - 到目前为止我还没有对应用程序代码进行任何更改(代码工作正常):所以错误肯定来自我的 tomcat 配置,而不是来自代码。

要为 Web 应用程序配置 Tomcat7 服务器,我们要做的配置是在 META-INF/ 目录中创建一个 context.xml 对吗?我还在 WEB-INF/web.xml 文件中添加了数据源,但似乎不是必须让 tomcat7 应用程序数据源正常工作。我已经使用 .xml 将 META-INF/context.xml 文件复制并传递到 Catalina/localhost/ 目录。我已经将 postgres jdbc jar 添加到 /usr/share/tomcat7/lib (我看到很多论坛帖子都在谈论 conf/lib 但我找不到它所以我认为它是这个 lib)

我已经阅读了有关使用 tomcat context.xml 文件和诸如此类进行调整的内容,但是有利有弊,无论如何它对我也不起作用。

这是我的 context.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>

<Context>
  <Resource name="jdbc/dbname"
            auth="Container"
            type="javax.sql.DataSource"
            username="user1"
            password="user1"
            driverClassName="org.postgresql.Driver"
        url="jdbc:postgresql://localhost:5432/dbname"
            maxActive="8"
            maxIdle="4"/>
   <Environment name="encryptionKey" type="java.lang.String" value="<the key>" override="false"/>
</Context>

我添加到 WEB-INF/web.xml 中的内容:

<resource-ref>
        <res-ref-name>jdbc/dbname</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>

一切开始的代码示例(用 scala 编写的应用程序):

private val ds: DataSource = new javax.naming.InitialContext().lookup("java:comp/env/jdbc/dbname").asInstanceOf[DataSource]
    private var connec: java.sql.Connection = null

    def getConnection(): java.sql.Connection = {
        try {
            if (connec == null) {
                connec = ds.getConnection() //here is raised the error
                connec.setAutoCommit(false)
            }
            connec
        } catch {
            case ex: SQLException => throw new DataBaseException("Database error while trying to get a new connection. Error information: " + ex.toString())
        }
    }

我尝试在 Catalina/localhost 目录中没有 context.xml 和 if 副本的情况下运行应用程序,但我得到了同样的错误。我猜服务器只是找不到我的 context.xml 文件?

最后一件事是我已经将我的 context.xml 与项目中的其他一些人进行了比较,他们有完全相同的 - 它适用于他们(除了取决于他们选择的数据库名称和密码)......我还确保端口 5432 是正确的,而且确实如此。

是的,这很令人费解!

如果您想要更精确(我可能会遗漏相关内容),请随时问我!

4

0 回答 0