Java getClass().getResource+;Tomcat+;冬眠

Java getClass().getResource+;Tomcat+;冬眠,java,hibernate,tomcat,resources,Java,Hibernate,Tomcat,Resources,我有一个使用Tomcat和Hibernate+c3p0的完美工作的webapp。 我以编程方式配置hibernate,使用getClass().getResource(/a/b/model)加载模型类,并添加带注释的类 现在,我被要求更改c3p0并使用TomcatJDBC连接池。我看了几篇文章,显然一切都设置正确。现在的问题是,我在尝试加载模型类和配置hibernate时出错 正在配置hibernate的类(HibernateConnector.class)位于webapps\MyApp\WEB

我有一个使用Tomcat和Hibernate+c3p0的完美工作的webapp。 我以编程方式配置hibernate,使用getClass().getResource(/a/b/model)加载模型类,并添加带注释的类

现在,我被要求更改c3p0并使用TomcatJDBC连接池。我看了几篇文章,显然一切都设置正确。现在的问题是,我在尝试加载模型类和配置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()时删除了c3p0并配置了Tomcat连接池。getResource(/a/b/model)我得到了文件:/C:/apache-Tomcat-7.0.29/work/Catalina/localhost/MyApp/loader/a/b/model

我没有接触任何关于加载的代码,所以很明显,新配置出现了一些奇怪的情况。有人知道如何解决这个问题吗?为什么这条路要转向工作/卡塔琳娜

抱歉发了这么长的帖子,提前谢谢


下面是我对使用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>

在浏览了大量关于类装入器的资源以及tomcat装入所有内容的方式之后,我找不到任何对我的问题特别有用的东西(尽管我确实在这方面学到了很多东西)

无论如何,我开始阅读Tomcat关于每个web应用程序上下文XML文件的文档,我在上面的问题中列出了该文件

我将antiJARLocking=true切换为antiResourceLocking=true,认为有东西被锁定了,我需要更广泛的反锁工作。有了这个设置,我就可以运行我的应用程序了。但是反资源锁定会在启动时产生显著的负面影响,所以我删除了该属性(默认值均为false),这也起到了作用!!!:-D

My 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>

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

props.put("hibernate.connection.datasource", "java:comp/env/jdbc/myDb");
props.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
<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>