Permalink
Browse files

JBTM-934 shows off recovery

  • Loading branch information...
mmusgrov committed Apr 20, 2012
1 parent c568b19 commit 5b66c4c75e0031208350b68a1cdac81bc874bbad
View
@@ -7,19 +7,106 @@
<packaging>pom</packaging>
<name>JTS Examples</name>
<description>All quickstarts of JTS</description>
+ <repositories>
+ <repository>
+ <id>jboss-public-repository-group</id>
+ <name>JBoss Public Maven Repository Group</name>
+ <url>https://repository.jboss.org/nexus/content/groups/public/</url>
+ <releases>
+ <enabled>true</enabled>
+ </releases>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ </repository>
+ </repositories>
<build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>exec-maven-plugin</artifactId>
+ <version>1.2</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.7.2</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.3.1</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-deploy-plugin</artifactId>
- <version>2.6</version>
+ <artifactId>maven-surefire-plugin</artifactId>
<configuration>
- <skip>true</skip>
+ <configuration>
+ <skipTests>false</skipTests>
+ </configuration>
+ <forkMode>pertest</forkMode>
+ <workingDirectory>${project.build.directory}/surefire-working-directory</workingDirectory>
+ <runOrder>alphabetical</runOrder>
+ <redirectTestOutputToFile>true</redirectTestOutputToFile>
+ <inherited>true</inherited>
+ <includes>
+ <include>**/*.java</include>
+ </includes>
+ <excludes>
+ <exclude>**/Util.java</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.3.2</version>
+ <configuration>
+ <source>1.6</source>
+ <target>1.6</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <configuration>
+ <archive>
+ <manifest>
+ <addClasspath>true</addClasspath>
+ </manifest>
+ <manifestEntries>
+ <mode>development</mode>
+ <url>${pom.url}</url>
+ </manifestEntries>
+ </archive>
</configuration>
</plugin>
</plugins>
</build>
+ <dependencies>
+ <dependency>
+ <groupId>org.jboss.spec.javax.transaction</groupId>
+ <artifactId>jboss-transaction-api_1.1_spec</artifactId>
+ <version>1.0.0.Final</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jboss.narayana.jts</groupId>
+ <artifactId>narayana-jts</artifactId>
+ <version>5.0.0.M2-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.6</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
<modules>
<module>trailmap</module>
+ <module>recovery</module>
</modules>
</project>
View
@@ -0,0 +1,35 @@
+<?xml version="1.0"?>
+<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>
+ <groupId>org.jboss.narayana.quickstart.jts</groupId>
+ <artifactId>narayana-quickstarts-jts</artifactId>
+ <version>5.0.0.M2-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+ <description>
+ Example of how to implement XA recovery. Refer to the readme file for more details.
+ </description>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>jts-recovery</artifactId>
+ <packaging>jar</packaging>
+ <name>JTS recovery</name>
+
+ <dependencies>
+ <!-- For logging -->
+ <dependency>
+ <groupId>org.jboss.logging</groupId>
+ <artifactId>jboss-logging</artifactId>
+ <version>3.1.0.GA</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jacorb</groupId>
+ <artifactId>jacorb</artifactId>
+ <version>2.3.1.jbossorg-1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-jdk14</artifactId>
+ <version>1.5.6</version>
+ </dependency>
+ </dependencies>
+</project>
@@ -106,9 +106,9 @@ And the example resource prints out the following when it is asked to commit:
You will see similar paired ouput lines corresponding to ExampleXAResource2.
-NOTE: You may also see, intermittantly, an org.omg.CORBA.OBJECT_NOT_EXIST exception trace on the console.
+NOTE: You may also see, intermittently, an org.omg.CORBA.OBJECT_NOT_EXIST exception trace on the console.
Although recovery has still taken place the warning is not good (there is a JIRA for it and should be fixed
-for final). The exception sometimes results in the system moving the log record to an
+for final). The exception sometimes, though not always, results in the system moving the log record to an
AssumedCompleteTransaction directory (after the next recovery pass).
When you notice both resources have recovered you can end the demonstration by pressing the enter key.
View
@@ -0,0 +1,20 @@
+@echo off
+
+echo "Running JTS recovery quickstart"
+
+rem SUN_CONIG="-Dcom.sun.CORBA.POA.ORBServerId=1 -Dcom.sun.CORBA.POA.ORBPersistentServerPort=12567"
+
+echo "Generating a recovery record ..."
+mvn -e clean compile exec:java -Dexec.mainClass=Test -Dexec.args="-crash"
+IF %ERRORLEVEL% NEQ 0 exit -1
+
+echo "Recovering failed service - this could take up to a minute or so ..."
+mvn -e exec:java -Dexec.mainClass=Test -Dexec.args="-recover -auto"
+IF %ERRORLEVEL% NEQ 0 exit -1
+
+echo "Testing that the XID data files were removed"
+IF EXIST target\ExampleXAResource1.xid_ exit -1
+IF EXIST target\ExampleXAResource2.xid_ exit -1
+
+echo "Service recovery example succeeded"
+
View
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+# ALLOW JOBS TO BE BACKGROUNDED
+set -m
+
+echo "Running recovery quickstart"
+
+# if you want to test using the sun orb you
+# SUN_CONIG="-Dcom.sun.CORBA.POA.ORBServerId=1 -Dcom.sun.CORBA.POA.ORBPersistentServerPort=12567"
+
+echo "Generating a recovery record ..."
+mvn -e clean compile exec:java -Dexec.mainClass=Test -Dexec.args="-crash"
+
+echo "Recovering failed service - this could take up to a minute or so ..."
+mvn -e exec:java -Dexec.mainClass=Test -Dexec.args="-recover -auto"
+
+XID1="target/ExampleXAResource1.xid_"
+XID2="target/ExampleXAResource2.xid_"
+
+echo "Testing that the XID data files were removed"
+
+[ -f $XID1 -a -f $XID2 ] && (echo "JTS example failed"; exit -1) || (echo "JTS example passed"; exit 0)
@@ -39,7 +39,7 @@ public XAResource getXAResource() throws SQLException {
/**
* Initialise with all properties required to create the resource(s).
*
- * @param String p An arbitrary string from which initialization data is obtained.
+ * @param p An arbitrary string from which initialization data is obtained.
*
* @return <code>true</code> if initialization happened successfully, <code>false</code> otherwise.
*/
@@ -1,179 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
-<!--
- JBoss, Home of Professional Open Source
- Copyright 2009, 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) 2009,
- @author JBoss, a division of Red Hat.
--->
-<properties>
- <!--
- This is the JBossTS configuration file for running ArjunaJTS.
- It should be called jbossts-properties.xml.
- You need a different version for ArjunaCore or JTA usage.
-
- ***************************
-
- Property values may be literals or be tokens of the form ${p1[,p2][:v]}
- in which case the token values are substituted for the values of the corresponding system
- properties as follows:
-
- - Any occurance of ${p} with the System.getProperty(p) value.
- If there is no such property p defined, then the ${p} reference will remain unchanged.
-
- - If the property reference is of the form ${p:v} and there is no such property p,
- then the default value v will be returned.
-
- - If the property reference is of the form ${p1,p2} or ${p1,p2:v} then
- the primary and the secondary properties will be tried in turn, before
- returning either the unchanged input, or the default value.
-
- The property ${/} is replaced with System.getProperty("file.separator")
- value and the property ${:} is replaced with System.getProperty("path.separator").
-
- Note this substitution applies to property values only at the point they are read from
- the config file. Tokens in system properties won't be substituted.
- -->
-
- <!-- (default is YES) -->
- <entry key="CoordinatorEnvironmentBean.commitOnePhase">YES</entry>
-
- <!-- default is under user.home - must be writeable!) -->
- <entry key="ObjectStoreEnvironmentBean.objectStoreDir">PutObjectStoreDirHere</entry>
-
- <!-- (default is ON) -->
- <entry key="ObjectStoreEnvironmentBean.transactionSync">ON</entry>
-
- <!-- (Must be unique across all Arjuna instances.) -->
- <entry key="CoreEnvironmentBean.nodeIdentifier">1</entry>
-
- <!-- Which Xid types to recover -->
- <entry key="JTAEnvironmentBean.xaRecoveryNodes">1</entry>
-
- <entry key="JTAEnvironmentBean.xaResourceOrphanFilterClassNames">
- com.arjuna.ats.internal.jta.recovery.arjunacore.JTATransactionLogXAResourceOrphanFilter
- com.arjuna.ats.internal.jta.recovery.arjunacore.JTANodeNameXAResourceOrphanFilter
- </entry>
-
- <!--
- Base port number for determining a unique number to associate with an instance of the transaction service
- (which is needed in order to support multiple instances on the same machine).
- Use the value 0 to allow the system to select the first available port number.
- If the port number is non-zero and the port is in use then the value will be incremented until either a successful binding
- to the loopback address is created or until the the maximum number of ports (specified by the
- CoreEnvironmentBean.socketProcessIdMaxPorts property) have been tried or until the port number
- reaches the maximum possible port number.
- -->
- <entry key="CoreEnvironmentBean.socketProcessIdPort">0</entry>
-
-
-
- <!--
- Periodic recovery modules to use. Invoked in the order they appear in the list.
- Check http://www.jboss.org/community/docs/DOC-10788 for more information
- on recovery modules and their configuration when running in various
- deployments.
- -->
- <entry key="RecoveryEnvironmentBean.recoveryModuleClassNames">
- com.arjuna.ats.internal.arjuna.recovery.AtomicActionRecoveryModule
- com.arjuna.ats.internal.txoj.recovery.TORecoveryModule
- com.arjuna.ats.internal.jts.recovery.transactions.TopLevelTransactionRecoveryModule
- com.arjuna.ats.internal.jts.recovery.transactions.ServerTransactionRecoveryModule
- com.arjuna.ats.internal.jta.recovery.jts.XARecoveryModule
- </entry>
-
- <!-- Expiry scanners to use (order of invocation is random). -->
- <entry key="RecoveryEnvironmentBean.expiryScannerClassNames">
- com.arjuna.ats.internal.arjuna.recovery.ExpiredTransactionStatusManagerScanner
- com.arjuna.ats.internal.jts.recovery.contact.ExpiredContactScanner
- com.arjuna.ats.internal.jts.recovery.transactions.ExpiredToplevelScanner
- com.arjuna.ats.internal.jts.recovery.transactions.ExpiredServerScanner
- </entry>
-
- <!--
- Add the following to the set of expiryScannerClassNames above to move logs that cannot be completed by failure recovery.
- But be sure you know what you are doing and why!
- com.arjuna.ats.internal.arjuna.recovery.AtomicActionExpiryScanner
- -->
-
- <!--
- The address and port number on which the recovery manager listens
- If running within an AS then the address the AS is bound to (jboss.bind.address) takes precedence
- -->
- <entry key="RecoveryEnvironmentBean.recoveryPort">4712</entry>
-
- <entry key="RecoveryEnvironmentBean.recoveryAddress"></entry>
-
- <!--
- Use this to fix the port on which the TransactionStatusManager listens,
- The default behaviour is to use any free port.
- -->
- <entry key="RecoveryEnvironmentBean.transactionStatusManagerPort">0</entry>
-
- <!--
- Use this to fix the address on which the TransactionStatusManager binds,
- The default behaviour is to use the loopback address (ie localhost).
- If running within an AS then the address the AS is bound to (jboss.bind.address) takes precedence
- -->
- <entry key="RecoveryEnvironmentBean.transactionStatusManagerAddress"></entry>
-
- <!--
- For cases where the recovery manager is in process with the transaction manager and nothing else uses
- the ObjectStore, it is possible to disable the socket based recovery listener by setting this to NO.
- Caution: use of this property can allow multiple recovery processes to run on the same ObjectStore
- if you are not careful. That in turn can lead to incorrect transaction processing. Use with care.
- -->
- <entry key="RecoveryEnvironmentBean.recoveryListener">YES</entry>
-
-
- <!-- Recovery Activators to use. -->
- <entry key="RecoveryEnvironmentBean.recoveryActivatorClassNames">com.arjuna.ats.internal.jts.orbspecific.recovery.RecoveryEnablement</entry>
-
-
- <entry key="JTAEnvironmentBean.transactionManagerClassName">com.arjuna.ats.internal.jta.transaction.jts.TransactionManagerImple</entry>
-
- <entry key="JTAEnvironmentBean.userTransactionClassName">com.arjuna.ats.internal.jta.transaction.jts.UserTransactionImple</entry>
-
- <entry key="JTAEnvironmentBean.transactionSynchronizationRegistryClassName">com.arjuna.ats.internal.jta.transaction.jts.TransactionSynchronizationRegistryImple</entry>
-
-
- <entry key="OrbPortabilityEnvironmentBean.bindMechanism">CONFIGURATION_FILE</entry>
-
- <entry key="OrbPortabilityEnvironmentBean.orbInitializationProperties">
- <!-- This class handles context propagation issues, and should never be commented out or removed. -->
- com.arjuna.orbportability.orb.PreInit1=com.arjuna.ats.internal.jts.context.ContextPropagationManager
- <!-- This property ensures the JTS knows which ORB to use and should never be commented out or removed -->
- com.arjuna.orbportability.orb.PostInit=com.arjuna.ats.jts.utils.ORBSetup
- <!-- This property ensures the crash recovery is initialised correctly and should never be commented out or removed -->
- com.arjuna.orbportability.orb.PostInit2=com.arjuna.ats.internal.jts.recovery.RecoveryInit
- <!-- This property ensures the JTS knows which ORB to use and should never be commented out or removed -->
- com.arjuna.orbportability.orb.PostSet1=com.arjuna.ats.jts.utils.ORBSetup
- </entry>
-
- <!--
- This property controls the port on which the Recovery ORB listens
- -->
- <entry key="JTSEnvironmentBean.recoveryManagerPort">4711</entry>
-
- <!--
- This property controls the address on which the Recovery ORB binds - defaults to the loopback connection
- If running within an AS then the address the AS is bound to (jboss.bind.address) takes precedence
- -->
- <entry key="JTSEnvironmentBean.recoveryManagerAddress"></entry>
-
-
-</properties>

0 comments on commit 5b66c4c

Please sign in to comment.