Tomcat と Hibernate + c3p0 を使用する完全に機能する webapp がありました。getClass().getResource(/a/b/model) を使用してモデル クラスをロードし、注釈付きクラスを追加して、プログラムで hibernate を構成しています。
ここで、c3p0 を変更して、代わりに Tomcat JDBC 接続プールを使用するように求められました。いくつかの記事をたどったところ、明らかにすべてが正しくセットアップされています。問題は、モデル クラスをロードして休止状態を構成しようとするとエラーが発生することです。
hibernate を構成するクラス (HibernateConnector.class) は、webapps\MyApp\WEB-INF\lib\MyJar.jar の jar (MyJar) 内にあります。
getClass().getResource("HibernateConnector.class") を実行すると、次のパスを正しく取得できます: jar:file:/C:/apache-tomcat-7.0.29/webapps/MyApp/WEB-INF/lib/MyJar.jar !/a/b/c/HibernateConnector.class
getClass().getResource(/a/b/model) を要求するときに c3p0 を削除して Tomcat 接続プールを構成したので、 file:/C:/apache-tomcat-7.0.29/work/Catalina/localhost/MyApp/ を取得します。ローダー/a/b/モデル
ローディングに関するコードには触れていないので、明らかに新しい構成で奇妙なことが起こっています。誰もこれを解決する方法について考えを持っていますか? そして、なぜパスが仕事/カタリナに変わるのですか....?
長い投稿で申し訳ありませんが、事前に感謝します!!
Tomcat 接続プールを使用するために行った変更を次に示します。web.xml に次を追加しました。
<resource-ref>
<description>This is a MySQL database connection</description>
<res-ref-name>jdbc/myDb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
context.xml:
<Context antiJARLocking="true" path="MyApp">
<Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" maxActive="30" maxIdle="10" maxWait="10000" name="jdbc/myDb" password="pass"
type="javax.sql.DataSource" url="jdbc:mysql://localhost/myDb" username="user"/>
</Context>
そして、プログラムで Hibernate を構成します。
props.put("hibernate.connection.datasource", "java:comp/env/jdbc/myDb");
props.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");