我有一个使用 Tomcat 和 Hibernate + c3p0 的完美运行的 webapp。我正在以编程方式配置休眠,使用 getClass().getResource(/a/b/model) 加载模型类并添加带注释的类。
现在,我被要求更改 c3p0 并改用 Tomcat JDBC 连接池。我关注了几篇文章,显然一切都设置正确。现在的问题是我在尝试加载模型类和配置休眠时遇到错误。
配置休眠的类 (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/型号
我没有触及任何关于加载的代码,所以很明显新配置发生了一些奇怪的事情。有谁知道如何解决这个问题?为什么路径会变成工作/Catalina....?
很抱歉发了这么长的帖子,并在此先感谢!
以下是我为使用 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>
上下文.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");