[jboss-svn-commits] JBL Code SVN: r37463 - in labs/jbosstm/trunk/rest-tx/quickstarts/demo: src/main and 3 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Sep 13 10:31:13 EDT 2011


Author: tomjenkinson
Date: 2011-09-13 10:31:13 -0400 (Tue, 13 Sep 2011)
New Revision: 37463

Added:
   labs/jbosstm/trunk/rest-tx/quickstarts/demo/src/main/java/quickstart/TMApplication.java
   labs/jbosstm/trunk/rest-tx/quickstarts/demo/src/main/webapp/
   labs/jbosstm/trunk/rest-tx/quickstarts/demo/src/main/webapp/WEB-INF/
   labs/jbosstm/trunk/rest-tx/quickstarts/demo/src/main/webapp/WEB-INF/web.xml
Modified:
   labs/jbosstm/trunk/rest-tx/quickstarts/demo/
   labs/jbosstm/trunk/rest-tx/quickstarts/demo/demo.txt
   labs/jbosstm/trunk/rest-tx/quickstarts/demo/pom.xml
   labs/jbosstm/trunk/rest-tx/quickstarts/demo/src/main/java/quickstart/TransactionAwareResource.java
   labs/jbosstm/trunk/rest-tx/quickstarts/demo/src/main/java/quickstart/Work.java
Log:
updated to move the participant to work on openshift


Property changes on: labs/jbosstm/trunk/rest-tx/quickstarts/demo
___________________________________________________________________
Added: svn:ignore
   + target


Modified: labs/jbosstm/trunk/rest-tx/quickstarts/demo/demo.txt
===================================================================
--- labs/jbosstm/trunk/rest-tx/quickstarts/demo/demo.txt	2011-09-13 14:26:50 UTC (rev 37462)
+++ labs/jbosstm/trunk/rest-tx/quickstarts/demo/demo.txt	2011-09-13 14:31:13 UTC (rev 37463)
@@ -80,7 +80,7 @@
 	rhc-create-domain -n mm2 -l mmusgrov+3 at redhat.com
 	rhc-create-app -a rhcdemo -t jbossas-7.0
 
-pulishes the app at http://rhcdemo-mm2.dev.rhcloud.com/
+pulishes the app at http://$TRANSACTION_MANAGER_HOST/
 
 	cd rhcdemo
 
@@ -92,9 +92,12 @@
 
 Now the application will be available at:
 
+The hostname where the transaction-manager is deployed will be referred to as: $TRANSACTION_MANAGER_HOST
+The hostname where the counter rest participant is deployed will be referred to as $PARTICIPANT_HOST
+
 TYPE into browser:
-	http://rhcdemo-mm2.dev.rhcloud.com
-	http://rhcdemo-mm2.dev.rhcloud.com/rest-tx/tx/transaction-manager
+	http://$TRANSACTION_MANAGER_HOST/rest-tx/tx/transaction-manager
+	http://$PARTICIPANT_HOST/service/query
 
 Instead of using a browser/javascript to start and stop transactions we will employ a Ruby client:
 
@@ -103,42 +106,43 @@
 
 cd /home/mmusgrov/source/jbosstm/trunk/rest-tx/quickstarts/demo
 # LIST TRANSACTIONS
-ruby client.rb -p 1 -v Get -a "http://rhcdemo-mm2.dev.rhcloud.com/rest-tx/tx/transaction-manager"
+ruby client.rb -v Get -a "http://$TRANSACTION_MANAGER_HOST/rest-tx/tx/transaction-manager"
 # START TRANSACTION
-ruby client.rb -p 1 -v Post -a "http://rhcdemo-mm2.dev.rhcloud.com/rest-tx/tx/transaction-manager" -b "timeout=0"
+ruby client.rb -v Post -a "http://$TRANSACTION_MANAGER_HOST/rest-tx/tx/transaction-manager" -b "timeout=0"
+record the value of endUrl as you need it below
 # COMMIT TRANSACTION
-ruby client.rb -p 1 -v Put -a "" -b "txStatus=TransactionCommitted"
+ruby client.rb -v Put -a "<VALUE OF endUrl: FROM COMMAND ABOVE>" -b "txStatus=TransactionCommitted"
 # LIST TRANSACTIONS
