FastFoodCoding

Login


Connect with one of the following accounts





Login

Please wait while we redirect...

Views: 1155   



What is the connection pool?
Connection pooling is a technique to open or prepare or close connections. A connection pooling mechanism, which is managing connections. If our application require a connection, then connection pooling providing the connection, once task is completed the connection return back to the pool. The responsible of connection pooling opening N number of connections and leave them ready for when your application required. If a connection is invalid because out of idle time, the pooling mechanism will close it and reopen a new one. This represents a better usage of connections .

Benefits of Connection pooling

Connection pool is good for performance, as it prevents Java application create a connection each time when interact with database and minimizes the cost of opening and closing connections.

Hibernate supports a variety of connection pooling mechanisms. Below are the Hibernate supported connection pools.

  1. C3po.
  2. ADBCP(Apache DBCP).
  3. Proxool.

Here i am going to implement the connection pooling with c3po .

What is c3p0 ?

C3P0 is an open source connection pool which has a Hibernate package which you can add as dependency to your project and you are ready to configure the pool.

Following is some sample code.

1) pom.xml
Below dependency isrequired to add in pom.xml

<dependencies>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-c3p0</artifactId>
            <version>3.6.3.Final</version>
        </dependency>
    </dependencies>

2) Configure c3p0 propertise in hibernate.cfg.xml file

<hibernate-configuration>
 <session-factory>

  <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
  <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:analasi</property>
  <property name="hibernate.connection.username">root</property>
  <property name="hibernate.connection.password">root</property>
  <property name="hibernate.dialect">org.hibernate.dialect.Oracle11gDialect</property>
  <property name="hibernate.default_schema">analasi</property>
  <property name="show_sql">true</property>

  <property name="hibernate.c3p0.min_size">10</property>
  <property name="hibernate.c3p0.max_size">50</property>
  <property name="hibernate.c3p0.timeout">500</property>
  <property name="hibernate.c3p0.max_statements">100</property>
  <property name="hibernate.c3p0.idle_test_period">3000</property>
  <property name="hibernate.c3p0.acquireRetryAttempts">3</property>
  <property name="hibernate.c3p0.acquireRetryDelay">200</property>

  <mapping class="com.main.Employee"></mapping>

</session-factory>
</hibernate-configuration>
  1. hibernate.c3p0.min_size – Minimum number of connections in the pool. Hibernate default no of connections : 1
  2. hibernate.c3p0.max_size – Maximum number of connections in the pool. Hibernate default no of connections: 100
  3. hibernate.c3p0.timeout –Idle connection is removed from the pool (in second). Hibernate default: 0, it means connection is never expire.
  4. hibernate.c3p0.max_statements – Number of prepared statements will be cached. Increase performance. Hibernate default: value is 0 , it means caching is disable.
  5. hibernate.c3p0.idle_test_period – idle time in seconds before a connection is automatically validated. Hibernate default value is: 0
  6. hibernate.c3p0.acquireRetryAttempts: Defines how many times c3p0 will try to acquire a new Connection from the database before giving up. If this value is less than or equal to 0, c3p0 will keep trying to fetch a Connection indefinitely.
  7. hibernate.c3p0.acquireRetryDelay: Milliseconds, time c3p0 will wait between acquire attempts.

3) Employee.java

import javax.persistence.*;
import java.io.Serializable;

@Entity
@Table(name = "employee")

public class Employee implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    @Column
    private String name;
    @column
    private Integer age;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name){
        this.name = name;
    }

      public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

4) ConnectionPoolTest.java


import org.hibernate.Transaction;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class ConnectionPoolTest{

    public static void main (String args[]){

        SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
        Session session = sessionFactory .getSession();
        Transaction tx = session.beginTransaction();

        Employee  employee = new Employee();
        employee .setId(10);
        employee .setName("John");
        employee .getAge(25);

        session.save(employee);
        tx.commit();
        session.clear();
        session.close();


    }
}

Note
Hibernate comes with internal connection pool, it is not suitable for production use, so we should implement hibernate supported connection pooling for production.




On By


Top Tutorials

Top Questions

Top Articles

Top Blogs

Top News