Java 在tomcat上与hibernate和mysql共享c3p0连接池
我正在做一个项目,我想在tomcat上配置一个带有hibernate的共享连接池。 该项目已经实施,我必须改变它。 它配置了hibernate和c3p0连接池,其中所有JAR都位于项目本身的何处 我将所有用于连接池的jar文件复制到tomcat的lib文件夹中Java 在tomcat上与hibernate和mysql共享c3p0连接池,java,hibernate,tomcat,connection-pooling,c3p0,Java,Hibernate,Tomcat,Connection Pooling,C3p0,我正在做一个项目,我想在tomcat上配置一个带有hibernate的共享连接池。 该项目已经实施,我必须改变它。 它配置了hibernate和c3p0连接池,其中所有JAR都位于项目本身的何处 我将所有用于连接池的jar文件复制到tomcat的lib文件夹中 javax.naming.NoInitialContextException:Cannot instantiate class: org.apache.naming.java.javaURLContextFactory (root cau
javax.naming.NoInitialContextException:Cannot instantiate class: org.apache.naming.java.javaURLContextFactory (root cause classnotfound for org.apache.naming.java.javaURLContextFactory)
<Resource auth="Container"
description="DB Connection"
driverClass="com.mysql.jdbc.Driver"
maxPoolSize="40"
minPoolSize="10"
acquireIncrement="1"
name="jdbc/test"
user="admin"
password="root"
factory="org.apache.naming.factory.BeanFactory"
type="com.mchange.v2.c3p0.ComboPooledDataSource"
jdbcUrl="jdbc:mysql://localhost:3306/testDB" />
<ResourceLink
global="jdbc/test"
name="jdbc/test"
type="javax.sql.DataSource" />
编辑
我没有提到的是,我使用OSGI equinox和servlet桥。
我所配置的一切都是正确的,在我的情况下唯一需要更改的就是更改我的launch.ini
我有:
改成
osgi.parentClassloader=app
osgi.contextClassLoaderParent=fwk <--- changed
osgi.parentClassloader=app
osgi.contextClassLoaderParent=fwk <--- changed
osgi.parentClassloader=app
server.xml中的osgi.contextClassLoaderParent=fwk更改为:
<Resource auth="Container"
description="DB Connection"
driverClass="com.mysql.jdbc.Driver"
maxPoolSize="40"
minPoolSize="10"
acquireIncrement="1"
name="jdbc/testDB" <!-- change -->
user="admin"
password="root"
factory="org.apache.naming.factory.BeanFactory"
type="com.mchange.v2.c3p0.ComboPooledDataSource"
jdbcUrl="jdbc:mysql://localhost:3306/testDB" />
user=“admin”
password=“root”
factory=“org.apache.naming.factory.BeanFactory”
type=“com.mchange.v2.c3p0.ComboPooledDataSource”
jdbcUrl=“jdbc:mysql://localhost:3306/testDB" /
以及:
name=“jdbc/testDB”
type=“javax.sql.DataSource”/
并将您的hibernate.cfg.xml文件
<hibernate-configuration>
<session-factory>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.datasource">java:comp/env/jdbc/testDB</property> <!-- ? -->
<mapping resource="Database.hbm.xml"/>
</session-factory>
</hibernate-configuration>
org.hibernate.dialogue.mysqldialogue
java:comp/env/jdbc/testDB
重新启动catalina。在服务器.xml中更改为:
<Resource auth="Container"
description="DB Connection"
driverClass="com.mysql.jdbc.Driver"
maxPoolSize="40"
minPoolSize="10"
acquireIncrement="1"
name="jdbc/testDB" <!-- change -->
user="admin"
password="root"
factory="org.apache.naming.factory.BeanFactory"
type="com.mchange.v2.c3p0.ComboPooledDataSource"
jdbcUrl="jdbc:mysql://localhost:3306/testDB" />
user=“admin”
password=“root”
factory=“org.apache.naming.factory.BeanFactory”
type=“com.mchange.v2.c3p0.ComboPooledDataSource”
jdbcUrl=“jdbc:mysql://localhost:3306/testDB" /
以及:
name=“jdbc/testDB”
type=“javax.sql.DataSource”/
并将您的hibernate.cfg.xml文件
<hibernate-configuration>
<session-factory>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.datasource">java:comp/env/jdbc/testDB</property> <!-- ? -->
<mapping resource="Database.hbm.xml"/>
</session-factory>
</hibernate-configuration>
org.hibernate.dialogue.mysqldialogue
java:comp/env/jdbc/testDB
重启卡塔琳娜
改成
osgi.parentClassloader=app
osgi.contextClassLoaderParent=fwk <--- changed
osgi.parentClassloader=app
osgi.contextClassLoaderParent=fwk <--- changed
还使用java:/comp/env/jdbc/testDB而不是java:comp/env/jdbc/testDB(斜杠在/comp之前)解决了我在linux tomcat服务器上遇到的另一个问题(JNDI查找异常):
改成
osgi.parentClassloader=app
osgi.contextClassLoaderParent=fwk <--- changed
osgi.parentClassloader=app
osgi.contextClassLoaderParent=fwk <--- changed
还使用java:/comp/env/jdbc/testDB而不是java:comp/env/jdbc/testDB(斜杠在/comp之前)解决了我在linux tomcat服务器上遇到的另一个问题(JNDI查找异常):
在一个项目中可以有多个SessionFactory或EntityManager,每个SessionFactory用于一个和一个池连接,并且在服务器中可以有多个池。SessionFactory是在项目中链接和配置的,而不是在服务器中。您可以在一个项目中有多个SessionFactory或EntityManager,每个SessionFactory用于一个池连接(&1),并且您可以在服务器中有多个池。SessionFactory是在project中链接和配置的,而不是在服务器中
NameNotFoundException.