web-dev-qa-db-ja.com

Ubuntu Tomcat7 Java.lang.ClassNotFoundException:org.Apache.Tomcat.dbcp.dbcp.BasicDataSourceFactory

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)

ヒントは大歓迎です。

乾杯。

28
Edo

図書館 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

36
amra

原因は、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システムでのみ必要です。

25
Steve

Tomcat 7.0.55を使用したFedora 20でも同じ問題が発生しました。ファイルパスとファイル名の7.0.30を7.0.55に置き換えましたが、これでうまくいきました。理由はわかりませんが、このファイルはTomcat 7のYUMインストールから完全に欠落していました。カントはそれなしでデータベースを使用します。

1
Cory

centOSでも同じ問題が発生しました。これを回避するには、サイトからTomcatの新しいコピーをダウンロードし、Tomcat-dbcp.jarをオンラインサーバーlibにアップロードし、サーバーを再起動します:)

1
Sameeh Harfoush

Tomcatにパッチを適用したくない場合は、(CentOSで)Java_OPTSに以下を追加することもできます(例:/usr/share/Tomcat/conf/context.xmlに追加します)

Java_OPTS="-Djavax.sql.DataSource.Factory=org.Apache.commons.dbcp.BasicDataSourceFactory"
0
Kai

それでした。

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

0
Nabeel Hendow