[jboss-cvs] JBossAS SVN: r111180 - in projects/jboss-jca/trunk: common/src/main/java/org/jboss/jca/common/api/metadata/ds and 20 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Apr 14 08:48:25 EDT 2011
Author: jesper.pedersen
Date: 2011-04-14 08:48:23 -0400 (Thu, 14 Apr 2011)
New Revision: 111180
Added:
projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/api/connectionmanager/ccm/
projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/api/connectionmanager/ccm/CachedConnectionManager.java
projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/api/connectionmanager/ccm/package.html
projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/api/connectionmanager/listener/ConnectionCacheListener.java
projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/ccm/CachedConnectionManagerImpl.java
Removed:
projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/ccm/CachedConnectionManager.java
Modified:
projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/common/CommonConnDef.java
projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ds/CommonDataSource.java
projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ds/DataSource.java
projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ds/XaDataSource.java
projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/common/CommonConnDefImpl.java
projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/common/CommonIronJacamarParser.java
projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ds/DataSourceAbstractImpl.java
projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ds/DataSourceImpl.java
projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ds/DsParser.java
projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ds/XADataSourceImpl.java
projects/jboss-jca/trunk/common/src/main/resources/schema/datasources_1_0.xsd
projects/jboss-jca/trunk/common/src/main/resources/schema/ironjacamar_1_0.xsd
projects/jboss-jca/trunk/common/src/main/resources/schema/resource-adapters_1_0.xsd
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/ConnectionManager.java
projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/ConnectionManagerFactory.java
projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/ConnectionRecord.java
projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/listener/AbstractConnectionListener.java
projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/listener/ConnectionCacheListener.java
projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/ccm/CachedConnectionManagerTestCase.java
projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/listener/NoTxConnectionListenerTestCase.java
projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/listener/TxConnectionListenerTestCase.java
projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/notx/NoTxConnectionManagerTestCase.java
projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/notx/SerializableTestCase.java
projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/pool/PrefillTestCase.java
projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/tx/SerializableTestCase.java
projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/tx/TxConnectionManagerTestCase.java
projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/tx/XATxConnectionManagerTestCase.java
projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/unit/AbstractConnectionManagerTestCase.java
projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/common/AbstractDsDeployer.java
projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/common/AbstractResourceAdapterDeployer.java
projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/AbstractFungalRADeployer.java
projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/DsXmlDeployer.java
projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/RAConfiguration.java
projects/jboss-jca/trunk/doc/userguide/en-US/modules/deployment.xml
projects/jboss-jca/trunk/embedded/src/main/resources/ds.xml
projects/jboss-jca/trunk/embedded/src/main/resources/jca.xml
projects/jboss-jca/trunk/sjc/src/main/resources/bootstrap/ds.xml
projects/jboss-jca/trunk/sjc/src/main/resources/bootstrap/jca.xml
Log:
[JBJCA-547] Make CCM usage configurable
Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/common/CommonConnDef.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/common/CommonConnDef.java 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/common/CommonConnDef.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -79,6 +79,13 @@
public Boolean isUseJavaContext();
/**
+ * Get the useCcm.
+ *
+ * @return the useCcm.
+ */
+ public Boolean isUseCcm();
+
+ /**
* Get the pool.
*
* @return the pool.
@@ -251,7 +258,11 @@
/** use-java-context attribute
*
*/
- USEJAVACONTEXT("use-java-context");
+ USEJAVACONTEXT("use-java-context"),
+ /** use-ccm attribute
+ *
+ */
+ USECCM("use-ccm");
private final String name;
Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ds/CommonDataSource.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ds/CommonDataSource.java 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ds/CommonDataSource.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -107,6 +107,14 @@
public boolean isSpy();
/**
+ * Get the use-ccm.
+ *
+ * @return the use-ccm.
+ */
+
+ public boolean isUseCcm();
+
+ /**
* Get the driver
* @return The value
*/
Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ds/DataSource.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ds/DataSource.java 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ds/DataSource.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -247,8 +247,13 @@
/** spy attribute
*
*/
- SPY("spy");
+ SPY("spy"),
+ /** use-ccm attribute
+ *
+ */
+ USE_CCM("use-ccm");
+
private final String name;
/**
Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ds/XaDataSource.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ds/XaDataSource.java 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ds/XaDataSource.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -245,8 +245,13 @@
/** spy attribute
*
*/
- SPY("spy");
+ SPY("spy"),
+ /** use-ccm attribute
+ *
+ */
+ USE_CCM("use-ccm");
+
private final String name;
/**
Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/common/CommonConnDefImpl.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/common/CommonConnDefImpl.java 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/common/CommonConnDefImpl.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -57,6 +57,8 @@
private final Boolean useJavaContext;
+ private final Boolean useCcm;
+
private final CommonPool pool;
private final CommonTimeOut timeOut;
@@ -76,6 +78,7 @@
* @param poolName poolName
* @param enabled enabled
* @param useJavaContext useJavaContext
+ * @param useCcm useCcm
* @param pool pool
* @param timeOut timeOut
* @param validation validation
@@ -83,7 +86,7 @@
* @param recovery recovery
*/
public CommonConnDefImpl(Map<String, String> configProperties, String className, String jndiName,
- String poolName, Boolean enabled, Boolean useJavaContext, CommonPool pool, CommonTimeOut timeOut,
+ String poolName, Boolean enabled, Boolean useJavaContext, Boolean useCcm, CommonPool pool, CommonTimeOut timeOut,
CommonValidation validation, CommonSecurity security, Recovery recovery)
{
super();
@@ -101,6 +104,7 @@
this.poolName = poolName;
this.enabled = enabled;
this.useJavaContext = useJavaContext;
+ this.useCcm = useCcm;
this.pool = pool;
this.timeOut = timeOut;
this.validation = validation;
@@ -176,6 +180,17 @@
}
/**
+ * Get the useCcm.
+ *
+ * @return the useCcm.
+ */
+ @Override
+ public final Boolean isUseCcm()
+ {
+ return useCcm;
+ }
+
+ /**
* Get the pool.
*
* @return the pool.
@@ -240,6 +255,7 @@
result = prime * result + ((security == null) ? 0 : security.hashCode());
result = prime * result + ((timeOut == null) ? 0 : timeOut.hashCode());
result = prime * result + ((useJavaContext == null) ? 0 : useJavaContext.hashCode());
+ result = prime * result + ((useCcm == null) ? 0 : useCcm.hashCode());
result = prime * result + ((validation == null) ? 0 : validation.hashCode());
return result;
}
@@ -324,6 +340,13 @@
}
else if (!useJavaContext.equals(other.useJavaContext))
return false;
+ if (useCcm == null)
+ {
+ if (other.useCcm != null)
+ return false;
+ }
+ else if (!useCcm.equals(other.useCcm))
+ return false;
if (validation == null)
{
if (other.validation != null)
@@ -339,8 +362,8 @@
{
return "CommonConnDefImpl [configProperties=" + configProperties + ", className=" + className + ", jndiName=" +
jndiName + ", poolName=" + poolName + ", enabled=" + enabled + ", useJavaContext=" + useJavaContext +
- ", pool=" + pool + ", timeOut=" + timeOut + ", validation=" + validation + ", security=" + security +
- ", recovery=" + recovery + "]";
+ ", useCcm=" + useCcm + ", pool=" + pool + ", timeOut=" + timeOut + ", validation=" + validation +
+ ", security=" + security + ", recovery=" + recovery + "]";
}
/**
Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/common/CommonIronJacamarParser.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/common/CommonIronJacamarParser.java 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/common/CommonIronJacamarParser.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -77,6 +77,7 @@
boolean enabled = true;
String jndiName = null;
String poolName = null;
+ boolean useCcm = true;
int attributeSize = reader.getAttributeCount();
boolean isXa = false;
@@ -106,6 +107,10 @@
useJavaContext = attributeAsBoolean(reader, attribute.getLocalName(), true);
break;
}
+ case USECCM : {
+ useCcm = attributeAsBoolean(reader, attribute.getLocalName(), true);
+ break;
+ }
default :
throw new ParserException("Unexpected attribute:" + attribute.getLocalName() + "at " +
reader.getLocalName());
@@ -123,7 +128,7 @@
{
return new CommonConnDefImpl(configProperties, className, jndiName, poolName, enabled,
- useJavaContext, pool, timeOut, validation, security, recovery);
+ useJavaContext, useCcm, pool, timeOut, validation, security, recovery);
}
else
{
Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ds/DataSourceAbstractImpl.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ds/DataSourceAbstractImpl.java 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ds/DataSourceAbstractImpl.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -104,6 +104,11 @@
protected final boolean spy;
/**
+ * use-ccm
+ */
+ protected final boolean useCcm;
+
+ /**
* Create a new DataSourceAbstractImpl.
*
* @param transactionIsolation transactionIsolation
@@ -118,12 +123,13 @@
* @param enabled enabled
* @param jndiName jndiName
* @param spy spy
+ * @param useCcm useCcm
* @throws ValidateException ValidateException
*/
protected DataSourceAbstractImpl(TransactionIsolation transactionIsolation, TimeOut timeOut,
DsSecurity security, Statement statement, Validation validation, String urlDelimiter,
String urlSelectorStrategyClassName, Boolean useJavaContext, String poolName, Boolean enabled, String jndiName,
- boolean spy)
+ boolean spy, boolean useCcm)
throws ValidateException
{
super();
@@ -139,6 +145,7 @@
this.enabled = enabled;
this.jndiName = jndiName;
this.spy = spy;
+ this.useCcm = useCcm;
partialCommonValidation();
}
@@ -251,7 +258,19 @@
}
/**
+ * Get the use ccm
*
+ * @return the use ccm.
+ */
+
+ @Override
+ public final boolean isUseCcm()
+ {
+ return useCcm;
+ }
+
+ /**
+ *
* Partial validation for common fields defined in this abstract class
*
* @throws ValidateException ValidateException
Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ds/DataSourceImpl.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ds/DataSourceImpl.java 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ds/DataSourceImpl.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -78,6 +78,7 @@
* @param enabled enabled
* @param jndiName jndiName
* @param spy spy
+ * @param useccm useccm
* @param pool pool
* @throws ValidateException ValidateException
*/
@@ -85,10 +86,10 @@
TransactionIsolation transactionIsolation, Map<String, String> connectionProperties, TimeOut timeOut,
DsSecurity security, Statement statement, Validation validation, String urlDelimiter,
String urlSelectorStrategyClassName, String newConnectionSql, boolean useJavaContext, String poolName,
- boolean enabled, String jndiName, boolean spy, CommonPool pool) throws ValidateException
+ boolean enabled, String jndiName, boolean spy, boolean useccm, CommonPool pool) throws ValidateException
{
super(transactionIsolation, timeOut, security, statement, validation, urlDelimiter,
- urlSelectorStrategyClassName, useJavaContext, poolName, enabled, jndiName, spy);
+ urlSelectorStrategyClassName, useJavaContext, poolName, enabled, jndiName, spy, useccm);
this.connectionUrl = connectionUrl;
this.driverClass = driverClass;
this.driver = driver;
Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ds/DsParser.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ds/DsParser.java 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ds/DsParser.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -197,6 +197,7 @@
boolean enabled = true;
String jndiName = null;
boolean spy = false;
+ boolean useCcm = true;
for (Attribute attribute : XaDataSource.Attribute.values())
{
@@ -222,6 +223,10 @@
spy = attributeAsBoolean(reader, attribute.getLocalName(), false);
break;
}
+ case USE_CCM : {
+ useCcm = attributeAsBoolean(reader, attribute.getLocalName(), true);
+ break;
+ }
default :
break;
}
@@ -239,7 +244,7 @@
return new XADataSourceImpl(transactionIsolation, timeOutSettings, securitySettings,
statementSettings, validationSettings, urlDelimiter,
urlSelectorStrategyClassName, useJavaContext, poolName, enabled,
- jndiName, spy, xaDataSourceProperty, xaDataSourceClass, driver,
+ jndiName, spy, useCcm, xaDataSourceProperty, xaDataSourceClass, driver,
newConnectionSql, xaPool, recovery);
}
else
@@ -397,6 +402,7 @@
boolean enabled = true;
String jndiName = null;
boolean spy = false;
+ boolean useCcm = true;
for (Attribute attribute : XaDataSource.Attribute.values())
{
@@ -422,6 +428,10 @@
spy = attributeAsBoolean(reader, attribute.getLocalName(), false);
break;
}
+ case USE_CCM : {
+ useCcm = attributeAsBoolean(reader, attribute.getLocalName(), true);
+ break;
+ }
default :
break;
}
@@ -440,7 +450,7 @@
connectionProperties, timeOutSettings, securitySettings,
statementSettings, validationSettings, urlDelimiter,
urlSelectorStrategyClassName, newConnectionSql, useJavaContext, poolName,
- enabled, jndiName, spy, pool);
+ enabled, jndiName, spy, useCcm, pool);
}
else
{
Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ds/XADataSourceImpl.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ds/XADataSourceImpl.java 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ds/XADataSourceImpl.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -74,6 +74,7 @@
* @param enabled enabled
* @param jndiName jndiName
* @param spy spy
+ * @param useCcm useCcm
* @param xaDataSourceProperty xaDataSourceProperty
* @param xaDataSourceClass xaDataSourceClass
* @param driver driver
@@ -84,12 +85,12 @@
*/
public XADataSourceImpl(TransactionIsolation transactionIsolation, TimeOut timeOut, DsSecurity security,
Statement statement, Validation validation, String urlDelimiter, String urlSelectorStrategyClassName,
- boolean useJavaContext, String poolName, boolean enabled, String jndiName, boolean spy,
+ boolean useJavaContext, String poolName, boolean enabled, String jndiName, boolean spy, boolean useCcm,
Map<String, String> xaDataSourceProperty, String xaDataSourceClass, String driver, String newConnectionSql,
CommonXaPool xaPool, Recovery recovery) throws ValidateException
{
super(transactionIsolation, timeOut, security, statement, validation, urlDelimiter,
- urlSelectorStrategyClassName, useJavaContext, poolName, enabled, jndiName, spy);
+ urlSelectorStrategyClassName, useJavaContext, poolName, enabled, jndiName, spy, useCcm);
if (xaDataSourceProperty != null)
{
this.xaDataSourceProperty = new HashMap<String, String>(xaDataSourceProperty.size());
Modified: projects/jboss-jca/trunk/common/src/main/resources/schema/datasources_1_0.xsd
===================================================================
--- projects/jboss-jca/trunk/common/src/main/resources/schema/datasources_1_0.xsd 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/common/src/main/resources/schema/datasources_1_0.xsd 2011-04-14 12:48:23 UTC (rev 111180)
@@ -347,6 +347,16 @@
</xs:documentation>
</xs:annotation>
</xs:attribute>
+ <xs:attribute default="true" name="use-ccm" type="xs:boolean">
+ <xs:annotation>
+ <xs:documentation>
+ <![CDATA[[
+ Enable the use of a cached connection manager
+ Ex: use-ccm="true"
+ ]]>
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
</xs:attributeGroup>
<xs:simpleType name="transaction-isolationType">
<xs:annotation>
Modified: projects/jboss-jca/trunk/common/src/main/resources/schema/ironjacamar_1_0.xsd
===================================================================
--- projects/jboss-jca/trunk/common/src/main/resources/schema/ironjacamar_1_0.xsd 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/common/src/main/resources/schema/ironjacamar_1_0.xsd 2011-04-14 12:48:23 UTC (rev 111180)
@@ -339,8 +339,17 @@
</xs:documentation>
</xs:annotation>
</xs:element>
- <xs:element name="recovery" type="recoverType" minOccurs="0" maxOccurs="1"></xs:element>
- </xs:sequence>
+ <xs:element name="recovery" type="recoverType" minOccurs="0" maxOccurs="1"></xs:element>
+ </xs:sequence>
+ <xs:attribute name="use-ccm" type="xs:boolean" default="true" use="optional">
+ <xs:annotation>
+ <xs:documentation>
+ <![CDATA[[
+ Enable cached connection manager
+ ]]>
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
<xs:attributeGroup ref="common-attribute"></xs:attributeGroup>
</xs:complexType>
Modified: projects/jboss-jca/trunk/common/src/main/resources/schema/resource-adapters_1_0.xsd
===================================================================
--- projects/jboss-jca/trunk/common/src/main/resources/schema/resource-adapters_1_0.xsd 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/common/src/main/resources/schema/resource-adapters_1_0.xsd 2011-04-14 12:48:23 UTC (rev 111180)
@@ -371,8 +371,17 @@
</xs:documentation>
</xs:annotation>
</xs:element>
- <xs:element name="recovery" type="recoverType" minOccurs="0" maxOccurs="1"></xs:element>
- </xs:sequence>
+ <xs:element name="recovery" type="recoverType" minOccurs="0" maxOccurs="1"></xs:element>
+ </xs:sequence>
+ <xs:attribute name="use-ccm" type="xs:boolean" default="true" use="optional">
+ <xs:annotation>
+ <xs:documentation>
+ <![CDATA[[
+ Enable cached connection manager
+ ]]>
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
<xs:attributeGroup ref="common-attribute"></xs:attributeGroup>
</xs:complexType>
Added: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/api/connectionmanager/ccm/CachedConnectionManager.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/api/connectionmanager/ccm/CachedConnectionManager.java (rev 0)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/api/connectionmanager/ccm/CachedConnectionManager.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -0,0 +1,73 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008-2009, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY 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 along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.jca.core.api.connectionmanager.ccm;
+
+import org.jboss.jca.core.api.connectionmanager.listener.ConnectionCacheListener;
+import org.jboss.jca.core.api.connectionmanager.listener.ConnectionListener;
+import org.jboss.jca.core.spi.connectionmanager.ComponentStack;
+import org.jboss.jca.core.spi.transaction.usertx.UserTransactionListener;
+
+import javax.resource.spi.ConnectionRequestInfo;
+import javax.transaction.TransactionManager;
+
+/**
+ * CacheConnectionManager.
+ *
+ * @author <a href="mailto:jesper.pedersen at jboss.org">Jesper Pedersen</a>
+ */
+public interface CachedConnectionManager extends UserTransactionListener, ComponentStack
+{
+ /**
+ * Gets transaction manager.
+ * @return transaction manager
+ */
+ public TransactionManager getTransactionManager();
+
+ /**
+ * Set debug flag
+ * @param v The value
+ */
+ public void setDebug(boolean v);
+
+ /**
+ * Set error flag
+ * @param v The value
+ */
+ public void setError(boolean v);
+
+ /**
+ * Register connection.
+ * @param cm connection manager
+ * @param cl connection listener
+ * @param connection connection handle
+ * @param cri connection request info.
+ */
+ public void registerConnection(ConnectionCacheListener cm, ConnectionListener cl,
+ Object connection, ConnectionRequestInfo cri);
+
+ /**
+ * Unregister connection.
+ * @param cm connection manager
+ * @param connection connection handle
+ */
+ public void unregisterConnection(ConnectionCacheListener cm, Object connection);
+}
Added: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/api/connectionmanager/ccm/package.html
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/api/connectionmanager/ccm/package.html (rev 0)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/api/connectionmanager/ccm/package.html 2011-04-14 12:48:23 UTC (rev 111180)
@@ -0,0 +1,3 @@
+<body>
+This package contains the API for the cached connection manager.
+</body>
Added: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/api/connectionmanager/listener/ConnectionCacheListener.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/api/connectionmanager/listener/ConnectionCacheListener.java (rev 0)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/api/connectionmanager/listener/ConnectionCacheListener.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -0,0 +1,31 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2006, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY 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 along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.jca.core.api.connectionmanager.listener;
+
+/**
+ * Connection cache listener.
+ *
+ * @author <a href="jesper.pedersen at jboss.org">Jesper Pedersen</a>
+ */
+public interface ConnectionCacheListener
+{
+}
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 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/AbstractConnectionManager.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -23,7 +23,7 @@
package org.jboss.jca.core.connectionmanager;
import org.jboss.jca.common.JBossResourceException;
-import org.jboss.jca.core.connectionmanager.ccm.CachedConnectionManager;
+import org.jboss.jca.core.api.connectionmanager.ccm.CachedConnectionManager;
import org.jboss.jca.core.connectionmanager.listener.ConnectionListener;
import org.jboss.jca.core.connectionmanager.listener.ConnectionState;
import org.jboss.jca.core.connectionmanager.pool.api.Pool;
Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/ConnectionManager.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/ConnectionManager.java 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/ConnectionManager.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -21,7 +21,7 @@
*/
package org.jboss.jca.core.connectionmanager;
-import org.jboss.jca.core.connectionmanager.ccm.CachedConnectionManager;
+import org.jboss.jca.core.api.connectionmanager.ccm.CachedConnectionManager;
import org.jboss.jca.core.connectionmanager.listener.ConnectionCacheListener;
import org.jboss.jca.core.connectionmanager.listener.ConnectionListener;
import org.jboss.jca.core.connectionmanager.listener.ConnectionListenerFactory;
Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/ConnectionManagerFactory.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/ConnectionManagerFactory.java 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/ConnectionManagerFactory.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -22,7 +22,7 @@
package org.jboss.jca.core.connectionmanager;
-import org.jboss.jca.core.connectionmanager.ccm.CachedConnectionManager;
+import org.jboss.jca.core.api.connectionmanager.ccm.CachedConnectionManager;
import org.jboss.jca.core.connectionmanager.notx.NoTxConnectionManagerImpl;
import org.jboss.jca.core.connectionmanager.pool.api.Pool;
import org.jboss.jca.core.connectionmanager.transaction.TransactionSynchronizer;
@@ -54,6 +54,8 @@
* @param pool The pool for the connection manager
* @param subjectFactory The subject factory
* @param securityDomain The security domain
+ * @param useCcm Should the CCM be used
+ * @param ccm The cached connection manager
* @param allocationRetry The allocation retry value
* @param allocationRetryWaitMillis The allocation retry millis value
* @return The connection manager instance
@@ -62,6 +64,8 @@
final Pool pool,
final SubjectFactory subjectFactory,
final String securityDomain,
+ final boolean useCcm,
+ final CachedConnectionManager ccm,
final Integer allocationRetry,
final Long allocationRetryWaitMillis)
{
@@ -91,6 +95,7 @@
setProperties(cm, pool,
subjectFactory, securityDomain,
+ useCcm, ccm,
allocationRetry, allocationRetryWaitMillis,
null, null);
setNoTxProperties(cm);
@@ -104,6 +109,8 @@
* @param pool The pool for the connection manager
* @param subjectFactory The subject factory
* @param securityDomain The security domain
+ * @param useCcm Should the CCM be used
+ * @param ccm The cached connection manager
* @param allocationRetry The allocation retry value
* @param allocationRetryWaitMillis The allocation retry millis value
* @param txIntegration The transaction manager integration
@@ -118,6 +125,8 @@
final Pool pool,
final SubjectFactory subjectFactory,
final String securityDomain,
+ final boolean useCcm,
+ final CachedConnectionManager ccm,
final Integer allocationRetry,
final Long allocationRetryWaitMillis,
final TransactionIntegration txIntegration,
@@ -157,6 +166,7 @@
setProperties(cm, pool,
subjectFactory, securityDomain,
+ useCcm, ccm,
allocationRetry, allocationRetryWaitMillis,
txIntegration.getTransactionManager(), txIntegration.getUserTransactionRegistry());
setTxProperties(cm, interleaving, xaResourceTimeout, isSameRMOverride, wrapXAResource, padXid);
@@ -171,6 +181,8 @@
* @param pool The pool
* @param subjectFactory The subject factory
* @param securityDomain The security domain
+ * @param useCcm Should the CCM be used
+ * @param ccm The cached connection manager
* @param allocationRetry The allocation retry value
* @param allocationRetryWaitMillis The allocation retry millis value
* @param tm The transaction manager
@@ -180,6 +192,8 @@
Pool pool,
SubjectFactory subjectFactory,
String securityDomain,
+ boolean useCcm,
+ CachedConnectionManager ccm,
Integer allocationRetry,
Long allocationRetryWaitMillis,
TransactionManager tm,
@@ -199,8 +213,8 @@
cm.setUserTransactionRegistry(utr);
- CachedConnectionManager ccm = new CachedConnectionManager(tm);
- cm.setCachedConnectionManager(ccm);
+ if (useCcm)
+ cm.setCachedConnectionManager(ccm);
}
/**
Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/ConnectionRecord.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/ConnectionRecord.java 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/ConnectionRecord.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -45,11 +45,11 @@
* @param connection connection handle
* @param cri connection request info
*/
- public ConnectionRecord (final ConnectionListener cl,
+ public ConnectionRecord (final org.jboss.jca.core.api.connectionmanager.listener.ConnectionListener cl,
final Object connection,
final ConnectionRequestInfo cri)
{
- this.connectionListener = cl;
+ this.connectionListener = (ConnectionListener)cl;
this.connection = connection;
this.cri = cri;
}
Deleted: 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 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/ccm/CachedConnectionManager.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -1,647 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2008-2009, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY 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 along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.jca.core.connectionmanager.ccm;
-
-import org.jboss.jca.core.connectionmanager.ConnectionRecord;
-import org.jboss.jca.core.connectionmanager.listener.ConnectionCacheListener;
-import org.jboss.jca.core.connectionmanager.listener.ConnectionListener;
-import org.jboss.jca.core.connectionmanager.transaction.TransactionSynchronizer;
-import org.jboss.jca.core.spi.connectionmanager.ComponentStack;
-import org.jboss.jca.core.spi.transaction.TxUtils;
-import org.jboss.jca.core.spi.transaction.usertx.UserTransactionListener;
-
-import java.lang.reflect.Method;
-import java.util.Collection;
-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;
-
-import javax.resource.ResourceException;
-import javax.resource.spi.ConnectionRequestInfo;
-import javax.transaction.Synchronization;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
-
-import org.jboss.logging.Logger;
-import org.jboss.util.Strings;
-
-/**
- * CacheConnectionManager.
- *
- * @author <a href="mailto:jesper.pedersen at jboss.org">Jesper Pedersen</a>
- */
-public class CachedConnectionManager implements UserTransactionListener, ComponentStack
-{
- /** Log instance */
- private static Logger log = Logger.getLogger(CachedConnectionManager.class);
-
- /** Log trace */
- private static boolean trace = log.isTraceEnabled();
-
- /** Debugging flag */
- private static boolean debug = false;
-
- /** Enabled error handling for debugging */
- private static boolean error = false;
-
- /** Transaction Manager instance */
- private final TransactionManager transactionManager;
-
- /**
- * ThreadLocal that holds current calling meta-programming aware
- * object, used in case someone is idiotic enough to cache a
- * connection between invocations.and want the spec required
- * behavior of it getting hooked up to an appropriate
- * ManagedConnection on each method invocation.
- */
- private final ThreadLocal<LinkedList<Object>> currentObjects = new ThreadLocal<LinkedList<Object>>();
-
- /**
- * The variable <code>objectToConnectionManagerMap</code> holds the
- * map of meta-aware object to set of connections it holds, used by
- * the idiot spec compliant behavior.
- */
- private final ConcurrentMap<KeyConnectionAssociation,
- ConcurrentMap<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>>>
- objectToConnectionManagerMap = new ConcurrentHashMap<KeyConnectionAssociation,
- ConcurrentMap<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>>>();
-
- /**
- * Connection stacktraces
- */
- private final Map<Object, Throwable> connectionStackTraces = new WeakHashMap<Object, Throwable>();
-
- /**
- * Creates a new instance.
- * @param transactionManager The transaction manager
- */
- public CachedConnectionManager(final TransactionManager transactionManager)
- {
- this.transactionManager = transactionManager;
- }
-
- /**
- * Gets transaction manager.
- * @return transaction manager
- */
- public TransactionManager getTransactionManager()
- {
- return transactionManager;
- }
-
- /**
- * {@inheritDoc}
- */
- public void userTransactionStarted() throws SystemException
- {
- KeyConnectionAssociation key = peekMetaAwareObject();
- if (trace)
- {
- log.trace("user tx started, key: " + key);
- }
- if (key == null)
- {
- return; //not participating properly in this management scheme.
- }
-
- ConcurrentMap<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>> cmToConnectionsMap =
- key.getCMToConnectionsMap();
-
- Iterator<Entry<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>>> cmToConnectionsMapIterator =
- cmToConnectionsMap.entrySet().iterator();
-
- while (cmToConnectionsMapIterator.hasNext())
- {
- Entry<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>> entry =
- cmToConnectionsMapIterator.next();
-
- ConnectionCacheListener cm = entry.getKey();
- CopyOnWriteArrayList<ConnectionRecord> conns = entry.getValue();
-
- cm.transactionStarted(conns);
- }
- }
-
- /**
- *
- * @return stack last meta-aware object
- */
- private KeyConnectionAssociation peekMetaAwareObject()
- {
- LinkedList<Object> stack = currentObjects.get();
- if (stack == null)
- {
- return null;
- }
-
- if (!stack.isEmpty())
- {
- return (KeyConnectionAssociation) stack.getLast();
- }
-
- else
- {
- return null;
- }
- }
-
-
- /**
- * {@inheritDoc}
- */
- @SuppressWarnings("unchecked")
- public void popMetaAwareObject(Set unsharableResources) throws ResourceException
- {
- LinkedList<Object> stack = currentObjects.get();
- KeyConnectionAssociation oldKey = (KeyConnectionAssociation) stack.removeLast();
- if (trace)
- {
- log.trace("popped object: " + Strings.defaultToString(oldKey));
- }
-
- if (!stack.contains(oldKey))
- {
- disconnect(oldKey, unsharableResources);
- } // end of if ()
-
- if (debug)
- {
- if (closeAll(oldKey.getCMToConnectionsMap()) && error)
- {
- throw new ResourceException("Some connections were not closed, " +
- "see the log for the allocation stacktraces");
- }
- }
- }
-
- /**
- * Register connection.
- * @param cm connection manager
- * @param cl connection listener
- * @param connection connection handle
- * @param cri connection request info.
- */
- public void registerConnection(ConnectionCacheListener cm, ConnectionListener cl,
- Object connection, ConnectionRequestInfo cri)
- {
- if (debug)
- {
- synchronized (connectionStackTraces)
- {
- connectionStackTraces.put(connection, new Throwable("STACKTRACE"));
- }
- }
-
- KeyConnectionAssociation key = peekMetaAwareObject();
-
- if (trace)
- {
- log.trace("registering connection from connection manager " + cm +
- ", connection : " + connection + ", key: " + key);
- }
-
- if (key == null)
- {
- return; //not participating properly in this management scheme.
- }
-
- ConnectionRecord cr = new ConnectionRecord(cl, connection, cri);
- ConcurrentMap<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>> cmToConnectionsMap =
- key.getCMToConnectionsMap();
-
- CopyOnWriteArrayList<ConnectionRecord> conns = cmToConnectionsMap.get(cm);
- if (conns == null)
- {
- conns = new CopyOnWriteArrayList<ConnectionRecord>();
- cmToConnectionsMap.put(cm, conns);
- }
-
- conns.add(cr);
- }
-
- /**
- * Unregister connection.
- * @param cm connection manager
- * @param connection connection handle
- */
- public void unregisterConnection(ConnectionCacheListener cm, Object connection)
- {
- if (debug)
- {
- CloseConnectionSynchronization cas = getCloseConnectionSynchronization(false);
- if (cas != null)
- {
- cas.remove(connection);
- }
-
- synchronized (connectionStackTraces)
- {
- connectionStackTraces.remove(connection);
- }
- }
-
- KeyConnectionAssociation key = peekMetaAwareObject();
-
- if (trace)
- {
- log.trace("unregistering connection from connection manager " + cm +
- ", object: " + connection + ", key: " + key);
- }
-
- if (key == null)
- {
- return; //not participating properly in this management scheme.
- }
-
- 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
- }
-
- //note iterator of CopyOnWriteArrayList does not support remove method
- //we use here remove on CopyOnWriteArrayList directly
- for (ConnectionRecord connectionRecord : conns)
- {
- if (connectionRecord.getConnection() == connection)
- {
- conns.remove(connectionRecord);
- return;
- }
- }
-
- throw new IllegalStateException("Trying to return an unknown connection2! " + connection);
- }
-
- /**
- * {@inheritDoc}
- */
- @SuppressWarnings("unchecked")
- public void pushMetaAwareObject(final Object rawKey, Set unsharableResources) throws ResourceException
- {
- LinkedList<Object> stack = currentObjects.get();
- if (stack == null)
- {
- if (trace)
- {
- log.trace("new stack for key: " + Strings.defaultToString(rawKey));
- }
-
- stack = new LinkedList<Object>();
- currentObjects.set(stack);
- }
- else
- {
- if (trace)
- {
- log.trace("old stack for key: " + Strings.defaultToString(rawKey));
- }
- }
-
- KeyConnectionAssociation key = new KeyConnectionAssociation(rawKey);
- if (!stack.contains(key))
- {
- reconnect(key, unsharableResources);
- }
-
- stack.addLast(key);
- }
-
- /**
- * The <code>reconnect</code> method gets the cmToConnectionsMap
- * from objectToConnectionManagerMap, copies it to the key, and
- * reconnects all the connections in it.
- *
- * @param key a <code>KeyConnectionAssociation</code> value
- * @param unsharableResources a <code>Set</code> value
- * @exception ResourceException if an error occurs
- */
- @SuppressWarnings("unchecked")
- private void reconnect(KeyConnectionAssociation key, Set unsharableResources) throws ResourceException
- {
- ConcurrentMap<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>> cmToConnectionsMap =
- objectToConnectionManagerMap.get(key);
-
- if (cmToConnectionsMap == null)
- return;
-
- key.setCMToConnectionsMap(cmToConnectionsMap);
- Iterator<Entry<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>>> cmToConnectionsMapIterator =
- cmToConnectionsMap.entrySet().iterator();
-
- while (cmToConnectionsMapIterator.hasNext())
- {
- Entry<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>> entry =
- cmToConnectionsMapIterator.next();
-
- ConnectionCacheListener cm = entry.getKey();
- CopyOnWriteArrayList<ConnectionRecord> conns = entry.getValue();
-
- cm.reconnect(conns, unsharableResources);
- }
- }
-
- /**
- * Disconnect connections.
- * @param key key
- * @param unsharableResources resource
- * @throws ResourceException exception
- */
- @SuppressWarnings("unchecked")
- private void disconnect(KeyConnectionAssociation key, Set unsharableResources) throws ResourceException
- {
- ConcurrentMap<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>> cmToConnectionsMap =
- key.getCMToConnectionsMap();
-
- if (!cmToConnectionsMap.isEmpty())
- {
- objectToConnectionManagerMap.put(key, cmToConnectionsMap);
-
- Iterator<Entry<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>>> cmToConnectionsMapIterator =
- cmToConnectionsMap.entrySet().iterator();
-
- while (cmToConnectionsMapIterator.hasNext())
- {
- Entry<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>> entry =
- cmToConnectionsMapIterator.next();
-
- ConnectionCacheListener cm = entry.getKey();
- CopyOnWriteArrayList<ConnectionRecord> conns = entry.getValue();
-
- cm.disconnect(conns, unsharableResources);
- }
- }
- }
-
- /**
- * Describe <code>unregisterConnectionCacheListener</code> method here.
- * This is a shutdown method called by a connection manager. It will remove all reference
- * to that connection manager from the cache, so cached connections from that manager
- * will never be recoverable.
- * Possibly this method should not exist.
- *
- * @param cm a <code>ConnectionCacheListener</code> value
- */
- public void unregisterConnectionCacheListener(ConnectionCacheListener cm)
- {
- if (trace)
- {
- log.trace("unregisterConnectionCacheListener: " + cm);
- }
-
- Iterator<ConcurrentMap<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>>> it =
- objectToConnectionManagerMap.values().iterator();
-
- while (it.hasNext())
- {
- ConcurrentMap<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>> cmToConnectionsMap = it.next();
-
- if (cmToConnectionsMap != null)
- cmToConnectionsMap.remove(cm);
- }
- }
-
-
- /**
- * Close all connections.
- * @param cmToConnectionsMap connection manager to connections
- * @return true if close
- */
- private boolean closeAll(ConcurrentMap<ConnectionCacheListener,
- CopyOnWriteArrayList<ConnectionRecord>> cmToConnectionsMap)
- {
- if (!debug)
- {
- return false;
- }
-
- boolean unclosed = false;
-
- Collection<CopyOnWriteArrayList<ConnectionRecord>> connections = cmToConnectionsMap.values();
- if (connections.size() != 0)
- {
- for (Iterator<CopyOnWriteArrayList<ConnectionRecord>> i = connections.iterator(); i.hasNext();)
- {
- CopyOnWriteArrayList<ConnectionRecord> conns = i.next();
- for (Iterator<ConnectionRecord> j = conns.iterator(); j.hasNext();)
- {
- Object c = (j.next()).getConnection();
- CloseConnectionSynchronization cas = getCloseConnectionSynchronization(true);
- if (cas == null)
- {
- unclosed = true;
- closeConnection(c);
- }
- else
- {
- cas.add(c);
- }
- }
- }
- }
-
- return unclosed;
- }
-
- /**
- * Gets close sync. instance.
- * @param createIfNotFound create if not found
- * @return sync. instance
- */
- private CloseConnectionSynchronization getCloseConnectionSynchronization(boolean createIfNotFound)
- {
- try
- {
- Transaction tx = null;
- if (transactionManager != null)
- {
- tx = transactionManager.getTransaction();
- }
-
- if (tx != null)
- {
- TransactionSynchronizer.lock(tx);
- try
- {
- CloseConnectionSynchronization cas = (CloseConnectionSynchronization)
- TransactionSynchronizer.getCCMSynchronization(tx);
-
- if (cas == null && createIfNotFound && TxUtils.isActive(tx))
- {
- cas = new CloseConnectionSynchronization();
- TransactionSynchronizer.registerCCMSynchronization(tx, cas);
- }
-
- return cas;
- }
- finally
- {
- TransactionSynchronizer.unlock(tx);
- }
- }
- }
- catch (Throwable t)
- {
- log.debug("Unable to synchronize with transaction", t);
- }
-
- return null;
- }
-
-
- /**
- * Close connection handle.
- * @param connectionHandle connection handle
- */
- private void closeConnection(Object connectionHandle)
- {
- try
- {
- Throwable exception;
-
- synchronized (connectionStackTraces)
- {
- exception = connectionStackTraces.remove(connectionHandle);
- }
-
- Method m = connectionHandle.getClass().getMethod("close", new Class[]{});
-
- try
- {
- if (exception != null)
- {
- log.info("Closing a connection for you. Please close them yourself: " + connectionHandle, exception);
- }
- else
- {
- log.info("Closing a connection for you. Please close them yourself: " + connectionHandle);
- }
-
- m.invoke(connectionHandle, new Object[]{});
- }
- catch (Throwable t)
- {
- log.info("Throwable trying to close a connection for you, please close it yourself", t);
- }
- }
- catch (NoSuchMethodException nsme)
- {
- log.info("Could not find a close method on alleged connection objects. Please close your own connections.");
- }
- }
-
-
- /**
- * Close synch. class.
- */
- private class CloseConnectionSynchronization implements Synchronization
- {
- /**Connection handles*/
- CopyOnWriteArraySet<Object> connections = new CopyOnWriteArraySet<Object>();
-
- /**Closing flag*/
- AtomicBoolean closing = new AtomicBoolean(false);
-
- /**
- * Creates a new instance.
- */
- public CloseConnectionSynchronization()
- {
-
- }
-
- /**
- * Add new connection handle.
- * @param c connection handle
- */
- public void add(Object c)
- {
- if (closing.get())
- {
- return;
- }
- connections.add(c);
- }
-
- /**
- * Removes connection handle.
- * @param c connection handle
- */
- public void remove(Object c)
- {
- if (closing.get())
- {
- return;
- }
-
- connections.remove(c);
- }
-
- /**
- * {@inheritDoc}
- */
- public void beforeCompletion()
- {
- //No-action
- }
-
- /**
- * {@inheritDoc}
- */
- public void afterCompletion(int status)
- {
- closing.set(true);
-
- for (Iterator<Object> i = connections.iterator(); i.hasNext();)
- {
- closeConnection(i.next());
- }
-
- connections.clear();
- }
- }
-
- /**
- * Get the currentObjects.
- * This method is package protected beacause it is intended only for test case use.
- * Please don't use it in your production code.
- *
- * @return the currentObjects.
- */
- final ThreadLocal<LinkedList<Object>> getCurrentObjects()
- {
- return currentObjects;
- }
-
-}
Copied: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/ccm/CachedConnectionManagerImpl.java (from rev 111179, 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/CachedConnectionManagerImpl.java (rev 0)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/ccm/CachedConnectionManagerImpl.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -0,0 +1,614 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008-2009, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY 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 along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.jca.core.connectionmanager.ccm;
+
+import org.jboss.jca.core.api.connectionmanager.ccm.CachedConnectionManager;
+import org.jboss.jca.core.connectionmanager.ConnectionRecord;
+import org.jboss.jca.core.connectionmanager.listener.ConnectionCacheListener;
+import org.jboss.jca.core.connectionmanager.transaction.TransactionSynchronizer;
+import org.jboss.jca.core.spi.transaction.TxUtils;
+
+import java.lang.reflect.Method;
+import java.util.Collection;
+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;
+
+import javax.resource.ResourceException;
+import javax.resource.spi.ConnectionRequestInfo;
+import javax.transaction.Synchronization;
+import javax.transaction.SystemException;
+import javax.transaction.Transaction;
+import javax.transaction.TransactionManager;
+
+import org.jboss.logging.Logger;
+import org.jboss.util.Strings;
+
+/**
+ * CacheConnectionManager.
+ *
+ * @author <a href="mailto:jesper.pedersen at jboss.org">Jesper Pedersen</a>
+ */
+public class CachedConnectionManagerImpl implements CachedConnectionManager
+{
+ /** Log instance */
+ private static Logger log = Logger.getLogger(CachedConnectionManagerImpl.class);
+
+ /** Debugging flag */
+ private boolean debug = false;
+
+ /** Enabled error handling for debugging */
+ private boolean error = false;
+
+ /** Transaction Manager instance */
+ private final TransactionManager transactionManager;
+
+ /**
+ * ThreadLocal that holds current calling meta-programming aware
+ * object, used in case someone is idiotic enough to cache a
+ * connection between invocations.and want the spec required
+ * behavior of it getting hooked up to an appropriate
+ * ManagedConnection on each method invocation.
+ */
+ private final ThreadLocal<LinkedList<Object>> currentObjects = new ThreadLocal<LinkedList<Object>>();
+
+ /**
+ * The variable <code>objectToConnectionManagerMap</code> holds the
+ * map of meta-aware object to set of connections it holds, used by
+ * the idiot spec compliant behavior.
+ */
+ private final ConcurrentMap<KeyConnectionAssociation,
+ ConcurrentMap<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>>>
+ objectToConnectionManagerMap = new ConcurrentHashMap<KeyConnectionAssociation,
+ ConcurrentMap<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>>>();
+
+ /**
+ * Connection stacktraces
+ */
+ private final Map<Object, Throwable> connectionStackTraces = new WeakHashMap<Object, Throwable>();
+
+ /**
+ * Creates a new instance.
+ * @param transactionManager The transaction manager
+ */
+ public CachedConnectionManagerImpl(final TransactionManager transactionManager)
+ {
+ this.transactionManager = transactionManager;
+ }
+
+ /**
+ * Gets transaction manager.
+ * @return transaction manager
+ */
+ public TransactionManager getTransactionManager()
+ {
+ return transactionManager;
+ }
+
+ /**
+ * Set debug flag
+ * @param v The value
+ */
+ public void setDebug(boolean v)
+ {
+ debug = v;
+ }
+
+ /**
+ * Set error flag
+ * @param v The value
+ */
+ public void setError(boolean v)
+ {
+ error = v;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void userTransactionStarted() throws SystemException
+ {
+ KeyConnectionAssociation key = peekMetaAwareObject();
+
+ log.tracef("user tx started, key: %s", key);
+
+ if (key != null)
+ {
+ ConcurrentMap<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>> cmToConnectionsMap =
+ key.getCMToConnectionsMap();
+
+ Iterator<Entry<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>>> cmToConnectionsMapIterator =
+ cmToConnectionsMap.entrySet().iterator();
+
+ while (cmToConnectionsMapIterator.hasNext())
+ {
+ Entry<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>> entry =
+ cmToConnectionsMapIterator.next();
+
+ ConnectionCacheListener cm = entry.getKey();
+ CopyOnWriteArrayList<ConnectionRecord> conns = entry.getValue();
+
+ cm.transactionStarted(conns);
+ }
+ }
+ }
+
+ /**
+ *
+ * @return stack last meta-aware object
+ */
+ private KeyConnectionAssociation peekMetaAwareObject()
+ {
+ LinkedList<Object> stack = currentObjects.get();
+
+ if (stack != null && !stack.isEmpty())
+ {
+ return (KeyConnectionAssociation)stack.getLast();
+ }
+
+ return null;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ @SuppressWarnings("unchecked")
+ public void popMetaAwareObject(Set unsharableResources) throws ResourceException
+ {
+ LinkedList<Object> stack = currentObjects.get();
+ KeyConnectionAssociation oldKey = (KeyConnectionAssociation) stack.removeLast();
+
+ log.tracef("popped object: %s", Strings.defaultToString(oldKey));
+
+ if (!stack.contains(oldKey))
+ {
+ disconnect(oldKey, unsharableResources);
+ }
+
+ if (debug)
+ {
+ if (closeAll(oldKey.getCMToConnectionsMap()) && error)
+ {
+ throw new ResourceException("Some connections were not closed, see the log for the allocation stacktraces");
+ }
+ }
+ }
+
+ /**
+ * Register connection.
+ * @param cm connection manager
+ * @param cl connection listener
+ * @param connection connection handle
+ * @param cri connection request info.
+ */
+ public void registerConnection(org.jboss.jca.core.api.connectionmanager.listener.ConnectionCacheListener cm,
+ org.jboss.jca.core.api.connectionmanager.listener.ConnectionListener cl,
+ Object connection, ConnectionRequestInfo cri)
+ {
+ if (debug)
+ {
+ synchronized (connectionStackTraces)
+ {
+ connectionStackTraces.put(connection, new Throwable("STACKTRACE"));
+ }
+ }
+
+ KeyConnectionAssociation key = peekMetaAwareObject();
+
+ log.tracef("registering connection from connection manager: %s, connection : %s, key: %s", cm, connection, key);
+
+ if (key != null)
+ {
+ ConnectionRecord cr = new ConnectionRecord(cl, connection, cri);
+ ConcurrentMap<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>> cmToConnectionsMap =
+ key.getCMToConnectionsMap();
+
+ CopyOnWriteArrayList<ConnectionRecord> conns = cmToConnectionsMap.get(cm);
+ if (conns == null)
+ {
+ conns = new CopyOnWriteArrayList<ConnectionRecord>();
+ cmToConnectionsMap.put((ConnectionCacheListener)cm, conns);
+ }
+
+ conns.add(cr);
+ }
+ }
+
+ /**
+ * Unregister connection.
+ * @param cm connection manager
+ * @param connection connection handle
+ */
+ public void unregisterConnection(org.jboss.jca.core.api.connectionmanager.listener.ConnectionCacheListener cm,
+ Object connection)
+ {
+ if (debug)
+ {
+ CloseConnectionSynchronization cas = getCloseConnectionSynchronization(false);
+ if (cas != null)
+ {
+ cas.remove(connection);
+ }
+
+ synchronized (connectionStackTraces)
+ {
+ connectionStackTraces.remove(connection);
+ }
+ }
+
+ KeyConnectionAssociation key = peekMetaAwareObject();
+
+ log.tracef("unregistering connection from connection manager: %s, connection: %s, key: %s", cm, connection, key);
+
+ if (key == null)
+ return;
+
+ ConcurrentMap<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>> cmToConnectionsMap =
+ key.getCMToConnectionsMap();
+
+ CopyOnWriteArrayList<ConnectionRecord> conns = cmToConnectionsMap.get(cm);
+
+ // Can happen if connections are "passed" between contexts
+ if (conns == null)
+ return;
+
+ // Note iterator of CopyOnWriteArrayList does not support remove method
+ // We use here remove on CopyOnWriteArrayList directly
+ for (ConnectionRecord connectionRecord : conns)
+ {
+ if (connectionRecord.getConnection() == connection)
+ {
+ conns.remove(connectionRecord);
+ return;
+ }
+ }
+
+ throw new IllegalStateException("Trying to return an unknown connection2! " + connection);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @SuppressWarnings("unchecked")
+ public void pushMetaAwareObject(final Object rawKey, Set unsharableResources) throws ResourceException
+ {
+ LinkedList<Object> stack = currentObjects.get();
+ if (stack == null)
+ {
+ log.tracef("new stack for key: %s", Strings.defaultToString(rawKey));
+
+ stack = new LinkedList<Object>();
+ currentObjects.set(stack);
+ }
+ else
+ {
+ log.tracef("old stack for key: %s", Strings.defaultToString(rawKey));
+ }
+
+ KeyConnectionAssociation key = new KeyConnectionAssociation(rawKey);
+ if (!stack.contains(key))
+ {
+ reconnect(key, unsharableResources);
+ }
+
+ stack.addLast(key);
+ }
+
+ /**
+ * The <code>reconnect</code> method gets the cmToConnectionsMap
+ * from objectToConnectionManagerMap, copies it to the key, and
+ * reconnects all the connections in it.
+ *
+ * @param key a <code>KeyConnectionAssociation</code> value
+ * @param unsharableResources a <code>Set</code> value
+ * @exception ResourceException if an error occurs
+ */
+ @SuppressWarnings("unchecked")
+ private void reconnect(KeyConnectionAssociation key, Set unsharableResources) throws ResourceException
+ {
+ ConcurrentMap<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>> cmToConnectionsMap =
+ objectToConnectionManagerMap.get(key);
+
+ if (cmToConnectionsMap == null)
+ return;
+
+ key.setCMToConnectionsMap(cmToConnectionsMap);
+ Iterator<Entry<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>>> cmToConnectionsMapIterator =
+ cmToConnectionsMap.entrySet().iterator();
+
+ while (cmToConnectionsMapIterator.hasNext())
+ {
+ Entry<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>> entry =
+ cmToConnectionsMapIterator.next();
+
+ ConnectionCacheListener cm = entry.getKey();
+ CopyOnWriteArrayList<ConnectionRecord> conns = entry.getValue();
+
+ cm.reconnect(conns, unsharableResources);
+ }
+ }
+
+ /**
+ * Disconnect connections.
+ * @param key key
+ * @param unsharableResources resource
+ * @throws ResourceException exception
+ */
+ @SuppressWarnings("unchecked")
+ private void disconnect(KeyConnectionAssociation key, Set unsharableResources) throws ResourceException
+ {
+ ConcurrentMap<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>> cmToConnectionsMap =
+ key.getCMToConnectionsMap();
+
+ if (!cmToConnectionsMap.isEmpty())
+ {
+ objectToConnectionManagerMap.put(key, cmToConnectionsMap);
+
+ Iterator<Entry<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>>> cmToConnectionsMapIterator =
+ cmToConnectionsMap.entrySet().iterator();
+
+ while (cmToConnectionsMapIterator.hasNext())
+ {
+ Entry<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>> entry =
+ cmToConnectionsMapIterator.next();
+
+ ConnectionCacheListener cm = entry.getKey();
+ CopyOnWriteArrayList<ConnectionRecord> conns = entry.getValue();
+
+ cm.disconnect(conns, unsharableResources);
+ }
+ }
+ }
+
+ /**
+ * Describe <code>unregisterConnectionCacheListener</code> method here.
+ * This is a shutdown method called by a connection manager. It will remove all reference
+ * to that connection manager from the cache, so cached connections from that manager
+ * will never be recoverable.
+ * Possibly this method should not exist.
+ *
+ * @param cm a <code>ConnectionCacheListener</code> value
+ */
+ public void unregisterConnectionCacheListener(ConnectionCacheListener cm)
+ {
+ log.tracef("unregisterConnectionCacheListener: %s", cm);
+
+ Iterator<ConcurrentMap<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>>> it =
+ objectToConnectionManagerMap.values().iterator();
+
+ while (it.hasNext())
+ {
+ ConcurrentMap<ConnectionCacheListener, CopyOnWriteArrayList<ConnectionRecord>> cmToConnectionsMap = it.next();
+
+ if (cmToConnectionsMap != null)
+ cmToConnectionsMap.remove(cm);
+ }
+ }
+
+
+ /**
+ * Close all connections.
+ * @param cmToConnectionsMap connection manager to connections
+ * @return true if close
+ */
+ private boolean closeAll(ConcurrentMap<ConnectionCacheListener,
+ CopyOnWriteArrayList<ConnectionRecord>> cmToConnectionsMap)
+ {
+ boolean unclosed = false;
+
+ Collection<CopyOnWriteArrayList<ConnectionRecord>> connections = cmToConnectionsMap.values();
+ if (connections.size() != 0)
+ {
+ for (Iterator<CopyOnWriteArrayList<ConnectionRecord>> i = connections.iterator(); i.hasNext();)
+ {
+ CopyOnWriteArrayList<ConnectionRecord> conns = i.next();
+ for (Iterator<ConnectionRecord> j = conns.iterator(); j.hasNext();)
+ {
+ Object c = (j.next()).getConnection();
+ CloseConnectionSynchronization cas = getCloseConnectionSynchronization(true);
+ if (cas == null)
+ {
+ unclosed = true;
+ closeConnection(c);
+ }
+ else
+ {
+ cas.add(c);
+ }
+ }
+ }
+ }
+
+ return unclosed;
+ }
+
+ /**
+ * Gets close sync. instance.
+ * @param createIfNotFound create if not found
+ * @return sync. instance
+ */
+ private CloseConnectionSynchronization getCloseConnectionSynchronization(boolean createIfNotFound)
+ {
+ try
+ {
+ Transaction tx = null;
+ if (transactionManager != null)
+ {
+ tx = transactionManager.getTransaction();
+ }
+
+ if (tx != null)
+ {
+ TransactionSynchronizer.lock(tx);
+ try
+ {
+ CloseConnectionSynchronization cas =
+ (CloseConnectionSynchronization)TransactionSynchronizer.getCCMSynchronization(tx);
+
+ if (cas == null && createIfNotFound && TxUtils.isActive(tx))
+ {
+ cas = new CloseConnectionSynchronization();
+ TransactionSynchronizer.registerCCMSynchronization(tx, cas);
+ }
+
+ return cas;
+ }
+ finally
+ {
+ TransactionSynchronizer.unlock(tx);
+ }
+ }
+ }
+ catch (Throwable t)
+ {
+ log.debug("Unable to synchronize with transaction", t);
+ }
+
+ return null;
+ }
+
+
+ /**
+ * Close connection handle.
+ * @param connectionHandle connection handle
+ */
+ private void closeConnection(Object connectionHandle)
+ {
+ try
+ {
+ Throwable exception;
+
+ synchronized (connectionStackTraces)
+ {
+ exception = connectionStackTraces.remove(connectionHandle);
+ }
+
+ Method m = connectionHandle.getClass().getMethod("close", new Class[]{});
+
+ try
+ {
+ if (exception != null)
+ {
+ log.info("Closing a connection for you. Please close them yourself: " + connectionHandle, exception);
+ }
+ else
+ {
+ log.info("Closing a connection for you. Please close them yourself: " + connectionHandle);
+ }
+
+ m.invoke(connectionHandle, new Object[]{});
+ }
+ catch (Throwable t)
+ {
+ log.info("Throwable trying to close a connection for you, please close it yourself", t);
+ }
+ }
+ catch (NoSuchMethodException nsme)
+ {
+ log.info("Could not find a close method on alleged connection objects. Please close your own connections.");
+ }
+ }
+
+
+ /**
+ * Close synch. class.
+ */
+ private class CloseConnectionSynchronization implements Synchronization
+ {
+ /**Connection handles*/
+ CopyOnWriteArraySet<Object> connections = new CopyOnWriteArraySet<Object>();
+
+ /**Closing flag*/
+ AtomicBoolean closing = new AtomicBoolean(false);
+
+ /**
+ * Creates a new instance.
+ */
+ public CloseConnectionSynchronization()
+ {
+ }
+
+ /**
+ * Add new connection handle.
+ * @param c connection handle
+ */
+ public void add(Object c)
+ {
+ if (!closing.get())
+ connections.add(c);
+ }
+
+ /**
+ * Removes connection handle.
+ * @param c connection handle
+ */
+ public void remove(Object c)
+ {
+ if (!closing.get())
+ connections.remove(c);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void beforeCompletion()
+ {
+ // No-action
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void afterCompletion(int status)
+ {
+ closing.set(true);
+
+ for (Iterator<Object> i = connections.iterator(); i.hasNext();)
+ {
+ closeConnection(i.next());
+ }
+
+ connections.clear();
+ }
+ }
+
+ /**
+ * Get the currentObjects.
+ * This method is package protected beacause it is intended only for test case use.
+ * Please don't use it in your production code.
+ *
+ * @return the currentObjects.
+ */
+ final ThreadLocal<LinkedList<Object>> getCurrentObjects()
+ {
+ return currentObjects;
+ }
+}
Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/listener/AbstractConnectionListener.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/listener/AbstractConnectionListener.java 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/listener/AbstractConnectionListener.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -21,8 +21,8 @@
*/
package org.jboss.jca.core.connectionmanager.listener;
+import org.jboss.jca.core.api.connectionmanager.ccm.CachedConnectionManager;
import org.jboss.jca.core.connectionmanager.ConnectionManager;
-import org.jboss.jca.core.connectionmanager.ccm.CachedConnectionManager;
import org.jboss.jca.core.connectionmanager.pool.api.Pool;
import java.util.Iterator;
Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/listener/ConnectionCacheListener.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/listener/ConnectionCacheListener.java 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/listener/ConnectionCacheListener.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -38,7 +38,8 @@
* @author <a href="mailto:adrian at jboss.com">Adrian Brock</a>
* @version $Revision: 71554 $
*/
-public interface ConnectionCacheListener
+public interface ConnectionCacheListener
+ extends org.jboss.jca.core.api.connectionmanager.listener.ConnectionCacheListener
{
/**
* Notification of transaction started
Modified: projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/ccm/CachedConnectionManagerTestCase.java
===================================================================
--- projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/ccm/CachedConnectionManagerTestCase.java 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/ccm/CachedConnectionManagerTestCase.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -66,7 +66,7 @@
{
//given
TransactionManager tm = mock(TransactionManager.class);
- CachedConnectionManager ccm = new CachedConnectionManager(tm);
+ CachedConnectionManagerImpl ccm = new CachedConnectionManagerImpl(tm);
ConnectionCacheListener cm0 = mock(ConnectionCacheListener.class);
ConnectionCacheListener cm1 = mock(ConnectionCacheListener.class);
ConnectionRecord cr0 = mock(ConnectionRecord.class);
@@ -108,7 +108,7 @@
{
//given
TransactionManager tm = mock(TransactionManager.class);
- CachedConnectionManager ccm = new CachedConnectionManager(tm);
+ CachedConnectionManagerImpl ccm = new CachedConnectionManagerImpl(tm);
ccm.getCurrentObjects().set(null);
//then
@@ -126,7 +126,7 @@
{
//given
TransactionManager tm = mock(TransactionManager.class);
- CachedConnectionManager ccm = new CachedConnectionManager(tm);
+ CachedConnectionManagerImpl ccm = new CachedConnectionManagerImpl(tm);
ConnectionCacheListener cm0 = mock(ConnectionCacheListener.class);
ConnectionCacheListener cm1 = mock(ConnectionCacheListener.class);
ConnectionRecord cr0 = mock(ConnectionRecord.class);
@@ -170,7 +170,7 @@
{
//given
TransactionManager tm = mock(TransactionManager.class);
- CachedConnectionManager ccm = new CachedConnectionManager(tm);
+ CachedConnectionManagerImpl ccm = new CachedConnectionManagerImpl(tm);
ccm.getCurrentObjects().set(null);
//then (parameters are not important the key of this test is that given ccm have no associations
@@ -188,7 +188,7 @@
{
//given
TransactionManager tm = mock(TransactionManager.class);
- CachedConnectionManager ccm = new CachedConnectionManager(tm);
+ CachedConnectionManagerImpl ccm = new CachedConnectionManagerImpl(tm);
ConnectionCacheListener cm0 = mock(ConnectionCacheListener.class);
ConnectionCacheListener cm1 = mock(ConnectionCacheListener.class);
ConnectionRecord cr0 = mock(ConnectionRecord.class);
@@ -234,7 +234,7 @@
{
//given
TransactionManager tm = mock(TransactionManager.class);
- CachedConnectionManager ccm = new CachedConnectionManager(tm);
+ CachedConnectionManagerImpl ccm = new CachedConnectionManagerImpl(tm);
ConnectionCacheListener cm0 = mock(ConnectionCacheListener.class);
ConnectionCacheListener cm1 = mock(ConnectionCacheListener.class);
ConnectionCacheListener cm2 = mock(ConnectionCacheListener.class);
@@ -284,7 +284,7 @@
{
//given
TransactionManager tm = mock(TransactionManager.class);
- CachedConnectionManager ccm = new CachedConnectionManager(tm);
+ CachedConnectionManagerImpl ccm = new CachedConnectionManagerImpl(tm);
ccm.getCurrentObjects().set(null);
//then (parameters are not important the key of this test is that given ccm have no associations
@@ -302,7 +302,7 @@
{
//given
TransactionManager tm = mock(TransactionManager.class);
- CachedConnectionManager ccm = new CachedConnectionManager(tm);
+ CachedConnectionManagerImpl ccm = new CachedConnectionManagerImpl(tm);
ConnectionCacheListener cm0 = mock(ConnectionCacheListener.class);
ConnectionCacheListener cm1 = mock(ConnectionCacheListener.class);
ConnectionRecord cr0 = mock(ConnectionRecord.class);
@@ -347,7 +347,7 @@
{
//given
TransactionManager tm = mock(TransactionManager.class);
- CachedConnectionManager ccm = new CachedConnectionManager(tm);
+ CachedConnectionManagerImpl ccm = new CachedConnectionManagerImpl(tm);
ConnectionCacheListener cm0 = mock(ConnectionCacheListener.class);
ConnectionCacheListener cm1 = mock(ConnectionCacheListener.class);
ConnectionRecord cr0 = mock(ConnectionRecord.class);
@@ -394,7 +394,7 @@
{
//given
TransactionManager tm = mock(TransactionManager.class);
- CachedConnectionManager ccm = new CachedConnectionManager(tm);
+ CachedConnectionManagerImpl ccm = new CachedConnectionManagerImpl(tm);
//when
ccm.pushMetaAwareObject(mock(Object.class), null);
@@ -415,7 +415,7 @@
{
//given
TransactionManager tm = mock(TransactionManager.class);
- CachedConnectionManager ccm = new CachedConnectionManager(tm);
+ CachedConnectionManagerImpl ccm = new CachedConnectionManagerImpl(tm);
ConnectionCacheListener cm0 = mock(ConnectionCacheListener.class);
ConnectionCacheListener cm1 = mock(ConnectionCacheListener.class);
@@ -464,7 +464,7 @@
{
//given
TransactionManager tm = mock(TransactionManager.class);
- CachedConnectionManager ccm = new CachedConnectionManager(tm);
+ CachedConnectionManagerImpl ccm = new CachedConnectionManagerImpl(tm);
ConnectionCacheListener cm0 = mock(ConnectionCacheListener.class);
ConnectionCacheListener cm1 = mock(ConnectionCacheListener.class);
Modified: projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/listener/NoTxConnectionListenerTestCase.java
===================================================================
--- projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/listener/NoTxConnectionListenerTestCase.java 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/listener/NoTxConnectionListenerTestCase.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -226,7 +226,7 @@
ConnectionManagerFactory cmf = new ConnectionManagerFactory();
ConnectionManager connectionManager =
cmf.createNonTransactional(TransactionSupportLevel.NoTransaction, pool,
- null, null, null, null);
+ null, null, false, null, null, null);
noTxCm = ((NoTxConnectionManagerImpl) connectionManager);
Modified: projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/listener/TxConnectionListenerTestCase.java
===================================================================
--- projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/listener/TxConnectionListenerTestCase.java 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/listener/TxConnectionListenerTestCase.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -24,7 +24,7 @@
import org.jboss.jca.core.api.connectionmanager.pool.PoolConfiguration;
import org.jboss.jca.core.connectionmanager.ConnectionManagerFactory;
import org.jboss.jca.core.connectionmanager.TxConnectionManager;
-import org.jboss.jca.core.connectionmanager.ccm.CachedConnectionManager;
+import org.jboss.jca.core.connectionmanager.ccm.CachedConnectionManagerImpl;
import org.jboss.jca.core.connectionmanager.common.MockManagedConnectionFactory;
import org.jboss.jca.core.connectionmanager.listener.TxConnectionListener.TransactionSynchronization;
import org.jboss.jca.core.connectionmanager.pool.api.Pool;
@@ -492,7 +492,7 @@
//given
TxConnectionManager cm = mock(TxConnectionManager.class);
ManagedConnection mc = mock(ManagedConnection.class);
- CachedConnectionManager ccm = mock(CachedConnectionManager.class);
+ CachedConnectionManagerImpl ccm = mock(CachedConnectionManagerImpl.class);
when(cm.getCachedConnectionManager()).thenReturn(ccm);
TxConnectionListener listener = new TxConnectionListener(cm, mc, null, null, null);
listener.setTrackByTx(false);
@@ -516,7 +516,7 @@
//given
TxConnectionManager cm = mock(TxConnectionManager.class);
ManagedConnection mc = mock(ManagedConnection.class);
- CachedConnectionManager ccm = mock(CachedConnectionManager.class);
+ CachedConnectionManagerImpl ccm = mock(CachedConnectionManagerImpl.class);
when(cm.getCachedConnectionManager()).thenReturn(ccm);
TxConnectionListener listener = new TxConnectionListener(cm, mc, null, null, null);
listener.setTrackByTx(true);
@@ -540,7 +540,7 @@
//given
TxConnectionManager cm = mock(TxConnectionManager.class);
ManagedConnection mc = mock(ManagedConnection.class);
- CachedConnectionManager ccm = mock(CachedConnectionManager.class);
+ CachedConnectionManagerImpl ccm = mock(CachedConnectionManagerImpl.class);
when(cm.getCachedConnectionManager()).thenReturn(ccm);
TxConnectionListener listener = new TxConnectionListener(cm, mc, null, null, null);
listener.setTrackByTx(true);
@@ -678,7 +678,7 @@
ConnectionManagerFactory cmf = new ConnectionManagerFactory();
ConnectionManager connectionManager =
cmf.createTransactional(TransactionSupportLevel.LocalTransaction, pool,
- null, null, null, null, ti, null, null, null, null, null);
+ null, null, false, null, null, null, ti, null, null, null, null, null);
txConnectionManager = (TxConnectionManager) connectionManager;
}
Modified: projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/notx/NoTxConnectionManagerTestCase.java
===================================================================
--- projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/notx/NoTxConnectionManagerTestCase.java 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/notx/NoTxConnectionManagerTestCase.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -78,7 +78,7 @@
ConnectionManagerFactory cmf = new ConnectionManagerFactory();
connectionManager =
- cmf.createNonTransactional(TransactionSupportLevel.NoTransaction, pool, null, null, null, null);
+ cmf.createNonTransactional(TransactionSupportLevel.NoTransaction, pool, null, null, false, null, null, null);
assertNotNull(connectionManager);
assertTrue(connectionManager instanceof NoTxConnectionManager);
Modified: projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/notx/SerializableTestCase.java
===================================================================
--- projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/notx/SerializableTestCase.java 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/notx/SerializableTestCase.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -65,7 +65,7 @@
ConnectionManagerFactory cmf = new ConnectionManagerFactory();
ConnectionManager connectionManager = cmf.createNonTransactional(TransactionSupportLevel.NoTransaction,
- pool, null, null, null, null);
+ pool, null, null, false, null, null, null);
assertNotNull(connectionManager);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Modified: projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/pool/PrefillTestCase.java
===================================================================
--- projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/pool/PrefillTestCase.java 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/pool/PrefillTestCase.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -70,7 +70,7 @@
AbstractPrefillPool app = (AbstractPrefillPool)pool;
NoTxConnectionManager noTxConnectionManager =
- cmf.createNonTransactional(TransactionSupportLevel.NoTransaction, pool, null, null, null, null);
+ cmf.createNonTransactional(TransactionSupportLevel.NoTransaction, pool, null, null, false, null, null, null);
app.prefill(null, null, false);
@@ -111,7 +111,8 @@
AbstractPrefillPool app = (AbstractPrefillPool)pool;
NoTxConnectionManager noTxConnectionManager =
- cmf.createNonTransactional(TransactionSupportLevel.NoTransaction, pool, null, null, null, null);
+ cmf.createNonTransactional(TransactionSupportLevel.NoTransaction, pool,
+ null, null, false, null, null, null);
app.prefill(null, null, false);
@@ -173,7 +174,8 @@
AbstractPrefillPool app = (AbstractPrefillPool)pool;
NoTxConnectionManager noTxConnectionManager =
- cmf.createNonTransactional(TransactionSupportLevel.NoTransaction, app, subjectFactory, "domain", null, null);
+ cmf.createNonTransactional(TransactionSupportLevel.NoTransaction, app,
+ subjectFactory, "domain", false, null, null, null);
app.prefill(subject, null, false);
@@ -217,7 +219,8 @@
AbstractPrefillPool app = (AbstractPrefillPool)pool;
NoTxConnectionManager noTxConnectionManager =
- cmf.createNonTransactional(TransactionSupportLevel.NoTransaction, app, subjectFactory, "domain", null, null);
+ cmf.createNonTransactional(TransactionSupportLevel.NoTransaction, app,
+ subjectFactory, "domain", false, null, null, null);
app.prefill(subject, null, false);
Modified: projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/tx/SerializableTestCase.java
===================================================================
--- projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/tx/SerializableTestCase.java 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/tx/SerializableTestCase.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -73,7 +73,7 @@
ConnectionManagerFactory cmf = new ConnectionManagerFactory();
ConnectionManager connectionManager = cmf.createTransactional(TransactionSupportLevel.XATransaction,
- pool, null, null, null, null, ti,
+ pool, null, null, false, null, null, null, ti,
Boolean.FALSE, null, null, null, null);
assertNotNull(connectionManager);
Modified: projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/tx/TxConnectionManagerTestCase.java
===================================================================
--- projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/tx/TxConnectionManagerTestCase.java 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/tx/TxConnectionManagerTestCase.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -78,9 +78,6 @@
@Test
public void testAllocateConnection() throws Throwable
{
-
- assertNotNull(txConnectionManager.getCachedConnectionManager());
-
TransactionManager transactionManager = txConnectionManager.getTransactionManager();
TransactionSynchronizer.setTransactionIntegration(txConnectionManager.getTransactionIntegration());
@@ -322,7 +319,8 @@
ConnectionManagerFactory cmf = new ConnectionManagerFactory();
ConnectionManager connectionManager =
cmf.createTransactional(TransactionSupportLevel.LocalTransaction, pool,
- null, null, null, null, ti, null, null, null, null, null);
+ null, null, false, null,
+ null, null, ti, null, null, null, null, null);
txConnectionManager = (TxConnectionManager) connectionManager;
}
Modified: projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/tx/XATxConnectionManagerTestCase.java
===================================================================
--- projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/tx/XATxConnectionManagerTestCase.java 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/tx/XATxConnectionManagerTestCase.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -289,7 +289,8 @@
ConnectionManagerFactory cmf = new ConnectionManagerFactory();
ConnectionManager connectionManager =
cmf.createTransactional(TransactionSupportLevel.XATransaction, pool,
- null, null, null, null, ti, Boolean.FALSE, null, null, null, null);
+ null, null, false, null, null, null, ti,
+ Boolean.FALSE, null, null, null, null);
assertNotNull(connectionManager);
assertTrue(connectionManager instanceof TxConnectionManager);
Modified: projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/unit/AbstractConnectionManagerTestCase.java
===================================================================
--- projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/unit/AbstractConnectionManagerTestCase.java 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/core/src/test/java/org/jboss/jca/core/connectionmanager/unit/AbstractConnectionManagerTestCase.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -23,7 +23,7 @@
import org.jboss.jca.core.api.connectionmanager.pool.PoolConfiguration;
import org.jboss.jca.core.connectionmanager.AbstractConnectionManager;
-import org.jboss.jca.core.connectionmanager.ccm.CachedConnectionManager;
+import org.jboss.jca.core.connectionmanager.ccm.CachedConnectionManagerImpl;
import org.jboss.jca.core.connectionmanager.common.MockConnectionManager;
import org.jboss.jca.core.connectionmanager.common.MockManagedConnectionFactory;
import org.jboss.jca.core.connectionmanager.pool.api.Pool;
@@ -76,7 +76,7 @@
{
AbstractConnectionManager connectionManager = new MockConnectionManager();
assertNull(connectionManager.getCachedConnectionManager());
- connectionManager.setCachedConnectionManager(new CachedConnectionManager(null));
+ connectionManager.setCachedConnectionManager(new CachedConnectionManagerImpl(null));
assertNotNull(connectionManager.getCachedConnectionManager());
}
Modified: projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/common/AbstractDsDeployer.java
===================================================================
--- projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/common/AbstractDsDeployer.java 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/common/AbstractDsDeployer.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -37,6 +37,7 @@
import org.jboss.jca.common.api.metadata.ra.XsdString;
import org.jboss.jca.common.metadata.merge.Merger;
import org.jboss.jca.common.metadata.ra.common.ConfigPropertyImpl;
+import org.jboss.jca.core.api.connectionmanager.ccm.CachedConnectionManager;
import org.jboss.jca.core.api.connectionmanager.pool.PoolConfiguration;
import org.jboss.jca.core.api.management.ManagementRepository;
import org.jboss.jca.core.connectionmanager.ConnectionManager;
@@ -91,6 +92,9 @@
/** The ManagementRepository */
private ManagementRepository managementRepository = null;
+ /** Cached connection manager */
+ private CachedConnectionManager ccm;
+
/**
* Create a new AbstractDsDeployer.
* @param log The logger
@@ -100,6 +104,7 @@
this.log = log;
this.transactionIntegration = null;
this.mdr = null;
+ this.ccm = null;
}
/**
@@ -159,6 +164,24 @@
}
/**
+ * Set the ccm
+ * @param value The value
+ */
+ public void setCachedConnectionManager(CachedConnectionManager value)
+ {
+ ccm = value;
+ }
+
+ /**
+ * Get the ccm
+ * @return The handle
+ */
+ public CachedConnectionManager getCachedConnectionManager()
+ {
+ return ccm;
+ }
+
+ /**
*
* create objects and inject value for this depployment. it is a general method returning a {@link CommonDeployment}
* to be used to exchange objects needed to real injection in the container
@@ -380,6 +403,7 @@
ConnectionManagerFactory cmf = new ConnectionManagerFactory();
ConnectionManager cm =
cmf.createTransactional(tsl, pool, getSubjectFactory(securityDomain), securityDomain,
+ ds.isUseCcm(), ccm,
allocationRetry, allocationRetryWaitMillis,
getTransactionIntegration(),
null, null, null, null, null);
@@ -550,6 +574,7 @@
ConnectionManagerFactory cmf = new ConnectionManagerFactory();
ConnectionManager cm =
cmf.createTransactional(tsl, pool, getSubjectFactory(securityDomain), securityDomain,
+ ds.isUseCcm(), ccm,
allocationRetry, allocationRetryWaitMillis,
getTransactionIntegration(), interleaving,
xaResourceTimeout, isSameRMOverride, wrapXAResource, padXid);
Modified: projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/common/AbstractResourceAdapterDeployer.java
===================================================================
--- projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/common/AbstractResourceAdapterDeployer.java 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/common/AbstractResourceAdapterDeployer.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -44,6 +44,7 @@
import org.jboss.jca.common.api.metadata.ra.ra10.ResourceAdapter10;
import org.jboss.jca.common.metadata.ra.common.ConfigPropertyImpl;
import org.jboss.jca.core.api.bootstrap.CloneableBootstrapContext;
+import org.jboss.jca.core.api.connectionmanager.ccm.CachedConnectionManager;
import org.jboss.jca.core.api.connectionmanager.pool.PoolConfiguration;
import org.jboss.jca.core.connectionmanager.ConnectionManager;
import org.jboss.jca.core.connectionmanager.ConnectionManagerFactory;
@@ -1000,11 +1001,16 @@
allocationRetryWaitMillis = ijCD.getTimeOut().getAllocationRetryWaitMillis();
}
+ Boolean useCCM = Boolean.TRUE;
+ if (ijCD != null)
+ useCCM = ijCD.isUseCcm();
+
// Select the correct connection manager
if (tsl == TransactionSupportLevel.NoTransaction)
{
cm = cmf.createNonTransactional(tsl, pool,
getSubjectFactory(securityDomain), securityDomain,
+ useCCM, getCachedConnectionManager(),
allocationRetry, allocationRetryWaitMillis);
}
else
@@ -1046,6 +1052,7 @@
cm = cmf.createTransactional(tsl, pool,
getSubjectFactory(securityDomain), securityDomain,
+ useCCM, getCachedConnectionManager(),
allocationRetry, allocationRetryWaitMillis,
getTransactionIntegration(), interleaving,
xaResourceTimeout, isSameRMOverride,
@@ -1363,12 +1370,17 @@
allocationRetryWaitMillis = ijCD.getTimeOut().getAllocationRetryWaitMillis();
}
+ Boolean useCCM = Boolean.TRUE;
+ if (ijCD != null)
+ useCCM = ijCD.isUseCcm();
+
// Select the correct connection manager
if (tsl == TransactionSupportLevel.NoTransaction)
{
cm = cmf.createNonTransactional(tsl, pool,
getSubjectFactory(securityDomain),
securityDomain,
+ useCCM, getCachedConnectionManager(),
allocationRetry, allocationRetryWaitMillis);
}
else
@@ -1412,6 +1424,7 @@
cm = cmf.createTransactional(tsl, pool,
getSubjectFactory(securityDomain), securityDomain,
+ useCCM, getCachedConnectionManager(),
allocationRetry, allocationRetryWaitMillis,
getTransactionIntegration(),
interleaving,
@@ -1777,6 +1790,12 @@
protected abstract SubjectFactory getSubjectFactory(String securityDomain) throws DeployException;
/**
+ * Get the cached connection manager
+ * @return The handle
+ */
+ protected abstract CachedConnectionManager getCachedConnectionManager();
+
+ /**
* Get management views for config property's
* @param cps The config property's
* @return The management view of these
Modified: projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/AbstractFungalRADeployer.java
===================================================================
--- projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/AbstractFungalRADeployer.java 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/AbstractFungalRADeployer.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -25,6 +25,7 @@
import org.jboss.jca.common.api.metadata.ironjacamar.IronJacamar;
import org.jboss.jca.common.api.metadata.ra.ConfigProperty;
import org.jboss.jca.common.api.metadata.ra.Connector;
+import org.jboss.jca.core.api.connectionmanager.ccm.CachedConnectionManager;
import org.jboss.jca.core.spi.naming.JndiStrategy;
import org.jboss.jca.core.spi.transaction.TransactionIntegration;
import org.jboss.jca.deployers.common.AbstractResourceAdapterDeployer;
@@ -651,4 +652,10 @@
throw new DeployException("Error during loookup of security domain: " + securityDomain, t);
}
}
+
+ @Override
+ protected CachedConnectionManager getCachedConnectionManager()
+ {
+ return ((RAConfiguration) getConfiguration()).getCachedConnectionManager();
+ }
}
Modified: projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/DsXmlDeployer.java
===================================================================
--- projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/DsXmlDeployer.java 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/DsXmlDeployer.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -299,6 +299,9 @@
if (jdbcXA == null)
throw new IllegalStateException("JDBCXA not defined");
+
+ if (getCachedConnectionManager() == null)
+ throw new IllegalStateException("CachedConnectionManager not defined");
}
@Override
Modified: projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/RAConfiguration.java
===================================================================
--- projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/RAConfiguration.java 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/RAConfiguration.java 2011-04-14 12:48:23 UTC (rev 111180)
@@ -23,6 +23,7 @@
package org.jboss.jca.deployers.fungal;
import org.jboss.jca.core.api.bootstrap.CloneableBootstrapContext;
+import org.jboss.jca.core.api.connectionmanager.ccm.CachedConnectionManager;
import org.jboss.jca.core.api.management.ManagementRepository;
import org.jboss.jca.core.spi.mdr.MetadataRepository;
import org.jboss.jca.core.spi.naming.JndiStrategy;
@@ -85,6 +86,9 @@
/** The resource adapter repository */
private ResourceAdapterRepository resourceAdapterRepository;
+ /** The cached connection manager */
+ private CachedConnectionManager ccm;
+
/**
* Constructor
*/
@@ -339,6 +343,24 @@
}
/**
+ * Set the cached connection manager
+ * @param value The value
+ */
+ public void setCachedConnectionManager(CachedConnectionManager value)
+ {
+ ccm = value;
+ }
+
+ /**
+ * Get the cached connection manager
+ * @return The handle
+ */
+ public CachedConnectionManager getCachedConnectionManager()
+ {
+ return ccm;
+ }
+
+ /**
* Start
*/
public void start()
@@ -360,5 +382,8 @@
if (resourceAdapterRepository == null)
throw new IllegalStateException("ResourceAdapterRepository not defined");
+
+ if (ccm == null)
+ throw new IllegalStateException("CachedConnectionManager not defined");
}
}
Modified: projects/jboss-jca/trunk/doc/userguide/en-US/modules/deployment.xml
===================================================================
--- projects/jboss-jca/trunk/doc/userguide/en-US/modules/deployment.xml 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/doc/userguide/en-US/modules/deployment.xml 2011-04-14 12:48:23 UTC (rev 111180)
@@ -222,6 +222,12 @@
Specifies the pool name for the object
</entry>
</row>
+ <row>
+ <entry><code>use-ccm</code></entry>
+ <entry>
+ Enable the cache connection manager
+ </entry>
+ </row>
</tbody>
</tgroup>
</table>
@@ -688,6 +694,12 @@
The logging category <code>org.jboss.jdbc</code> must be enabled too.
</entry>
</row>
+ <row>
+ <entry><code>use-ccm</code></entry>
+ <entry>
+ Enable the cached connection manager
+ </entry>
+ </row>
</tbody>
</tgroup>
</table>
Modified: projects/jboss-jca/trunk/embedded/src/main/resources/ds.xml
===================================================================
--- projects/jboss-jca/trunk/embedded/src/main/resources/ds.xml 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/embedded/src/main/resources/ds.xml 2011-04-14 12:48:23 UTC (rev 111180)
@@ -9,6 +9,7 @@
<property name="MetadataRepository"><inject bean="MDR"/></property>
<property name="Kernel"><inject bean="Kernel"/></property>
<property name="ManagementRepository"><inject bean="ManagementRepository"/></property>
+ <property name="CachedConnectionManager"><inject bean="CCM"/></property>
</bean>
</deployment>
Modified: projects/jboss-jca/trunk/embedded/src/main/resources/jca.xml
===================================================================
--- projects/jboss-jca/trunk/embedded/src/main/resources/jca.xml 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/embedded/src/main/resources/jca.xml 2011-04-14 12:48:23 UTC (rev 111180)
@@ -139,6 +139,17 @@
interface="org.jboss.jca.core.spi.mdr.MetadataRepository"
class="org.jboss.jca.core.mdr.SimpleMetadataRepository"/>
+ <!-- CCM -->
+ <bean name="CCM"
+ interface="org.jboss.jca.core.api.connectionmanager.ccm.CachedConnectionManager"
+ class="org.jboss.jca.core.connectionmanager.ccm.CachedConnectionManagerImpl">
+ <constructor>
+ <parameter><inject bean="TransactionIntegration" property="TransactionManager"/></parameter>
+ </constructor>
+ <property name="Debug">false</property>
+ <property name="Error">false</property>
+ </bean>
+
<!-- Resource adapter repository -->
<bean name="ResourceAdapterRepository"
interface="org.jboss.jca.core.spi.rar.ResourceAdapterRepository"
@@ -173,6 +184,7 @@
<property name="MetadataRepository"><inject bean="MDR"/></property>
<property name="ManagementRepository"><inject bean="ManagementRepository"/></property>
<property name="ResourceAdapterRepository"><inject bean="ResourceAdapterRepository"/></property>
+ <property name="CachedConnectionManager"><inject bean="CCM"/></property>
</bean>
<!-- Activator configuration -->
@@ -189,6 +201,7 @@
<property name="MetadataRepository"><inject bean="MDR"/></property>
<property name="ManagementRepository"><inject bean="ManagementRepository"/></property>
<property name="ResourceAdapterRepository"><inject bean="ResourceAdapterRepository"/></property>
+ <property name="CachedConnectionManager"><inject bean="CCM"/></property>
</bean>
<!-- RA deployer -->
Modified: projects/jboss-jca/trunk/sjc/src/main/resources/bootstrap/ds.xml
===================================================================
--- projects/jboss-jca/trunk/sjc/src/main/resources/bootstrap/ds.xml 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/sjc/src/main/resources/bootstrap/ds.xml 2011-04-14 12:48:23 UTC (rev 111180)
@@ -10,6 +10,7 @@
<property name="MetadataRepository"><inject bean="MDR"/></property>
<property name="Kernel"><inject bean="Kernel"/></property>
<property name="ManagementRepository"><inject bean="ManagementRepository"/></property>
+ <property name="CachedConnectionManager"><inject bean="CCM"/></property>
</bean>
</deployment>
Modified: projects/jboss-jca/trunk/sjc/src/main/resources/bootstrap/jca.xml
===================================================================
--- projects/jboss-jca/trunk/sjc/src/main/resources/bootstrap/jca.xml 2011-04-13 13:53:00 UTC (rev 111179)
+++ projects/jboss-jca/trunk/sjc/src/main/resources/bootstrap/jca.xml 2011-04-14 12:48:23 UTC (rev 111180)
@@ -142,6 +142,17 @@
interface="org.jboss.jca.core.spi.mdr.MetadataRepository"
class="org.jboss.jca.core.mdr.SimpleMetadataRepository"/>
+ <!-- CCM -->
+ <bean name="CCM"
+ interface="org.jboss.jca.core.api.connectionmanager.ccm.CachedConnectionManager"
+ class="org.jboss.jca.core.connectionmanager.ccm.CachedConnectionManagerImpl">
+ <constructor>
+ <parameter><inject bean="TransactionIntegration" property="TransactionManager"/></parameter>
+ </constructor>
+ <property name="Debug">false</property>
+ <property name="Error">false</property>
+ </bean>
+
<!-- Resource adapter repository -->
<bean name="ResourceAdapterRepository"
interface="org.jboss.jca.core.spi.rar.ResourceAdapterRepository"
@@ -167,6 +178,7 @@
<property name="MetadataRepository"><inject bean="MDR"/></property>
<property name="ManagementRepository"><inject bean="ManagementRepository"/></property>
<property name="ResourceAdapterRepository"><inject bean="ResourceAdapterRepository"/></property>
+ <property name="CachedConnectionManager"><inject bean="CCM"/></property>
</bean>
<!-- Activator configuration -->
@@ -183,6 +195,7 @@
<property name="MetadataRepository"><inject bean="MDR"/></property>
<property name="ManagementRepository"><inject bean="ManagementRepository"/></property>
<property name="ResourceAdapterRepository"><inject bean="ResourceAdapterRepository"/></property>
+ <property name="CachedConnectionManager"><inject bean="CCM"/></property>
</bean>
<!-- RA deployer -->
More information about the jboss-cvs-commits
mailing list