# ----- Vesion Control Flags -----
version.major=1
version.minor=0
-version.build=7
+version.build=8
version.patch=
version.suffix=
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
+import javax.sql.XAConnection;
+
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
}
try {
- getProxyConstructor();
+ getProxyConstructor(con.getConnection() instanceof XAConnection);
//create the proxy
//TODO possible optimization, keep track if this connection was returned properly, and don't generate a new facade
Connection connection = (Connection)proxyClassConstructor.newInstance(new Object[] { handler });
* @return constructor used to instantiate the wrapper object
* @throws NoSuchMethodException
*/
- public Constructor<?> getProxyConstructor() throws NoSuchMethodException {
+ public Constructor<?> getProxyConstructor(boolean xa) throws NoSuchMethodException {
//cache the constructor
if (proxyClassConstructor == null ) {
- Class<?> proxyClass = Proxy.getProxyClass(ConnectionPool.class.getClassLoader(), new Class[] {java.sql.Connection.class,javax.sql.PooledConnection.class});
+ Class<?> proxyClass = xa ?
+ Proxy.getProxyClass(ConnectionPool.class.getClassLoader(), new Class[] {java.sql.Connection.class,javax.sql.PooledConnection.class, javax.sql.XAConnection.class}) :
+ Proxy.getProxyClass(ConnectionPool.class.getClassLoader(), new Class[] {java.sql.Connection.class,javax.sql.PooledConnection.class});
proxyClassConstructor = proxyClass.getConstructor(new Class[] { InvocationHandler.class });
}
return proxyClassConstructor;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
+import javax.sql.XADataSource;
/**
* @author Filip Hanik
* @version 1.0
*/
-public class DataSource extends DataSourceProxy implements MBeanRegistration,javax.sql.DataSource, org.apache.tomcat.jdbc.pool.jmx.ConnectionPoolMBean {
+public class DataSource extends DataSourceProxy implements MBeanRegistration,javax.sql.DataSource,XADataSource, org.apache.tomcat.jdbc.pool.jmx.ConnectionPoolMBean {
/**
* Constructor for reflection only. A default set of pool properties will be created.
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
+import java.sql.SQLFeatureNotSupportedException;
import java.util.Iterator;
import java.util.Properties;
import java.util.concurrent.Future;
+import javax.sql.XAConnection;
+
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.jdbc.pool.PoolProperties.InterceptorDefinition;
return createPool().getConnectionAsync();
return pool.getConnectionAsync();
}
+
+ /**
+ * {@link javax.sql.XADataSource#getXAConnection()}
+ */
+ public XAConnection getXAConnection() throws SQLException {
+ Connection con = getConnection();
+ if (con instanceof XAConnection) {
+ return (XAConnection)con;
+ } else {
+ try {con.close();} catch (Exception ignore){}
+ throw new SQLException("Connection from pool does not implement javax.sql.XAConnection");
+ }
+ }
+
+ /**
+ * {@link javax.sql.XADataSource#getXAConnection(String, String)}
+ */
+ public XAConnection getXAConnection(String username, String password) throws SQLException {
+ Connection con = getConnection(username, password);
+ if (con instanceof XAConnection) {
+ return (XAConnection)con;
+ } else {
+ try {con.close();} catch (Exception ignore){}
+ throw new SQLException("Connection from pool does not implement javax.sql.XAConnection");
+ }
+ }
+
/**
* {@link javax.sql.DataSource#getConnection()}
# See the License for the specific language governing permissions and
# limitations under the License.
-VERSION=v1.0.7
+VERSION=v1.0.8
for i in $(find output/release/$VERSION -name "*.zip" -o -name "*.tar.gz"); do
echo Signing $i
echo $1|gpg --passphrase-fd 0 -a -b $i