[jboss-svn-commits] JBL Code SVN: r9938 - in labs/jbossesb/trunk/product/core/services/src/org/jboss/soa/esb/persistence: manager and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sat Mar 3 16:09:55 EST 2007


Author: daniel.brum at jboss.com
Date: 2007-03-03 16:09:54 -0500 (Sat, 03 Mar 2007)
New Revision: 9938

Added:
   labs/jbossesb/trunk/product/core/services/src/org/jboss/soa/esb/persistence/manager/
   labs/jbossesb/trunk/product/core/services/src/org/jboss/soa/esb/persistence/manager/ConnectionManagerException.java
   labs/jbossesb/trunk/product/core/services/src/org/jboss/soa/esb/persistence/manager/ConnectionManagerFactory.java
   labs/jbossesb/trunk/product/core/services/src/org/jboss/soa/esb/persistence/manager/J2eeConnectionManager.java
   labs/jbossesb/trunk/product/core/services/src/org/jboss/soa/esb/persistence/manager/StandaloneConnectionManager.java
Log:
support for multiple connection pool managers

Added: labs/jbossesb/trunk/product/core/services/src/org/jboss/soa/esb/persistence/manager/ConnectionManagerException.java
===================================================================
--- labs/jbossesb/trunk/product/core/services/src/org/jboss/soa/esb/persistence/manager/ConnectionManagerException.java	                        (rev 0)
+++ labs/jbossesb/trunk/product/core/services/src/org/jboss/soa/esb/persistence/manager/ConnectionManagerException.java	2007-03-03 21:09:54 UTC (rev 9938)
@@ -0,0 +1,19 @@
+package org.jboss.soa.esb.persistence.manager;
+
+public class ConnectionManagerException extends Exception {
+	
+private static final long serialVersionUID = 1L;
+    
+    public ConnectionManagerException(){
+        super();
+    }
+    
+    public ConnectionManagerException (String msg){
+        super(msg);
+    }
+    
+    public ConnectionManagerException (String msg, Throwable cause){
+        super (msg, cause);
+    }
+
+}

Added: labs/jbossesb/trunk/product/core/services/src/org/jboss/soa/esb/persistence/manager/ConnectionManagerFactory.java
===================================================================
--- labs/jbossesb/trunk/product/core/services/src/org/jboss/soa/esb/persistence/manager/ConnectionManagerFactory.java	                        (rev 0)
+++ labs/jbossesb/trunk/product/core/services/src/org/jboss/soa/esb/persistence/manager/ConnectionManagerFactory.java	2007-03-03 21:09:54 UTC (rev 9938)
@@ -0,0 +1,44 @@
+package org.jboss.soa.esb.persistence.manager;
+
+import org.apache.log4j.Logger;
+import org.apache.log4j.Priority;
+import org.jboss.internal.soa.esb.persistence.manager.ConnectionManager;
+import org.jboss.soa.esb.common.Configuration;
+import org.jboss.soa.esb.common.Factory;
+
+public class ConnectionManagerFactory extends Factory {
+	
+	private static Logger logger = Logger.getLogger(ConnectionManagerFactory.class);
+	
+	public static ConnectionManager getConnectionManager() throws ConnectionManagerException{
+		
+		ConnectionManager manager = null;
+		String className = Configuration.getStoreDBConnectionManager();
+		logger.log(Priority.DEBUG, "Going to load " + className);
+		try
+		{
+			// instruct class loader to load the connection manager
+			Class managerClass = getClassForName(className);
+			ConnectionManager tmp = (ConnectionManager) managerClass.newInstance();
+			manager = tmp.getInstance();
+			tmp=null;			
+			
+		}
+		catch (ClassNotFoundException cnfex)
+		{
+			throw new ConnectionManagerException("Connection Manager Implementation=" + className
+					+ " not found", cnfex);
+		}
+		catch (Exception e)
+		{
+			e.printStackTrace();
+			
+			throw new ConnectionManagerException("Invocation exception. "
+					+ e.getLocalizedMessage(), e);
+		}
+		
+		
+		return manager;
+	}
+
+}

Added: labs/jbossesb/trunk/product/core/services/src/org/jboss/soa/esb/persistence/manager/J2eeConnectionManager.java
===================================================================
--- labs/jbossesb/trunk/product/core/services/src/org/jboss/soa/esb/persistence/manager/J2eeConnectionManager.java	                        (rev 0)
+++ labs/jbossesb/trunk/product/core/services/src/org/jboss/soa/esb/persistence/manager/J2eeConnectionManager.java	2007-03-03 21:09:54 UTC (rev 9938)
@@ -0,0 +1,85 @@
+package org.jboss.soa.esb.persistence.manager;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import javax.naming.Context;
+import javax.sql.DataSource;
+
+import org.apache.log4j.Logger;
+import org.jboss.internal.soa.esb.persistence.manager.ConnectionManager;
+import org.jboss.soa.esb.ConfigurationException;
+import org.jboss.soa.esb.common.Configuration;
+import org.jboss.soa.esb.helpers.NamingContext;
+
+/**
+ * J2EE datasource based Connection Pooling implementation for use when deploying to a J2EE container 
+ *
+ */
+public class J2eeConnectionManager implements ConnectionManager {
+	
+	private static J2eeConnectionManager instance = null;
+	@SuppressWarnings("unused")
+	private DataSource datasource = null;
+	private Context oJndiCtx = null;
+	
+	private static Logger _logger = Logger.getLogger(J2eeConnectionManager.class);
+	private static final Object foo = new Integer(0);
+
+	public Connection getConnection() throws SQLException {
+		
+		return null;
+	}
+
+	public ConnectionManager getInstance() {
+		if (null != instance)
+		{
+			return instance;
+		}
+		
+		synchronized (foo)
+		{
+			if (null != instance) 
+				return instance;
+			
+			try
+			{
+				instance = new J2eeConnectionManager();
+				instance.init();
+			}
+			catch (Exception e)
+			{
+				_logger.error("Could not initialise instance.", e);
+				
+				return null;
+			}
+
+			return instance;
+		}
+	}
+
+	public void init() throws ConfigurationException {
+		_logger.info("initializing...");
+		
+//		try
+//		{
+		oJndiCtx = NamingContext.getServerContext(Configuration.getJndiServerURL(), 
+				Configuration.getJndiServerContextFactory(), Configuration.getJndiServerPkgPrefix());
+		
+		if (null == oJndiCtx) {
+			_logger.error("could not get a valid context");
+			throw new ConfigurationException("could not get a valid context - check your settings in the config file");
+		}						
+		try
+		{
+			datasource =  ((DataSource) oJndiCtx.lookup(Configuration.getStoreDBDatasourceName()));
+		}
+		catch (Exception ex)
+		{
+			_logger.error(ex);
+			throw new ConfigurationException(ex);
+		}
+
+	}
+
+}