-ruby client.rb -p 1 -v Get -a "http://rhcdemo-mm2.dev.rhcloud.com/rest-tx/tx/transaction-manager"
+ruby client.rb -v Get -a "http://$TRANSACTION_MANAGER_HOST/rest-tx/tx/transaction-manager"
 
 Repeat steps 7 to 10:
  7. (increment both counters),
-	http://localhost:8080/service?counter=0
-	http://localhost:8080/service?counter=1
+	http://$PARTICIPANT_HOST/service?counter=0
+	http://$PARTICIPANT_HOST/service?counter=1
 
 and show both counters were incremented:
 
-	http://localhost:8080/service/query
+	http://$PARTICIPANT_HOST/service/query
 
  8. Now transactionally increment both counters failing the second request:
 	# START TRANSACTION via the COMMAND LINE
-	ruby client.rb -p 1 -v Post -a "http://rhcdemo-mm2.dev.rhcloud.com/rest-tx/tx/transaction-manager" -b "timeout=0"
+	ruby client.rb -v Post -a "http://$TRANSACTION_MANAGER_HOST/rest-tx/tx/transaction-manager" -b "timeout=0"
 
 	# enlist 2 participants via the BROWSER
-	# have to use the externally facing web address
-	http://gondolin.ncl.ac.uk:9188/service?counter=0&enlistURL=
-	http://gondolin.ncl.ac.uk:9188/service?counter=1&enlistURL=
+	# PARTICIPANT_HOST has to be an externally facing web address, e.g. gondolin.ncl.ac.uk:9188
+	http://$PARTICIPANT_HOST/service?counter=0&enlistURL=<VALUE OF enlistUrl: FROM COMMAND ABOVE>
+	http://$PARTICIPANT_HOST/service?counter=1&enlistURL=<VALUE OF enlistUrl: FROM COMMAND ABOVE>
 
  9. Tell tell the service to halt the VM before committing the second work load:
 
-	http://localhost:8080/service?failWid=9
+	http://$PARTICIPANT_HOST/service?failWid=9
 
  10. Commit the transaction
 
-	ruby client.rb -p 1 -v Put -a "" -b "txStatus=TransactionCommitted"
+	ruby client.rb -v Put -a "<VALUE OF endUrl: FROM STEP 8 ABOVE>" -b "txStatus=TransactionCommitted"
 
  11. Restart the service (it will have halted during commit of the 2nd work load) and quickly show tha
-	http://localhost:8080/service/query
+	http://$PARTICIPANT_HOST/service/query
 	shows counter 1 hasn't incremented yet.
 
 	wait for recovery to kick in and reissue the counter query

