しばらくの間、Tomcat サーバーと戦っていますが、まだ機能しません。Debian Wheezyでtomcat7をPostgreSQL 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 アプリケーション データ ソースが正常に機能することは必須ではないようです。META-INF/context.xml ファイルを .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())
}
}
context.xml なしで、Catalina/localhost ディレクトリにある if のコピーなしでアプリケーションを実行しようとしましたが、同じエラーが発生します。サーバーが context.xml ファイルを見つけられないだけだと思いますか?
最後に、自分の context.xml をプロジェクトの他の人々と比較しましたが、彼らはまったく同じものを持っていて、彼らのために機能します (彼らが選択したものに依存するデータベース名とパスワードを除く)...また、ポート 5432 が正しいポートであることも確認しました。
はい、かなり不可解です!
より精度が必要な場合 (関連する情報が不足している可能性があります)、遠慮なく私に質問してください。