[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