[jboss-svn-commits] JBL Code SVN: r37217 - in labs/jbosstm/trunk/ArjunaJTA/quickstarts/integration: src/main/resources/META-INF and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Jul 4 05:04:21 EDT 2011


Author: tomjenkinson
Date: 2011-07-04 05:04:21 -0400 (Mon, 04 Jul 2011)
New Revision: 37217

Added:
   labs/jbosstm/trunk/ArjunaJTA/quickstarts/integration/src/main/resources/META-INF/MANIFEST.MF
Modified:
   labs/jbosstm/trunk/ArjunaJTA/quickstarts/integration/pom.xml
   labs/jbosstm/trunk/ArjunaJTA/quickstarts/integration/src/test/java/TestBusinessLogic.java
Log:
JBTM-854 update to include a TXOJ and a manifest to include the org.jboss.jts module. Also set the arquillian manifest in code for the test

Modified: labs/jbosstm/trunk/ArjunaJTA/quickstarts/integration/pom.xml
===================================================================
--- labs/jbosstm/trunk/ArjunaJTA/quickstarts/integration/pom.xml	2011-07-03 19:42:20 UTC (rev 37216)
+++ labs/jbosstm/trunk/ArjunaJTA/quickstarts/integration/pom.xml	2011-07-04 09:04:21 UTC (rev 37217)
@@ -35,6 +35,9 @@
         <configuration>
           <!-- Java EE 6 doesn't require web.xml, Maven needs to catch up! -->
           <failOnMissingWebXml>false</failOnMissingWebXml>
+          <archive>
+            <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
+          </archive>
         </configuration>
       </plugin>
     </plugins>
@@ -50,7 +53,7 @@
       <type>pom</type>
       <scope>provided</scope>
     </dependency>
-    
+
     <dependency>
       <groupId>org.jboss.ejb3</groupId>
       <artifactId>jboss-ejb3-ext-api</artifactId>
@@ -64,6 +67,20 @@
       </exclusions>
     </dependency>
 
+    <!-- For the txoj -->
+    <dependency>
+      <groupId>org.jboss.jbossts</groupId>
+      <artifactId>jbossjta</artifactId>
+      <version>4.15.1.Final</version>
+      <scope>provided</scope>
+      <exclusions>
+        <exclusion>
+          <groupId>org.jboss.logging</groupId>
+          <artifactId>jboss-logging-spi</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+
     <!-- We will provide some tests to check the quickstart deploys ok -->
     <dependency>
       <groupId>junit</groupId>

Added: labs/jbosstm/trunk/ArjunaJTA/quickstarts/integration/src/main/resources/META-INF/MANIFEST.MF
===================================================================
--- labs/jbosstm/trunk/ArjunaJTA/quickstarts/integration/src/main/resources/META-INF/MANIFEST.MF	                        (rev 0)
+++ labs/jbosstm/trunk/ArjunaJTA/quickstarts/integration/src/main/resources/META-INF/MANIFEST.MF	2011-07-04 09:04:21 UTC (rev 37217)
@@ -0,0 +1,2 @@
+Dependencies: org.jboss.jts
+

Modified: labs/jbosstm/trunk/ArjunaJTA/quickstarts/integration/src/test/java/TestBusinessLogic.java
===================================================================
--- labs/jbosstm/trunk/ArjunaJTA/quickstarts/integration/src/test/java/TestBusinessLogic.java	2011-07-03 19:42:20 UTC (rev 37216)
+++ labs/jbosstm/trunk/ArjunaJTA/quickstarts/integration/src/test/java/TestBusinessLogic.java	2011-07-04 09:04:21 UTC (rev 37217)
@@ -18,8 +18,11 @@
  * (C) 2011,
  * @author JBoss, by Red Hat.
  */
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
+import java.io.IOException;
+
 import javax.ejb.EJB;
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
@@ -35,13 +38,26 @@
 import org.jboss.narayana.quickstarts.ejb.Customer;
 import org.jboss.narayana.quickstarts.ejb.SimpleEJB;
 import org.jboss.narayana.quickstarts.ejb.SimpleEJBImpl;
