c3p0的最大连接数在Linux中不起作用

时间:2011-01-11 02:37:09

标签: java hibernate database-connection c3p0

我有一个使用hibernate进行O / R映射的java应用程序,我还使用与hibernate一起提供的c3p0连接池。数据库是Oracle。

这是我的hibernate.cfg.xml

<property name="hibernate.c3p0.min_size">3</property>
<property name="hibernate.c3p0.max_size">5</property>
<property name="hibernate.c3p0.max_statements">20</property>
<property name="hibernate.c3p0.timeout">1800</property>
<property name="hibernate.c3p0.idleTestPeriod">120</property>        

这就是我获取hibernate会话的方式:

public class HibernateUtil {
    private static Logger log = Logger.getLogger(HibernateUtil.class);
    private static final SessionFactory sessionFactory;

    private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
    static {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
            sessionFactory = new Configuration().configure(CONFIG_FILE_LOCATION).buildSessionFactory();
        } catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            log.fatal("Initial SessionFactory creation failed." + ex.getMessage());
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

但是当我在Oracle中运行SELECT * FROM V$SESSION WHERE machine='xxx';时,连接数可以达到20,这大于max_size

最大连接在Linux环境中不起作用,但它们在Unix和Windows中起作用。 Linux中需要调整的任何设置?

我也怀疑应用程序的缓存在某处,就像之前我设置的max_size一样。我在Tomcat 5.5中运行应用程序。但我不知道Tomcat中有这样的应用程序缓存。

另一个信息:我正在运行Linux 2.6.9-34.ELsmp。 Red Hat Enterprise Linux AS release 4 (Nahant Update 3)

感谢。

1 个答案:

答案 0 :(得分:0)

我猜你没有从你的应用程序打开额外的数据库会话。例如,应该有一个额外的连接 - 您用来运行SELECT语句的连接。