代码之家  ›  专栏  ›  技术社区  ›  Khan

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

  •  0
  • Khan  · 技术社区  · 7 年前

    我正在从事一个项目,我想在其中配置 在tomcat上使用hibernate。 该项目已经实施,我必须改变它。 项目本身中的所有JAR。

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

    1. c3p0-0.9.5.2.jar
    2. c3p0-oracle-thin-extras-0.9.5.2.jar
    3. mchange-commons-java-0.2.11.jar
    4. 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" />  
    

    在我的 我创建的项目文件 a参考资料`

      <resource-ref>
      <description>DB Connection</description>
      <res-ref-name>jdbc/testDB</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
     </resource-ref>
    `
    

    hibernate.cfg.xml

      </hibernate-configuration>
      <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
      <property name="connection.datasource">java:comp/env/jdbc/testDB</property>
      <mapping resource="Database.hbm.xml"/>
      </hibernate-configuration>
    

    这给了我一个 java.lang.NullPointerException .

    在Tomcat:

     Jun 29, 2017 10:06:19 AM org.apache.catalina.mbeans.GlobalResourcesLifecycleListener createMBeans
    SCHWERWIEGEND: Exception processing Global JNDI Resources
    javax.naming.NamingException: Could not load resource factory class [Root exception is java.lang.ClassNotFoundException: myutil.hibernate.HibernateSessionFactoryTomcatFactory]
        at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:82)
        at javax.naming.spi.NamingManager.getObjectInstance(Unknown Source)
        at org.apache.naming.NamingContext.lookup(NamingContext.java:842)
        at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
        at org.apache.naming.NamingContextBindingsEnumeration.nextElementInternal(NamingContextBindingsEnumeration.java:117)
        at org.apache.naming.NamingContextBindingsEnumeration.next(NamingContextBindingsEnumeration.java:71)
        at org.apache.naming.NamingContextBindingsEnumeration.next(NamingContextBindingsEnumeration.java:34)
        at org.apache.catalina.mbeans.GlobalResourcesLifecycleListener.createMBeans(GlobalResourcesLifecycleListener.java:138)
        at org.apache.catalina.mbeans.GlobalResourcesLifecycleListener.createMBeans(GlobalResourcesLifecycleListener.java:145)
        at org.apache.catalina.mbeans.GlobalResourcesLifecycleListener.createMBeans(GlobalResourcesLifecycleListener.java:110)
        at org.apache.catalina.mbeans.GlobalResourcesLifecycleListener.lifecycleEvent(GlobalResourcesLifecycleListener.java:82)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
        at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
        at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:402)
        at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:347)
        at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:732)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:689)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:321)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:455)
    Caused by: java.lang.ClassNotFoundException: myutil.hibernate.HibernateSessionFactoryTomcatFactory
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:80)
        ... 23 more
    
     
    Jun 29, 2017 10:06:17 AM org.apache.tomcat.util.digester.Digester endElement
    WARNUNG:   No rules found matching 'Server/GlobalNamingResources/ResourceLink'.
    Jun 29, 2017 10:06:17 AM org.apache.catalina.core.AprLifecycleListener init
    INFORMATION: The APR based Apache Tomcat Native library which allows optimal
     performance in production environments was not found on the java.library.path:
    

    编辑

    我没有提到的是,iam使用OSGI equinox和servlet桥。 启动.ini 我有:

    osgi.parentClassloader=app
    osgi.contextClassLoaderParent=app
    

    将其更改为

    osgi.parentClassloader=app
    osgi.contextClassLoaderParent=fwk <--- changed
    

    here a link where i got my help from

    也使用 在前面使用斜杠 comp公司

    2 回复  |  直到 4 年前
        1
  •  2
  •   Yugerten    7 年前

    在你的 server.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" />
    

    以及:

     <ResourceLink
      global="jdbc/testDB" <!--change -->
      name="jdbc/testDB"   <!-- & change -->
      type="javax.sql.DataSource" />  
    

    还有你的

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

    重新启动catalina。

        2
  •  0
  •   Khan    7 年前
    osgi.parentClassloader=app
    osgi.contextClassLoaderParent=app
    

    将其更改为

    osgi.parentClassloader=app
    osgi.contextClassLoaderParent=fwk <--- changed
    

    here 无初始上下文异常

    javax.naming.NoInitialContextException:Cannot instantiate class: org.apache.naming.java.javaURLContextFactory (root cause classnotfound for org.apache.naming.java.javaURLContextFactory)
    

    也使用 java:/comp/env/jdbc/testDB 而不是 java:comp/env/jdbc/testDB (前斜杠 /comp公司

    NameNotFoundException.