maxstatements maxidletime max_idle_time example combopooleddatasource c3po hibernate jboss c3p0

maxidletime - Hibernate c3p0 Connection NewPooledConnection cerrar Exception



java c3po (1)

Este problema se plantea en algún momento en que la sesión se cierra y la conexión utilizada para la sesión todavía está activa, y cuando se abre una sesión nueva, se abre una nueva sesión. Conduce al uso de un uso exagerado de las conexiones especificadas en el conjunto de conexiones, y los hilos auxiliares desempeñan su parte y mi problema aparece aquí. Cambié mi clase Hibernate SessionFactory y el proveedor de Customized Connection resolvió mi problema. Los cambios son los siguientes ...

public class HibernateSessionFactory { private staticString CONFIG_FILE_LOCATION = "/hibernate.cfg.xml"; private static Configuration configuration = new Configuration(); private static org.hibernate.SessionFactory sessionFactory; private static String configFile = CONFIG_FILE_LOCATION; public static Session session; static { try { configuration.configure(configFile); sessionFactory = configuration.buildSessionFactory(); } catch (Exception e) { System.err.println("%%%% Error Creating SessionFactory %%%%"); e.printStackTrace(); } } public HibernateSessionFactory() { } public static Session getSession() throws HibernateException { try { if (session == null) { session = sessionFactory.openSession(MyConnectionProvider .getConn()); } else { if (session.isOpen() && !session.connection().isClosed()) { System.out.println("SESSION AVAILABLE..."); MyConnectionProvider.showConnectionDetails(); return session; } if (!session.isOpen()) { System.out.println("SESSION WAS CLOSED AND OPEN AGAIN.."); session = sessionFactory.openSession(MyConnectionProvider .getConn()); } else if (session.connection().isClosed()) { System.out.println("CONNECTION WAS CLOSED AND OPENING AGAIN..."); session.close(); session = sessionFactory.openSession(MyConnectionProvider .getConn()); } } MyConnectionProvider.showConnectionDetails(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return session; } public static org.hibernate.SessionFactory getSessionFactory() { return sessionFactory; } public static void setConfigFile(String configFile) { HibernateSessionFactory.configFile = configFile; sessionFactory = null; } public static Configuration getConfiguration() { return configuration; } }

ang la clase MyConnectionProvider es

public class MyConnectionProvider { static String jdbcDriverClass; static String jdbcUrl; static String username; static String password; static String poolSize = "20"; static ComboPooledDataSource ds; static { config(HibernateSessionFactory.getConfiguration().getProperties()); ds = new ComboPooledDataSource(); // System.out.println(" "+jdbcUrl); ds.setJdbcUrl(jdbcUrl); // System.out.println(username); ds.setUser(username); // System.out.println(password); ds.setPassword(password); ds.setMinPoolSize(1); ds.setMaxPoolSize(20); } public static void config(Properties props) { System.out.println("SETTING CONFIGURATION..."); jdbcDriverClass = props.getProperty(Environment.DRIVER); jdbcUrl = props.getProperty(Environment.URL); username = props.getProperty(Environment.USER); password = props.getProperty(Environment.PASS); System.out.println(jdbcDriverClass + " " + jdbcUrl + " " + username + " " + password + " " + poolSize); } public static Connection getConn() { Connection conn = null; try { System.out.println("URL " + ds.getJdbcUrl()); System.out.println("Busy Connections : " + ds.getNumBusyConnections("user", "user")); return ds.getConnection(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); return conn; } } public static void showConnectionDetails() { try { System.out.println("Busy Connections : " + ds.getNumBusyConnections() + " Connections : " + ds.getNumConnections() + " Thread Pool Size : " + ds.getThreadPoolSize() + " Active Threads : " + ds.getThreadPoolNumActiveThreads() + " Idle Threads : " + ds.getThreadPoolNumIdleThreads() + " Pending Tasks : " + ds.getThreadPoolNumTasksPending()); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

Estaba tratando de resolver mi problema desde mi publicación previa java.sql.SQLRecoverableException: Closed Connection . Intenté con conexiones c3p0. La propiedad es la siguiente,

<property name="hibernate.connection.provider_class"> org.hibernate.connection.C3P0ConnectionProvider</property> <property name="hibernate.connection.autoReconnect">true</property> <property name="dialect"> org.hibernate.dialect.Oracle10gDialect </property> <property name="hibernate.c3p0.min_size">5</property> <property name="hibernate.c3p0.max_size">20</property> <property name="hibernate.c3p0.timeout">300</property> <property name="hibernate.c3p0.idle_test_period">6000</property> <property name="hibernate.c3p0.numHelperThreads">9</property>

Después de implementar en JBOSS, comencé a probar mi web. Al principio funcionaba bien y aún más rápido. Después de 10 minutos, se mantuvo cargando y se agotó el tiempo de espera. Cuando revisé server.log, recibí algunos mensajes de advertencia de la siguiente manera.

00:34:13,162 INFO [com.mchange.v2.c3p0.impl.NewPooledConnection] com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2) [c3p0] Exceptions occurred while trying to close a PooledConnection''s resources normally. 00:34:13,162 INFO [com.mchange.v2.c3p0.impl.NewPooledConnection] (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2) [c3p0] NewPooledConnection close Exception.: java.sql.SQLRecoverableException: IO Error: Software caused connection abort: recv failed at oracle.jdbc.driver.T4CConnection.logoff(T4CConnection.java:556) [ojdbc6.jar:11.2.0.3.0] at oracle.jdbc.driver.PhysicalConnection.close(PhysicalConnection.java:3984) [ojdbc6.jar:11.2.0.3.0] at com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:474) [c3p0-0.9.1.jar:0.9.1] at com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:191) [c3p0-0.9.1.jar:0.9.1] at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.destroyResource(C3P0PooledConnectionPool.java:470) [c3p0-0.9.1.jar:0.9.1] at com.mchange.v2.resourcepool.BasicResourcePool$1DestroyResourceTask.run(BasicResourcePool.java:964) [c3p0-0.9.1.jar:0.9.1] at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547) [c3p0-0.9.1.jar:0.9.1] Caused by: java.net.SocketException: Software caused connection abort: recv failed at java.net.SocketInputStream.socketRead0(Native Method) [rt.jar:1.6.0_13] at java.net.SocketInputStream.read(SocketInputStream.java:129) [rt.jar:1.6.0_13] at oracle.net.ns.Packet.receive(Packet.java:300) [ojdbc6.jar:11.2.0.3.0] at oracle.net.ns.DataPacket.receive(DataPacket.java:106) [ojdbc6.jar:11.2.0.3.0] at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:315) [ojdbc6.jar:11.2.0.3.0] at oracle.net.ns.NetInputStream.read(NetInputStream.java:260) [ojdbc6.jar:11.2.0.3.0] at oracle.net.ns.NetInputStream.read(NetInputStream.java:185) [ojdbc6.jar:11.2.0.3.0] at oracle.net.ns.NetInputStream.read(NetInputStream.java:102) [ojdbc6.jar:11.2.0.3.0] at oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:124) [ojdbc6.jar:11.2.0.3.0] at oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:80) [ojdbc6.jar:11.2.0.3.0] at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1137) [ojdbc6.jar:11.2.0.3.0] at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:290) [ojdbc6.jar:11.2.0.3.0] at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192) [ojdbc6.jar:11.2.0.3.0] at oracle.jdbc.driver.T4C7Ocommoncall.doOLOGOFF(T4C7Ocommoncall.java:61) [ojdbc6.jar:11.2.0.3.0] at oracle.jdbc.driver.T4CConnection.logoff(T4CConnection.java:543) [ojdbc6.jar:11.2.0.3.0] ... 6 more 00:34:13,177 WARN [com.mchange.v2.resourcepool.BasicResourcePool] (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2) Failed to destroy resource: com.mchange.v2.c3p0.impl.NewPooledConnection@b041ecc: java.sql.SQLException: Some resources failed to close properly while closing com.mchange.v2.c3p0.impl.NewPooledConnection@b041ecc at com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:496) [c3p0-0.9.1.jar:0.9.1] at com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:191) [c3p0-0.9.1.jar:0.9.1] at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.destroyResource(C3P0PooledConnectionPool.java:470) [c3p0-0.9.1.jar:0.9.1] at com.mchange.v2.resourcepool.BasicResourcePool$1DestroyResourceTask.run(BasicResourcePool.java:964) [c3p0-0.9.1.jar:0.9.1] at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547) [c3p0-0.9.1.jar:0.9.1]

Por favor, da algunas ideas para resolver este problema.