-import org.jboss.narayana.quickstarts.servlet.SimpleServlet;
+import org.jboss.shrinkwrap.api.ArchivePaths;
 import org.jboss.shrinkwrap.api.ShrinkWrap;
 import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.asset.StringAsset;
 import org.jboss.shrinkwrap.api.spec.WebArchive;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import com.arjuna.ats.arjuna.AtomicAction;
+import com.arjuna.ats.arjuna.ObjectModel;
+import com.arjuna.ats.arjuna.ObjectType;
+import com.arjuna.ats.arjuna.common.Uid;
+import com.arjuna.ats.arjuna.coordinator.ActionStatus;
+import com.arjuna.ats.arjuna.state.InputObjectState;
+import com.arjuna.ats.arjuna.state.OutputObjectState;
+import com.arjuna.ats.txoj.Lock;
+import com.arjuna.ats.txoj.LockManager;
+import com.arjuna.ats.txoj.LockMode;
+import com.arjuna.ats.txoj.LockResult;
+
 @RunWith(Arquillian.class)
 public class TestBusinessLogic {
 	@EJB(lookup = "java:module/SimpleEJBImpl")
@@ -49,13 +65,23 @@
 
 	@Deployment
 	public static WebArchive createDeployment() {
-		return ShrinkWrap
+		WebArchive archive = ShrinkWrap
 				.create(WebArchive.class, "test.war")
 				.addClasses(SimpleEJB.class, SimpleEJBImpl.class,
 						Customer.class)
+				.addClasses(AtomicObject.class)
 				.addAsResource("META-INF/persistence.xml",
 						"META-INF/persistence.xml")
 				.addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml");
+		archive.delete(ArchivePaths.create("META-INF/MANIFEST.MF"));
+
+		// Need to make sure we add the arquillian-service and msc as a
+		// dependency
+		final String ManifestMF = "Manifest-Version: 1.0\n"
+				+ "Dependencies: org.jboss.modules,deployment.arquillian-service,org.jboss.msc,org.jboss.jts\n";
+		archive.setManifest(new StringAsset(ManifestMF));
+
+		return archive;
 	}
 
 	@Test
@@ -84,4 +110,231 @@
 
 		assertTrue(firstList.length() < secondList.length());
 	}
