README
上传用户:xfwatch
上传日期:2020-12-14
资源大小:872k
文件大小:21k
源码类别:

中间件编程

开发平台:

Java

  1.  JBoss, Home of Professional Open Source
  2.  Copyright 2009, Red Hat, Inc., and others contributors as indicated
  3.  by the @authors tag. All rights reserved.
  4.  See the copyright.txt in the distribution for a
  5.  full listing of individual contributors.
  6.  This copyrighted material is made available to anyone wishing to use,
  7.  modify, copy, or redistribute it subject to the terms and conditions
  8.  of the GNU Lesser General Public License, v. 2.1.
  9.  This program is distributed in the hope that it will be useful, but WITHOUT A
  10.  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  11.  PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
  12.  You should have received a copy of the GNU Lesser General Public License,
  13.  v.2.1 along with this distribution; if not, write to the Free Software
  14.  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  15.  MA  02110-1301, USA.
  16. NOTE: You may like to create a backup of this folder before starting! NOTE: If you are using IPv6 you will need to change any references to localhost in the btconfig.xml files to be localhost4 or 127.0.0.1
  17. 1. INTRODUCTION
  18. ===============
  19. This example shows how to use an XA compliant database with BlackTie and has been tested against
  20. ORACLE 11g or DB2 9.7.1. 
  21. To compile in support for ORACLE you will need to pass a preprocessor macro called ORACLE
  22. to the BlackTie utility that generates executables (as explained below).
  23. To compile in support of DB2 you need to pass a preprocessor macro called DB2 to the BlackTie utility
  24. that generates executables (as explained below).
  25. The preprocessor symbol is purely for the examples use, BlackTie does not require this symbol in its
  26. internal libraries.
  27. To include a particular database during runtime you will need to update the BlackTie btconfig.xml file
  28. with information specific to the required database. The example xml files (in the linux and win32 directories)
  29. includes notes and examples on how to configure ORACLE and DB2 support. The instance names of databases
  30. refered to in btconfig.xml (specified in the open string) must match the names in the products
  31. array in the source file request.c.
  32. ORACLE ONLY
  33. Oracle 11g can be downloaded from:
  34. http://www.oracle.com/technology/software/products/database/index.html (tested on release 11.1.0.6.0)
  35. For all stages of this example it is recommended that you have set ORACLE_HOME to the distribution of 
  36. ORACLE you have installed.
  37. IMPORTANT: You must NOT have ORACLE_SID set as we are using two resource managers in this example
  38. IMPORTANT: You must have the following databases initialized with example tables: ORCL and blacktie
  39. DB2 ONLY
  40. DB2 can be downloaded from:
  41. http://www-01.ibm.com/software/data/db2/linux-unix-windows/download.html (tested on release IBM DB2 Express-C 9.7)
  42. Install instructions are available at:
  43.  http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=/com.ibm.db2.luw.qb.server.doc/doc/c0050562.html
  44. When you run the installer for DB2 Express-C choose "custom setup" and then also include the "Application Development Tools"
  45. IMPORTANT: The example assumes you have exported DB2DIR to the fully qualified include folder appropriate to your platform,
  46. e.g. /home/blacktie/sqllib and that DB2_LIB is set correctly eg $DB2DIR/lib on 64 bit systems and $DB2DIR/lib32 on 32 bit systems
  47. IMPORTANT: For all stages of this example it is recommended that you have sourced the DB2DIR/db2profile script to initialize
  48. the environment
  49. IMPORTANT: DB2 requires additional shared memory to run "sysctl -w kernel.shmmax=1024000000"
  50. IMPORTANT: If you are using multiple DB2 databases make sure they belong to the same "DB2 instance". A "DB2 instance" is a
  51. logical database server environment. This environment is controlled by setting the environment variable DB2INSTANCE to
  52. the user account that owns the DB2 server. For example, in linux, if you installed DB2 using a user account called blacktie
  53. then use
  54. export DB2INSTANCE=blacktie
  55. (if your application needs to use different server environments then you should run seperate blacktie servers for
  56. each target DB2 server environment.
  57. The example references two databases using alias names of BTDB1 and BTDB2 (if you are using different database aliases
  58. then remember to change them in btconfig.xml and reqest.c). Also note that aliases are case sensitive (in fact
  59. DB2 converts them to upper case) and 8 characters or less.
  60. For example, to create the DB2 databases using the DB2 command line tools:
  61. unix prompt> source <DB2 instance owners home dir>/sqllib/db2profile
  62. unix prompt> /opt/ibm/db2/V9.7/bin/db2
  63. Command Line Processor for DB2 Client 9.7.0
  64. db2 => db2start
  65. db2 => create database BTDB1
  66. db2 => create database BTDB2
  67. db2 => quit
  68.  
  69. 2. BUILDING THE EXAMPLE
  70. =======================
  71. Make sure your environment is suitable for running BlackTie applications by sourcing the setenv scripts
  72. that came with the BlackTie distribution. On linux systems source:
  73.     $BLACKTIE_HOME/setenv.sh
  74. and on windows execute:
  75.     %BLACKTIE_HOME%setenv.bat
  76. On Windows: 
  77. You MUST use an environment configured with the VC++ development tools, e.g. launch:
  78. C:Program FilesMicrosoft Visual Studio 9.0VCvcvarsall.bat
  79. To compile a BlackTie client and server use the generate_client and generate_server scripts that came with the
  80. distribution. The linux versions have a .sh suffix and windows versions have a .bat suffix.
  81. generate_client accepts arguments that specify which files to compile (-Dclient.includes=...), location of any required
  82. include directories (-Dx.inc.dir=) and the location of any required libraries (-Dx.lib.dir= and -Dx.libs=).
  83. [If you need to pass in more include directories and libraries use -Dx.inc.dir2=..., -Dx.lib.dir2=... and -Dx.libs2=...
  84. If you need even more, for example testing against three different resource manager products such as when testing recovery
  85. then use -Dx.inc.dir3=..., -Dx.lib.dir3=... and -Dx.libs3=...].
  86. It also accepts a list of preprocessor macro definitions (-Dx.define="comma separated list of macro names"). Thus, for example,
  87. to compile the client for use with Oracle11g:
  88. ORACLE ONLY
  89. -----------
  90. On Linux:
  91. generate_server.sh -Dservice.names=BAR -Dserver.includes="request.c ora.c DbService.c" 
  92.     -Dx.inc.dir="$ORACLE_HOME/rdbms/public" 
  93.     -Dx.lib.dir="$ORACLE_HOME/lib" -Dx.libs="occi clntsh" 
  94.     -Dx.define="ORACLE"
  95. Similarly for generating the client:
  96. generate_client.sh -Dclient.includes="client.c request.c ora.c cutil.c" 
  97.     -Dx.inc.dir="$ORACLE_HOME/rdbms/public" 
  98.     -Dx.lib.dir="$ORACLE_HOME/lib" -Dx.libs="occi clntsh" 
  99.     -Dx.define="ORACLE"
  100. On Windows:
  101. generate_server -Dservice.names=BAR -Dserver.includes="request.c ora.c DbService.c" -Dx.inc.dir="%ORACLE_HOME%OCIinclude" -Dx.lib.dir="%ORACLE_HOME%OCIlibMSVC" -Dx.libs="oci" -Dx.define="ORACLE"
  102. Similarly for generating the client:
  103. generate_client -Dclient.includes="client.c request.c ora.c cutil.c" -Dx.inc.dir="%ORACLE_HOME%OCIinclude" -Dx.lib.dir="%ORACLE_HOME%OCIlibMSVC" -Dx.libs="oci" -Dx.define="ORACLE"
  104. DB2 ONLY
  105. --------
  106. On Linux:
  107. generate_server.sh -Dservice.names=BAR -Dserver.includes="request.c db2.c DbService.c" 
  108.     -Dx.inc.dir="$DB2DIR/include" 
  109.     -Dx.lib.dir="$DB2_LIB" -Dx.libs="db2" 
  110.     -Dx.define="DB2"
  111. Similarly for generating the client:
  112. generate_client.sh -Dclient.includes="client.c request.c db2.c cutil.c" 
  113.     -Dx.inc.dir="$DB2DIR/include" 
  114.     -Dx.lib.dir="$DB2_LIB" -Dx.libs="db2" 
  115.     -Dx.define="DB2"
  116. On Windows:
  117. generate_server -Dservice.names=BAR -Dserver.includes="request.c db2.c DbService.c" 
  118.     -Dx.inc.dir="%DB2DIR%include" 
  119.     -Dx.lib.dir="%DB2_LIB%" -Dx.libs="db2api" 
  120.     -Dx.define="DB2"
  121. Similarly for generating the client:
  122. generate_client -Dclient.includes="client.c request.c db2.c cutil.c" 
  123.     -Dx.inc.dir="%DB2DIR%include" 
  124.     -Dx.lib.dir="%DB2_LIB%" -Dx.libs="db2api" 
  125.     -Dx.define="DB2"
  126. DB2 and ORACLE together
  127. -----------------------
  128. On Linux:
  129. generate_server.sh -Dservice.names=BAR -Dserver.includes="request.c db2.c ora.c DbService.c" 
  130.     -Dx.inc.dir="$ORACLE_HOME/rdbms/public" 
  131.     -Dx.inc.dir2="$DB2DIR/include" 
  132.     -Dx.lib.dir="$ORACLE_HOME/lib" -Dx.libs="occi clntsh" 
  133.     -Dx.lib.dir2="$DB2_LIB" -Dx.libs2="db2" 
  134.     -Dx.define="ORACLE,DB2"
  135. Similarly for generating the client:
  136. generate_client.sh -Dclient.includes="client.c request.c db2.c ora.c cutil.c" 
  137.     -Dx.inc.dir="$ORACLE_HOME/rdbms/public" 
  138.     -Dx.inc.dir2="$DB2DIR/include" 
  139.     -Dx.lib.dir="$ORACLE_HOME/lib" -Dx.libs="occi clntsh" 
  140.     -Dx.lib.dir2="$DB2_LIB" -Dx.libs2="db2" 
  141.     -Dx.define="ORACLE,DB2"
  142. On Windows:
  143. generate_server -Dservice.names=BAR -Dserver.includes="request.c ora.c DbService.c" -Dx.inc.dir="%ORACLE_HOME%OCIinclude" -Dx.inc.dir2="%DB2DIR%include" -Dx.lib.dir="%ORACLE_HOME%OCIlibMSVC" -Dx.libs="oci" -Dx.lib.dir2="%DB2_LIB%" -Dx.libs2="db2api" -Dx.define="ORACLE,DB2"
  144. Similarly for generating the client:
  145. generate_client -Dclient.includes="client.c request.c ora.c cutil.c" -Dx.inc.dir="%ORACLE_HOME%OCIinclude" -Dx.inc.dir2="%DB2DIR%include" -Dx.lib.dir="%ORACLE_HOME%OCIlibMSVC" -Dx.libs="oci" -Dx.lib.dir2="%DB2_LIB%" -Dx.libs2="db2api" -Dx.define="ORACLE,DB2"
  146. NOTE: If you get the following error you have not edited or executed setenv correctly:
  147. java org.apache.tools.ant.launch.Launcher -f /bin/generate-executables.xml -Dconfiguration.type=debug -Dbasedir=. -Dtoolchain.compiler=msvc server -Dservice.names=BAR -Dserver.includes="request.c ora.c DbService.c" -Dx.inc.dir="C:/<ora include dir>" -Dx.lib.dir="<ora lib dir>" -Dx.libs="occi.dll clntsh.dll" -Dx.define="ORACLE"
  148. Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/tools/ant/launch/Launcher
  149. Caused by: java.lang.ClassNotFoundException: org.apache.tools.ant.launch.Launcher
  150.         at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
  151.         at java.security.AccessController.doPrivileged(Native Method)
  152.         at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
  153.         at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
  154.         at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
  155.         at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
  156.         at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
  157. Could not find the main class: org.apache.tools.ant.launch.Launcher.  Program will exit.
  158. NOTE: On Windows - If you get the following error you have not used a command prompt with VC++ tools in it:
  159. BUILD FAILED
  160. C:blacktiedistblacktie-1.0-MR6-SNAPSHOTbingenerate-executables.xml:117: The following error occurred while executing this line:
  161. C:blacktiedistblacktie-1.0-MR6-SNAPSHOTbingenerate-executables.xml:144: Could not launch cl: java.io.IOException: Cannot run program "cl" (in directory "C:
  162. blacktiedistblacktie-1.0-MR6-SNAPSHOTexamplesxatmitxfooapptargetclasses"): CreateProcess error=2, The system cannot find the file specified
  163. 3. RUNNING THE EXAMPLE
  164. ======================
  165. Undeploy any older versions of the blacktie admin service
  166. Copy the file $BLACKTIE_HOME/blacktie-admin-services/blacktie-admin-services-<VERSION>-jar-with-dependencies.jar into $JBOSS_HOME/server/all/deploy Copy the file $BLACKTIE_HOME/blacktie-admin-services/btconfig.xml into $JBOSS_HOME/server/all/conf
  167. Start the JBoss server (<JBOSS_HOME>/bin/run.sh|bat -c all)
  168. Make sure all required libraries are on the library path:
  169. ORACLE ONLY
  170. Something like
  171.     export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
  172. or
  173.     set PATH=%PATH%;%ORACLE_HOME%bin
  174. DB2 ONLY
  175. Sourcing the db2profile should put the libraries in the path
  176. Alternatively:
  177.     export DB2INSTANCE=blacktie
  178.     export DB2_LIB=/home/mmusgrov/sqllib/lib32
  179.     export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DB2_LIB
  180. or
  181.     set PATH=%PATH%;%DB2DIR%lib
  182. BOTH
  183. As above with:
  184. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DB2_LIB:$ORACLE_HOME/lib
  185. 3.1 START THE SERVER
  186. ==================== NOTE: You must NOT have ORACLE_SID set as we are using two resource managers in this example
  187. Edit the btconfig.xml to set REPLACE_WITH_INSTALL_LOCATION as appropriate Edit the btconfig.xml to set REPLACE_WITH_HOSTNAME as appropriate export BLACKTIE_CONFIGURATION=<win32|linux>
  188. export BLACKTIE_CONFIGURATION_DIR=serv
  189. btadmin startup
  190. 3.2 START THE CLIENT
  191. ====================
  192. NOTE: You must NOT have ORACLE_SID set as we are using two resource managers in this example
  193. Indicate which platform the client is running on:
  194.     export BLACKTIE_CONFIGURATION=<win32|linux>
  195.     ./client
  196. This runs a set of tests that exercise the various ways of interacting with resource managers. Please refer
  197. to the source file cutil.c to see what client/server/transaction combinations are used.
  198. [If you run more than one client from the same directory you will need to configure a unique recovery log name by
  199. setting the following environment variable:
  200. export BLACKTIE_RC_LOG_NAME=<unique file name>
  201. NOTE: If you get the following error it means you have not exported BLACKTIE_CONFIGURATION correctly:
  202. 2010-01-25 18:11:32,704 [0x7f805f2f5750] INFO  (AtmiBrokerLogc           :67  ) - TxLog setup: prod: ora - blacktie LOCAL DELETE AT SETUP
  203. 2010-01-25 18:11:32,722 [0x7f805f2f5750] WARN  (AtmiBrokerLogc           :91  ) - TxLog BAD REQ -1 db name: blacktie
  204. 2010-01-25 18:11:32,722 [0x7f805f2f5750] INFO  (AtmiBrokerLogc           :67  ) - TxLog setup: prod: ora - ORCL LOCAL DELETE AT SETUP
  205. 2010-01-25 18:11:32,723 [0x7f805f2f5750] WARN  (AtmiBrokerLogc           :91  ) - TxLog BAD REQ -1 db name: ORCL
  206. 2010-01-25 18:11:32,730 [0x7f805f2f5750] INFO  (AtmiBrokerLogc           :67  ) - TxLog Test failed (-1)
  207. 3.3 STOP THE SERVER
  208. =================== btadmin shutdown
  209. 3.4 WHAT IF THE TESTS HANG
  210. ==========================
  211. The most likely cause is that the test is waiting on a Database lock held by in doubt transactions. Try resolving them
  212. using the tools that come with the database resource manager. For example, with DB2 run the interactive tool db2 and
  213. resolve using the command:
  214. db2 => LIST INDOUBT TRANSACTIONS WITH PROMPTING
  215. and for Oracle use, for example, sqlplus:
  216. sqlplus ....
  217. SQL> select LOCAL_TRAN_ID, STATE from DBA_2PC_PENDING;
  218. SQL>  rollback force 'Oracle transaction id';
  219. APPENDIX: RECOVERY
  220. ==================
  221. To test recovery you will need to link against a library that is only available in the test suite (which you'll need to build
  222. from source - the library is called libtx-test-utilities.so).
  223. When building the client and server define the macro TX_RC as shown below. When the client runs it sends a request to
  224. the server that causes the server to generate a segmentation fault during the commit phase of the transaction commitment
  225. protocol. This will ensure that there is a pending transaction in need of recovery. See the note below about running
  226. select statements showing that one of the database instances got the commit but the other one will have the commit pending
  227. (ie the record will not be present until the transaction is recovered).
  228. [Note, to test failure after prepare but before the commit phase runs set TX_RC=2 when compiling the client
  229. (an example client compile line is shown below). This scenario should result in the transaction eventually being rolled back].
  230. Restart the server. The BlackTie log (blacktie.log) should show the system recovering the failed transaction. The expected
  231. message sequence is:
  232. An entry that indicates BlackTie is attempting the recovery with the following message (for each failed branch):
  233. "... Recovering resource with branch id: <branch id> and recovery IOR: ..."
  234. Then after one or two minutes the branch should attempt to commit with the following message:
  235. "... Commiting resource with branch id: <branch id>"
  236. Note also that the Transaction Manager running in the JBoss AS should report messages on the console. One to show the
  237. error that occurs when the server generates a segmentation fault during commit:
  238. "14:42:23,556 WARN  [loggerI18N] [com.arjuna.ats.internal.jts.resources.rrcaught] ResourceRecord commit - caught exception: org.omg.CORBA.TRANSIENT: Retries exceeded, couldn't reconnect to 127.0.0.1:9032  vmcid: 0x0  minor code: 0  completed: No"
  239. and another message that indicates successful recovery of the pending transaction:
  240. "14:43:47,576 INFO  [loggerI18N] [com.arjuna.ats.internal.jts.recovery.transactions.TransactionCache_5] [com.arjuna.ats.internal.jts.recovery.transactions.TransactionCache_5] - Transaction 7f000001:e2a7:4aadfb4c:a89 recovery completed"
  241. Required Configuration Changes:
  242. -------------------------------
  243. The XA resource that generates the segmentation fault needs to be included in btconfig.xml as follows:
  244.             <XA_RESOURCE configuration="linux">
  245.                 <XA_RESOURCE_MGR_ID>202</XA_RESOURCE_MGR_ID>
  246.                 <XA_RESOURCE_NAME>DummyDb</XA_RESOURCE_NAME>
  247.                 <XA_OPEN_STRING></XA_OPEN_STRING>
  248.                 <XA_CLOSE_STRING></XA_CLOSE_STRING>
  249.                 <XA_SWITCH>testxasw</XA_SWITCH>
  250.                 <XA_LIB_NAME>libtx-test-utilities.so</XA_LIB_NAME>
  251.             </XA_RESOURCE>
  252. Make sure that the XA_RESOURCE_MGR_ID lies between the two ORACLE Resource Manager ids. This will ensure that the
  253. ORACLE instance with the lower id will commit but the one with the higher id will not have committed.
  254. Similarly, if you need to test against DB2 then set the XA_RESOURCE_MGR_ID appropriately. For example, the default
  255. XA_RESOURCE_MGR_ID for testing against DB2 are 302 and 304 (see btconfig.xml) then use the value 303.
  256. The example needs to be compiled with the preprocessor definition TX_RC_RMID set to the correct XA_RESOURCE_MGR_ID
  257. (the default is 202).
  258. The test inserts an employee with id 8004 into the emp table. After running the client:
  259. select empno from emp where empno=8004; should return 1 record on the db with sid ORCL
  260. select empno from emp where empno=8004; should return 0 records on the db with sid blacktie.
  261. When the server is restarted and recovery is complete (should take a couple of minutes) retry the selects. This time
  262. both instances should return 1 record.
  263. Note that after failure the server needs to either restart on the same ORB endpoint (the easiest to configure)
  264. or needs to use a CORBA implementaton repository:
  265. - to use the same end point add something similar to the following in the ORBOPT environment entry (the portspan is required
  266. since the server can start more than one orb so a range of ports is necessary):
  267. <NAME>ORBOPT</NAME>
  268.     <VALUE>-ORBListenEndpoints iiop://REPLACE_WITH_HOSTNAME:9032/portspan=10 -ORBInitRef ...</VALUE>
  269. - or to use an implementation repository:
  270. <NAME>ORBOPT</NAME>
  271. <VALUE>-ORBUseImR 1 -ORBInitRef ...</VALUE>
  272. Example command line for compiling and linking the server and client (defines the TX_RC macro and links against the
  273. dummy XA resource library):
  274. On Linux:
  275. generate_client.sh -Dclient.includes="client.c request.c ora.c cutil.c" 
  276.      -Dx.inc.dir="$HOME/blacktie/trunk/atmibroker-tx/target/cxx/test/include" 
  277.      -Dx.inc.dir2="$ORACLE_HOME/rdbms/public" 
  278.      -Dx.lib.dir="$HOME/blacktie/trunk/atmibroker-tx/target/cxx/test/lib" -Dx.libs="tx-test-utilities" 
  279.      -Dx.lib.dir2="$ORACLE_HOME/lib" -Dx.libs2="occi clntsh" 
  280.      -Dx.define="ORACLE, TX_RC"
  281. generate_server.sh -Dservice.names=BAR -Dserver.includes="request.c ora.c DbService.c" 
  282.      -Dx.inc.dir="$HOME/blacktie/trunk/atmibroker-tx/target/cxx/test/include" 
  283.      -Dx.inc.dir2="$ORACLE_HOME/rdbms/public" 
  284.      -Dx.lib.dir="$HOME/blacktie/trunk/atmibroker-tx/target/cxx/test/lib" -Dx.libs="tx-test-utilities" 
  285.      -Dx.lib.dir2="$ORACLE_HOME/lib" -Dx.libs2="occi clntsh" 
  286.      -Dx.define="ORACLE, TX_RC"
  287. [Note: If you need to test DB2 recovery you will need to add an extra preprocessor define (see comment above regarding the
  288. XA_RESOURCE_MGR_ID setting for the DummyDb resource manager):
  289.      -Dx.define="ORACLE, TX_RC,TX_RC_RMID=302" ]
  290. On Windows:
  291. generate_client -Dclient.includes="client.c request.c ora.c cutil.c" -Dx.inc.dir="%ORACLE_HOME%OCIinclude" -Dx.lib.dir="%ORACLE_HOME%OCIlibMSVC" -Dx.libs="oci"      -Dx.inc.dir2="c:/blacktie/trunk/atmibroker-tx/target/cxx/test/include"      -Dx.lib.dir2="c:/blacktie/trunk/atmibroker-tx/target/cxx/test/lib" -Dx.libs2="tx-test-utilities"     -Dx.define="ORACLE, TX_RC"
  292. generate_server -Dservice.names=BAR -Dserver.includes="request.c ora.c DbService.c" -Dx.inc.dir="%ORACLE_HOME%OCIinclude" -Dx.lib.dir="%ORACLE_HOME%OCIlibMSVC" -Dx.libs="oci"           -Dx.inc.dir2="C:/blacktie/trunk/atmibroker-tx/target/cxx/test/include"      -Dx.lib.dir2="c:/blacktie/trunk/atmibroker-tx/target/cxx/test/lib" -Dx.libs2="tx-test-utilities"      -Dx.define="ORACLE, TX_RC"
  293. Note that the library path needs to include the location of the tx-test-utilities library. For example:
  294. On Linux:
  295. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:$HOME/blacktie/trunk/atmibroker-tx/target/cxx/test/lib
  296. On Windows:
  297. set PATH=%PATH%;%ORACLE_HOME%/bin;c:/blacktie/trunk/atmibroker-tx/target/cxx/test/lib
  298. Note that recovery implies that the various components in the system need to store state on disk. If things don't go according
  299. to plan you will need to either manually recover the transaction or, since this is only a demo example, manually
  300. clear the logs:
  301. BlackTie recovery log: fooapp* # safe to delete these logs
  302. JBossTS logs: $JBOSS_HOME/server/<server name>/data/tx-object-store/
  303. # probably not wise to delete these unless you know that there are no other transactions in the system