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

Reply via email to