Connection Pooling Implementation
In Hibernate applications, there are 2 ways to implement Connection Pooling.
- Hibernate Default Connection Pooling Mechanism
- Third Party Vendors provided Connection pooling mechanism
1. Hibernate Default Connection Pooling Mechanism
In Hibernate applications, to interact with databases hibernate software is generating Connection objects by using its built-in Connection pooling mechanism. Hibernate Software has implemented its built-in connection pooling mechanism in the form of a predefined class like
org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl
Hibernate provided built-in Connection pooling mechanism is able to allow 20 Connections as max count and 1 connection as min count, we can modify this pool size in hibernate applications as per the requirement by using “connection.pool_size” property in hibernate configuration file.
<hibernate-configuration> <session-factory> ----- <property name="connection.pool_size">10</property> ----- </session-factory> </hibernate-configuration>
Note
Hibernate Software provided built-in connection pooling mechanism is suggestible up to Development and Testing phases, it is not suggestible for Production mode of our project.
2. Third Party Vendors provided Connection pooling mechanism
In general, in database related applications we will use the following three third party vendors provided connection pooling mechanisms.
- DBCP
- C3P0
- Proxool
Note
Hibernate is not providing support for DBCP Connection pooling mechanism, but, Hibernate has provided predefined support for C3P0 and Proxool connection pooling mechanisms.
C3P0 Connection Pooling Mechanism In Hibernate
If we want to use C3P0 Connection pooling mechanism in hibernate applications then we have to declare the following properties in hibernate configuration file.
hibernate.connection.provider_class
This property will take Connection Pooling provider class which was provided by hibernate software for C3P0 connection pooling mechanism in the form of “org.hibernate.c3p0.internal.C3P0ConnectionProvider”.
Note
C3P0 ConnectionProvider class will activate C3P0 connection pooling mechanism in Hibernate applications.
hibernate.c3p0.min_size
It will take an int value which is representing minimum no of Connection objects in a pool.
hibernate.c3p0.max_size
It will take int value which is representing maximum no of Connection objects in a pool.
hibernate.c3p0.timeout
It will take connections idle time to destroy.
hibernate.c3p0.max_statements
It will take an int value representing no of statements max for Connection objects.
E.g
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration SYSTEM "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property> <property name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property> <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:xe</property> <property name="hibernate.connection.username">system</property> <property name="hibernate.connection.password">ashok</property> <property name="show_sql">true</property> <property name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property> <property name="hibernate.c3p0.min_size">1</property> <property name="hibernate.c3p0.max_size">19</property> <property name="hibernate.c3p0.timeout">120</property> <property name="hibernate.c3p0.max_statements">10</property> <mapping class="com.ashok.hibernate.pojo.Employee"/> </session-factory> </hibernate-configuration>
Note
Add the following jars to the Hibernate Library.
- c3p0-0.9.2.1.jar
- hibernate-c3p0-4.3.11.Final.jar
- mchange-commons-java-0.2.3.4.jar
Proxool Connection Pooling Mechanism
If we want to use Proxool Connection Pooling mechanism in hibernate applications then we have to use the following steps.
proxool configuration file
It is an XML file, it includes all configuration details of proxool connection pooling mechanism which includes driver class name, driver URL, database user name, database password, minimum connection count, maximum connection count
To provide the above configuration details we have to use the following XML tags.
proxool.xml
<?xml version="1.0" encoding="UTF-8"?> <proxool-config> <proxool> <alias>proxool</alias> <driver-class>oracle.jdbc.OracleDriver</driver-class> <driver-url>jdbc:oracle:thin:@localhost:1521:xe</driver-url> <driver-properties> <property name="user" value="system" /> <property name="password" value="ashok" /> </driver-properties> <minimum-connection-count>10</minimum-connection-count> <maximum-connection-count>30</maximum-connection-count> </proxool> </proxool-config>
To configure proxool configuration file in hibernate configuration file we have to use the following tags along with dialect and mapping configurations.
hibernate.connection.provider_class
It will take Proxool connection pooling provider class which was provided by hibernate software in the form of “org.hibernate.connection. ProxoolConnectionProvider” in order to activate proxool connection
pooling mechanism.
hibernate.proxool.pool_alias
It will take proxool alias name which we defined in proxool configuration file.
hibernate.proxool.xml
It will take the name and location of proxool configuration file.
E.g
<hibernate-configuration> <session-factory> <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property> <property name="hibernate.connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</property> <property name="hibernate.proxool.pool_alias">proxool</property> <property name="hibernate.proxool.xml">proxool.xml</property> <mapping class="com.ashok.hibernate.pojo.Employee" /> </session-factory> </hibernate-configuration>
Note
To use this mechanism, we have to add the following JAR files in Hibernate Library.
- proxool-0.8.3.jar
- hibernate-proxool-4.3.11.Final.jar