Modified: labs/jbosstm/trunk/rest-tx/quickstarts/demo/pom.xml
===================================================================
--- labs/jbosstm/trunk/rest-tx/quickstarts/demo/pom.xml	2011-09-13 14:26:50 UTC (rev 37462)
+++ labs/jbosstm/trunk/rest-tx/quickstarts/demo/pom.xml	2011-09-13 14:31:13 UTC (rev 37463)
@@ -1,58 +1,93 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>quickstarts</artifactId>
-        <groupId>org.jboss.narayana.rts.quickstarts</groupId>
-        <version>5.0.0.M2-SNAPSHOT</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>demo</artifactId>
-    <name>RESTful Atomic Transaction Quickstart: Demonstration of Participant Service with Recovery</name>
-    <description>Example of how a web service can recover from failures during transaction completion</description>
-
-    <repositories>
-        <!-- Jersey -->
-        <repository>
-            <id>maven2-repository.dev.java.net</id>
-            <name>Java.net Repository for Maven</name>
-            <url>http://download.java.net/maven/2/</url>
-            <layout>default</layout>
-        </repository>
-        <!-- end Jersey -->
-    </repositories>
-
-    <dependencies>
-
-        <!-- the implementation of REST Atomic Transactions -->
-        <dependency>
-            <groupId>org.jboss.narayana.rts</groupId>
-            <artifactId>rest-tx-api</artifactId>
-            <version>5.0.0.M2-SNAPSHOT</version>
-        </dependency>
-
-        <!-- Jersey container for running participant services -->
-        <dependency>
-            <groupId>com.sun.jersey</groupId>
-            <artifactId>jersey-server</artifactId>
-            <version>1.5-SNAPSHOT</version>
-        </dependency>
-
-        <dependency>
-            <groupId>com.sun.jersey</groupId>
-            <artifactId>jersey-client</artifactId>
-            <version>1.5-SNAPSHOT</version>
-        </dependency>
-
-
-        <dependency>
-            <groupId>com.sun.grizzly</groupId>
-            <artifactId>grizzly-servlet-webserver</artifactId>
-            <version>1.9.18-i</version>
-        </dependency>
-        <!-- end Jersey -->
-    </dependencies>
-
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <parent>
+    <artifactId>quickstarts</artifactId>
+    <groupId>org.jboss.narayana.rts.quickstarts</groupId>
+    <version>5.0.0.M2-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <packaging>war</packaging>
+  <artifactId>demo</artifactId>
+  <name>RESTful Atomic Transaction Quickstart: Demonstration of Participant Service with Recovery</name>
+  <description>Example of how a web service can recover from failures during transaction completion</description>
+  <repositories>
+    <!-- Jersey -->
+    <repository>
+      <id>maven2-repository.dev.java.net</id>
+      <name>Java.net Repository for Maven</name>
+      <url>http://download.java.net/maven/2/</url>
+      <layout>default</layout>
+    </repository>
+    <!-- end Jersey -->
+  </repositories>
+  <pluginRepositories>
+    <pluginRepository>
+      <id>jboss-public-repository-group</id>
+      <name>JBoss Public Maven Repository Group</name>
+      <url>http://repository.jboss.org/nexus/content/groups/public-jboss/</url>
+      <layout>default</layout>
+      <releases>
+        <enabled>true</enabled>
+        <updatePolicy>never</updatePolicy>
+      </releases>
+      <snapshots>
+        <enabled>true</enabled>
+        <updatePolicy>never</updatePolicy>
+      </snapshots>
+    </pluginRepository>
+  </pluginRepositories>
+  <build>
+    <finalName>ROOT</finalName>
+    <plugins>
+      <!-- JBoss AS plugin to deploy war as a convenience -->
+      <plugin>
+        <groupId>org.jboss.as.plugins</groupId>
+        <artifactId>jboss-as-maven-plugin</artifactId>
+        <version>7.0.0.CR1</version>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-war-plugin</artifactId>
+        <version>2.1.1</version>
+        <configuration>
+          <!-- Java EE 6 doesn't require web.xml, Maven needs to catch up! -->
+          <!--failOnMissingWebXml>false</failOnMissingWebXml-->
+          <!--<archive>
+            <manifestEntries>
+              <Dependencies>org.jboss.jts</Dependencies>
+            </manifestEntries>
+          </archive>-->
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+  <dependencies>
+    <!-- the implementation of REST Atomic Transactions -->
+    <dependency>
+      <groupId>org.jboss.narayana.rts</groupId>
+      <artifactId>rest-tx-api</artifactId>
+      <version>5.0.0.M2-SNAPSHOT</version>
+<!--      <scope>provided</scope>-->
+    </dependency>
+    <!-- Jersey container for running participant services -->
+    <dependency>
+      <groupId>com.sun.jersey</groupId>
+      <artifactId>jersey-server</artifactId>
+      <version>1.5-SNAPSHOT</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.sun.jersey</groupId>
+      <artifactId>jersey-client</artifactId>
+      <version>1.5-SNAPSHOT</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.sun.grizzly</groupId>
+      <artifactId>grizzly-servlet-webserver</artifactId>
+      <version>1.9.18-i</version>
+      <scope>provided</scope>
+    </dependency>
+    <!-- end Jersey -->
+  </dependencies>
 </project>

