Как настроить c3p0 с Hibernate и JNDI? - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть приложение, развернутое на сервере geronimo, и я использую Hibernate Framework. Я интегрировал библиотеку C3P0 с ней, и она отлично работает, когда я записал URL базы данных в hibernate.cfg.xml, например так:

<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
        <property name="hibernate.connection.url">jdbc:oracle:thin:@iddfrvexa.grouperci.com:1574:IDDFRV</property>
        <property name="hibernate.connection.username">iqa</property>
        <property name="hibernate.connection.password">iqaadmin</property>
        <!-- <property name="connection.datasource">java:comp/env/rci_cdofr/jdbc/Datasource</property> -->
        <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
        <property name="show_sql">false</property>
        <property name="max_fetch_depth">0</property>
        <property name="hibernate.jdbc.factory_class">net.bull.javamelody.HibernateBatcherFactory</property>

        <!-- <property name="hibernate.dbcp.validationQuery">SELECT 1 FROM DUAL</property> 
            <property name="hibernate.dbcp.testOnBorrow">true</property> -->


        <!-- c3p0 config http://www.hibernate.org/214.html -->
        <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
        <property name="c3p0.min_size">5</property>
        <property name="c3p0.max_size">20</property>
        <property name="c3p0.timeout">1800</property>
        <property name="c3p0.max_statements">50</property>
        <property name = "c3p0.testConnectionOnCheckout">true</property>

но когда я использую jndi, как это:

 <property name="connection.datasource">java:comp/env/rci_cdofr/jdbc/Datasource</property>
        <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
        <property name="show_sql">false</property>
        <property name="max_fetch_depth">0</property>

        <property name="hibernate.jdbc.factory_class">net.bull.javamelody.HibernateBatcherFactory</property>

        <!-- c3p0 config http://www.hibernate.org/214.html -->
        <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
        <property name="c3p0.min_size">5</property>
        <property name="c3p0.max_size">20</property>
        <property name="c3p0.timeout">1800</property>
        <property name="c3p0.max_statements">50</property>
        <property name = "c3p0.testConnectionOnCheckout">true</property>

c3p0 не работает и появилась ошибка.

