Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate c3p0连接NewPooledConnection关闭异常_Hibernate_Jboss_C3p0 - Fatal编程技术网

Hibernate c3p0连接NewPooledConnection关闭异常

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>

我在上一篇文章中试图解决我的问题。我尝试了c3p0连接。 财产如下:

<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();
    }
}

}