Added: labs/jbosstm/trunk/rest-tx/quickstarts/demo/src/main/java/quickstart/TMApplication.java
===================================================================
--- labs/jbosstm/trunk/rest-tx/quickstarts/demo/src/main/java/quickstart/TMApplication.java	                        (rev 0)
+++ labs/jbosstm/trunk/rest-tx/quickstarts/demo/src/main/java/quickstart/TMApplication.java	2011-09-13 14:31:13 UTC (rev 37463)
@@ -0,0 +1,74 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * (C) 2010
+ * @author JBoss Inc.
+ */
+package quickstart;
+
+
+import javax.ws.rs.core.Application;
+import java.util.Set;
+import java.util.HashSet;
+import org.jboss.logging.Logger;
+
+import org.jboss.jbossts.star.provider.NotFoundMapper;
+import org.jboss.jbossts.star.resource.RESTRecord;
+import org.jboss.jbossts.star.provider.TMUnavailableMapper;
+import org.jboss.jbossts.star.provider.TransactionStatusMapper;
+import org.jboss.jbossts.star.provider.HttpResponseMapper;
+
+public class TMApplication extends Application
+{
+    private final static Logger log = Logger.getLogger(TMApplication.class);
+
+    HashSet<Object> singletons = new HashSet<Object>();
+    Set<Class<?>> classes = new HashSet<Class<?>> ();
+
+    public TMApplication()
+    {
+        for (Class cl : resourceClasses)
+            classes.add(cl);
+
+        for (Class cl : mappers)
+            classes.add(cl);
+
+    }
+
+    @Override
+    public Set<Class<?>> getClasses()
+    {
+        return classes;
+    }
+
+    @Override
+    public Set<Object> getSingletons()
+    {
+        return singletons;
+    }
+
+    private static Class<?>[] mappers = {
+    };
+    
+    private static Class[] resourceClasses = {
+            TransactionAwareResource.class,
+    };
+
+    private static Object[] resources = {
+            new TransactionAwareResource(),
+    };
+}


Property changes on: labs/jbosstm/trunk/rest-tx/quickstarts/demo/src/main/java/quickstart/TMApplication.java
___________________________________________________________________
Added: svn:executable
   + *

Modified: labs/jbosstm/trunk/rest-tx/quickstarts/demo/src/main/java/quickstart/TransactionAwareResource.java
===================================================================
--- labs/jbosstm/trunk/rest-tx/quickstarts/demo/src/main/java/quickstart/TransactionAwareResource.java	2011-09-13 14:26:50 UTC (rev 37462)
+++ labs/jbosstm/trunk/rest-tx/quickstarts/demo/src/main/java/quickstart/TransactionAwareResource.java	2011-09-13 14:31:13 UTC (rev 37463)
@@ -52,7 +52,7 @@
     public static final String PSEGMENT = "service";
     public static String FAIL_COMMIT;
     private static AtomicInteger workId = new AtomicInteger(1);
-    private static AtomicInteger[] counters = {new AtomicInteger(0), new AtomicInteger(0)};
+    private static volatile AtomicInteger[] counters = {new AtomicInteger(0), new AtomicInteger(0)};
 
     private static Work getWork(String enlistUrl, int index) {
         for (Work w : Work.work.values())
@@ -80,6 +80,7 @@
 
         Work w = getWork(enlistUrl, index);
         if (w != null) {
+	    System.out.println("Returning old counter");
             response = Response.ok("" + ++w.counter).build();
         } else if (enlistUrl.length() == 0) {
             response = Response.ok("non transactional request. Value=" +
@@ -102,6 +103,7 @@
                         "POST", TxSupport.POST_MEDIA_TYPE, pUrls, null);
             } catch (HttpResponseException e) {
                 System.out.println("Enlist error: " + e);
+		e.printStackTrace();
                 if (e.getActualResponse() == 404)
                     return Response.status(e.getActualResponse()).entity("No such url").build();
                 else
@@ -110,6 +112,7 @@
             }
 
             w = new Work(enlistUrl, wid, index, counters[index].get() + 1);
+	    System.out.println("Added counter: " + w.wid + " " + w.counter); 
             Work.work.put(Integer.toString(wid), w);
 
             serializeWork();
@@ -127,6 +130,8 @@
     public Response readCounters(@QueryParam("wId") @DefaultValue("0") String wid) {
         Work w = Work.work.get(wid);
 
+	System.out.println("Work is null?: " + w == null);
+
         if (w == null)
             return Response.ok("counter[0]=" + counters[0].get() + "<br/>counter[1]=" +
 				counters[1].get()).build();
@@ -146,11 +151,17 @@
         System.out.println("Service: PUT request to terminate url: wId=" + wId + ", status:=" + content);
         String status = TxSupport.getStatus(content);
         Work w = Work.work.get(wId);
+	    System.out.println("Read counter: " + w.wid + " " + w.counter); 
 
+	if (w == null) {
+		System.err.println("No work available");
+	}
+
         if (TxSupport.isPrepare(status)) {
             return Response.ok(TxSupport.toStatusContent(TxSupport.PREPARED)).build();
         } else if (TxSupport.isCommit(status)) {
             if (!serializeWork()) {
+		System.err.println("Aborting transaction, could not serialize work");
                 Work.work.remove(wId);
                 return Response.ok(TxSupport.toStatusContent(TxSupport.ABORTED)).build();
             }
@@ -160,14 +171,17 @@
                 Runtime.getRuntime().halt(1);
             }
 
+	    System.out.println("Updating counter: " + w.index + " " + w.counter);
             counters[w.index].set(w.counter);
             Work.work.remove(wId);
             return Response.ok(TxSupport.toStatusContent(TxSupport.COMMITTED)).build();
         } else if (TxSupport.isAbort(status)) {
+	    System.err.println("Participant told to abort");
             Work.work.remove(wId);
             serializeWork();
             return Response.ok(TxSupport.toStatusContent(TxSupport.ABORTED)).build();
         } else {
+	    System.err.println("Participant received bad request");
             return Response.status(HttpURLConnection.HTTP_BAD_REQUEST).build();
         }
     }
