Author: dimuthul
Date: Sun Dec 9 05:22:32 2007
New Revision: 10733
Log:
Adding the pool classes.
Added:
trunk/commons/usermanager/modules/core/src/main/java/org/wso2/usermanager/pool/
trunk/commons/usermanager/modules/core/src/main/java/org/wso2/usermanager/pool/JDBCConnectionPool.java
trunk/commons/usermanager/modules/core/src/main/java/org/wso2/usermanager/pool/SimplePoolManager.java
trunk/commons/usermanager/modules/core/src/test/java/org/wso2/usermanager/pool/
trunk/commons/usermanager/modules/core/src/test/java/org/wso2/usermanager/pool/TestConnectionPool.java
trunk/commons/usermanager/modules/core/src/test/java/org/wso2/usermanager/pool/UserSessionSimulator.java
Added:
trunk/commons/usermanager/modules/core/src/main/java/org/wso2/usermanager/pool/JDBCConnectionPool.java
==============================================================================
--- (empty file)
+++
trunk/commons/usermanager/modules/core/src/main/java/org/wso2/usermanager/pool/JDBCConnectionPool.java
Sun Dec 9 05:22:32 2007
@@ -0,0 +1,113 @@
+package org.wso2.usermanager.pool;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.util.Enumeration;
+import java.util.Vector;
+
+import javax.sql.DataSource;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+public class JDBCConnectionPool {
+
+
+ private String URL = null;
+ private String user = null;
+ private String password = null;
+ private int maxConnCount = 5;
+ private int checkedOut = 0;
+ private Vector freeConnections = new Vector();
+ private DataSource dataSource = null;
+
+
+ private static Log log = LogFactory.getLog(JDBCConnectionPool.class);
+
+
+
+ public JDBCConnectionPool(String URL, String user,
+ String password, int maxConn) {
+ this.URL = URL;
+ this.user = user;
+ this.password = password;
+ this.maxConnCount = maxConn;
+ }
+
+
+ public JDBCConnectionPool(DataSource dataSource, int maxConn) {
+ if(dataSource == null){
+ this.dataSource = dataSource;
+ }else{
+ throw new RuntimeException("Connection cannot be null");
+ }
+ maxConnCount = maxConn;
+ }
+
+ public synchronized Connection getConnection() {
+ Connection con = null;
+ if (freeConnections.size() > 0) {
+ con = (Connection) freeConnections.firstElement();
+ freeConnections.removeElementAt(0);
+ try {
+ if (con.isClosed()) {
+ log.debug("Removed bad connection");
+ // Try again recursively
+ con = getConnection();
+ }
+ } catch (SQLException e) {
+ log.debug("Removed bad connection");
+ // Try again recursively
+ con = getConnection();
+ }
+ } else if (maxConnCount == 0 || checkedOut < maxConnCount) {
+ con = newConnection();
+ }
+ if (con != null) {
+ checkedOut++;
+ }
+ return con;
+ }
+
+ private Connection newConnection() {
+ Connection con = null;
+ //TODO :: DataSource
+ try {
+ if (user == null) {
+ con = DriverManager.getConnection(URL);
+ } else {
+ con = DriverManager.getConnection(URL, user, password);
+ }
+ log.debug("Created a new connection in pool ");
+ } catch (SQLException e) {
+ log.debug("Can't create a new connection for " + URL, e);
+ return null;
+ }
+ return con;
+ }
+
+ public synchronized void freeConnection(Connection con) {
+ freeConnections.addElement(con);
+ checkedOut--;
+ notifyAll();
+ }
+
+
+ public synchronized void releaseAll() {
+ Enumeration allConnections = freeConnections.elements();
+ while (allConnections.hasMoreElements()) {
+ Connection con = (Connection) allConnections.nextElement();
+ try {
+ con.close();
+ log.debug("Closed connection for pool ");
+
+ }
+ catch (SQLException e) {
+ log.debug("Can't close connection for pool ", e);
+ }
+ }
+ freeConnections.removeAllElements();
+ }
+
+}
Added:
trunk/commons/usermanager/modules/core/src/main/java/org/wso2/usermanager/pool/SimplePoolManager.java
==============================================================================
--- (empty file)
+++
trunk/commons/usermanager/modules/core/src/main/java/org/wso2/usermanager/pool/SimplePoolManager.java
Sun Dec 9 05:22:32 2007
@@ -0,0 +1,67 @@
+package org.wso2.usermanager.pool;
+
+import java.sql.Connection;
+
+import javax.sql.DataSource;
+
+public class SimplePoolManager {
+
+ private JDBCConnectionPool pool = null;
+
+ private static SimplePoolManager instance = null;
+
+ private static int clients = 0;
+
+ public static synchronized void createInstance(String URL, String user,
+ String password, int maxConn) {
+ if (instance == null) {
+ instance = new SimplePoolManager();
+ instance.createPool(URL, user, password, maxConn);
+ }
+ }
+
+ public static synchronized void createInstance(DataSource dataSource, int
maxConn) {
+ if (instance == null) {
+ instance = new SimplePoolManager();
+ instance.createPool(dataSource, maxConn);
+ }
+ }
+
+ public static synchronized SimplePoolManager getInstance() {
+ clients++;
+ return instance;
+ }
+
+ public static synchronized boolean resetPool() {
+ boolean success = false;
+ if(clients < 1){
+ instance.deletePool();
+ success = true;
+ }
+ return success;
+ }
+
+ public void freeConnection(Connection con) {
+ pool.freeConnection(con);
+ }
+
+ public Connection getConnection() {
+ return pool.getConnection();
+ }
+
+ private void createPool(String URL, String user,
+ String password, int maxConn){
+ pool = new JDBCConnectionPool(URL, user, password, maxConn);
+ }
+
+ private void createPool(DataSource dataSource, int maxConn){
+ pool = new JDBCConnectionPool(dataSource, maxConn);
+ }
+
+ private void deletePool(){
+ pool.releaseAll();
+ pool = null;
+ }
+
+
+}
Added:
trunk/commons/usermanager/modules/core/src/test/java/org/wso2/usermanager/pool/TestConnectionPool.java
==============================================================================
--- (empty file)
+++
trunk/commons/usermanager/modules/core/src/test/java/org/wso2/usermanager/pool/TestConnectionPool.java
Sun Dec 9 05:22:32 2007
@@ -0,0 +1,55 @@
+package org.wso2.usermanager.pool;
+
+import junit.framework.TestCase;
+
+import org.wso2.usermanager.readwrite.DefaultRealmConfig;
+
+public class TestConnectionPool extends TestCase {
+
+
+ DefaultRealmConfig config = null;
+
+ String connectionURL = "jdbc:derby:target/pool/UserDatabase";
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ /* Class clazz = Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
+ Driver driver = (Driver) clazz.newInstance();
+ Properties props = new Properties();
+ Connection dbConnection = driver.connect(
+ connectionURL + ";create=true", props);
+
+ DefaultDatabaseUtil.createDatabase(dbConnection);
+
+ dbConnection.close();
+ dbConnection = null;
+
+ Realm realm = new DefaultRealm();
+ config = (DefaultRealmConfig) realm.getRealmConfiguration();
+ config.setConnectionURL(connectionURL);
+ realm.init(config);*/
+
+ }
+
+
+ public void testPool() throws Exception{
+/* UserSessionSimulator sim1 = new UserSessionSimulator("admin1",
"admin1");
+ UserSessionSimulator sim2 = new UserSessionSimulator("admin2",
"admin2");
+ UserSessionSimulator sim3 = new UserSessionSimulator("admin3",
"admin3");
+ UserSessionSimulator sim4 = new UserSessionSimulator("admin4",
"admin4");
+ UserSessionSimulator sim5 = new UserSessionSimulator("admin5",
"admin5");
+ Thread th1 = new Thread(sim1);
+ Thread th2 = new Thread(sim2);
+ Thread th3 = new Thread(sim3);
+ Thread th4 = new Thread(sim4);
+ Thread th5 = new Thread(sim5);
+ th1.start();
+ th2.start();
+ th3.start();
+ th4.start();
+ th5.start();*/
+
+ }
+
+
+}
Added:
trunk/commons/usermanager/modules/core/src/test/java/org/wso2/usermanager/pool/UserSessionSimulator.java
==============================================================================
--- (empty file)
+++
trunk/commons/usermanager/modules/core/src/test/java/org/wso2/usermanager/pool/UserSessionSimulator.java
Sun Dec 9 05:22:32 2007
@@ -0,0 +1,39 @@
+package org.wso2.usermanager.pool;
+
+import org.wso2.usermanager.readwrite.DefaultRealm;
+import org.wso2.usermanager.readwrite.DefaultRealmConfig;
+
+public class UserSessionSimulator implements Runnable{
+
+ private DefaultRealmConfig config = null;
+ private DefaultRealm realm = null;
+ private String username = null;
+ private String password = null;
+
+ public UserSessionSimulator(String username, String password) throws
Exception{
+ this.username = username;
+ this.password = password;
+ config = new DefaultRealmConfig();
+ config.setConnectionURL("jdbc:derby:target/pool/UserDatabase");
+ realm = new DefaultRealm();
+ realm.init(config);
+ }
+
+ public void run() {
+ //create a realm on User login
+ try {
+ realm.getAuthenticator().authenticate(username,
+ password);
+ Thread.sleep(30);
+ realm.getAuthorizer().isUserAuthorized(username,
+ "book", "read");
+ Thread.sleep(30);
+ realm.getAuthorizer().isUserAuthorized(username,
+ "book", "read");
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+
+}
_______________________________________________
Commons-dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/commons-dev