[jboss-svn-commits] JBL Code SVN: r28252 - in labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src: main/java/uk/ac/ncl/sdia/a8905943/persistence/jdbc and 4 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Jul 20 15:26:21 EDT 2009
Author: whitingjr
Date: 2009-07-20 15:26:21 -0400 (Mon, 20 Jul 2009)
New Revision: 28252
Added:
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/jdbc/
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/jdbc/STMConnection.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/BranchMapping.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/ResourceStatus.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/STMXAResource.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/XAResourceManager.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/datasource/
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/datasource/factory/
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/datasource/factory/DataSourceFactory.java
Modified:
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/STMXAConnectionImpl.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/STMXADatasourceImpl.java
labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/entitymanager/JUnitTestSTMEntityManagerFactoryImpl.java
Log:
Added implementation.
Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/jdbc/STMConnection.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/jdbc/STMConnection.java (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/jdbc/STMConnection.java 2009-07-20 19:26:21 UTC (rev 28252)
@@ -0,0 +1,383 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.persistence.jdbc;
+
+import java.sql.Array;
+import java.sql.Blob;
+import java.sql.CallableStatement;
+import java.sql.Clob;
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.NClob;
+import java.sql.PreparedStatement;
+import java.sql.SQLClientInfoException;
+import java.sql.SQLException;
+import java.sql.SQLWarning;
+import java.sql.SQLXML;
+import java.sql.Savepoint;
+import java.sql.Statement;
+import java.sql.Struct;
+import java.util.Map;
+import java.util.Properties;
+
+/**
+ * This object represents a logical connection with database. In this system the
+ * database is STM memory.
+ *
+ * @author <a href="whitingjr at hotmail.com">Jeremy Whiting</a>
+ * @version $Revision: 1.1 $
+ */
+public class STMConnection implements Connection
+{
+ private final boolean autoCommit = false;
+ private boolean isActive = false;
+
+ @Override
+ public void clearWarnings() throws SQLException
+ {
+ // FIXME clearWarnings
+
+ }
+
+ @Override
+ public void close() throws SQLException
+ {
+ isActive = false;
+
+ }
+
+ @Override
+ public void commit() throws SQLException
+ {
+
+ }
+
+ @Override
+ public Array createArrayOf(String typeName, Object[] elements) throws SQLException
+ {
+ // FIXME createArrayOf
+ return null;
+ }
+
+ @Override
+ public Blob createBlob() throws SQLException
+ {
+ // FIXME createBlob
+ return null;
+ }
+
+ @Override
+ public Clob createClob() throws SQLException
+ {
+ // FIXME createClob
+ return null;
+ }
+
+ @Override
+ public NClob createNClob() throws SQLException
+ {
+ // FIXME createNClob
+ return null;
+ }
+
+ @Override
+ public SQLXML createSQLXML() throws SQLException
+ {
+ // FIXME createSQLXML
+ return null;
+ }
+
+ @Override
+ public Statement createStatement() throws SQLException
+ {
+ // FIXME createStatement
+ return null;
+ }
+
+ @Override
+ public Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException
+ {
+ // FIXME createStatement
+ return null;
+ }
+
+ @Override
+ public Statement createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability)
+ throws SQLException
+ {
+ // FIXME createStatement
+ return null;
+ }
+
+ @Override
+ public Struct createStruct(String typeName, Object[] attributes) throws SQLException
+ {
+ // FIXME createStruct
+ return null;
+ }
+
+ @Override
+ public boolean getAutoCommit() throws SQLException
+ {
+ return autoCommit;
+ }
+
+ @Override
+ public String getCatalog() throws SQLException
+ {
+ // FIXME getCatalog
+ return null;
+ }
+
+ @Override
+ public Properties getClientInfo() throws SQLException
+ {
+ // FIXME getClientInfo
+ return null;
+ }
+
+ @Override
+ public String getClientInfo(String name) throws SQLException
+ {
+ // FIXME getClientInfo
+ return null;
+ }
+
+ @Override
+ public int getHoldability() throws SQLException
+ {
+ // FIXME getHoldability
+ return 0;
+ }
+
+ @Override
+ public DatabaseMetaData getMetaData() throws SQLException
+ {
+ // FIXME getMetaData
+ return null;
+ }
+
+ @Override
+ public int getTransactionIsolation() throws SQLException
+ {
+ // FIXME getTransactionIsolation
+ return 0;
+ }
+
+ @Override
+ public Map<String, Class<?>> getTypeMap() throws SQLException
+ {
+ // FIXME getTypeMap
+ return null;
+ }
+
+ @Override
+ public SQLWarning getWarnings() throws SQLException
+ {
+ // FIXME getWarnings
+ return null;
+ }
+
+ @Override
+ public boolean isClosed() throws SQLException
+ {
+ // FIXME isClosed
+ return false;
+ }
+
+ @Override
+ public boolean isReadOnly() throws SQLException
+ {
+ // FIXME isReadOnly
+ return false;
+ }
+
+ @Override
+ public boolean isValid(int timeout) throws SQLException
+ {
+ // FIXME isValid
+ return false;
+ }
+
+ @Override
+ public String nativeSQL(String sql) throws SQLException
+ {
+ // FIXME nativeSQL
+ return null;
+ }
+
+ @Override
+ public CallableStatement prepareCall(String sql) throws SQLException
+ {
+ // FIXME prepareCall
+ return null;
+ }
+
+ @Override
+ public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency) throws SQLException
+ {
+ // FIXME prepareCall
+ return null;
+ }
+
+ @Override
+ public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency,
+ int resultSetHoldability) throws SQLException
+ {
+ // FIXME prepareCall
+ return null;
+ }
+
+ @Override
+ public PreparedStatement prepareStatement(String sql) throws SQLException
+ {
+ // FIXME prepareStatement
+ return null;
+ }
+
+ @Override
+ public PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) throws SQLException
+ {
+ // FIXME prepareStatement
+ return null;
+ }
+
+ @Override
+ public PreparedStatement prepareStatement(String sql, int[] columnIndexes) throws SQLException
+ {
+ // FIXME prepareStatement
+ return null;
+ }
+
+ @Override
+ public PreparedStatement prepareStatement(String sql, String[] columnNames) throws SQLException
+ {
+ // FIXME prepareStatement
+ return null;
+ }
+
+ @Override
+ public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency)
+ throws SQLException
+ {
+ // FIXME prepareStatement
+ return null;
+ }
+
+ @Override
+ public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency,
+ int resultSetHoldability) throws SQLException
+ {
+ // FIXME prepareStatement
+ return null;
+ }
+
+ @Override
+ public void releaseSavepoint(Savepoint savepoint) throws SQLException
+ {
+ // FIXME releaseSavepoint
+
+ }
+
+ @Override
+ public void rollback() throws SQLException
+ {
+ // FIXME rollback
+
+ }
+
+ @Override
+ public void rollback(Savepoint savepoint) throws SQLException
+ {
+ // FIXME rollback
+
+ }
+
+ @Override
+ public void setAutoCommit(boolean autoCommit) throws SQLException
+ {
+
+ }
+
+ @Override
+ public void setCatalog(String catalog) throws SQLException
+ {
+ // FIXME setCatalog
+
+ }
+
+ @Override
+ public void setClientInfo(Properties properties) throws SQLClientInfoException
+ {
+ // FIXME setClientInfo
+
+ }
+
+ @Override
+ public void setClientInfo(String name, String value) throws SQLClientInfoException
+ {
+ // FIXME setClientInfo
+
+ }
+
+ @Override
+ public void setHoldability(int holdability) throws SQLException
+ {
+ // FIXME setHoldability
+
+ }
+
+ @Override
+ public void setReadOnly(boolean readOnly) throws SQLException
+ {
+ // FIXME setReadOnly
+
+ }
+
+ @Override
+ public Savepoint setSavepoint() throws SQLException
+ {
+ // FIXME setSavepoint
+ return null;
+ }
+
+ @Override
+ public Savepoint setSavepoint(String name) throws SQLException
+ {
+ // FIXME setSavepoint
+ return null;
+ }
+
+ @Override
+ public void setTransactionIsolation(int level) throws SQLException
+ {
+ // FIXME setTransactionIsolation
+
+ }
+
+ @Override
+ public void setTypeMap(Map<String, Class<?>> map) throws SQLException
+ {
+ // FIXME setTypeMap
+
+ }
+
+ @Override
+ public boolean isWrapperFor(Class<?> iface) throws SQLException
+ {
+ // FIXME isWrapperFor
+ return false;
+ }
+
+ @Override
+ public <T> T unwrap(Class<T> iface) throws SQLException
+ {
+ // FIXME unwrap
+ return null;
+ }
+
+}
Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/BranchMapping.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/BranchMapping.java (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/BranchMapping.java 2009-07-20 19:26:21 UTC (rev 28252)
@@ -0,0 +1,50 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.persistence.xa;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+import javax.transaction.xa.Xid;
+
+public class BranchMapping
+{
+ private final Xid xidentity ;
+ private final STMXAConnectionImpl xaConnection;
+ private AtomicInteger resourceStatus = new AtomicInteger( ResourceStatus.NOT_STARTED);
+
+ public BranchMapping(Xid xid, STMXAConnectionImpl connection)
+ {
+ this.xidentity = xid;
+ this.xaConnection = connection;
+ resourceStatus.set(ResourceStatus.NOT_STARTED);
+ }
+ public BranchMapping(Xid xid, STMXAConnectionImpl connection, int status)
+ {
+ this.xidentity = xid;
+ this.xaConnection = connection;
+ resourceStatus.set(status);
+ }
+
+ public Xid getXidentity()
+ {
+ return xidentity;
+ }
+
+ public STMXAConnectionImpl getXaConnection()
+ {
+ return xaConnection;
+ }
+ public int getStatus()
+ {
+ return resourceStatus.get();
+ }
+ public void changeStatus(int status)
+ {
+ resourceStatus.set(status );
+ }
+
+}
Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/ResourceStatus.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/ResourceStatus.java (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/ResourceStatus.java 2009-07-20 19:26:21 UTC (rev 28252)
@@ -0,0 +1,14 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.persistence.xa;
+
+public class ResourceStatus
+{
+ public static final int NOT_STARTED = 1;
+ public static final int ACTIVE = 2;
+ public static final int SUSPENDED = 3;
+}
Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/STMXAConnectionImpl.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/STMXAConnectionImpl.java 2009-07-20 19:09:06 UTC (rev 28251)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/STMXAConnectionImpl.java 2009-07-20 19:26:21 UTC (rev 28252)
@@ -8,40 +8,56 @@
import java.sql.Connection;
import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
import javax.sql.ConnectionEventListener;
import javax.sql.StatementEventListener;
import javax.sql.XAConnection;
import javax.transaction.xa.XAResource;
+import uk.ac.ncl.sdia.a8905943.persistence.jdbc.STMConnection;
import uk.ac.ncl.sdia.a8905943.stm.STM;
+/**
+ * This object is responsible for interfacing with the transaction manager
+ * to provide a XAResource reference to enable a transaction (using this connection)
+ * to operate in a distributed transaction.
+ * When used in an application server a number of connection objects are obtained
+ * and pooled by server. The server then allocates a connection to an EntityManager
+ * for unit of work performed in a transaction.
+ * There is a 1-to-1 association between connection and underlying unit of work
+ * transaction.
+ *
+ * @author <a href="whitingjr at hotmail.com">Jeremy Whiting</a>
+ * @version $Revision: 1.1 $
+ */
public class STMXAConnectionImpl implements XAConnection
{
- private final STM stm ;
+ //TODO:jrw decide where exactly this STM reference is going to be held.
+ private final List<ConnectionEventListener> listeners = new ArrayList<ConnectionEventListener>();
+ private STMXAResource xaResource ;
+ private volatile boolean isActive = false;
+ private STMXADatasourceImpl dataSource ;
+ /**
+ * This method returns a XAResource for this particular connection. This method is called
+ * by the TransactionManager.
+ */
@Override
public XAResource getXAResource() throws SQLException
{
- // FIXME getXAResource
- return null;
+ return xaResource;
}
@Override
public void addConnectionEventListener(ConnectionEventListener listener)
{
- // FIXME addConnectionEventListener
-
+ this.listeners.add(listener);
}
+
@Override
- public void addStatementEventListener(StatementEventListener listener)
- {
- // FIXME addStatementEventListener
-
- }
-
- @Override
public void close() throws SQLException
{
// FIXME close
@@ -51,28 +67,40 @@
@Override
public Connection getConnection() throws SQLException
{
- // FIXME getConnection
- return null;
+ return new STMConnection();
}
@Override
public void removeConnectionEventListener(ConnectionEventListener listener)
{
- // FIXME removeConnectionEventListener
+ listeners.remove(listener);
+ }
+
+ public STMXAConnectionImpl(STMXADatasourceImpl datasource, STM stransactionalm)
+ {
+ this.xaResource = new STMXAResource(this);
+ this.dataSource = datasource;
}
@Override
+ public void addStatementEventListener(StatementEventListener listener)
+ {
+ throw new RuntimeException("STMXAConnectionImpl.addStatementEventListener(StatementEventListener) not supported.");
+ }
+
+ @Override
public void removeStatementEventListener(StatementEventListener listener)
{
- // FIXME removeStatementEventListener
-
+ throw new RuntimeException("STMXAConnectionImpl.removeStatementEventListener(StatementEventListener)");
}
-
- public STMXAConnectionImpl(STM stransactionalm)
+ STMXADatasourceImpl getDataSource()
{
- this.stm = stransactionalm;
+ return this.dataSource;
+ }
+ public boolean isActive()
+ {
+ return isActive;
}
-
}
Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/STMXADatasourceImpl.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/STMXADatasourceImpl.java 2009-07-20 19:09:06 UTC (rev 28251)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/STMXADatasourceImpl.java 2009-07-20 19:26:21 UTC (rev 28252)
@@ -19,6 +19,7 @@
import javax.sql.XADataSource;
import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
import uk.ac.ncl.sdia.a8905943.stm.STM;
@@ -29,6 +30,8 @@
private static final String SERVER_NAME = "serverName";
private static final String DATABASE_NAME = "databaseName";
private static final ConcurrentHashMap<String, STM> stmDatabases = new ConcurrentHashMap<String, STM>();
+ private static final Logger logger = Logger.getLogger(STMXADatasourceImpl.class );
+ private static final String INFO_GET_CONNECTION = "The XA Datasource is providing a XAConnection ";
/** The serialVersionUID */
private static final long serialVersionUID = 2341586268344164513L;
@@ -36,10 +39,14 @@
@Override
public XAConnection getXAConnection() throws SQLException
{
+ if (logger.isDebugEnabled())
+ {
+ logger.info(INFO_GET_CONNECTION);
+ }
STMXAConnectionImpl returnValue = null;
if (stmDatabases.contains(getDatabaseName()))
{
- returnValue = new STMXAConnectionImpl(stmDatabases.get(getDatabaseName()));
+ returnValue = new STMXAConnectionImpl(this, stmDatabases.get(getDatabaseName()));
}
else
{// the stm does not exist create an instance and attempt to put it into the map
@@ -47,11 +54,11 @@
STM concurrentSTM = stmDatabases.putIfAbsent(getDatabaseName(), newSTM);
if (null == concurrentSTM)
{// the database has been created by this thread
- returnValue = new STMXAConnectionImpl( newSTM);
+ returnValue = new STMXAConnectionImpl(this, newSTM);
}
else
{// another thread has beaten us, use it's instance instead
- returnValue = new STMXAConnectionImpl (concurrentSTM);
+ returnValue = new STMXAConnectionImpl (this, concurrentSTM);
}
}
return returnValue;
@@ -69,7 +76,6 @@
@Override
public PrintWriter getLogWriter() throws SQLException
{
- // FIXME getLogWriter
return null;
}
@@ -94,15 +100,8 @@
}
- @Override
- public Reference getReference() throws NamingException
- {
- Reference returnValue = new Reference(this.getClass().getName(), "", null);
- returnValue.add(new StringRefAddr(SERVER_NAME, getServerName()));
- returnValue.add(new StringRefAddr(DATABASE_NAME, getDatabaseName()));
- return returnValue;
- }
+
public String getServerName()
{
return serverName;
Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/STMXAResource.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/STMXAResource.java (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/STMXAResource.java 2009-07-20 19:26:21 UTC (rev 28252)
@@ -0,0 +1,130 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.persistence.xa;
+
+import java.util.concurrent.ConcurrentHashMap;
+
+import javax.transaction.xa.XAException;
+import javax.transaction.xa.XAResource;
+import javax.transaction.xa.Xid;
+
+/**
+ * This object delegates work and then maps application specific exceptions
+ * to XA Spec specific exceptions.
+ * This object also checks requested operations are valid.
+ *
+ * @author <a href="whitingjr at hotmail.com">Jeremy Whiting</a>
+ * @version $Revision: 1.1 $
+ */
+public class STMXAResource implements XAResource
+{
+ // access to the shared resource manager is synchronized
+ private static final ConcurrentHashMap<String, XAResourceManager> resourceManagers = new ConcurrentHashMap<String, XAResourceManager>();
+ private final STMXAConnectionImpl xaConnection;
+
+ @Override
+ public void commit(Xid arg0, boolean arg1) throws XAException
+ {
+
+ }
+
+ @Override
+ public void end(Xid arg0, int arg1) throws XAException
+ {
+ // FIXME end
+
+ }
+
+ @Override
+ public void forget(Xid arg0) throws XAException
+ {
+ // FIXME forget
+
+ }
+
+ @Override
+ public int getTransactionTimeout() throws XAException
+ {
+ // FIXME getTransactionTimeout
+ return 0;
+ }
+
+ @Override
+ public boolean isSameRM(XAResource arg0) throws XAException
+ {
+ // FIXME isSameRM
+ return false;
+ }
+
+ @Override
+ public int prepare(Xid arg0) throws XAException
+ {
+ // FIXME prepare
+ return 0;
+ }
+
+ @Override
+ public Xid[] recover(int arg0) throws XAException
+ {
+ if (true)
+ {
+ throw new UnsupportedOperationException("STMXAResource does not support recover(int).");
+ }
+ return null;
+ }
+
+ @Override
+ public void rollback(Xid arg0) throws XAException
+ {
+ // pass instruction through to STM system to rollback any prepared resources
+ }
+
+ @Override
+ public boolean setTransactionTimeout(int arg0) throws XAException
+ {
+ // FIXME setTransactionTimeout
+ return false;
+ }
+
+ /**
+ * Associate the thread of control with the transaction branch.
+ */
+ @Override
+ public void start(Xid xId, int xFlag) throws XAException
+ {
+ if (this.xaConnection.isActive())
+ {
+ this.resourceManagers.get(this.xaConnection.getDataSource().getDatabaseName()).start(this.xaConnection, this, xId, xFlag);
+ }
+ else
+ {
+ //TODO: jrw throw XAException
+ }
+
+ }
+
+ public STMXAResource(STMXAConnectionImpl connection)
+ {
+ this.xaConnection = connection;
+ resourceManagers.putIfAbsent(connection.getDataSource().getDatabaseName(), new XAResourceManager()) ;
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ // FIXME equals
+ return super.equals(obj);
+ }
+
+ @Override
+ public int hashCode()
+ {
+ // FIXME hashCode
+ return super.hashCode();
+ }
+
+}
Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/XAResourceManager.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/XAResourceManager.java (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/XAResourceManager.java 2009-07-20 19:26:21 UTC (rev 28252)
@@ -0,0 +1,32 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.persistence.xa;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.transaction.xa.XAException;
+import javax.transaction.xa.Xid;
+
+/**
+ * The purpose of this object is to handle the work carried out XAResources
+ * and any of the enlisted work.
+ *
+ * @author <a href="whitingjr at hotmail.com">Jeremy Whiting</a>
+ * @version $Revision: 1.1 $
+ */
+public class XAResourceManager
+{
+ private final Map<Xid, BranchMapping> xIdmappings = new HashMap<Xid, BranchMapping> ();
+
+
+ public synchronized void start(STMXAConnectionImpl connection, STMXAResource resource, Xid xId, int xFlag) throws XAException
+ {
+ this.xIdmappings.put(xId, new BranchMapping(xId, connection, ResourceStatus.ACTIVE));
+ }
+
+}
Added: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/datasource/factory/DataSourceFactory.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/datasource/factory/DataSourceFactory.java (rev 0)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/main/java/uk/ac/ncl/sdia/a8905943/persistence/xa/datasource/factory/DataSourceFactory.java 2009-07-20 19:26:21 UTC (rev 28252)
@@ -0,0 +1,38 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package uk.ac.ncl.sdia.a8905943.persistence.xa.datasource.factory;
+
+import java.sql.Ref;
+import java.util.Hashtable;
+
+import javax.naming.Context;
+import javax.naming.Name;
+import javax.naming.Reference;
+import javax.naming.spi.ObjectFactory;
+
+import uk.ac.ncl.sdia.a8905943.persistence.xa.STMXADatasourceImpl;
+
+public class DataSourceFactory implements ObjectFactory
+{
+
+ @Override
+ public Object getObjectInstance(Object object, Name name, Context nameCtx, Hashtable<?, ?> environment)
+ throws Exception
+ {
+ STMXADatasourceImpl returnValue = null;
+ Reference reference = (Reference)object;
+ if (STMXADatasourceImpl.class.getCanonicalName().equals( reference.getClassName()))
+ {
+ returnValue = new STMXADatasourceImpl();
+ //TODO: jrw complete
+ returnValue.setDatabaseName("");
+ }
+
+ return returnValue;
+ }
+
+}
Modified: labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/entitymanager/JUnitTestSTMEntityManagerFactoryImpl.java
===================================================================
--- labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/entitymanager/JUnitTestSTMEntityManagerFactoryImpl.java 2009-07-20 19:09:06 UTC (rev 28251)
+++ labs/jbosstm/workspace/whitingjr/trunk/MVCCSampleSTM/src/test/java/uk/ac/ncl/sdia/a8905943/entitymanager/JUnitTestSTMEntityManagerFactoryImpl.java 2009-07-20 19:26:21 UTC (rev 28252)
@@ -30,8 +30,7 @@
@Before
public void setUp()
{
- factory = new STMEntityManagerFactoryImpl();
- factory.initialise( "banking", new STMPersistenceContext());
+ factory = new STMEntityManagerFactoryImpl("banking", new STMPersistenceContext());
}
@After
public void tearDown()
More information about the jboss-svn-commits
mailing list