我有一个完美运行的网络应用程序,它使用 Tomcat 和 Hibernate + c3p0。 我正在以编程方式配置 hibernate ,使用 getClass().getResource(/a/b/model) 加载模型类并添加带注释的类。
现在,我被要求更改 c3p0 并改用 Tomcat JDBC 连接池。我关注了几篇文章,显然一切都设置正确。现在的问题是我在尝试加载模型类和配置 hibernate 时遇到错误。
配置 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 连接池,所以我得到了文件:/C:/apache-tomcat-7.0.29/work/Catalina/localhost/MyApp/loader/a/b/模型
我没有触及任何有关加载的代码,因此显然新配置发生了一些奇怪的事情。有没有人知道如何解决这个问题?为什么路径会变成 work/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");
最佳答案
在浏览了大量有关类加载器和 tomcat 加载所有内容的方式的资源之后,我找不到任何对我的问题特别有用的东西(尽管我确实在这个主题上学到了很多东西)。
无论如何,我开始浏览 Tomcat 的文档,了解我在上面的问题中列出的每个 Web 应用程序上下文 XML 文件。
我将 antiJARLocking=true 切换为 antiResourceLocking=true,我认为某些东西被锁定了,我需要更广泛的反锁定工作。通过该设置,我能够运行我的应用程序。但是 antiResourceLocking 会对启动时间产生显着的负面影响,所以为了尝试我删除了该属性(均默认为 false),这也奏效了!!! :-D。
我的 context.xml 结束时看起来像这样:
<Context 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>
希望这对以后的人有帮助。
关于java - getClass().getResource + Tomcat + hibernate ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12105054/