Hibernate c3p0连接NewPooledConnection关闭异常
我在上一篇文章中试图解决我的问题。我尝试了c3p0连接。 财产如下:Hibernate c3p0连接NewPooledConnection关闭异常,hibernate,jboss,c3p0,Hibernate,Jboss,C3p0,我在上一篇文章中试图解决我的问题。我尝试了c3p0连接。 财产如下: <property name="hibernate.connection.provider_class"> org.hibernate.connection.C3P0ConnectionProvider</property> <property name="hibernate.connection.autoReconnect">true</property>
<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>
请给出一些解决这个问题的想法 此问题会在会话关闭且用于会话的连接仍处于活动状态时出现,当再次打开新会话时,会打开新会话。这会导致使用超过连接池中指定的连接的使用量,助手线程发挥作用,我的问题就在这里。我更改了Hibernate SessionFactory类,自定义连接提供程序解决了我的问题。变化如下
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 MyConnectionProvider类是
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();
}
}
}
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();
}
}
}