Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Need Code to create Connection Pool in java

Need code to create the connection pool in java? How does we make sure that connection pool doesn't return the same object which is already in use? How happens if client closed the connection after taking it out from Connection pool?

Update 1:

I want to create this in Simple Java terms and want to see how it works in Multithreading Env. I mean which methods would be synchronized and which are not. Also will this class would be a public class? If yes then any one can access this class and reinitialize the connection pool?

Update 2:

I have some code as below. But i don't how "Closing a connection coming from a pool returns it to the pool, it doesn't close the connection physically." Also i didn't understood this "Because if a connection has been borrowed from the pool and not returned yet, it's not "available" and can't be redistributed to another client of the pool."

import java.util.*; import java.sql.*;  class ConnectionPoolManager {   String databaseUrl = "jdbc:mysql://localhost:3306/myDatabase";  String userName = "userName";  String password = "userPass";   Vector connectionPool = new Vector();   public ConnectionPoolManager()  {   initialize();  }   public ConnectionPoolManager(   //String databaseName,   String databaseUrl,   String userName,   String password   )  {   this.databaseUrl = databaseUrl;   this.userName = userName;   this.password = password;   initialize();  }   private void initialize()  {   //Here we can initialize all the information that we need   initializeConnectionPool();  }   private void initializeConnectionPool()  {   while(!checkIfConnectionPoolIsFull())   {    System.out.println("Connection Pool is NOT full. Proceeding with adding new connections");    //Adding new connection instance until the pool is full    connectionPool.addElement(createNewConnectionForPool());   }   System.out.println("Connection Pool is full.");  }   private synchronized boolean checkIfConnectionPoolIsFull()  {   final int MAX_POOL_SIZE = 5;    //Check if the pool size   if(connectionPool.size() < 5)   {    return false;   }    return true;  }   //Creating a connection  private Connection createNewConnectionForPool()  {   Connection connection = null;    try   {    Class.forName("com.mysql.jdbc.Driver");    connection = DriverManager.getConnection(databaseUrl, userName, password);    System.out.println("Connection: "+connection);   }   catch(SQLException sqle)   {    System.err.println("SQLException: "+sqle);    return null;   }   catch(ClassNotFoundException cnfe)   {    System.err.println("ClassNotFoundException: "+cnfe);    return null;   }    return connection;  }   public synchronized Connection getConnectionFromPool()  {   Connection connection = null;    //Check if there is a connection available. There are times when all the connections in the pool may be used up   if(connectionPool.size() > 0)   {    connection = (Connection) connectionPool.firstElement();    connectionPool.removeElementAt(0);   }   //Giving away the connection from the connection pool   return connection;  }   public synchronized void returnConnectionToPool(Connection connection)  {   //Adding the connection from the client back to the connection pool   connectionPool.addElement(connection);  }   public static void main(String args[])  {   ConnectionPoolManager ConnectionPoolManager = new ConnectionPoolManager();  }  } 
like image 941
mohan Avatar asked May 13 '10 11:05

mohan


People also ask

How do you create a connection pool in Java?

Create an instance of GenericObjectPoolConfig and set maximum idle, minimum idle and maximum connection properties. Now initialize ObjectPool using instances created in step 2 and step 3. Now set pool as an instance of PoolableConnectionFactory. Finally, initialize an instance of DataSource.

How do I set up connection pooling?

Click Resources > JDBC > Data Sources > data_source > [Additional Properties] Connection pool properties. Click Resources > JMS->Queue connection factories-> queue_connection_factory ->[Additional Properties] Connection pool.

What is a connection pool in Java?

Connection pooling is a technique of creating and managing a pool of connections that are ready for use by any thread that needs them. Connection pooling can greatly increase the performance of your Java application, while reducing overall resource usage.

What is connection pool in JDBC?

A JDBC connection pool is a group of reusable connections for a particular database. Because creating each new physical connection is time consuming, the server maintains a pool of available connections to increase performance. When an application requests a connection, it obtains one from the pool.


1 Answers

Need code to create the connection pool in java?

Not sure what the question is but don't create yet another connection pool, use an existing solution like C3P0, Apache DBCP, Proxool or BoneCP (a new player in that field). I would use C3P0.

How does we make sure that connection pool doesn't return the same object which is already in use?

Because if a connection has been borrowed from the pool and not returned yet, it's just not in the pool and can't be assigned to another client of the pool (resources are removed from the pool until they are returned).

How happens if client closed the connection after taking it out from Connection pool?

The connection a client gets from a pool is not really a java.sql.Connection, it's a wrapper (a proxy) for a java.sql.Connection that customizes the behavior of some methods. The close() method is one of them and does not close the Connection instance but returns it to the pool.

like image 155
Pascal Thivent Avatar answered Sep 27 '22 01:09

Pascal Thivent