@@ -182,6 +196,7 @@
             oos.close();
             return true;
         } catch (IOException e) {
+	    e.printStackTrace();
             return false;
         }
 
@@ -200,6 +215,7 @@
             ois.close();
             return true;
         } catch (Exception e) {
+	    e.printStackTrace();
             return false;
         }
     }

Modified: labs/jbosstm/trunk/rest-tx/quickstarts/demo/src/main/java/quickstart/Work.java
===================================================================
--- labs/jbosstm/trunk/rest-tx/quickstarts/demo/src/main/java/quickstart/Work.java	2011-09-13 14:26:50 UTC (rev 37462)
+++ labs/jbosstm/trunk/rest-tx/quickstarts/demo/src/main/java/quickstart/Work.java	2011-09-13 14:31:13 UTC (rev 37463)
@@ -13,6 +13,7 @@
     int counter;
 
     public Work(String enlistUrl, int wid, int index, int counter) {
+	System.out.println("Creating counter with: " + wid + " " + index + " " + counter);
         this.enlistUrl = enlistUrl;
         this.wid = wid;
         this.index = index;

Added: labs/jbosstm/trunk/rest-tx/quickstarts/demo/src/main/webapp/WEB-INF/web.xml
===================================================================
--- labs/jbosstm/trunk/rest-tx/quickstarts/demo/src/main/webapp/WEB-INF/web.xml	                        (rev 0)
+++ labs/jbosstm/trunk/rest-tx/quickstarts/demo/src/main/webapp/WEB-INF/web.xml	2011-09-13 14:31:13 UTC (rev 37463)
@@ -0,0 +1,25 @@
+<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
+<display-name>REST-tx Web Application</display-name>
+
+<!--	<listener>
+		<listener-class>org.jboss.jbossts.star.service.ContextListener</listener-class>
+	</listener>
+-->
+    <servlet>
+        <servlet-name>Resteasy</servlet-name>
+        <servlet-class>
+            org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
+        </servlet-class>
+        <init-param>
+            <param-name>javax.ws.rs.Application</param-name>
+      		<param-value>quickstart.TMApplication</param-value>
+        </init-param>
+    </servlet>
+
+    <servlet-mapping>
+        <servlet-name>Resteasy</servlet-name>
+        <url-pattern>/*</url-pattern>
+    </servlet-mapping>
+</web-app>


Property changes on: labs/jbosstm/trunk/rest-tx/quickstarts/demo/src/main/webapp/WEB-INF/web.xml
___________________________________________________________________
Added: svn:executable
   + *



More information about the jboss-svn-commits mailing list