Added: labs/jbossesb/trunk/product/core/services/src/org/jboss/soa/esb/persistence/manager/StandaloneConnectionManager.java
===================================================================
--- labs/jbossesb/trunk/product/core/services/src/org/jboss/soa/esb/persistence/manager/StandaloneConnectionManager.java	                        (rev 0)
+++ labs/jbossesb/trunk/product/core/services/src/org/jboss/soa/esb/persistence/manager/StandaloneConnectionManager.java	2007-03-03 21:09:54 UTC (rev 9938)
@@ -0,0 +1,141 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., and others contributors as indicated 
+ * by the @authors tag. All rights reserved. 
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors. 
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A 
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
+ * MA  02110-1301, USA.
+ * 
+ * (C) 2005-2006,
+ * @author daniel.brum at jboss.com
+ */
+
+package org.jboss.soa.esb.persistence.manager;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import org.apache.log4j.Logger;
+import org.jboss.internal.soa.esb.persistence.manager.ConnectionManager;
+import org.jboss.soa.esb.ConfigurationException;
+import org.jboss.soa.esb.common.Configuration;
+
+import com.mchange.v2.c3p0.ComboPooledDataSource;
+
+/**
+ * C3PO Connection Pooling implementation for stand-alone use, outside of a J2EE container 
+ *
+ */
+public class StandaloneConnectionManager implements ConnectionManager
+{
+
+	private static StandaloneConnectionManager instance = null;
+
+	protected ComboPooledDataSource pooledDS = null;
+
+	private static final Object foo = new Integer(0);
+
+	private static Logger _logger = Logger.getLogger(StandaloneConnectionManager.class);
+
+	protected StandaloneConnectionManager ()
+	{
+	}
+
+	public ConnectionManager getInstance ()
+	{
+		if (null != instance)
+		{
+			return instance;
+		}
+		
+		synchronized (foo)
+		{
+			if (null != instance) 
+				return instance;
+			
+			try
+			{
+				instance = new StandaloneConnectionManager();
+				instance.init();
+			}
+			catch (Exception e)
+			{
+				_logger.error("Could not initialise instance.", e);
+				
+				return null;
+			}
+
+			return instance;
+		}
+	}
+
+	public void init () throws ConfigurationException
+	{
+		_logger.info("initializing...");
+		pooledDS = new ComboPooledDataSource();
+
+		try
+		{
+			pooledDS.setDriverClass(Configuration.getStoreDriver());
+			pooledDS.setJdbcUrl(Configuration.getStoreUrl());
+			pooledDS.setUser(Configuration.getStoreUser());
+			pooledDS.setPassword(Configuration.getStorePwd());
+			pooledDS.setMinPoolSize(Integer.valueOf(Configuration
+					.getStorePoolMinSize()));
+			pooledDS.setInitialPoolSize(Integer.valueOf(Configuration
+					.getStorePoolInitialSize()));
+			pooledDS.setMaxPoolSize(Integer.valueOf(Configuration
+					.getStorePoolMaxSize()));
+			pooledDS.setAutomaticTestTable(Configuration.getStorePoolTestTable());
+			pooledDS.setCheckoutTimeout(Integer.valueOf(Configuration
+					.getStorePoolTimeoutMillis()));
+		}
+		catch (Exception ex)
+		{
+			throw new ConfigurationException(ex);
+		}
+	}
+
+	public Connection getConnection () throws SQLException
+	{
+		Connection conn = null;
+
+		// TODO: figure out why this is neccessary - pool should never return
+		// null if DB is up and can connect
+		// testing showed null was being returned from pool in QA test
+		// MessageStoreTest
+		
+		while (true)
+		{
+			if (null != pooledDS)
+			{
+				if (null != (conn = pooledDS.getConnection())) 
+					break;
+				else
+					_logger.error("Null pooledDS");
+			}
+			
+			try
+			{
+				// TODO magic number
+				
+				Thread.sleep(1000);
+			}
+			catch (Exception e)
+			{
+			}
+		}
+
+		return conn;
+	}
+
+}




More information about the jboss-svn-commits mailing list