Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在tomcat上与hibernate和mysql共享c3p0连接池_Java_Hibernate_Tomcat_Connection Pooling_C3p0 - Fatal编程技术网

Java 在tomcat上与hibernate和mysql共享c3p0连接池

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

我正在做一个项目,我想在tomcat上配置一个带有hibernate的共享连接池。 该项目已经实施,我必须改变它。 它配置了hibernate和c3p0连接池,其中所有JAR都位于项目本身的何处

我将所有用于连接池的jar文件复制到tomcatlib文件夹中

javax.naming.NoInitialContextException:Cannot instantiate class: org.apache.naming.java.javaURLContextFactory (root cause classnotfound for org.apache.naming.java.javaURLContextFactory)
  • c3p0-0.9.5.2.1
  • c3p0-oracle-thin-extras-0.9.5.2.jar
  • mchange-commons-java-0.2.11.jar
  • mysql-connector-java-5.1.40-bin.jar
  • server.xml中,我创建了一个资源

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