[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