Aadam
Aadam

Reputation: 1541

hibernate closing connections or not?

My code is below. Possibly I am using it many times in similar manner, i.e in simple words, I am managing the session and transaction this way:

 List<Login> users= null;
        try{
            session=HibernateUtil.getSessionFactory().getCurrentSession();
            tx=session.beginTransaction();
            users=session.createQuery("from Login").list();
            tx.commit();
        }catch(Exception e){System.out.println("commit exception:"+e);
            try {tx.rollback();} catch (Exception ex) {System.out.println("rollback exception:"+ex);} 
        }finally{if(session!=null && session.isOpen()){session.close();}}
        return users;

Now, when I first run the database service(using MySQL) and check from command prompt using this query ...

show status like 'Conn%';

... the result is:

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Connections   | 2     |
+---------------+-------+

When I start my application and use it. After opening few pages and querying the same thing. I am getting the connections as 6, I have even seen above 20.

Now I would like to know that hibernate is closing the connections or not?

I am handling all the transactions that way, I cross checked and dint see any code block without closing the session.

Hibernate.cfg.xml

<hibernate-configuration>

    <session-factory>

        <!-- Database connection settings -->
        <property name="connection.driver_class">
            com.mysql.jdbc.Driver
        </property>
        <property name="connection.url">
            jdbc:mysql://localhost:3306/shareapp
        </property>
        <property name="connection.username">pluto</property>
        <property name="connection.password">admin</property>

        <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">1</property>

        <!-- SQL dialect -->
        <property name="dialect">
            org.hibernate.dialect.MySQLDialect
        </property>

        <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>

        <!-- Disable the second-level cache  -->
        <property name="cache.provider_class">
            org.hibernate.cache.NoCacheProvider
        </property>

        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>

        <!-- Drop and re-create the database schema on startup -->
        <property name="hbm2ddl.auto">update</property>


    </session-factory>

hibernateutil class

public class HibernateUtil {
    private static final SessionFactory sessionFactory;

    static {
        try {
            AnnotationConfiguration config = new AnnotationConfiguration();
        config.addAnnotatedClass(Login.class);
        config.addAnnotatedClass(FilesInfo.class);
        config.addAnnotatedClass(FilesShare.class);

        config.configure("hibernate.cfg.xml");
     //   new SchemaExport(config).create(true,true);

        sessionFactory = config.buildSessionFactory();

        } catch (Throwable ex) {
            // Log the exception. 
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

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

Thanks!

Upvotes: 2

Views: 3424

Answers (1)

Bhashit Parikh
Bhashit Parikh

Reputation: 3131

The "Connections" status variable just refers to the

The number of connection attempts (successful or not) to the MySQL server,

and not the number of active connections. Here is the link: http://dev.mysql.com/doc/refman/5.1/en/server-status-variables.html#statvar_Connections

To get the number of open connections, check the 'Threads_connected' variable, documented at http://dev.mysql.com/doc/refman/5.1/en/server-status-variables.html#statvar_Threads_connected

Upvotes: 1

Related Questions