Author: rmannibucau
Date: Mon Jul 23 21:54:06 2012
New Revision: 1364813
URL: http://svn.apache.org/viewvc?rev=1364813&view=rev
Log:
managed and recovery and some comments
Added:
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/TransactionManagerWrapper.java
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/local/ManagedConnection.java
- copied, changed from r1364794,
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/ManagedConnection.java
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/local/ManagedDataSource.java
- copied, changed from r1364676,
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/ManagedDataSource.java
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/xa/
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/xa/ManagedXAConnection.java
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/xa/ManagedXADataSource.java
Removed:
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/ManagedConnection.java
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/ManagedDataSource.java
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/ManagedXAConnection.java
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/ManagedXADataSource.java
Modified:
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/DataSourceFactory.java
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/dbcp/BasicDataSource.java
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/dbcp/BasicManagedDataSource.java
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/dbcp/ManagedDataSourceWithRecovery.java
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/local/LocalXAResource.java
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DataSourceCreator.java
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DbcpDataSourceCreator.java
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DefaultDataSourceCreator.java
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/PoolDataSourceCreator.java
openejb/branches/openejb-pool/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/ManagedDataSourceTest.java
Added:
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/TransactionManagerWrapper.java
URL:
http://svn.apache.org/viewvc/openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/TransactionManagerWrapper.java?rev=1364813&view=auto
==============================================================================
---
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/TransactionManagerWrapper.java
(added)
+++
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/TransactionManagerWrapper.java
Mon Jul 23 21:54:06 2012
@@ -0,0 +1,138 @@
+package org.apache.openejb.resource;
+
+import javax.transaction.HeuristicMixedException;
+import javax.transaction.HeuristicRollbackException;
+import javax.transaction.InvalidTransactionException;
+import javax.transaction.NotSupportedException;
+import javax.transaction.RollbackException;
+import javax.transaction.Synchronization;
+import javax.transaction.SystemException;
+import javax.transaction.Transaction;
+import javax.transaction.TransactionManager;
+import javax.transaction.xa.XAResource;
+
+public class TransactionManagerWrapper implements TransactionManager {
+ private final String name;
+ private final TransactionManager delegate;
+ private final XAResourceWrapper xaResourceWrapper;
+
+ public TransactionManagerWrapper(final TransactionManager delegate, final
String name, final XAResourceWrapper xaResourceWrapper) {
+ this.delegate = delegate;
+ this.name = name;
+ this.xaResourceWrapper = xaResourceWrapper;
+ }
+
+ @Override
+ public void begin() throws NotSupportedException, SystemException {
+ delegate.begin();
+ }
+
+ @Override
+ public void commit() throws HeuristicMixedException,
HeuristicRollbackException, IllegalStateException, RollbackException,
SecurityException, SystemException {
+ delegate.commit();
+ }
+
+ @Override
+ public int getStatus() throws SystemException {
+ return delegate.getStatus();
+ }
+
+ @Override
+ public Transaction getTransaction() throws SystemException {
+ final Transaction tx = delegate.getTransaction();
+ return tx == null ? null : new
TransactionWrapper(delegate.getTransaction(), name, xaResourceWrapper);
+ }
+
+ @Override
+ public void resume(Transaction transaction) throws IllegalStateException,
InvalidTransactionException, SystemException {
+ delegate.resume(((TransactionWrapper) transaction).transaction);
+ }
+
+ @Override
+ public void rollback() throws IllegalStateException, SecurityException,
SystemException {
+ delegate.rollback();
+ }
+
+ @Override
+ public void setRollbackOnly() throws IllegalStateException,
SystemException {
+ delegate.setRollbackOnly();
+ }
+
+ @Override
+ public void setTransactionTimeout(int i) throws SystemException {
+ delegate.setTransactionTimeout(i);
+ }
+
+ @Override
+ public Transaction suspend() throws SystemException {
+ return new TransactionWrapper(delegate.suspend(), name,
xaResourceWrapper);
+ }
+
+ private static class TransactionWrapper implements Transaction {
+ private final Transaction transaction;
+ private final String name;
+ private final XAResourceWrapper xaResourceWrapper;
+
+ private TransactionWrapper(final Transaction transaction, final String
name, final XAResourceWrapper xaResourceWrapper) {
+ this.transaction = transaction;
+ this.name = name;
+ this.xaResourceWrapper = xaResourceWrapper;
+ }
+
+ @Override
+ public void commit() throws HeuristicMixedException,
HeuristicRollbackException, RollbackException, SecurityException,
SystemException {
+ transaction.commit();
+ }
+
+ @Override
+ public boolean delistResource(final XAResource xaResource, int i)
throws IllegalStateException, SystemException {
+ final XAResource wrapper = xaResourceWrapper.wrap(xaResource,
name);
+ return transaction.delistResource(wrapper, i);
+ }
+
+ @Override
+ public boolean enlistResource(final XAResource xaResource) throws
IllegalStateException, RollbackException, SystemException {
+ final XAResource wrapper = xaResourceWrapper.wrap(xaResource,
name);
+ return transaction.enlistResource(wrapper);
+ }
+
+ @Override
+ public int getStatus() throws SystemException {
+ return transaction.getStatus();
+ }
+
+ @Override
+ public void registerSynchronization(final Synchronization
synchronization) throws IllegalStateException, RollbackException,
SystemException {
+ transaction.registerSynchronization(synchronization);
+ }
+
+ @Override
+ public void rollback() throws IllegalStateException, SystemException {
+ transaction.rollback();
+ }
+
+ @Override
+ public void setRollbackOnly() throws IllegalStateException,
SystemException {
+ transaction.setRollbackOnly();
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ final TransactionWrapper that = (TransactionWrapper) o;
+ return transaction.equals(that.transaction);
+ }
+
+ @Override
+ public int hashCode() {
+ return transaction.hashCode();
+ }
+ }
+}
+
Modified:
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/DataSourceFactory.java
URL:
http://svn.apache.org/viewvc/openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/DataSourceFactory.java?rev=1364813&r1=1364812&r2=1364813&view=diff
==============================================================================
---
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/DataSourceFactory.java
(original)
+++
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/DataSourceFactory.java
Mon Jul 23 21:54:06 2012
@@ -34,9 +34,6 @@ public class DataSourceFactory {
public static final String POOL_PROPERTY = "openejb.datasource.pool";
public static DataSource create(final String name, final boolean managed,
final Class impl, final String definition) throws IllegalAccessException,
InstantiationException, IOException {
-
- final DataSource ds;
-
final Properties properties = asProperties(definition);
final DataSourceCreator creator =
SystemInstance.get().getComponent(DataSourceCreator.class);
@@ -49,35 +46,33 @@ public class DataSourceFactory {
recipe.allow(Option.NAMED_PARAMETERS);
recipe.setAllProperties(properties);
- DataSource dataSource = (DataSource) recipe.create();
+ final DataSource dataSource = (DataSource) recipe.create();
if (managed) {
if (useDbcp(properties)) {
- ds = creator.poolManaged(name, dataSource);
+ return creator.poolManaged(name, dataSource);
} else {
- ds = creator.managed(name, dataSource);
+ return creator.managed(name, dataSource);
}
} else {
if (useDbcp(properties)) {
- ds = creator.pool(name, dataSource);
+ return creator.pool(name, dataSource);
} else {
- ds = dataSource;
+ return dataSource;
}
}
- } else {
+ } else { // by driver
if (managed) {
- XAResourceWrapper xaResourceWrapper =
SystemInstance.get().getComponent(XAResourceWrapper.class);
+ final XAResourceWrapper xaResourceWrapper =
SystemInstance.get().getComponent(XAResourceWrapper.class);
if (xaResourceWrapper != null) {
- ds = creator.poolManagedWithRecovery(name,
xaResourceWrapper, impl.getName(), properties);
+ return creator.poolManagedWithRecovery(name,
xaResourceWrapper, impl.getName(), properties);
} else {
- ds = creator.poolManaged(name, impl.getName(), properties);
+ return creator.poolManaged(name, impl.getName(),
properties);
}
} else {
- ds = creator.pool(name, impl.getName(), properties);
+ return creator.pool(name, impl.getName(), properties);
}
}
-
- return ds;
}
private static boolean createDataSourceFromClass(final Class<?> impl) {
Modified:
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/dbcp/BasicDataSource.java
URL:
http://svn.apache.org/viewvc/openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/dbcp/BasicDataSource.java?rev=1364813&r1=1364812&r2=1364813&view=diff
==============================================================================
---
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/dbcp/BasicDataSource.java
(original)
+++
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/dbcp/BasicDataSource.java
Mon Jul 23 21:54:06 2012
@@ -16,7 +16,12 @@
*/
package org.apache.openejb.resource.jdbc.dbcp;
+import org.apache.openejb.assembler.monitoring.JMXBasicDataSource;
import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.resource.jdbc.BasicDataSourceUtil;
+import org.apache.openejb.resource.jdbc.IsolationLevels;
+import org.apache.openejb.resource.jdbc.cipher.PasswordCipher;
+import org.apache.openejb.resource.jdbc.plugin.DataSourcePlugin;
import javax.sql.DataSource;
import java.io.File;
@@ -25,11 +30,6 @@ import java.sql.SQLFeatureNotSupportedEx
import java.util.Properties;
import java.util.concurrent.locks.ReentrantLock;
import java.util.logging.Logger;
-import org.apache.openejb.assembler.monitoring.JMXBasicDataSource;
-import org.apache.openejb.resource.jdbc.BasicDataSourceUtil;
-import org.apache.openejb.resource.jdbc.plugin.DataSourcePlugin;
-import org.apache.openejb.resource.jdbc.IsolationLevels;
-import org.apache.openejb.resource.jdbc.cipher.PasswordCipher;
@SuppressWarnings({"UnusedDeclaration"})
public class BasicDataSource extends org.apache.commons.dbcp.BasicDataSource {
Modified:
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/dbcp/BasicManagedDataSource.java
URL:
http://svn.apache.org/viewvc/openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/dbcp/BasicManagedDataSource.java?rev=1364813&r1=1364812&r2=1364813&view=diff
==============================================================================
---
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/dbcp/BasicManagedDataSource.java
(original)
+++
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/dbcp/BasicManagedDataSource.java
Mon Jul 23 21:54:06 2012
@@ -16,19 +16,20 @@
*/
package org.apache.openejb.resource.jdbc.dbcp;
+import org.apache.openejb.assembler.monitoring.JMXBasicDataSource;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.resource.jdbc.BasicDataSourceUtil;
+import org.apache.openejb.resource.jdbc.IsolationLevels;
+import org.apache.openejb.resource.jdbc.cipher.PasswordCipher;
+import org.apache.openejb.resource.jdbc.plugin.DataSourcePlugin;
+
+import javax.sql.DataSource;
import java.io.File;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.util.Properties;
import java.util.concurrent.locks.ReentrantLock;
import java.util.logging.Logger;
-import javax.sql.DataSource;
-import org.apache.openejb.loader.SystemInstance;
-import org.apache.openejb.assembler.monitoring.JMXBasicDataSource;
-import org.apache.openejb.resource.jdbc.BasicDataSourceUtil;
-import org.apache.openejb.resource.jdbc.plugin.DataSourcePlugin;
-import org.apache.openejb.resource.jdbc.IsolationLevels;
-import org.apache.openejb.resource.jdbc.cipher.PasswordCipher;
@SuppressWarnings({"UnusedDeclaration"})
public class BasicManagedDataSource extends
org.apache.commons.dbcp.managed.BasicManagedDataSource {
Modified:
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/dbcp/ManagedDataSourceWithRecovery.java
URL:
http://svn.apache.org/viewvc/openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/dbcp/ManagedDataSourceWithRecovery.java?rev=1364813&r1=1364812&r2=1364813&view=diff
==============================================================================
---
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/dbcp/ManagedDataSourceWithRecovery.java
(original)
+++
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/dbcp/ManagedDataSourceWithRecovery.java
Mon Jul 23 21:54:06 2012
@@ -16,18 +16,10 @@
*/
package org.apache.openejb.resource.jdbc.dbcp;
+import org.apache.openejb.resource.TransactionManagerWrapper;
import org.apache.openejb.resource.XAResourceWrapper;
-import javax.transaction.HeuristicMixedException;
-import javax.transaction.HeuristicRollbackException;
-import javax.transaction.InvalidTransactionException;
-import javax.transaction.NotSupportedException;
-import javax.transaction.RollbackException;
-import javax.transaction.Synchronization;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
import javax.transaction.TransactionManager;
-import javax.transaction.xa.XAResource;
public class ManagedDataSourceWithRecovery extends BasicManagedDataSource {
private TransactionManager suppliedTransactionManager;
@@ -48,110 +40,4 @@ public class ManagedDataSourceWithRecove
super.setTransactionManager(new
TransactionManagerWrapper(suppliedTransactionManager, getUrl(),
xaResourceWrapper));
}
}
-
- private static class TransactionManagerWrapper implements
TransactionManager {
-
- private final TransactionManager transactionManager;
- private final String name;
- private final XAResourceWrapper xaResourceWrapper;
-
- private TransactionManagerWrapper(TransactionManager
transactionManager, String name, XAResourceWrapper xaResourceWrapper) {
- this.transactionManager = transactionManager;
- this.name = name;
- this.xaResourceWrapper = xaResourceWrapper;
- }
-
- public void begin() throws NotSupportedException, SystemException {
- transactionManager.begin();
- }
-
- public void commit() throws HeuristicMixedException,
HeuristicRollbackException, IllegalStateException, RollbackException,
SecurityException, SystemException {
- transactionManager.commit();
- }
-
- public int getStatus() throws SystemException {
- return transactionManager.getStatus();
- }
-
- public Transaction getTransaction() throws SystemException {
- Transaction tx = transactionManager.getTransaction();
- return tx == null? null: new
TransactionWrapper(transactionManager.getTransaction(), name,
xaResourceWrapper);
- }
-
- public void resume(Transaction transaction) throws
IllegalStateException, InvalidTransactionException, SystemException {
-
transactionManager.resume(((TransactionWrapper)transaction).transaction);
- }
-
- public void rollback() throws IllegalStateException,
SecurityException, SystemException {
- transactionManager.rollback();
- }
-
- public void setRollbackOnly() throws IllegalStateException,
SystemException {
- transactionManager.setRollbackOnly();
- }
-
- public void setTransactionTimeout(int i) throws SystemException {
- transactionManager.setTransactionTimeout(i);
- }
-
- public Transaction suspend() throws SystemException {
- return new TransactionWrapper(transactionManager.suspend(), name,
xaResourceWrapper);
- }
- }
-
- private static class TransactionWrapper implements Transaction {
-
- private final Transaction transaction;
- private final String name;
- private final XAResourceWrapper xaResourceWrapper;
-
- private TransactionWrapper(Transaction transaction, String name,
XAResourceWrapper xaResourceWrapper) {
- this.transaction = transaction;
- this.name = name;
- this.xaResourceWrapper = xaResourceWrapper;
- }
-
- public void commit() throws HeuristicMixedException,
HeuristicRollbackException, RollbackException, SecurityException,
SystemException {
- transaction.commit();
- }
-
- public boolean delistResource(XAResource xaResource, int i) throws
IllegalStateException, SystemException {
- XAResource wrapper = xaResourceWrapper.wrap(xaResource, name);
- return transaction.delistResource(wrapper, i);
- }
-
- public boolean enlistResource(XAResource xaResource) throws
IllegalStateException, RollbackException, SystemException {
- XAResource wrapper = xaResourceWrapper.wrap(xaResource, name);
- return transaction.enlistResource(wrapper);
- }
-
- public int getStatus() throws SystemException {
- return transaction.getStatus();
- }
-
- public void registerSynchronization(Synchronization synchronization)
throws IllegalStateException, RollbackException, SystemException {
- transaction.registerSynchronization(synchronization);
- }
-
- public void rollback() throws IllegalStateException, SystemException {
- transaction.rollback();
- }
-
- public void setRollbackOnly() throws IllegalStateException,
SystemException {
- transaction.setRollbackOnly();
- }
-
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- TransactionWrapper that = (TransactionWrapper) o;
-
- return transaction.equals(that.transaction);
- }
-
- public int hashCode() {
- return transaction.hashCode();
- }
- }
}
\ No newline at end of file
Modified:
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/local/LocalXAResource.java
URL:
http://svn.apache.org/viewvc/openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/local/LocalXAResource.java?rev=1364813&r1=1364812&r2=1364813&view=diff
==============================================================================
---
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/local/LocalXAResource.java
(original)
+++
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/local/LocalXAResource.java
Mon Jul 23 21:54:06 2012
@@ -6,13 +6,16 @@ import javax.transaction.xa.Xid;
import java.sql.Connection;
import java.sql.SQLException;
+// seems synchronized is faster than java.util.concurrent for 1 or 2 threads
+// so should be fine here
+// moreover all operations are very short so synchronized is faster
public class LocalXAResource implements XAResource {
private final Connection connection;
private Xid currentXid;
private boolean originalAutoCommit;
public LocalXAResource(final Connection localTransaction) {
- this.connection = localTransaction;
+ connection = localTransaction;
}
public synchronized Xid getXid() {
@@ -22,7 +25,7 @@ public class LocalXAResource implements
@Override
public synchronized void start(final Xid xid, int flag) throws XAException
{
if (flag == XAResource.TMNOFLAGS) {
- if (this.currentXid != null) {
+ if (currentXid != null) {
throw new XAException("Already enlisted in another transaction
with xid " + xid);
}
@@ -41,8 +44,8 @@ public class LocalXAResource implements
this.currentXid = xid;
} else if (flag == XAResource.TMRESUME) {
- if (xid != this.currentXid) {
- throw new XAException("Attempting to resume in different
transaction: expected " + this.currentXid + ", but was " + xid);
+ if (xid != currentXid) {
+ throw new XAException("Attempting to resume in different
transaction: expected " + currentXid + ", but was " + xid);
}
} else {
throw new XAException("Unknown start flag " + flag);
@@ -78,8 +81,8 @@ public class LocalXAResource implements
if (xid == null) {
throw new NullPointerException("xid is null");
}
- if (!this.currentXid.equals(xid)) {
- throw new XAException("Invalid Xid: expected " + this.currentXid +
", but was " + xid);
+ if (!currentXid.equals(xid)) {
+ throw new XAException("Invalid Xid: expected " + currentXid + ",
but was " + xid);
}
try {
@@ -98,7 +101,7 @@ public class LocalXAResource implements
} catch (SQLException e) {
// no-op
}
- this.currentXid = null;
+ currentXid = null;
}
}
@@ -107,8 +110,8 @@ public class LocalXAResource implements
if (xid == null) {
throw new NullPointerException("xid is null");
}
- if (!this.currentXid.equals(xid)) {
- throw new XAException("Invalid Xid: expected " + this.currentXid +
", but was " + xid);
+ if (!currentXid.equals(xid)) {
+ throw new XAException("Invalid Xid: expected " + currentXid + ",
but was " + xid);
}
try {
@@ -132,8 +135,8 @@ public class LocalXAResource implements
@Override
public synchronized void forget(final Xid xid) {
- if (xid != null && this.currentXid.equals(xid)) {
- this.currentXid = null;
+ if (xid != null && currentXid.equals(xid)) {
+ currentXid = null;
}
}
Copied:
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/local/ManagedConnection.java
(from r1364794,
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/ManagedConnection.java)
URL:
http://svn.apache.org/viewvc/openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/local/ManagedConnection.java?p2=openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/local/ManagedConnection.java&p1=openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/ManagedConnection.java&r1=1364794&r2=1364813&rev=1364813&view=diff
==============================================================================
---
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/ManagedConnection.java
(original)
+++
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/local/ManagedConnection.java
Mon Jul 23 21:54:06 2012
@@ -1,7 +1,6 @@
-package org.apache.openejb.resource.jdbc.managed;
+package org.apache.openejb.resource.jdbc.managed.local;
import org.apache.openejb.OpenEJB;
-import org.apache.openejb.resource.jdbc.managed.local.LocalXAResource;
import javax.transaction.RollbackException;
import javax.transaction.Status;
@@ -22,17 +21,16 @@ public class ManagedConnection implement
private static final Map<Transaction, Connection> CONNECTION_BY_TX = new
ConcurrentHashMap<Transaction, Connection>();
protected Connection delegate;
- protected XAResource xaResource;
-
+ private final TransactionManager transactionManager;
private Transaction currentTransaction;
- protected ManagedConnection(final Connection connection, final XAResource
resource) {
+ public ManagedConnection(final Connection connection, final
TransactionManager txMgr) {
delegate = connection;
- xaResource = resource;
+ transactionManager = txMgr;
}
- public ManagedConnection(final Connection connection) {
- this(connection, new LocalXAResource(connection));
+ public XAResource getXAResource() throws SQLException {
+ return new LocalXAResource(delegate);
}
@Override
@@ -40,7 +38,7 @@ public class ManagedConnection implement
// first some Object method management
final String mtdName = method.getName();
if ("toString".equals(mtdName)) {
- return "ManagedConnection{" + delegate.toString() + "}";
+ return "ManagedConnection{" + delegate + "}";
}
if ("hashCode".equals(mtdName)) {
return delegate.hashCode();
@@ -51,7 +49,6 @@ public class ManagedConnection implement
// here the real logic starts
try {
- final TransactionManager transactionManager =
OpenEJB.getTransactionManager();
final Transaction transaction =
transactionManager.getTransaction();
if (transaction == null) { // shouldn't be possible
@@ -83,7 +80,7 @@ public class ManagedConnection implement
CONNECTION_BY_TX.put(transaction, delegate);
currentTransaction = transaction;
try {
- transaction.enlistResource(xaResource);
+ transaction.enlistResource(getXAResource());
} catch (RollbackException ignored) {
// no-op
} catch (SystemException e) {
Copied:
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/local/ManagedDataSource.java
(from r1364676,
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/ManagedDataSource.java)
URL:
http://svn.apache.org/viewvc/openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/local/ManagedDataSource.java?p2=openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/local/ManagedDataSource.java&p1=openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/ManagedDataSource.java&r1=1364676&r2=1364813&rev=1364813&view=diff
==============================================================================
---
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/ManagedDataSource.java
(original)
+++
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/local/ManagedDataSource.java
Mon Jul 23 21:54:06 2012
@@ -1,15 +1,9 @@
-package org.apache.openejb.resource.jdbc.managed;
+package org.apache.openejb.resource.jdbc.managed.local;
-import org.apache.openejb.OpenEJB;
-import org.apache.openejb.resource.jdbc.managed.local.LocalXAResource;
import org.apache.openejb.util.reflection.Reflections;
import javax.sql.DataSource;
-import javax.transaction.RollbackException;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
import javax.transaction.TransactionManager;
-import javax.transaction.xa.XAResource;
import java.io.PrintWriter;
import java.lang.reflect.Proxy;
import java.sql.Connection;
@@ -21,9 +15,11 @@ public class ManagedDataSource implement
private static final Class<?>[] CONNECTION_CLASS = new Class<?>[] {
Connection.class };
protected final DataSource delegate;
+ protected final TransactionManager transactionManager;
- public ManagedDataSource(final DataSource ds) {
+ public ManagedDataSource(final DataSource ds, final TransactionManager
txMgr) {
delegate = ds;
+ transactionManager = txMgr;
}
@Override
@@ -36,10 +32,6 @@ public class ManagedDataSource implement
return managed(delegate.getConnection(username, password));
}
- private Connection managed(final Connection connection) {
- return (Connection)
Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),
CONNECTION_CLASS, new ManagedConnection(connection));
- }
-
@Override
public PrintWriter getLogWriter() throws SQLException {
return delegate.getLogWriter();
@@ -60,11 +52,6 @@ public class ManagedDataSource implement
return delegate.getLoginTimeout();
}
- // @Override
- public Logger getParentLogger() throws SQLFeatureNotSupportedException {
- return (Logger) Reflections.invokeByReflection(delegate,
"getParentLogger", new Class<?>[0], null);
- }
-
@Override
public <T> T unwrap(final Class<T> iface) throws SQLException {
return delegate.unwrap(iface);
@@ -74,4 +61,13 @@ public class ManagedDataSource implement
public boolean isWrapperFor(final Class<?> iface) throws SQLException {
return delegate.isWrapperFor(iface);
}
+
+ // @Override JDK7
+ public Logger getParentLogger() throws SQLFeatureNotSupportedException {
+ return (Logger) Reflections.invokeByReflection(delegate,
"getParentLogger", new Class<?>[0], null);
+ }
+
+ private Connection managed(final Connection connection) {
+ return (Connection)
Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),
CONNECTION_CLASS, new ManagedConnection(connection, transactionManager));
+ }
}
Added:
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/xa/ManagedXAConnection.java
URL:
http://svn.apache.org/viewvc/openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/xa/ManagedXAConnection.java?rev=1364813&view=auto
==============================================================================
---
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/xa/ManagedXAConnection.java
(added)
+++
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/xa/ManagedXAConnection.java
Mon Jul 23 21:54:06 2012
@@ -0,0 +1,20 @@
+package org.apache.openejb.resource.jdbc.managed.xa;
+
+import org.apache.openejb.resource.jdbc.managed.local.ManagedConnection;
+
+import javax.sql.XAConnection;
+import javax.transaction.TransactionManager;
+import javax.transaction.xa.XAResource;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+public class ManagedXAConnection extends ManagedConnection {
+ public ManagedXAConnection(final Connection connection, final
TransactionManager txMgr) throws SQLException {
+ super(connection, txMgr);
+ }
+
+ @Override
+ public XAResource getXAResource() throws SQLException {
+ return ((XAConnection) delegate).getXAResource();
+ }
+}
Added:
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/xa/ManagedXADataSource.java
URL:
http://svn.apache.org/viewvc/openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/xa/ManagedXADataSource.java?rev=1364813&view=auto
==============================================================================
---
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/xa/ManagedXADataSource.java
(added)
+++
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/managed/xa/ManagedXADataSource.java
Mon Jul 23 21:54:06 2012
@@ -0,0 +1,36 @@
+package org.apache.openejb.resource.jdbc.managed.xa;
+
+import org.apache.openejb.resource.jdbc.managed.local.ManagedDataSource;
+
+import javax.sql.DataSource;
+import javax.sql.XAConnection;
+import javax.sql.XADataSource;
+import javax.transaction.TransactionManager;
+import java.lang.reflect.Proxy;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+public class ManagedXADataSource extends ManagedDataSource {
+ private static final Class<?>[] CONNECTION_CLASS = new Class<?>[] {
XAConnection.class };
+
+ private final XADataSource xaDataSource;
+
+ public ManagedXADataSource(final DataSource ds, final TransactionManager
txMgr) {
+ super(ds, txMgr);
+ xaDataSource = (XADataSource) ds;
+ }
+
+ @Override
+ public Connection getConnection() throws SQLException {
+ return managedXA(xaDataSource.getXAConnection().getConnection());
+ }
+
+ @Override
+ public Connection getConnection(final String username, final String
password) throws SQLException {
+ return managedXA(xaDataSource.getXAConnection(username,
password).getConnection());
+ }
+
+ private Connection managedXA(final Connection connection) throws
SQLException {
+ return (Connection)
Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),
CONNECTION_CLASS, new ManagedXAConnection(connection, transactionManager));
+ }
+}
Modified:
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DataSourceCreator.java
URL:
http://svn.apache.org/viewvc/openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DataSourceCreator.java?rev=1364813&r1=1364812&r2=1364813&view=diff
==============================================================================
---
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DataSourceCreator.java
(original)
+++
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DataSourceCreator.java
Mon Jul 23 21:54:06 2012
@@ -5,6 +5,11 @@ import org.apache.openejb.resource.XARes
import javax.sql.DataSource;
import java.util.Properties;
+// Look org.apache.openejb.resource.jdbc.pool.PoolDataSourceCreator
+// it is the class to extend
+// this interface is mainly so complicated
+// to be able to use DBCP "as before"
+// in fact all managed method are done through the previous abstraction
public interface DataSourceCreator {
DataSource managed(String name, DataSource ds);
DataSource poolManaged(String name, DataSource ds);
Modified:
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DbcpDataSourceCreator.java
URL:
http://svn.apache.org/viewvc/openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DbcpDataSourceCreator.java?rev=1364813&r1=1364812&r2=1364813&view=diff
==============================================================================
---
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DbcpDataSourceCreator.java
(original)
+++
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DbcpDataSourceCreator.java
Mon Jul 23 21:54:06 2012
@@ -8,6 +8,8 @@ import org.apache.xbean.recipe.Option;
import javax.sql.DataSource;
import java.util.Properties;
+// just a sample showing how to implement a datasourcecreator
+// this one will probably not be used since dbcp has already the integration
we need
public class DbcpDataSourceCreator extends PoolDataSourceCreator {
@Override
public DataSource pool(final String name, final DataSource ds) {
Modified:
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DefaultDataSourceCreator.java
URL:
http://svn.apache.org/viewvc/openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DefaultDataSourceCreator.java?rev=1364813&r1=1364812&r2=1364813&view=diff
==============================================================================
---
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DefaultDataSourceCreator.java
(original)
+++
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/DefaultDataSourceCreator.java
Mon Jul 23 21:54:06 2012
@@ -3,9 +3,9 @@ package org.apache.openejb.resource.jdbc
import org.apache.openejb.resource.XAResourceWrapper;
import org.apache.openejb.resource.jdbc.dbcp.BasicDataSource;
import org.apache.openejb.resource.jdbc.dbcp.BasicManagedDataSource;
-import org.apache.openejb.resource.jdbc.dbcp.ManagedDataSourceWithRecovery;
import org.apache.openejb.resource.jdbc.dbcp.DbcpDataSource;
import org.apache.openejb.resource.jdbc.dbcp.DbcpManagedDataSource;
+import org.apache.openejb.resource.jdbc.dbcp.ManagedDataSourceWithRecovery;
import javax.sql.DataSource;
import java.util.Properties;
Modified:
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/PoolDataSourceCreator.java
URL:
http://svn.apache.org/viewvc/openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/PoolDataSourceCreator.java?rev=1364813&r1=1364812&r2=1364813&view=diff
==============================================================================
---
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/PoolDataSourceCreator.java
(original)
+++
openejb/branches/openejb-pool/container/openejb-core/src/main/java/org/apache/openejb/resource/jdbc/pool/PoolDataSourceCreator.java
Mon Jul 23 21:54:06 2012
@@ -1,25 +1,34 @@
package org.apache.openejb.resource.jdbc.pool;
+import org.apache.openejb.OpenEJB;
+import org.apache.openejb.resource.TransactionManagerWrapper;
import org.apache.openejb.resource.XAResourceWrapper;
-import org.apache.openejb.resource.jdbc.managed.ManagedDataSource;
-import org.apache.openejb.resource.jdbc.managed.ManagedXADataSource;
+import org.apache.openejb.resource.jdbc.managed.local.ManagedDataSource;
+import org.apache.openejb.resource.jdbc.managed.xa.ManagedXADataSource;
import javax.sql.DataSource;
import javax.sql.XADataSource;
+import javax.transaction.TransactionManager;
import java.util.Properties;
public abstract class PoolDataSourceCreator implements DataSourceCreator {
@Override
public DataSource managed(final String name, final DataSource ds) {
+ final TransactionManager transactionManager =
OpenEJB.getTransactionManager();
if (ds instanceof XADataSource) {
- return new ManagedXADataSource(ds);
+ return new ManagedXADataSource(ds, transactionManager);
}
- return new ManagedDataSource(ds);
+ return new ManagedDataSource(ds, transactionManager);
}
- @Override // TODO: manage recovery
+ @Override
public DataSource poolManagedWithRecovery(final String name, final
XAResourceWrapper xaResourceWrapper, final String driver, final Properties
properties) {
- throw new UnsupportedOperationException("TODO: implement it");
+ final TransactionManager transactionManager = new
TransactionManagerWrapper(OpenEJB.getTransactionManager(), name,
xaResourceWrapper);
+ final DataSource ds = pool(name, driver, properties);
+ if (ds instanceof XADataSource) {
+ return new ManagedXADataSource(ds, transactionManager);
+ }
+ return new ManagedDataSource(ds, transactionManager);
}
@Override
Modified:
openejb/branches/openejb-pool/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/ManagedDataSourceTest.java
URL:
http://svn.apache.org/viewvc/openejb/branches/openejb-pool/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/ManagedDataSourceTest.java?rev=1364813&r1=1364812&r2=1364813&view=diff
==============================================================================
---
openejb/branches/openejb-pool/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/ManagedDataSourceTest.java
(original)
+++
openejb/branches/openejb-pool/container/openejb-core/src/test/java/org/apache/openejb/resource/jdbc/ManagedDataSourceTest.java
Mon Jul 23 21:54:06 2012
@@ -5,7 +5,7 @@ import org.apache.openejb.jee.SingletonB
import org.apache.openejb.junit.ApplicationComposer;
import org.apache.openejb.junit.Configuration;
import org.apache.openejb.junit.Module;
-import org.apache.openejb.resource.jdbc.managed.ManagedConnection;
+import org.apache.openejb.resource.jdbc.managed.local.ManagedConnection;
import org.apache.openejb.resource.jdbc.pool.DbcpDataSourceCreator;
import org.junit.After;
import org.junit.BeforeClass;