java.sql.SQLException: Соединения не могут быть получены из базовая база данных! в com.mchange.v2.sql.SqlUtils.toSQLException (SqlUtils.java:106) в com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection (C3P0PooledConnectionPool.java:529) в com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection (AbstractPoolBackedDataSource.java:128) в org.hibernate.connection.C3P0ConnectionProvider.getConnection (C3P0ConnectionProvider.java:78) в org.hibernate.cfg.SettingsFactory.buildSettings (SettingsFactory.java:84) в org.hibernate.cfg.Configuration.buildSettings (Configuration.java:2009) в org.hibernate.cfg.Configuration.buildSessionFactory (Configuration.java:1292) в com.rcibanque.framework.persistance.hibernate.HibernateUtil. (HibernateUtil.java:45) в com.rcibanque.framework.persistance.hibernate.HibernateTransaction.begin (HibernateTransaction.java:62) в com.rcibanque.common.application.ReferencesService.loadReferences (ReferencesService.java:52) на com.rcibanque.common.start.InitServlet.init (InitServlet.java:46) в javax.servlet.GenericServlet.init (GenericServlet.java:215) в org.apache.catalina.core.StandardWrapper.loadServlet (StandardWrapper.java:1108) в org.apache.catalina.core.StandardWrapper.load (StandardWrapper.java:1010) в org.apache.catalina.core.StandardContext.loadOnStartup (StandardContext.java:4413) в org.apache.catalina.core.StandardContext.start (StandardContext.java:4723) в org.apache.geronimo.tomcat.GeronimoStandardContext.access $ 201 (GeronimoStandardContext.java:63) в org.apache.geronimo.tomcat.GeronimoStandardContext $ SystemMethodValve.invoke (GeronimoStandardContext.java:398) в org.apache.geronimo.tomcat.valve.GeronimoBeforeAfterValve.invoke (GeronimoBeforeAfterValve.java:47) в org.apache.geronimo.tomcat.GeronimoStandardContext.start (GeronimoStandardContext.java:251) в org.apache.catalina.core.ContainerBase.addChildInternal (ContainerBase.java:799) в org.apache.catalina.core.ContainerBase.addChild (ContainerBase.java:779) в org.apache.catalina.core.StandardHost.addChild (StandardHost.java:601) в org.apache.geronimo.tomcat.TomcatContainer.addContext (TomcatContainer.java:369) в org.apache.geronimo.tomcat.TomcatWebAppContext.doStart (TomcatWebAppContext.java:512) в org.apache.geronimo.gbean.runtime.GBeanInstance.createInstance (GBeanInstance.java:998) в org.apache.geronimo.gbean.runtime.GBeanInstanceState.attemptFullStart (GBeanInstanceState.java:268) в org.apache.geronimo.gbean.runtime.GBeanInstanceState.start (GBeanInstanceState.java:102) в org.apache.geronimo.gbean.runtime.GBeanInstance.start (GBeanInstance.java:541) в org.apache.geronimo.gbean.runtime.GBeanDependency.attemptFullStart (GBeanDependency.java:111) в org.apache.geronimo.gbean.runtime.GBeanDependency.addTarget (GBeanDependency.java:146) в org.apache.geronimo.gbean.runtime.GBeanDependency $ 1.running (GBeanDependency.java:120) в org.apache.geronimo.kernel.basic.BasicLifecycleMonitor.fireRunningEvent (BasicLifecycleMonitor.java:176) в org.apache.geronimo.kernel.basic.BasicLifecycleMonitor.access $ 300 (BasicLifecycleMonitor.java:44) в org.apache.geronimo.kernel.basic.BasicLifecycleMonitor $ RawLifecycleBroadcaster.fireRunningEvent (BasicLifecycleMonitor.java:254) в org.apache.geronimo.gbean.runtime.GBeanInstanceState.attemptFullStart (GBeanInstanceState.java:294) вorg.apache.geronimo.gbean.runtime.GBeanInstanceState.start (GBeanInstanceState.java:102) в org.apache.geronimo.gbean.runtime.GBeanInstanceState.startRecursive (GBeanInstanceState.java:12apache.ger.ong.ong.ong. org.runtime.GBeanInstance.startRecursive (GBeanInstance.java:555) в org.apache.geronimo.kernel.basic.BasicKernel.startRecursiveGBean (BasicKernel.java:379) в org.apache.geronimo.kernel.conftileUJava: 456) в org.apache.geronimo.kernel.config.ConfigurationUtil.startConfigurationGBeans (ConfigurationUtil.java:493) в org.apache.geronimo.kernel.config.KernelConfigurationManager.start (KernelConfigurationManager.javag18).geronimo.kernel.config.SimpleConfigurationManager.startConfiguration (SimpleConfigurationManager.java:563) в org.apache.geronimo.kernel.config.SimpleConfigurationManager.startConfiguration (SimpleConfigurationManager.java:5на солнце.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:57) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) в java.lang.refj.jg.hoggeronimo.gbean.runtime.ReflectionMethodInvoker.invoke (ReflectionMethodInvoker.java:34) в org.apache.geronimo.gbean.runtime.GBeanOperation.invoke (GBeanOperation.java:124) в org.apache.geronimst .Inan.un.r.вызвать (GBeanInstance.java:867) в org.apache.geronimo.kernel.basic.BasicKernel.invoke (BasicKernel.java:239) в org.apache.geronimo.kernel.KernelGBean.invoke (KernelGBean.java:342) на солнце.reflect.GeneratedMethodAccessor163.invoke (Неизвестный источник) по адресу sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) по адресу java.lang.reflect.Method.invoke (Method.javaonap.gache. at6)..runtime.ReflectionMethodInvoker.invoke (ReflectionMethodInvoker.java:34) в org.apache.geronimo.gbean.runtime.GBeanOperation.invoke (GBeanOperation.java:124) в org.apache.geronimo.gbean.runtime.GBeanInstance.invoke (GBeanInstance.java:867) в org.apache.geronimo.kernel.basic.BasicKernel.invoke (BasicKernel.java:239) в орг..apache.geronimo.system.jmx.MBeanGBeanBridge.(JmxMBeanServer.java:801) по адресу javax.management.remote.rmi.RMIConnectionImpl.doOperation (RMIConnectionImpl.java:1487) по адресу javax.management.remote.rmi.RMIConnectionImpl.accessI $ 300.remote..management.remote.rmi.RMIConnectionImpl.invoke (RMIConnectionImpl.java:848) в sun.reflect.GeneratedMethodAccessor150.invoke (Неизвестный источник) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke (Method.java:606) в sun.rmi.serverRef.UnicastServerRef.java:322) в sun.rmi.transport.Transport $ 1.run (Transport.java:177) в sun.rmi.transport.Transport $ 1.run (Transport.java:174) в java.security.AccessController.doPrivileged(Собственный метод) в sun.rmi.transport.Transport.serviceCall (Transport.java:173) в sun.rmi.transport.tcp.TCPTransport.handleMessages (TCPTransport.java:556) в sun.rmi.transport.tcp.TCPTransport$ ConnectionHandler.run0 (TCPTransport.java:811) в sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run (TCPTransport.java:670) вjava.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1145) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:615) в java.lang.Thread.run (45).Причина: com.mchange.v2.resourcepool.CannotAcquireResourceException: ResourcePool не удалось получить ресурс из его первичной фабрики или источника.на com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable (BasicResourcePool.java:1319) на com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource (BasicResourcePool.java:557) на com.mchange.oresource.resource(BasicResourcePool.java:477) на com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection (C3P0PooledConnectionPool.java:525) ... еще 82

и при отладке я обнаружилURL базы данных был нулевым.Кто-нибудь может мне помочь?

Спасибо.

1 Ответ

0 голосов
/ 24 сентября 2018

Вероятно, если вы хотите обернуть существующий источник данных JNDI версией с пулом c3p0, вам придется создать этот DataSource самостоятельно в Java, а затем настроить Hibernate для поиска этого JNDI-имени DataSource. Я не думаю, что hibernate поддерживает упаковку существующего DataSource в пул c3p0 посредством конфигурации его ConnectionProvider.

Java-оболочка для незапущенного источника данных действительно проста в c3p0 . Просто получите ссылку на ваш существующий не пул DataSource и используйте его вместо ds_unpooled.

...