Ubuntu 12.XのTomcat 7でJDBC DataSourceをセットアップしようとしているので、context.xmlファイルに以下を追加しました。
<Resource name="jdbc/myDS" auth="Container" type="javax.sql.DataSource"
maxActive="5" maxIdle="2" maxWait="5000"
driverClassName="org.postgresql.Driver" username="usr" password="***" url="jdbc:postgresql://localhost:5432/db" />
明らかに、適切でテスト済みのデータベースユーザーIDとパスワードを使用します。 Tomcatを再起動すると、次のエラーが表示されます。
Feb 05, 2013 1:10:01 PM org.Apache.catalina.core.NamingContextListener addResource
WARNING: Failed to register in JMX: javax.naming.NamingException: Could not create resource factory instance [Root exception is Java.lang.ClassNotFoundException: org.Apache.Tomcat.dbcp.dbcp.BasicDataSourceFactory]
グーグルで調べて、JDBCドライバーを$ CATALINA_HOME/libフォルダーにコピーする必要があることがわかったので、postgresql-9.2-1000.jdbc4.jarを/ usr/share/Tomcat7/libにコピーしましたが、解決しませんでした。ファイルを他の場所にコピーしてみましたが、同じ結果になりました。
別の試みは、/ usr/share/Tomcat7/libのTomcat-dbcp.jarシンボリックリンクを../../Java/Tomcat-dbcp-7.0.30.jarから../../Java/Tomcat-に変更することでしたdbcp.jar。唯一の変更は、4つではなく1つの警告のみを受け取ったことですが、データソースも機能しません。
Javaバージョン:
jdoe@sever:~$ Java -version
Java version "1.7.0_09"
OpenJDK Runtime Environment (IcedTea7 2.3.4) (7u9-2.3.4-0ubuntu1.12.10.1)
OpenJDK 64-Bit Server VM (build 23.2-b09, mixed mode)
ヒントは大歓迎です。
乾杯。
図書館 Tomcat-dbcp-7.0.30.jar
リポジトリーから破損しています。
次のものに置き換えます:
Sudo wget -O /usr/share/Java/Tomcat-dbcp-7.0.30.jar http://search.maven.org/remotecontent?filepath=org/Apache/Tomcat/tomcat-dbcp/7.0.30/Tomcat-dbcp-7.0.30.jar
原因は、Tomcat7のUbuntuビルド/パッケージプロセスの問題です。問題を正しく理解すると、ApacheはバイナリファイルからTomcat-dbcp.jarをビルドしますが、Ubuntuはソースからのみパッケージをビルドします。 Ubuntuプロジェクトでは、Javaパッケージ名を変更する必要があります。これは、私たちの貧しいユーザーにとっては物事を壊しがちです。厄介な詳細は、 Ubuntuリストを発行します 。
私が見つけた解決策は、リソースを定義するときにデータソースファクトリに名前を付けることです。ある場合には、以下を含むMETA-INF/context.xmlファイルがあります。
<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" />
重要な要素は「ファクトリー」宣言であり、組み込みのデフォルトをオーバーライドします。
実稼働マシンでは、リソースはserver.xmlファイルのGlobalNamingResources要素で定義されます。ファクトリーの指定は、Ubuntuシステムでのみ必要です。
Tomcat 7.0.55を使用したFedora 20でも同じ問題が発生しました。ファイルパスとファイル名の7.0.30を7.0.55に置き換えましたが、これでうまくいきました。理由はわかりませんが、このファイルはTomcat 7のYUMインストールから完全に欠落していました。カントはそれなしでデータベースを使用します。
centOSでも同じ問題が発生しました。これを回避するには、サイトからTomcatの新しいコピーをダウンロードし、Tomcat-dbcp.jarをオンラインサーバーlibにアップロードし、サーバーを再起動します:)
Tomcatにパッチを適用したくない場合は、(CentOSで)Java_OPTSに以下を追加することもできます(例:/usr/share/Tomcat/conf/context.xmlに追加します)
Java_OPTS="-Djavax.sql.DataSource.Factory=org.Apache.commons.dbcp.BasicDataSourceFactory"
それでした。
Tomcat-dbcp-7.0.30.jarファイルが以下のサイズになっていない場合、破損している可能性があるため、上記のSudo wgetコマンドで置き換える必要があります。
-rw-r--r-- 1ルートルート235411 2013年5月1日Tomcat-dbcp-7.0.30.jar
lrwxrwxrwx 1ルートルート22 2013年1月10日Tomcat-dbcp.jar-> Tomcat-dbcp-7.0.30.jar