-}
+
+	@Test
+	public void testTxoj() throws Exception {
+		UserTransaction tx = (UserTransaction) new InitialContext()
+				.lookup("java:comp/UserTransaction");
+
+		AtomicObject foo = new AtomicObject();
+		Uid u = foo.get_uid();
+
+		tx.begin();
+
+		foo.set(2);
+
+		tx.commit();
+
+		int finalVal = foo.get();
+
+		assertEquals(2, finalVal);
+
+		foo = new AtomicObject(u);
+
+		tx.begin();
+
+		foo.set(4);
+
+		tx.commit();
+
+		finalVal = foo.get();
+
+		assertEquals(4, finalVal);
+
+		foo = new AtomicObject(u);
+
+		finalVal = foo.get();
+
+		assertEquals(4, finalVal);
+
+		tx.begin();
+
+		foo.set(10);
+
+		tx.rollback();
+
+		finalVal = foo.get();
+
+		assertEquals(4, finalVal);
+	}
+
+	public class AtomicObject extends LockManager {
+
+		private int state;
+
+		private boolean printDebug;
+		private int retry = 0;
+
+		public AtomicObject() {
+			this(ObjectModel.SINGLE);
+		}
+
+		public AtomicObject(int om) {
+			super(ObjectType.ANDPERSISTENT, om);
+
+			state = 0;
+
+			AtomicAction A = new AtomicAction();
+
+			A.begin();
+
+			if (setlock(new Lock(LockMode.WRITE), 0) == LockResult.GRANTED) {
+				if (A.commit() == ActionStatus.COMMITTED)
+					System.out
+							.println("Created persistent object " + get_uid());
+				else
+					System.out.println("Action.commit error.");
+			} else {
+				A.abort();
+
+				System.out.println("setlock error.");
+			}
+
+			String debug = System.getProperty("DEBUG", null);
+
+			if (debug != null)
+				printDebug = true;
+		}
+
+		public AtomicObject(Uid u) {
+			this(u, ObjectModel.SINGLE);
+		}
+
+		public AtomicObject(Uid u, int om) {
+			super(u, ObjectType.ANDPERSISTENT, om);
+
+			state = -1;
+
+			AtomicAction A = new AtomicAction();
+
+			A.begin();
+
+			if (setlock(new Lock(LockMode.READ), 0) == LockResult.GRANTED) {
+				System.out.println("Recreated object " + u);
+				A.commit();
+			} else {
+				System.out.println("Error recreating object " + u);
+				A.abort();
+			}
+
+			String debug = System.getProperty("DEBUG", null);
+
+			if (debug != null)
+				printDebug = true;
+		}
+
+		public int getRetry() {
+			return retry;
+		}
+
+		public void setRetry(int t) {
+			retry = t;
+		}
+
+		public void terminate() {
+			super.terminate();
+		}
+
+		public void incr(int value) throws Exception {
+			AtomicAction A = new AtomicAction();
+
+			A.begin();
+
+			if (setlock(new Lock(LockMode.WRITE), retry) == LockResult.GRANTED) {
+				state += value;
+
+				if (A.commit() != ActionStatus.COMMITTED)
+					throw new Exception("Action commit error.");
+				else
+					return;
+			} else {
+				if (printDebug)
+					System.out.println("Error - could not set write lock.");
+			}
+
+			A.abort();
+
+			throw new Exception("Write lock error.");
+		}
+
+		public void set(int value) throws Exception {
+			AtomicAction A = new AtomicAction();
+
+			A.begin();
+
+			if (setlock(new Lock(LockMode.WRITE), retry) == LockResult.GRANTED) {
+				state = value;
+
+				if (A.commit() != ActionStatus.COMMITTED)
+					throw new Exception("Action commit error.");
+				else
+					return;
+			} else {
+				if (printDebug)
+					System.out.println("Error - could not set write lock.");
+			}
+
+			A.abort();
+
+			throw new Exception("Write lock error.");
+		}
+
+		public int get() throws Exception {
+			AtomicAction A = new AtomicAction();
+			int value = -1;
+
+			A.begin();
+
+			if (setlock(new Lock(LockMode.READ), retry) == LockResult.GRANTED) {
+				value = state;
+
+				if (A.commit() == ActionStatus.COMMITTED)
+					return value;
+				else
+					throw new Exception("Action commit error.");
+			} else {
+				if (printDebug)
+					System.out.println("Error - could not set read lock.");
+			}
+
+			A.abort();
+
+			throw new Exception("Read lock error.");
+		}
+
+		public boolean save_state(OutputObjectState os, int ot) {
+			boolean result = super.save_state(os, ot);
+
+			if (!result)
+				return false;
+
+			try {
+				os.packInt(state);
+			} catch (IOException e) {
+				result = false;
+			}
+
+			return result;
+		}
+
+		public boolean restore_state(InputObjectState os, int ot) {
+			boolean result = super.restore_state(os, ot);
+
+			if (!result)
+				return false;
+
+			try {
+				state = os.unpackInt();
+			} catch (IOException e) {
+				result = false;
+			}
+
+			return result;
+		}
+
+		public String type() {
+			return "/StateManager/LockManager/AtomicObject";
+		}
+	}
+
+}
\ No newline at end of file



More information about the jboss-svn-commits mailing list