summaryrefslogtreecommitdiffstats
path: root/das-java/trunk/samples/transaction
diff options
context:
space:
mode:
authorlresende <lresende@13f79535-47bb-0310-9956-ffa450edef68>2009-11-02 22:22:29 +0000
committerlresende <lresende@13f79535-47bb-0310-9956-ffa450edef68>2009-11-02 22:22:29 +0000
commitc6103c7c9a6b6971d2aa0b8e3997608cb5f2c36f (patch)
treeb3bf9651ebfd1c6f6230f69342cd2fc6686a7b98 /das-java/trunk/samples/transaction
parentdbfb7d4e41886fd91f33e434c57d207061106c38 (diff)
Move the das folder as new trunk for das sub project
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@832144 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'das-java/trunk/samples/transaction')
-rw-r--r--das-java/trunk/samples/transaction/build.xml46
-rw-r--r--das-java/trunk/samples/transaction/pom.xml148
-rw-r--r--das-java/trunk/samples/transaction/readme.htm449
-rw-r--r--das-java/trunk/samples/transaction/src/main/java/org/apache/tuscany/samples/das/databaseSetup/DatabaseSetupUtil.java67
-rw-r--r--das-java/trunk/samples/transaction/src/main/java/org/apache/tuscany/samples/das/tx/manager/GeronimoTransactionManagerService.java118
-rw-r--r--das-java/trunk/samples/transaction/src/main/java/org/apache/tuscany/samples/das/tx/manager/GeronimoTransactionManagerUtil.java122
-rw-r--r--das-java/trunk/samples/transaction/src/main/java/org/apache/tuscany/samples/das/tx/sample/MoneyTransfer.java193
-rw-r--r--das-java/trunk/samples/transaction/src/main/resources/BankAccountDBConfig.xml34
-rw-r--r--das-java/trunk/samples/transaction/src/main/resources/BankAccounts.xml30
9 files changed, 1207 insertions, 0 deletions
diff --git a/das-java/trunk/samples/transaction/build.xml b/das-java/trunk/samples/transaction/build.xml
new file mode 100644
index 0000000000..5289215be5
--- /dev/null
+++ b/das-java/trunk/samples/transaction/build.xml
@@ -0,0 +1,46 @@
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<project name="transaction" default="run">
+ <property name="test.class" value="org.apache.tuscany.samples.das.tx.sample.MoneyTransfer" />
+ <property name="test.jar" value="sample-transaction.jar" />
+
+
+ <target name="run">
+ <java classname="${test.class}"
+ fork="true">
+ <arg value="commit"/>
+ <arg value="1200"/>
+ <classpath>
+ <pathelement path="${classpath}"/>
+ <fileset dir="../../lib">
+ <include name="**/*.jar"/>
+ </fileset>
+ <pathelement location="mysql-connector-java-5.0.4.jar"/>
+ <pathelement location="commons-logging-1.0.4.jar"/>
+ <pathelement location="geronimo-jta_1.1_spec-1.1.jar"/>
+ <pathelement location="geronimo-transaction-2.0.1.jar"/>
+ <pathelement location="geronimo-j2ee-connector_1.5_spec-1.1.1.jar"/>
+ <pathelement location="tuscany-das-sample-dbconfig-1.0-SNAPSHOT.jar"/>
+ <pathelement path="${test.jar}"/>
+ </classpath>
+ </java>
+ </target>
+
+</project>
+
diff --git a/das-java/trunk/samples/transaction/pom.xml b/das-java/trunk/samples/transaction/pom.xml
new file mode 100644
index 0000000000..f6e50d779e
--- /dev/null
+++ b/das-java/trunk/samples/transaction/pom.xml
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.das.samples</groupId>
+ <artifactId>tuscany-das-samples</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>tuscany-das-sample-transaction</artifactId>
+ <packaging>jar</packaging>
+ <name>Tuscany DAS J2SE Transaction Sample Using Transaction Manager</name>
+ <description>Sample use of RDB DAS in a J2SE application with Transaction Manager</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tuscany.das</groupId>
+ <artifactId>tuscany-das-rdb</artifactId>
+ <version>${das.version}</version>
+ <scope>compile</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sdo</groupId>
+ <artifactId>tuscany-sdo-impl</artifactId>
+ <version>${sdo.version}</version>
+ <scope>compile</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sdo</groupId>
+ <artifactId>tuscany-sdo-api-r2.1</artifactId>
+ <version>${sdo.version}</version>
+ <scope>compile</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.das.samples</groupId>
+ <artifactId>tuscany-das-sample-dbconfig</artifactId>
+ <version>${das.version}</version>
+ <scope>compile</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>org.apache.derby</groupId>
+ <artifactId>derby</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ <dependency>
+ <groupId>mysql</groupId>
+ <artifactId>mysql-connector-java</artifactId>
+ <version>5.0.4</version>
+ <scope>compile</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-jta_1.1_spec</artifactId>
+ <version>1.1</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.geronimo.components</groupId>
+ <artifactId>geronimo-transaction</artifactId>
+ <version>2.0.1</version>
+ <exclusions>
+ <exclusion>
+ <artifactId>mx4j</artifactId>
+ <groupId>mx4j</groupId>
+ </exclusion>
+ <exclusion>
+ <artifactId>commons-jelly-tags-velocity</artifactId>
+ <groupId>commons-jelly</groupId>
+ </exclusion>
+ <exclusion>
+ <artifactId>velocity</artifactId>
+ <groupId>velocity</groupId>
+ </exclusion>
+ <exclusion>
+ <artifactId>geronimo-core</artifactId>
+ <groupId>org.apache.geronimo.modules</groupId>
+ </exclusion>
+ <exclusion>
+ <artifactId>geronimo-kernel</artifactId>
+ <groupId>org.apache.geronimo.modules</groupId>
+ </exclusion>
+ <exclusion>
+ <artifactId>geronimo-system</artifactId>
+ <groupId>org.apache.geronimo.modules</groupId>
+ </exclusion>
+ <exclusion>
+ <artifactId>geronimo-j2ee</artifactId>
+ <groupId>org.apache.geronimo.modules</groupId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
+ </dependencies>
+
+ <!-- this will place the java source files inside the jar -->
+ <build>
+ <finalName>sample-transaction</finalName>
+ <sourceDirectory>src/main/java</sourceDirectory>
+ <resources>
+ <resource>
+ <directory>src/main/java</directory>
+ </resource>
+ <resource>
+ <directory>src/main/resources</directory>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <configuration>
+ <archive>
+ <manifest>
+ <mainClass>org.apache.tuscany.samples.das.tx.sample.MoneyTransfer</mainClass>
+ <addClasspath>true</addClasspath>
+ <!-- classpathPrefix>../../lib/</classpathPrefix -->
+ </manifest>
+
+ </archive>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/das-java/trunk/samples/transaction/readme.htm b/das-java/trunk/samples/transaction/readme.htm
new file mode 100644
index 0000000000..6cf450d41a
--- /dev/null
+++ b/das-java/trunk/samples/transaction/readme.htm
@@ -0,0 +1,449 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="readme_files/filelist.xml">
+<title>Tuscany RDB DAS Sample</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+ <o:Author>IBM_User</o:Author>
+ <o:LastAuthor>IBM_User</o:LastAuthor>
+ <o:Revision>59</o:Revision>
+ <o:TotalTime>329</o:TotalTime>
+ <o:Created>2007-09-05T11:09:00Z</o:Created>
+ <o:LastSaved>2007-09-19T11:43:00Z</o:LastSaved>
+ <o:Pages>1</o:Pages>
+ <o:Words>593</o:Words>
+ <o:Characters>3384</o:Characters>
+ <o:Company>IBM</o:Company>
+ <o:Lines>28</o:Lines>
+ <o:Paragraphs>7</o:Paragraphs>
+ <o:CharactersWithSpaces>3970</o:CharactersWithSpaces>
+ <o:Version>10.3501</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+ <w:Compatibility>
+ <w:ApplyBreakingRules/>
+ <w:UseFELayout/>
+ </w:Compatibility>
+ <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+ @font-face
+ {font-family:SimSun;
+ panose-1:2 1 6 0 3 1 1 1 1 1;
+ mso-font-alt:\5B8B\4F53;
+ mso-font-charset:134;
+ mso-generic-font-family:auto;
+ mso-font-pitch:variable;
+ mso-font-signature:3 135135232 16 0 262145 0;}
+@font-face
+ {font-family:"\@SimSun";
+ panose-1:2 1 6 0 3 1 1 1 1 1;
+ mso-font-charset:134;
+ mso-generic-font-family:auto;
+ mso-font-pitch:variable;
+ mso-font-signature:3 135135232 16 0 262145 0;}
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+ {mso-style-parent:"";
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ font-family:"Times New Roman";
+ mso-fareast-font-family:SimSun;}
+h1
+ {mso-margin-top-alt:auto;
+ margin-right:0in;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ mso-outline-level:1;
+ font-size:24.0pt;
+ font-family:"Times New Roman";
+ font-weight:bold;}
+h2
+ {mso-margin-top-alt:auto;
+ margin-right:0in;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ mso-outline-level:2;
+ font-size:18.0pt;
+ font-family:"Times New Roman";
+ font-weight:bold;}
+a:link, span.MsoHyperlink
+ {color:blue;
+ text-decoration:underline;
+ text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+ {color:blue;
+ text-decoration:underline;
+ text-underline:single;}
+p
+ {mso-margin-top-alt:auto;
+ margin-right:0in;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ font-family:"Times New Roman";
+ mso-fareast-font-family:SimSun;}
+@page Section1
+ {size:8.5in 11.0in;
+ margin:1.0in 1.25in 1.0in 1.25in;
+ mso-header-margin:.5in;
+ mso-footer-margin:.5in;
+ mso-paper-source:0;}
+div.Section1
+ {page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+ {mso-style-name:"Table Normal";
+ mso-tstyle-rowband-size:0;
+ mso-tstyle-colband-size:0;
+ mso-style-noshow:yes;
+ mso-style-parent:"";
+ mso-padding-alt:0in 5.4pt 0in 5.4pt;
+ mso-para-margin:0in;
+ mso-para-margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:10.0pt;
+ font-family:"Times New Roman";}
+</style>
+<![endif]-->
+<meta name=CREATED content="20070704;1002817">
+<meta name=CHANGEDBY content="a a">
+<meta name=CHANGED content="20070704;2123396">
+<!-- <pre><a name="header-text">Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+&quot;License&quot;); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+&quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License. </a></pre>
+
+-->
+</head>
+
+<body lang=EN-US link=blue vlink=blue style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<h1 style='margin:0in;margin-bottom:.0001pt'><span lang=PT-BR style='mso-ansi-language:
+PT-BR'>RDB DAS Transaction Sample<o:p></o:p></span></h1>
+
+<h2 style='margin:0in;margin-bottom:.0001pt'><span lang=PT-BR style='mso-ansi-language:
+PT-BR'><o:p>&nbsp;</o:p></span></h2>
+
+<h2 style='margin:0in;margin-bottom:.0001pt'><span lang=PT-BR style='mso-ansi-language:
+PT-BR'>Introduction<o:p></o:p></span></h2>
+
+<p style='margin:0in;margin-bottom:.0001pt'><span lang=PT-BR style='mso-ansi-language:
+PT-BR'>This stand-alone sample demonstrates the RDB Data Access Service
+transaction management with external Transaction Manager. This example uses Geronimo
+<span style='mso-spacerun:yes'> </span>as the transaction manager. <o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt'><b><span lang=PT-BR
+style='mso-ansi-language:PT-BR'><o:p>&nbsp;</o:p></span></b></p>
+
+<p style='margin:0in;margin-bottom:.0001pt'><b><span lang=PT-BR
+style='font-size:18.0pt;mso-ansi-language:PT-BR'>Example</span></b><span
+lang=PT-BR style='font-size:18.0pt;mso-ansi-language:PT-BR'><o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt'><span lang=PT-BR style='mso-ansi-language:
+PT-BR'>In this MoneyTransfer example,user entered amount will be withdrawn from
+one of his bankaccount using one call to das.applyChanges(dataGraph1) and same
+amount will<span style='mso-spacerun:yes'>  </span>be deposited to his another
+account using another call to das.applyChanges(dataGraph2). Based on whether
+user selects commit/rollback, these 2 applyChanges() will behave identically.
+i.e. both will commit or both will rollback, but partial transaction will not
+happen. Example build.xml - sets for transfer of 1200 from Account1 to Account2
+[commit].<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt'><b><span lang=PT-BR
+style='mso-ansi-language:PT-BR'><o:p>&nbsp;</o:p></span></b></p>
+
+<h2 style='margin:0in;margin-bottom:.0001pt'><span lang=PT-BR style='mso-ansi-language:
+PT-BR'>Building and Running<o:p></o:p></span></h2>
+
+<p style='margin:0in;margin-bottom:.0001pt'><b><span lang=PT-BR
+style='mso-ansi-language:PT-BR'><span style='mso-spacerun:yes'> </span></span></b><span
+lang=PT-BR style='mso-ansi-language:PT-BR'>From binary distribution, <b>base
+directory</b> is {DAS_ROOT}\ samples\transaction. Refer to below settings from
+this base directory.<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt'><span lang=PT-BR style='mso-ansi-language:
+PT-BR'>1]BankAccounts.xml available in sample-transaction.jar, is the DAS
+config file. Note that, as transaction is externally managed, this uses
+managedtx=false setting.<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt'><span lang=PT-BR style='mso-ansi-language:
+PT-BR'><o:p>&nbsp;</o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt'><span lang=PT-BR style='mso-ansi-language:
+PT-BR'>2]MySQL server should be running. The example uses MySQL DB (with innoDB
+ON to support transaction). Database <b>dastest, </b>table <b>bankaccount</b> and
+data will be created during sample run. For this preconfigured
+BankAccountDBConfig.xml available in sample-transaction.jar, will be used. User
+needs to set correct values for url, login etc. in this.<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt'><span lang=PT-BR style='mso-ansi-language:
+PT-BR'><o:p>&nbsp;</o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt'><span lang=PT-BR style='mso-ansi-language:
+PT-BR'>3] Apache Ant latest version should be installed.Download Apache Ant
+latest version on and extract into folder &lt;apache_ant_folder&gt;. You can
+find it here: <a href="http://ant.apache.org/bindownload.cgi">http://ant.apache.org/bindownload.cgi</a>.Add
+&lt;apache_ant_folder&gt;/bin directory to your OS path variable.<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt'><span lang=PT-BR style='mso-ansi-language:
+PT-BR'><o:p>&nbsp;</o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt'><span lang=PT-BR style='mso-ansi-language:
+PT-BR'>4] From <b>base directory </b>run-<span style='mso-spacerun:yes'> 
+</span>ant<o:p></o:p></span></p>
+
+<h2 style='margin:0in;margin-bottom:.0001pt'><span lang=PT-BR style='mso-ansi-language:
+PT-BR'><o:p>&nbsp;</o:p></span></h2>
+
+<p style='margin:0in;margin-bottom:.0001pt'><span lang=PT-BR style='mso-ansi-language:
+PT-BR'>The sample will run and output the following: <o:p></o:p></span></p>
+
+<div style='border:solid windowtext 1.0pt;mso-border-alt:solid windowtext .5pt;
+padding:1.0pt 4.0pt 1.0pt 4.0pt'>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'>Buildfile: build.xml<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'><o:p>&nbsp;</o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'>run:<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'><span style='mso-spacerun:yes'>     </span>[java]
+INIT database<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'><span style='mso-spacerun:yes'>     </span>[java]
+INIT transaction manager<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'><span style='mso-spacerun:yes'>     </span>[java]
+Wed Sep 19 17:09:42 IST 2007 DEBUG: Executing XA statement: XA START<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'><span style='mso-spacerun:yes'> </span>0x01000000000000004bceb90109b6b0f3000000000000000000000000000000000000000000000<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'>000000000000000000000000000000000000000000000000000,0x00000000000000000000000000<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'>00000000000000000000000000000000000000000000000000000000000000000000000000000000<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'>0000000000000000000000,0x4765526f<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'><span style='mso-spacerun:yes'>     </span>[java]
+Get a connection<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'><span style='mso-spacerun:yes'>     </span>[java]
+Before transaction, table is:<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'><span style='mso-spacerun:yes'>     </span>[java]<span
+style='mso-spacerun:yes'>     </span>id<span style='mso-spacerun:yes'>     
+</span>name<span style='mso-spacerun:yes'>    </span>balance<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'><span style='mso-spacerun:yes'>     </span>[java]<span
+style='mso-spacerun:yes'>     </span>1<span style='mso-spacerun:yes'>      
+</span>John Feng<span style='mso-spacerun:yes'>       </span>1200<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'><span style='mso-spacerun:yes'>     </span>[java]<span
+style='mso-spacerun:yes'>     </span>2<span style='mso-spacerun:yes'>      
+</span>John Feng<span style='mso-spacerun:yes'>       </span>0<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'><span style='mso-spacerun:yes'>     </span>[java]
+Begin a transaction<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'><span style='mso-spacerun:yes'>     </span>[java]
+Update the table - 2 accounts<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'><span style='mso-spacerun:yes'>     </span>[java]
+*commit* the transaction<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'><span style='mso-spacerun:yes'>     </span>[java]
+Wed Sep 19 17:09:45 IST 2007 DEBUG: Executing XA statement: XA END 0<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'>x01000000000000004bceb90109b6b0f300000000000000000000000000000000000000000000000<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'>0000000000000000000000000000000000000000000000000,0x0000000000000000000000000000<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'>00000000000000000000000000000000000000000000000000000000000000000000000000000000<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'>00000000000000000000,0x4765526f<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'><span style='mso-spacerun:yes'>     </span>[java]
+Wed Sep 19 17:09:45 IST 2007 DEBUG: Executing XA statement: XA PREPA<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'>RE 0x01000000000000004bceb90109b6b0f30000000000000000000000000000000000000000000<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'>00000000000000000000000000000000000000000000000000000,0x000000000000000000000000<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'>00000000000000000000000000000000000000000000000000000000000000000000000000000000<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'>000000000000000000000000,0x4765526f<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'><span style='mso-spacerun:yes'>     </span>[java]
+Wed Sep 19 17:09:45 IST 2007 DEBUG: Executing XA statement: XA COMMI<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'>T 0x01000000000000004bceb90109b6b0f300000000000000000000000000000000000000000000<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'>0000000000000000000000000000000000000000000000000000,0x0000000000000000000000000<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'>00000000000000000000000000000000000000000000000000000000000000000000000000000000<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'>00000000000000000000000,0x4765526f<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'><span style='mso-spacerun:yes'>     </span>[java]
+After transaction, table is:<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'><span style='mso-spacerun:yes'>     </span>[java]<span
+style='mso-spacerun:yes'>     </span>id<span style='mso-spacerun:yes'>     
+</span>name<span style='mso-spacerun:yes'>    </span>balance<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'><span style='mso-spacerun:yes'>     </span>[java]<span
+style='mso-spacerun:yes'>     </span>1<span style='mso-spacerun:yes'>      
+</span>John Feng<span style='mso-spacerun:yes'>       </span>0<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'><span style='mso-spacerun:yes'>     </span>[java]<span
+style='mso-spacerun:yes'>     </span>2<span style='mso-spacerun:yes'>      
+</span>John Feng<span style='mso-spacerun:yes'>       </span>1200<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'><span style='mso-spacerun:yes'>     </span>[java]
+Cleanup<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'><span style='mso-spacerun:yes'>     </span>[java]
+End MoneyTransfer<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'><span style='mso-spacerun:yes'>     </span>[java]<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'><o:p>&nbsp;</o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'>BUILD SUCCESSFUL<o:p></o:p></span></p>
+
+<p style='margin:0in;margin-bottom:.0001pt;border:none;mso-border-alt:solid windowtext .5pt;
+padding:0in;mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt'><span lang=PT-BR
+style='mso-ansi-language:PT-BR'>Total time: 8 seconds<o:p></o:p></span></p>
+
+</div>
+
+<p style='margin:0in;margin-bottom:.0001pt'><b><span lang=PT-BR
+style='mso-ansi-language:PT-BR'>Observation:</span></b><span lang=PT-BR
+style='mso-ansi-language:PT-BR'> The build.xml ant file only works on DAS Java binary
+distribution.<o:p></o:p></span></p>
+
+</div>
+
+</body>
+
+</html>
diff --git a/das-java/trunk/samples/transaction/src/main/java/org/apache/tuscany/samples/das/databaseSetup/DatabaseSetupUtil.java b/das-java/trunk/samples/transaction/src/main/java/org/apache/tuscany/samples/das/databaseSetup/DatabaseSetupUtil.java
new file mode 100644
index 0000000000..fbcbe1a5f7
--- /dev/null
+++ b/das-java/trunk/samples/transaction/src/main/java/org/apache/tuscany/samples/das/databaseSetup/DatabaseSetupUtil.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tuscany.samples.das.databaseSetup;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+
+import org.apache.tuscany.das.rdb.dbconfig.DBConfig;
+import org.apache.tuscany.das.rdb.dbconfig.DBConfigUtil;
+import org.apache.tuscany.das.rdb.dbconfig.DBInitializer;
+import org.apache.tuscany.samples.das.tx.manager.GeronimoTransactionManagerUtil;
+
+/**
+ * Setup database, XA resources required by the sample
+ *
+ *
+ */
+public class DatabaseSetupUtil {
+ private static DBConfig dbConfig = null;
+ /**
+ * Constructor for DatabaseSetupUtil.
+ */
+ public DatabaseSetupUtil(String dbConfigFile) throws Exception {
+ //create database tables, data
+ DBInitializer dbInitializer = new DBInitializer(dbConfigFile);
+ dbInitializer.refreshDatabaseData();
+ //read DAS Config
+ dbConfig = DBConfigUtil.loadDBConfig(ClassLoader.getSystemResourceAsStream(dbConfigFile));
+ }
+
+ public static DBConfig getDBConfig() {
+ return DatabaseSetupUtil.dbConfig;
+ }
+
+ public static void main(String[] args) throws Exception{
+ //test program
+ new DatabaseSetupUtil("BankAccountDBConfig.xml");
+ GeronimoTransactionManagerUtil tmUtil = new GeronimoTransactionManagerUtil();
+ tmUtil.initTransactionManager();
+ tmUtil.startTransaction();
+ Connection conn = tmUtil.getConnection();
+
+ ResultSet rs = conn.createStatement().executeQuery("select id, balance from bankaccount");
+ while(rs.next()){
+ System.out.println("result row: "+rs.getInt(1)+","+rs.getString(2));
+ }
+
+ tmUtil.commitTransaction();
+
+ }
+}
diff --git a/das-java/trunk/samples/transaction/src/main/java/org/apache/tuscany/samples/das/tx/manager/GeronimoTransactionManagerService.java b/das-java/trunk/samples/transaction/src/main/java/org/apache/tuscany/samples/das/tx/manager/GeronimoTransactionManagerService.java
new file mode 100644
index 0000000000..ee106bec0c
--- /dev/null
+++ b/das-java/trunk/samples/transaction/src/main/java/org/apache/tuscany/samples/das/tx/manager/GeronimoTransactionManagerService.java
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tuscany.samples.das.tx.manager;
+
+import javax.transaction.HeuristicMixedException;
+import javax.transaction.HeuristicRollbackException;
+import javax.transaction.InvalidTransactionException;
+import javax.transaction.NotSupportedException;
+import javax.transaction.RollbackException;
+import javax.transaction.SystemException;
+import javax.transaction.Transaction;
+import javax.transaction.TransactionManager;
+
+import org.apache.geronimo.transaction.manager.TransactionManagerImpl;
+import org.apache.geronimo.transaction.manager.XidFactoryImpl;
+
+/**
+ * A <code>TransactionManager</code> that delegates to a Geronimo JTA transaction manager. This class serves as a
+ * wrapper for initializing the Geronimo TM as a system service.
+ *
+ * @version $Rev$ $Date$
+ */
+public class GeronimoTransactionManagerService implements TransactionManager {
+ private TransactionManager transactionManager;
+ private int timeout = 250;
+
+ public GeronimoTransactionManagerService() {
+ }
+
+ /**
+ * Returns the transaction timeout in seconds
+ *
+ * @return the transaction timeout in seconds
+ */
+ public int getTimeout() {
+ return timeout;
+ }
+
+ /**
+ * Sets the transaction timeout in seconds
+ */
+ public void setTimeout(int timeout) {
+ this.timeout = timeout;
+ }
+
+ public void init() throws Exception {
+ XidFactoryImpl factory = new XidFactoryImpl();
+ transactionManager = new TransactionManagerImpl(timeout, factory, null);
+ }
+
+ public void begin() throws NotSupportedException, SystemException {
+ transactionManager.begin();
+ }
+
+ public void commit() throws HeuristicMixedException,
+ HeuristicRollbackException,
+ IllegalStateException,
+ RollbackException,
+ SecurityException,
+ SystemException {
+ transactionManager.commit();
+ }
+
+ public TransactionManager getTransactionManager() {
+ return transactionManager;
+ }
+
+ public int getStatus() throws SystemException {
+ return transactionManager.getStatus();
+ }
+
+ public Transaction getTransaction() throws SystemException {
+ return transactionManager.getTransaction();
+ }
+
+ public void resume(Transaction transaction)
+ throws IllegalStateException, InvalidTransactionException, SystemException {
+ transactionManager.resume(transaction);
+ }
+
+ public void rollback() throws IllegalStateException, SecurityException, SystemException {
+ transactionManager.rollback();
+ }
+
+ public void setRollbackOnly() throws IllegalStateException, SystemException {
+ transactionManager.setRollbackOnly();
+ }
+
+ public void setTransactionTimeout(int i) throws SystemException {
+ transactionManager.setTransactionTimeout(i);
+ }
+
+ public Transaction suspend() throws SystemException {
+ return transactionManager.suspend();
+ }
+
+ public void begin(long timeout) throws NotSupportedException, SystemException {
+ transactionManager.begin();
+ return;
+ }
+
+}
diff --git a/das-java/trunk/samples/transaction/src/main/java/org/apache/tuscany/samples/das/tx/manager/GeronimoTransactionManagerUtil.java b/das-java/trunk/samples/transaction/src/main/java/org/apache/tuscany/samples/das/tx/manager/GeronimoTransactionManagerUtil.java
new file mode 100644
index 0000000000..084e735117
--- /dev/null
+++ b/das-java/trunk/samples/transaction/src/main/java/org/apache/tuscany/samples/das/tx/manager/GeronimoTransactionManagerUtil.java
@@ -0,0 +1,122 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tuscany.samples.das.tx.manager;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import javax.sql.XAConnection;
+import javax.sql.XADataSource;
+import javax.transaction.xa.XAResource;
+import javax.transaction.xa.Xid;
+
+import org.apache.geronimo.transaction.manager.XidFactory;
+import org.apache.geronimo.transaction.manager.XidFactoryImpl;
+import org.apache.tuscany.das.rdb.dbconfig.DBConfig;
+import org.apache.tuscany.samples.das.databaseSetup.DatabaseSetupUtil;
+
+import com.mysql.jdbc.jdbc2.optional.MysqlXADataSource;
+
+public class GeronimoTransactionManagerUtil {
+ private GeronimoTransactionManagerService service;
+ private static XADataSource xads;
+ private static XAConnection xaconn = null;
+ private static XAResource xares = null;
+ private static XidFactory xidFact = null;
+ private static Xid xid = null;
+
+ public void initTransactionManager() {
+ // Get a transction manager
+ try {
+ xidFact = new XidFactoryImpl();
+ // creates an instance of Geronimo TM Service
+ service = new GeronimoTransactionManagerService();
+ service.init();
+ service.begin();
+ initDataSource();
+ initXAConnection();
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.exit(1);
+ }
+ }
+
+ private void initDataSource() {
+ //setup XADataSource
+ xads = new MysqlXADataSource();
+ try {
+ DBConfig dbcfg = DatabaseSetupUtil.getDBConfig();
+ ((MysqlXADataSource) xads).setUser(dbcfg.getConnectionInfo().getConnectionProperties().getUserName());
+ ((MysqlXADataSource) xads).setPassword(dbcfg.getConnectionInfo().getConnectionProperties().getPassword());
+ ((MysqlXADataSource) xads).setUrl(dbcfg.getConnectionInfo().getConnectionProperties().getDatabaseURL());
+ ((MysqlXADataSource) xads).setURL(dbcfg.getConnectionInfo().getConnectionProperties().getDatabaseURL());
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.exit(1);
+ }
+ }
+
+ private void initXAConnection() throws SQLException{
+ DBConfig dbcfg = DatabaseSetupUtil.getDBConfig();
+ xaconn = xads.getXAConnection(dbcfg.getConnectionInfo().getConnectionProperties().getUserName(),
+ dbcfg.getConnectionInfo().getConnectionProperties().getPassword());
+ }
+
+ public void startTransaction() throws Exception {
+ try{
+ //create XAResource
+ xid= xidFact.createXid();
+ xares = xaconn.getXAResource();
+ xares.setTransactionTimeout(250); //something
+ xares.start(xid, XAResource.TMNOFLAGS);
+ return;
+ }catch(Exception e) {
+ e.printStackTrace();
+ throw e;
+ }
+ }
+
+ public void commitTransaction() throws Exception {
+ xares.end(xid, XAResource.TMSUCCESS);
+ xares.prepare(xid);
+ xares.commit(xid, false); //onePhase=true/false
+ }
+
+ public void rollbackTransaction() throws Exception {
+ xares.end(xid, XAResource.TMFAIL);
+ xares.prepare(xid);
+ xares.rollback(xid);
+ }
+
+ public Connection getConnection() throws SQLException {
+ return xaconn.getConnection();
+ }
+
+ /**
+ * cleanup
+ */
+ public void cleanup() throws Exception{
+ xaconn.close();
+ xid = null;
+ xares = null;
+ xaconn = null;
+ xads = null;
+ service.commit();
+ }
+}
diff --git a/das-java/trunk/samples/transaction/src/main/java/org/apache/tuscany/samples/das/tx/sample/MoneyTransfer.java b/das-java/trunk/samples/transaction/src/main/java/org/apache/tuscany/samples/das/tx/sample/MoneyTransfer.java
new file mode 100644
index 0000000000..650f60f089
--- /dev/null
+++ b/das-java/trunk/samples/transaction/src/main/java/org/apache/tuscany/samples/das/tx/sample/MoneyTransfer.java
@@ -0,0 +1,193 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tuscany.samples.das.tx.sample;
+
+import java.io.InputStream;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.Statement;
+
+import org.apache.tuscany.das.rdb.Command;
+import org.apache.tuscany.das.rdb.DAS;
+import org.apache.tuscany.samples.das.databaseSetup.DatabaseSetupUtil;
+import org.apache.tuscany.samples.das.tx.manager.GeronimoTransactionManagerUtil;
+
+import commonj.sdo.DataObject;
+
+/**
+ * Sample using Geronimo TM to execute multiple DAS applyChanges() under one transaction.
+ *
+ */
+public class MoneyTransfer {
+
+ private static final String USAGE = "usage: java MoneyTransfer [commit|rollback] [transferAmount]";
+ private static final String SQL_REQUEST = "select id, name, balance from bankaccount";
+ private static Connection conn = null;
+ private static DAS das = null;
+
+ private static void printTable() {
+ try {
+ Statement stmt = conn.createStatement();
+ ResultSet rset = stmt.executeQuery(SQL_REQUEST);
+ int numcols = rset.getMetaData().getColumnCount();
+ for (int i = 1; i <= numcols; i++) {
+ System.out.print("\t" + rset.getMetaData().getColumnName(i));
+ }
+ System.out.println();
+ while (rset.next()) {
+ for (int i = 1; i <= numcols; i++) {
+ System.out.print("\t" + rset.getString(i));
+ }
+ System.out.println("");
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static void main(String[] args) {
+ GeronimoTransactionManagerUtil tmUtil = null;
+
+ if (args.length != 2 || (!args[0].equals("commit") && !args[0].equals("rollback"))) {
+ System.out.println(USAGE + "\n");
+ System.exit(1);
+ }
+
+ String completion = args[0];
+ float transferAmount = 0;
+ try {
+ transferAmount = Float.parseFloat(args[1]);
+ } catch (NumberFormatException e) {
+ System.out.println(USAGE);
+ System.out.println("[transferAmount] has to be a float\n");
+ System.exit(1);
+ }
+
+ System.out.println("INIT database");
+ try{
+ new DatabaseSetupUtil("BankAccountDBConfig.xml");
+ }catch(Exception e){
+ e.printStackTrace();
+ System.exit(1);
+ }
+
+ try {
+ System.out.println("INIT transaction manager");
+ tmUtil = new GeronimoTransactionManagerUtil();
+ tmUtil.initTransactionManager();
+ tmUtil.startTransaction();
+ } catch (Exception e) {
+ System.out.println("Exception of type :" + e.getClass().getName() + " has been thrown");
+ System.out.println("Exception message :" + e.getMessage());
+ e.printStackTrace();
+ System.exit(1);
+ }
+
+ try {
+ System.out.println("Get a connection");
+ conn = tmUtil.getConnection();
+ conn.setAutoCommit(false);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ System.out.println("Before transaction, table is:");
+ printTable();
+
+ try {
+ System.out.println("Begin a transaction");
+ init(); //initialize DAS instance
+ System.out.println("Update the table - 2 accounts");
+ withdrawFromBankAccount1(transferAmount);
+ depositToBankAccount2(transferAmount);
+
+ if (completion.equals("commit")) {
+ System.out.println("*commit* the transaction");
+ tmUtil.commitTransaction();
+ } else {
+ System.out.println("*rollback* the transaction");
+ tmUtil.rollbackTransaction();
+ }
+ } catch (Exception e) {
+ System.out.println("Exception of type :" + e.getClass().getName() + " has been thrown");
+ System.out.println("Exception message :" + e.getMessage());
+ e.printStackTrace();
+ System.exit(1);
+ }
+
+ System.out.println("After transaction, table is:");
+ printTable();
+
+ System.out.println("Cleanup");
+ try {
+ tmUtil.cleanup();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ System.out.println("End MoneyTransfer\n");
+ System.exit(0);
+ }
+
+ private static void init(){
+ try{
+ das = DAS.FACTORY.createDAS(getConfig("BankAccounts.xml"), conn);
+ }catch(Exception e){
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * Withdraw asked amount from account1
+ * @return
+ */
+ public static final void withdrawFromBankAccount1(float transferAmount) {
+ Command read = das.getCommand("BankAccount1Data");
+ DataObject root = read.executeQuery();
+ DataObject account1 = (DataObject)root.getList("BANKACCOUNT").get(0);
+ float currentBalance = account1.getFloat("BALANCE");
+ float newBalance = currentBalance - transferAmount;
+ account1.setFloat("BALANCE", newBalance);
+ das.applyChanges(root);
+ }
+
+ /**
+ * Deposit asked amount into account2
+ * @return
+ */
+ public static final void depositToBankAccount2(float transferAmount) {
+ Command read = das.getCommand("BankAccount2Data");
+ DataObject root = read.executeQuery();
+ DataObject account2 = (DataObject)root.getList("BANKACCOUNT").get(0);
+ float currentBalance = account2.getFloat("BALANCE");
+ float newBalance = currentBalance + transferAmount;
+ account2.setFloat("BALANCE", newBalance);
+ das.applyChanges(root);
+ }
+
+ /**Utilities
+ *
+ * @param fileName
+ * @return
+ */
+ private static InputStream getConfig(String fileName) {
+ MoneyTransfer jdbcExample = new MoneyTransfer();
+ return jdbcExample.getClass().getClassLoader().getResourceAsStream(fileName);
+ }
+}
diff --git a/das-java/trunk/samples/transaction/src/main/resources/BankAccountDBConfig.xml b/das-java/trunk/samples/transaction/src/main/resources/BankAccountDBConfig.xml
new file mode 100644
index 0000000000..1ade9f2341
--- /dev/null
+++ b/das-java/trunk/samples/transaction/src/main/resources/BankAccountDBConfig.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ -->
+<DBConfig xmlns="http:///org.apache.tuscany.das.rdb/dbconfig.xsd">
+ <ConnectionInfo>
+ <ConnectionProperties
+ driverClass="com.mysql.jdbc.Driver"
+ databaseURL="jdbc:mysql://localhost/dastest?createDatabaseIfNotExist=true"
+ userName="root"
+ password="mypwd"/>
+ </ConnectionInfo>
+
+ <Table name="BANKACCOUNT" SQLCreate="CREATE TABLE BANKACCOUNT (ID INT PRIMARY KEY NOT NULL, NAME VARCHAR(30), BALANCE float )type=InnoDB">
+ <row>1, 'John Feng', 1200</row>
+ <row>2, 'John Feng', 0</row>
+ </Table>
+
+</DBConfig>
diff --git a/das-java/trunk/samples/transaction/src/main/resources/BankAccounts.xml b/das-java/trunk/samples/transaction/src/main/resources/BankAccounts.xml
new file mode 100644
index 0000000000..09c1a5bb04
--- /dev/null
+++ b/das-java/trunk/samples/transaction/src/main/resources/BankAccounts.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ -->
+ <Config xmlns="http:///org.apache.tuscany.das.rdb/config.xsd">
+ <ConnectionInfo managedtx="false" />
+
+ <Command name="BankAccount1Data" SQL="select ID, NAME, BALANCE from BANKACCOUNT where ID=1" kind="Select"/>
+ <Command name="BankAccount2Data" SQL="select ID, NAME, BALANCE from BANKACCOUNT where ID=2" kind="Select"/>
+
+ <Table tableName="BANKACCOUNT">
+ <Column columnName="ID" primaryKey="true"/>
+ </Table>
+
+</Config>