मैं मारिया डीबी डेटाबेस के साथ संचार के लिए हाइबरनेट 4 और सी 3 पी 0 का उपयोग कर जावा एसई अनुप्रयोग के साथ विकास कर रहा हूं। यह लंबे समय तक चलने वाला एप्लिकेशन है, बाहर से संकेतों की प्रतीक्षा कर रहा है, इसलिए कभी-कभी डाटाबेस 8 घंटे निष्क्रियता के बाद मेरे कनेक्शन बंद कर देता है। मैंने c3p0 कनेक्शन को कॉन्फ़िगर करने की कोशिश की लेकिन यह काम नहीं कर रहा है। क्या तुम मेरी मदद कर सकते हो?कनेक्शन c3p0 पूल में जांच
त्रुटि लॉग (नाम क्वेरी निष्पादन के दौरान फेंक दिया):
2014-10-27 08:10:19.062 ERROR [trans] com.example.runnable.T1 - Exception thrown during event processing, rollbacking transaction: org.hibernate.exception.JDBCConnectionException: could not extract ResultSet at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:132) at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112) at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:91) at org.hibernate.loader.Loader.getResultSet(Loader.java:2065) at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1862) at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1838) at org.hibernate.loader.Loader.doQuery(Loader.java:909) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:354) at org.hibernate.loader.Loader.doList(Loader.java:2553) at org.hibernate.loader.Loader.doList(Loader.java:2539) at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2369) at org.hibernate.loader.Loader.list(Loader.java:2364) at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:496) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:387) at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:231) at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1264) at org.hibernate.internal.QueryImpl.list(QueryImpl.java:103) at com.example.runnable.T1.find(EventsTransmitter.java:140) at com.example.runnable.T1.run(EventsTransmitter.java:86) at java.lang.Thread.run(Thread.java:745) Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 108,132,692 milliseconds ago. The last packet sent successfully to the server was 108,132,692 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem. at sun.reflect.GeneratedConstructorAccessor30.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:408) at com.mysql.jdbc.Util.handleNewInstance(Util.java:377) at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1036) at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3661) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2417) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2582) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2530) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1907) at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2030) at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:82) ... 17 more Caused by: java.net.SocketException: Broken pipe at java.net.SocketOutputStream.socketWrite0(Native Method) at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109) at java.net.SocketOutputStream.write(SocketOutputStream.java:153) at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82) at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140) at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3643) ... 23 more
pom.xml:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.33</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.6.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.1.2.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>4.3.6.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>4.3.6.Final</version>
</dependency>
src/मुख्य/संसाधन/hibernate.cfg.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/MyBase?zeroDateTimeBehavior=convertToNull&autoReconnect=true</property>
<property name="hibernate.connection.username">user</property>
<property name="hibernate.connection.password">pass</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="show_sql">true</property>
<property name="use_sql_comments">true</property>
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.use_query_cache">true</property>
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">10</property>
<property name="hibernate.c3p0.timeout">300</property>
<property name="hibernate.c3p0.max_statements">30</property>
<mapping class="com.example.domain.E" />
</session-factory>
</hibernate-configuration>
src/main/resource /c3p0-config.xml:
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="preferredTestQuery">SELECT 1 FROM DUAL</property>
<property name="testConnectionOnCheckin">true</property>
<property name="idleConnectionTestPeriod">1800</property> <!-- 30 minutes -->
</default-config>
</c3p0-config>
संपादित
स्टार्टअप पर लॉग मैं c3p0 विन्यास (Netbeans से Maven द्वारा क्रियान्वित) हो रही है में:
...
INFO: Initializing c3p0 pool... [email protected]
[ connectionPoolDataSource -> [email protected] [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000,
autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null,
connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, debugUnreturnedConnectionStackTraces -> false, factoryClassLocation -> null,
forceIgnoreUnresolvedTransactions -> false, identityToken -> z8kflt95n558v5xddgsj|2cf3d63b, idleConnectionTestPeriod -> 1800, initialPoolSize -> 5,
maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 300, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 10, maxStatements -> 30,
maxStatementsPerConnection -> 0, minPoolSize -> 5, nestedDataSource -> [email protected] [ description -> null, driverClass -> null,
factoryClassLocation -> null, identityToken -> z8kflt95n558v5xddgsj|1e6a3214, jdbcUrl -> jdbc:mysql://localhost:3306/MyBase?zeroDateTimeBehavior=convertToNull&autoReconnect=true,
properties -> {user=******, password=******} ], preferredTestQuery -> SELECT 1 FROM DUAL, propertyCycle -> 0, statementCacheNumDeferredCloseThreads -> 0,
testConnectionOnCheckin -> true, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false; userOverrides: {} ],
dataSourceName -> null, factoryClassLocation -> null, identityToken -> z8kflt95n558v5xddgsj|7161d8d1, numHelperThreads -> 3 ]
...
संपादित 2
मैवेन-शेड-प्लगइन द्वारा बनाए गए जार को निष्पादित करते समय मुझे मिल रहा है:
पाज़ 27, 2014 10:56:22 org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator चेतावनी instantiateC3p0Provider: HHH000022: c3p0 गुण का सामना करना पड़ा रहे थे, लेकिन c3p0 प्रदाता वर्ग पर नहीं मिला था क्लासपाथ; इन गुणों को अनदेखा किया जा रहा है। पाज़ 27, 2014 22:56:22 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl कॉन्फ़िगर चेतावनी देते हैं: HHH000402: का उपयोग कर हाइबरनेट में निर्मित कनेक्शन पूल (! नहीं उत्पादन उपयोग के लिए) 27, 2014 पाज़ 22:56:22 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
या जब मैं org.hibernate.connection.C3P0ConnectionProvider
गुण में इंगित करने के लिए करने की कोशिश की:
जानकारी: HHH000130: स्पष्ट instantiating कनेक्शन पी rovider: org.hibernate.connection.C3P0ConnectionProvider प्रारंभिक SessionFactory निर्माण failed.org.hibernate.service.spi.ServiceException: करने में असमर्थ सेवा के लिए अनुरोध बनाने [org.hibernate.engine.jdbc.connections.spi.ConnectionProvider] अपवाद थ्रेड "मुख्य" java.lang.ExceptionInInitializerError com.example.util.HibernateUtil। (HibernateUtil.java:27) com.example.App.run (App.java:31) com.example.App पर .main (App.java:25)
कारण: org.hibernate.service.spi.ServiceException: में असमर्थ अनुरोधित सेवा [org.hibernate.engine.jdbc.connections.spi।ConnectionProvider]at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:261) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:225) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206) at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.buildJdbcConnectionAccess(JdbcServicesImpl.java:260) at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:94) at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206) at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1885) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1843) at com.example.util.HibernateUtil.<clinit>(HibernateUtil.java:24) ... 2 more Caused by: org.hibernate.HibernateException: Could not instantiate
कनेक्शन प्रदाता [org.hibernate.connection.C3P0ConnectionProvider]
at org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator.instantiateExplicitConnectionProvider(ConnectionProviderInitiator.java:197) at org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator.initiateService(ConnectionProviderInitiator.java:120) at org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator.initiateService(ConnectionProviderInitiator.java:55) at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:105) at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:251) ... 12 more Caused by: org.hibernate.boot.registry.selector.spi.StrategySelectionException:
असमर्थ हल करने नाम [org.hibernate.connection.C3P0ConnectionProvider] रणनीति के रूप में [org.hibernate.engine .jdbc.connections.spi.ConnectionProvider] org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.selectStrategyImplementor (StrategySelectorImpl.java:128) org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator पर .instantiateExplicitConnectionProvider (ConnectionProviderInitiator.java:194) ... 16 अधिक
लेकिन सब कुछ अच्छा है जब Maven द्वारा शुरू। दुर्भाग्य से मुझे सिंगल जार से काम करने की ज़रूरत है। कोई विचार क्यों org.hibernate.connection.C3P0ConnectionProvider छायांकित जार में नहीं पाया जा सकता है?
आप सही हैं, c3p0 प्रारंभ नहीं किया गया था जब मैं कंसोल से अपने वसा जार निष्पादित कर रहा हूं - अद्यतन प्रश्न देखें। मुझे पता चला कि हाइबरनेट-सी 3 पी 0 पैकेज v4.3.6 में कोई org.hibernate.connection.C3P0ConnectionProvider क्लास नहीं है, लेकिन इसके बजाय org.hibernate.c3p0.internal.C3P0ConnectionProvider है। मैंने इसका इस्तेमाल किया और यह अच्छा लग रहा है, c3p0 प्रारंभ किया गया है, मैं केवल यह जांचने का इंतजार कर रहा हूं कि कनेक्शन जांच के साथ समस्या हल हो गई है या नहीं। – Radzikowski