0

我有一个使用 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");
4

1 回答 1

0

在浏览了有关类加载器和 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>

希望这对将来的某人有所帮助。

于 2012-08-25T01:28:14.780 回答