[jboss-cvs] JBossAS SVN: r107026 - in projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager: ccm and 1 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Jul 22 11:53:23 EDT 2010
Author: jesper.pedersen
Date: 2010-07-22 11:53:22 -0400 (Thu, 22 Jul 2010)
New Revision: 107026
Modified:
projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/AbstractConnectionManager.java
projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/ccm/CachedConnectionManager.java
projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/ccm/KeyConnectionAssociation.java
projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/listener/TxConnectionListener.java
Log:
[JBJCA-384] Refactor connection manager (Part 6)
Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/AbstractConnectionManager.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/AbstractConnectionManager.java 2010-07-22 15:02:48 UTC (rev 107025)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/AbstractConnectionManager.java 2010-07-22 15:53:22 UTC (rev 107026)
@@ -54,7 +54,7 @@
* AbstractConnectionManager.
*
* @author <a href="mailto:gurkanerdogdu at yahoo.com">Gurkan Erdogdu</a>
- * @version $Rev$
+ * @author <a href="mailto:jesper.pedersen at jboss.org">Jesper Pedersen</a>
*/
public abstract class AbstractConnectionManager implements ConnectionManager
{
Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/ccm/CachedConnectionManager.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/ccm/CachedConnectionManager.java 2010-07-22 15:02:48 UTC (rev 107025)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/ccm/CachedConnectionManager.java 2010-07-22 15:53:22 UTC (rev 107026)
@@ -29,15 +29,16 @@
import java.lang.reflect.Method;
-import java.util.ArrayList;
import java.util.Collection;
-import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.WeakHashMap;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -58,28 +59,28 @@
/**
* CacheConnectionManager.
- * @version $Rev$
- *
+ *
+ * @author <a href="mailto:jesper.pedersen at jboss.org">Jesper Pedersen</a>
*/
public class CachedConnectionManager implements
UserTransactionStartedListener,
UserTransactionListener,
ComponentStack
{
- /**Log instance*/
+ /** Log instance */
private static Logger log = Logger.getLogger(CachedConnectionManager.class);
- /**Log trace*/
- private boolean trace;
+ /** Log trace */
+ private static boolean trace = log.isTraceEnabled();
- /**Debug flag*/
- private boolean debug;
+ /** Debugging flag */
+ private static boolean debug = false;
- /**Error flag*/
- private boolean error;
+ /** Enabled error handling for debugging */
+ private static boolean error = false;
- /**Transaction Manager instance*/
- private TransactionManager transactionManager;
+ /** Transaction Manager instance */
+ private final TransactionManager transactionManager;
/**
* ThreadLocal that holds current calling meta-programming aware
@@ -95,9 +96,10 @@
* map of meta-aware object to set of connections it holds, used by
* the idiot spec compliant behavior.
*/
- private final Map<KeyConnectionAssociation, Map<ConnectionCacheListener, Collection<ConnectionRecord>>>
- objectToConnectionManagerMap = new HashMap<KeyConnectionAssociation,
- Map<ConnectionCacheListener, Collection<ConnectionRecord>>>();
+ private final ConcurrentMap<KeyConnectionAssociation,
+ ConcurrentMap<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>>>
+ objectToConnectionManagerMap = new ConcurrentHashMap<KeyConnectionAssociation,
+ ConcurrentMap<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>>>();
/**
* Connection stacktraces
@@ -111,7 +113,6 @@
public CachedConnectionManager(final TransactionManager transactionManager)
{
this.transactionManager = transactionManager;
- this.trace = log.isTraceEnabled();
}
/**
@@ -138,15 +139,19 @@
return; //not participating properly in this management scheme.
}
- Map<ConnectionCacheListener, Collection<ConnectionRecord>> cmToConnectionsMap = key.getCMToConnectionsMap();
- Iterator<Entry<ConnectionCacheListener, Collection<ConnectionRecord>>> cmToConnectionsMapIterator =
+ ConcurrentMap<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>> cmToConnectionsMap =
+ key.getCMToConnectionsMap();
+
+ Iterator<Entry<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>>> cmToConnectionsMapIterator =
cmToConnectionsMap.entrySet().iterator();
while (cmToConnectionsMapIterator.hasNext())
{
- Entry<ConnectionCacheListener, Collection<ConnectionRecord>> entry = cmToConnectionsMapIterator.next();
+ Entry<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>> entry =
+ cmToConnectionsMapIterator.next();
+
ConnectionCacheListener cm = entry.getKey();
- Collection<ConnectionRecord> conns = entry.getValue();
+ CopyOnWriteArrayList<ConnectionRecord> conns = entry.getValue();
cm.transactionStarted(conns);
}
@@ -202,7 +207,6 @@
"see the log for the allocation stacktraces");
}
}
-
}
/**
@@ -237,11 +241,13 @@
}
ConnectionRecord cr = new ConnectionRecord(cl, connection, cri);
- Map<ConnectionCacheListener, Collection<ConnectionRecord>> cmToConnectionsMap = key.getCMToConnectionsMap();
- Collection<ConnectionRecord> conns = cmToConnectionsMap.get(cm);
+ ConcurrentMap<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>> cmToConnectionsMap =
+ key.getCMToConnectionsMap();
+
+ CopyOnWriteArrayList<ConnectionRecord> conns = cmToConnectionsMap.get(cm);
if (conns == null)
{
- conns = new ArrayList<ConnectionRecord>();
+ conns = new CopyOnWriteArrayList<ConnectionRecord>();
cmToConnectionsMap.put(cm, conns);
}
@@ -282,8 +288,10 @@
return; //not participating properly in this management scheme.
}
- Map<ConnectionCacheListener, Collection<ConnectionRecord>> cmToConnectionsMap = key.getCMToConnectionsMap();
- Collection<ConnectionRecord> conns = cmToConnectionsMap.get(cm);
+ ConcurrentMap<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>> cmToConnectionsMap =
+ key.getCMToConnectionsMap();
+
+ CopyOnWriteArrayList<ConnectionRecord> conns = cmToConnectionsMap.get(cm);
if (conns == null)
{
return; // Can happen if connections are "passed" between contexts
@@ -347,24 +355,23 @@
@SuppressWarnings("unchecked")
private void reconnect(KeyConnectionAssociation key, Set unsharableResources) throws ResourceException
{
- Map<ConnectionCacheListener, Collection<ConnectionRecord>> cmToConnectionsMap = null;
- synchronized (objectToConnectionManagerMap)
- {
- cmToConnectionsMap = objectToConnectionManagerMap.get(key);
- if (cmToConnectionsMap == null)
- {
- return;
- }
- }
+ ConcurrentMap<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>> cmToConnectionsMap =
+ objectToConnectionManagerMap.get(key);
+
+ if (cmToConnectionsMap == null)
+ return;
+
key.setCMToConnectionsMap(cmToConnectionsMap);
- Iterator<Entry<ConnectionCacheListener, Collection<ConnectionRecord>>> cmToConnectionsMapIterator =
+ Iterator<Entry<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>>> cmToConnectionsMapIterator =
cmToConnectionsMap.entrySet().iterator();
while (cmToConnectionsMapIterator.hasNext())
{
- Entry<ConnectionCacheListener, Collection<ConnectionRecord>> entry = cmToConnectionsMapIterator.next();
+ Entry<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>> entry =
+ cmToConnectionsMapIterator.next();
+
ConnectionCacheListener cm = entry.getKey();
- Collection<ConnectionRecord> conns = entry.getValue();
+ CopyOnWriteArrayList<ConnectionRecord> conns = entry.getValue();
cm.reconnect(conns, unsharableResources);
}
@@ -379,22 +386,23 @@
@SuppressWarnings("unchecked")
private void disconnect(KeyConnectionAssociation key, Set unsharableResources) throws ResourceException
{
- Map<ConnectionCacheListener, Collection<ConnectionRecord>> cmToConnectionsMap = null;
- cmToConnectionsMap = key.getCMToConnectionsMap();
+ ConcurrentMap<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>> cmToConnectionsMap =
+ key.getCMToConnectionsMap();
+
if (!cmToConnectionsMap.isEmpty())
{
- synchronized (objectToConnectionManagerMap)
- {
- objectToConnectionManagerMap.put(key, cmToConnectionsMap);
- }
- Iterator<Entry<ConnectionCacheListener, Collection<ConnectionRecord>>> cmToConnectionsMapIterator =
+ objectToConnectionManagerMap.put(key, cmToConnectionsMap);
+
+ Iterator<Entry<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>>> cmToConnectionsMapIterator =
cmToConnectionsMap.entrySet().iterator();
while (cmToConnectionsMapIterator.hasNext())
{
- Entry<ConnectionCacheListener, Collection<ConnectionRecord>> entry = cmToConnectionsMapIterator.next();
+ Entry<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>> entry =
+ cmToConnectionsMapIterator.next();
+
ConnectionCacheListener cm = entry.getKey();
- Collection<ConnectionRecord> conns = entry.getValue();
+ CopyOnWriteArrayList<ConnectionRecord> conns = entry.getValue();
cm.disconnect(conns, unsharableResources);
}
@@ -417,19 +425,15 @@
log.trace("unregisterConnectionCacheListener: " + cm);
}
- synchronized (objectToConnectionManagerMap)
+ Iterator<ConcurrentMap<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>>> it =
+ objectToConnectionManagerMap.values().iterator();
+
+ while (it.hasNext())
{
- Iterator<Map<ConnectionCacheListener, Collection<ConnectionRecord>>> it =
- objectToConnectionManagerMap.values().iterator();
-
- while (it.hasNext())
- {
- Map<ConnectionCacheListener, Collection<ConnectionRecord>> cmToConnectionsMap = it.next();
- if (cmToConnectionsMap != null)
- {
- cmToConnectionsMap.remove(cm);
- }
- }
+ ConcurrentMap<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>> cmToConnectionsMap = it.next();
+
+ if (cmToConnectionsMap != null)
+ cmToConnectionsMap.remove(cm);
}
}
@@ -439,7 +443,8 @@
* @param cmToConnectionsMap connection manager to connections
* @return true if close
*/
- private boolean closeAll(Map<ConnectionCacheListener, Collection<ConnectionRecord>> cmToConnectionsMap)
+ private boolean closeAll(ConcurrentMap<ConnectionCacheListener,
+ CopyOnWriteArrayList<ConnectionRecord>> cmToConnectionsMap)
{
if (!debug)
{
@@ -448,12 +453,12 @@
boolean unclosed = false;
- Collection<Collection<ConnectionRecord>> connections = cmToConnectionsMap.values();
+ Collection<CopyOnWriteArrayList<ConnectionRecord>> connections = cmToConnectionsMap.values();
if (connections.size() != 0)
{
- for (Iterator<Collection<ConnectionRecord>> i = connections.iterator(); i.hasNext();)
+ for (Iterator<CopyOnWriteArrayList<ConnectionRecord>> i = connections.iterator(); i.hasNext();)
{
- Collection<ConnectionRecord> conns = i.next();
+ CopyOnWriteArrayList<ConnectionRecord> conns = i.next();
for (Iterator<ConnectionRecord> j = conns.iterator(); j.hasNext();)
{
Object c = (j.next()).getConnection();
Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/ccm/KeyConnectionAssociation.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/ccm/KeyConnectionAssociation.java 2010-07-22 15:02:48 UTC (rev 107025)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/ccm/KeyConnectionAssociation.java 2010-07-22 15:53:22 UTC (rev 107026)
@@ -24,9 +24,9 @@
import org.jboss.jca.core.connectionmanager.ConnectionRecord;
import org.jboss.jca.core.connectionmanager.listener.ConnectionCacheListener;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.CopyOnWriteArrayList;
import org.jboss.util.Strings;
@@ -44,7 +44,7 @@
private final Object metaAwareObject;
//map of cm to list of connections for that cm.
- private Map<ConnectionCacheListener, Collection<ConnectionRecord>> cmToConnectionsMap;
+ private ConcurrentMap<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>> cmToConnectionsMap;
/**
* Creates a new instance.
@@ -84,7 +84,8 @@
* Set map instance.
* @param cmToConnectionsMap connection manager to connections
*/
- public void setCMToConnectionsMap(Map<ConnectionCacheListener, Collection<ConnectionRecord>> cmToConnectionsMap)
+ public void setCMToConnectionsMap(ConcurrentMap<ConnectionCacheListener,
+ CopyOnWriteArrayList<ConnectionRecord>> cmToConnectionsMap)
{
this.cmToConnectionsMap = cmToConnectionsMap;
}
@@ -93,12 +94,10 @@
*
* @return map instance
*/
- public Map<ConnectionCacheListener, Collection<ConnectionRecord>> getCMToConnectionsMap()
+ public ConcurrentMap<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>> getCMToConnectionsMap()
{
if (cmToConnectionsMap == null)
- {
- cmToConnectionsMap = new HashMap<ConnectionCacheListener, Collection<ConnectionRecord>>();
- }
+ cmToConnectionsMap = new ConcurrentHashMap<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>>();
return cmToConnectionsMap;
}
Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/listener/TxConnectionListener.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/listener/TxConnectionListener.java 2010-07-22 15:02:48 UTC (rev 107025)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/listener/TxConnectionListener.java 2010-07-22 15:53:22 UTC (rev 107026)
@@ -83,7 +83,6 @@
{
((LocalXAResource) xaResource).setConnectionListener(this);
}
-
}
/**
@@ -236,7 +235,8 @@
{
try
{
- for (int i = 0; i < unenlisted.size(); ++i)
+ int size = unenlisted.size();
+ for (int i = 0; i < size; ++i)
{
TransactionSynchronization sync = (TransactionSynchronization) unenlisted.get(i);
if (sync.enlist())
@@ -469,13 +469,13 @@
new Throwable("Unabled to enlist resource, see the previous warnings.");
/** Transaction */
- private Transaction currentTx;
+ private final Transaction currentTx;
/** This is the status when we were registered */
- private boolean wasTrackByTx;
+ private final boolean wasTrackByTx;
/** Whether we are enlisted */
- private boolean enlisted = false;
+ private boolean enlisted;
/** Any error during enlistment */
private Throwable enlistError;
@@ -485,10 +485,12 @@
*
* @param trackByTx whether this is track by connection
*/
- public TransactionSynchronization(Transaction tx, boolean trackByTx)
+ public TransactionSynchronization(final Transaction tx, final boolean trackByTx)
{
this.currentTx = tx;
this.wasTrackByTx = trackByTx;
+ this.enlisted = false;
+ this.enlistError = null;
}
/**
More information about the jboss-cvs-commits
mailing list