28

Ubuntu12.XのTomcat7でJDBCデータソースを設定しようとしているので、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にコピーしましたが、役に立ちませんでした。 。ファイルを他の場所にコピーしてみましたが、同じ結果になりました。

もう1つの試みは、/ 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)

どんなヒントでも、大歓迎です。

乾杯。

4

6 に答える 6

38

リポジトリのライブラリ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

于 2013-04-08T13:46:31.010 に答える
26

原因は、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" />

重要な要素は、組み込みのデフォルトをオーバーライドする「factory」宣言です。

本番マシンでは、リソースは server.xml ファイルの GlobalNamingResources 要素で定義されています。ファクトリの指定は、Ubuntu システムでのみ必要です。

于 2013-02-16T15:08:32.897 に答える
1

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

于 2014-02-18T14:32:31.333 に答える
0

それでできました。

tomcat-dbcp-7.0.30.jar ファイルが以下のサイズでないことを確認してください。ファイルが破損している可能性があり、上記の sudo wget コマンドで置き換える必要がある場合があります。

-rw-r--r-- 1 ルート root 235411 2013 年 5 月 1 日 tomcat-dbcp-7.0.30.jar

lrwxrwxrwx 1 ルート ルート 2013 年 1 月 10 日 tomcat-dbcp.jar -> tomcat-dbcp-7.0.30.jar

于 2014-01-28T20:43:46.480 に答える