001: /*
002: * JBoss, Home of Professional Open Source.
003: * Copyright 2006, Red Hat Middleware LLC, and individual contributors
004: * as indicated by the @author tags. See the copyright.txt file in the
005: * distribution for a full listing of individual contributors.
006: *
007: * This is free software; you can redistribute it and/or modify it
008: * under the terms of the GNU Lesser General Public License as
009: * published by the Free Software Foundation; either version 2.1 of
010: * the License, or (at your option) any later version.
011: *
012: * This software is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this software; if not, write to the Free
019: * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
021: */
022: package org.jboss.test.tm.test;
023:
024: import javax.management.ObjectName;
025: import javax.transaction.RollbackException;
026: import javax.transaction.Status;
027: import javax.transaction.xa.XAException;
028: import javax.transaction.xa.XAResource;
029:
030: import junit.framework.Test;
031:
032: import org.jboss.test.JBossTestCase;
033: import org.jboss.test.JBossTestSetup;
034: import org.jboss.test.tm.resource.Operation;
035: import org.jboss.test.tm.resource.Resource;
036:
037: /**
038: * Tests for the transaction manager
039: * @author Adrian@jboss.org
040: * @version $Revision: 57211 $
041: */
042: public class TransactionManagerUnitTestCase extends JBossTestCase {
043: static String[] SIG = new String[] { String.class.getName(),
044: new Operation[0].getClass().getName() };
045:
046: ObjectName tmMBean;
047:
048: public TransactionManagerUnitTestCase(String name) {
049: super (name);
050:
051: try {
052: tmMBean = new ObjectName(
053: "jboss.test:test=TransactionManagerUnitTestCase");
054: } catch (Exception e) {
055: throw new RuntimeException(e.toString());
056: }
057: }
058:
059: public void runTest(Operation[] ops) throws Exception {
060: getServer().invoke(tmMBean, "testOperations",
061: new Object[] { getName(), ops }, SIG);
062: }
063:
064: public static Test suite() throws Exception {
065: return new JBossTestSetup(getDeploySetup(
066: TransactionManagerUnitTestCase.class, "tmtest.sar"));
067: }
068:
069: public void testNoResourcesCommit() throws Exception {
070: runTest(new Operation[] {
071: new Operation(Operation.BEGIN, 1),
072: new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE),
073: new Operation(Operation.COMMIT, 1), });
074: }
075:
076: public void testNoResourcesRollback() throws Exception {
077: runTest(new Operation[] {
078: new Operation(Operation.BEGIN, 1),
079: new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE),
080: new Operation(Operation.ROLLBACK, 1), });
081: }
082:
083: public void testNoResourcesSuspendResume() throws Exception {
084: runTest(new Operation[] {
085: new Operation(Operation.BEGIN, 1),
086: new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE),
087: new Operation(Operation.SUSPEND, 1),
088: new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE),
089: new Operation(Operation.RESUME, 1),
090: new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE),
091: new Operation(Operation.COMMIT, 1), });
092: }
093:
094: public void testOneResourceCommit() throws Exception {
095: runTest(new Operation[] {
096: new Operation(Operation.BEGIN, 1),
097: new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE),
098: new Operation(Operation.CREATE, 1),
099: new Operation(Operation.ENLIST, 1),
100: new Operation(Operation.STATE, 1, Resource.ACTIVE),
101: new Operation(Operation.COMMIT, 1),
102: new Operation(Operation.STATE, 1, Resource.COMMITTED), });
103: }
104:
105: public void testOneResourceRollback() throws Exception {
106: runTest(new Operation[] {
107: new Operation(Operation.BEGIN, 1),
108: new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE),
109: new Operation(Operation.CREATE, 1),
110: new Operation(Operation.ENLIST, 1),
111: new Operation(Operation.STATE, 1, Resource.ACTIVE),
112: new Operation(Operation.ROLLBACK, 1),
113: new Operation(Operation.STATE, 1, Resource.ROLLEDBACK), });
114: }
115:
116: public void testOneResourceSetRollback() throws Exception {
117: runTest(new Operation[] {
118: new Operation(Operation.BEGIN, 1),
119: new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE),
120: new Operation(Operation.CREATE, 1),
121: new Operation(Operation.ENLIST, 1),
122: new Operation(Operation.STATE, 1, Resource.ACTIVE),
123: new Operation(Operation.SETROLLBACK, 1),
124: new Operation(Operation.STATUS, 1,
125: Status.STATUS_MARKED_ROLLBACK),
126: new Operation(Operation.COMMIT, 1, 0,
127: new RollbackException()),
128: new Operation(Operation.STATE, 1, Resource.ROLLEDBACK), });
129: }
130:
131: public void testLocalResourceCommit() throws Exception {
132: runTest(new Operation[] {
133: new Operation(Operation.BEGIN, 1),
134: new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE),
135: new Operation(Operation.CREATE_LOCAL, 1),
136: new Operation(Operation.ENLIST, 1),
137: new Operation(Operation.STATE, 1, Resource.ACTIVE),
138: new Operation(Operation.COMMIT, 1),
139: new Operation(Operation.STATE, 1, Resource.COMMITTED), });
140: }
141:
142: public void testLocalResourceRollback() throws Exception {
143: runTest(new Operation[] {
144: new Operation(Operation.BEGIN, 1),
145: new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE),
146: new Operation(Operation.CREATE_LOCAL, 1),
147: new Operation(Operation.ENLIST, 1),
148: new Operation(Operation.STATE, 1, Resource.ACTIVE),
149: new Operation(Operation.ROLLBACK, 1),
150: new Operation(Operation.STATE, 1, Resource.ROLLEDBACK), });
151: }
152:
153: public void testLocalResourceSetRollback() throws Exception {
154: runTest(new Operation[] {
155: new Operation(Operation.BEGIN, 1),
156: new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE),
157: new Operation(Operation.CREATE_LOCAL, 1),
158: new Operation(Operation.ENLIST, 1),
159: new Operation(Operation.STATE, 1, Resource.ACTIVE),
160: new Operation(Operation.SETROLLBACK, 1),
161: new Operation(Operation.STATUS, 1,
162: Status.STATUS_MARKED_ROLLBACK),
163: new Operation(Operation.COMMIT, 1, 0,
164: new RollbackException()),
165: new Operation(Operation.STATE, 1, Resource.ROLLEDBACK), });
166: }
167:
168: public void testLocalResourceCommitFail() throws Exception {
169: runTest(new Operation[] {
170: new Operation(Operation.BEGIN, 1),
171: new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE),
172: new Operation(Operation.CREATE_LOCAL, 1),
173: new Operation(Operation.ENLIST, 1),
174: new Operation(Operation.STATE, 1, Resource.ACTIVE),
175: new Operation(Operation.FAIL_LOCAL, 1),
176: new Operation(Operation.COMMIT, 1, 0,
177: new RollbackException()),
178: new Operation(Operation.STATE, 1, Resource.ROLLEDBACK), });
179: }
180:
181: public void testTwoResourceSameRMCommit() throws Exception {
182: runTest(new Operation[] {
183: new Operation(Operation.BEGIN, 1),
184: new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE),
185: new Operation(Operation.CREATE, 1),
186: new Operation(Operation.ENLIST, 1),
187: new Operation(Operation.STATE, 1, Resource.ACTIVE),
188: new Operation(Operation.CREATE, 2),
189: new Operation(Operation.ENLIST, 2),
190: new Operation(Operation.STATE, 2, Resource.ACTIVE),
191: new Operation(Operation.COMMIT, 1),
192: new Operation(Operation.STATE, 1, Resource.COMMITTED),
193: new Operation(Operation.STATE, 2, Resource.COMMITTED), });
194: }
195:
196: public void testTwoResourceSameRMRollback() throws Exception {
197: runTest(new Operation[] {
198: new Operation(Operation.BEGIN, 1),
199: new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE),
200: new Operation(Operation.CREATE, 1),
201: new Operation(Operation.ENLIST, 1),
202: new Operation(Operation.STATE, 1, Resource.ACTIVE),
203: new Operation(Operation.CREATE, 2),
204: new Operation(Operation.ENLIST, 2),
205: new Operation(Operation.STATE, 2, Resource.ACTIVE),
206: new Operation(Operation.ROLLBACK, 1),
207: new Operation(Operation.STATE, 1, Resource.ROLLEDBACK),
208: new Operation(Operation.STATE, 2, Resource.ROLLEDBACK), });
209: }
210:
211: public void testTwoResourceSameRMSetRollback() throws Exception {
212: runTest(new Operation[] {
213: new Operation(Operation.BEGIN, 1),
214: new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE),
215: new Operation(Operation.CREATE, 1),
216: new Operation(Operation.ENLIST, 1),
217: new Operation(Operation.STATE, 1, Resource.ACTIVE),
218: new Operation(Operation.CREATE, 2),
219: new Operation(Operation.ENLIST, 2),
220: new Operation(Operation.STATE, 2, Resource.ACTIVE),
221: new Operation(Operation.SETROLLBACK, 1),
222: new Operation(Operation.STATUS, 1,
223: Status.STATUS_MARKED_ROLLBACK),
224: new Operation(Operation.COMMIT, 1, 0,
225: new RollbackException()),
226: new Operation(Operation.STATE, 1, Resource.ROLLEDBACK),
227: new Operation(Operation.STATE, 2, Resource.ROLLEDBACK), });
228: }
229:
230: public void testTwoResourceDifferentRMCommitOneReadOnly()
231: throws Exception {
232: runTest(new Operation[] {
233: new Operation(Operation.BEGIN, 1),
234: new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE),
235: new Operation(Operation.CREATE, 1),
236: new Operation(Operation.ENLIST, 1),
237: new Operation(Operation.STATE, 1, Resource.ACTIVE),
238: new Operation(Operation.SETSTATUS, 1,
239: XAResource.XA_RDONLY),
240: new Operation(Operation.CREATE, 2),
241: new Operation(Operation.ENLIST, 2),
242: new Operation(Operation.DIFFRM, 2),
243: new Operation(Operation.STATE, 2, Resource.ACTIVE),
244: new Operation(Operation.COMMIT, 1),
245: new Operation(Operation.STATE, 1, Resource.PREPARED),
246: new Operation(Operation.STATE, 2, Resource.COMMITTED), });
247: }
248:
249: public void testTwoResourceDifferentRMRollbackOneReadOnly()
250: throws Exception {
251: runTest(new Operation[] {
252: new Operation(Operation.BEGIN, 1),
253: new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE),
254: new Operation(Operation.CREATE, 1),
255: new Operation(Operation.ENLIST, 1),
256: new Operation(Operation.STATE, 1, Resource.ACTIVE),
257: new Operation(Operation.SETSTATUS, 1,
258: XAResource.XA_RDONLY),
259: new Operation(Operation.CREATE, 2),
260: new Operation(Operation.ENLIST, 2),
261: new Operation(Operation.DIFFRM, 2),
262: new Operation(Operation.STATE, 2, Resource.ACTIVE),
263: new Operation(Operation.ROLLBACK, 1),
264: new Operation(Operation.STATE, 1, Resource.ROLLEDBACK),
265: new Operation(Operation.STATE, 2, Resource.ROLLEDBACK), });
266: }
267:
268: public void testTwoResourceDifferentRMSetRollbackOneReadOnly()
269: throws Exception {
270: runTest(new Operation[] {
271: new Operation(Operation.BEGIN, 1),
272: new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE),
273: new Operation(Operation.CREATE, 1),
274: new Operation(Operation.ENLIST, 1),
275: new Operation(Operation.STATE, 1, Resource.ACTIVE),
276: new Operation(Operation.SETSTATUS, 1,
277: XAResource.XA_RDONLY),
278: new Operation(Operation.CREATE, 2),
279: new Operation(Operation.ENLIST, 2),
280: new Operation(Operation.DIFFRM, 2),
281: new Operation(Operation.STATE, 2, Resource.ACTIVE),
282: new Operation(Operation.SETROLLBACK, 1),
283: new Operation(Operation.STATUS, 1,
284: Status.STATUS_MARKED_ROLLBACK),
285: new Operation(Operation.COMMIT, 1, 0,
286: new RollbackException()),
287: new Operation(Operation.STATE, 1, Resource.ROLLEDBACK),
288: new Operation(Operation.STATE, 2, Resource.ROLLEDBACK), });
289: }
290:
291: public void testTwoResourceOneLocalCommitOneReadOnly()
292: throws Exception {
293: runTest(new Operation[] {
294: new Operation(Operation.BEGIN, 1),
295: new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE),
296: new Operation(Operation.CREATE_LOCAL, 1),
297: new Operation(Operation.ENLIST, 1),
298: new Operation(Operation.STATE, 1, Resource.ACTIVE),
299: new Operation(Operation.CREATE, 2),
300: new Operation(Operation.ENLIST, 2),
301: new Operation(Operation.STATE, 2, Resource.ACTIVE),
302: new Operation(Operation.SETSTATUS, 2,
303: XAResource.XA_RDONLY),
304: new Operation(Operation.COMMIT, 1),
305: new Operation(Operation.STATE, 1, Resource.COMMITTED),
306: new Operation(Operation.STATE, 2, Resource.PREPARED), });
307: }
308:
309: public void testTwoResourceOneLocalRollbackOneReadOnly()
310: throws Exception {
311: runTest(new Operation[] {
312: new Operation(Operation.BEGIN, 1),
313: new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE),
314: new Operation(Operation.CREATE_LOCAL, 1),
315: new Operation(Operation.ENLIST, 1),
316: new Operation(Operation.STATE, 1, Resource.ACTIVE),
317: new Operation(Operation.CREATE, 2),
318: new Operation(Operation.ENLIST, 2),
319: new Operation(Operation.STATE, 2, Resource.ACTIVE),
320: new Operation(Operation.SETSTATUS, 2,
321: XAResource.XA_RDONLY),
322: new Operation(Operation.ROLLBACK, 1),
323: new Operation(Operation.STATE, 1, Resource.ROLLEDBACK),
324: new Operation(Operation.STATE, 2, Resource.ROLLEDBACK), });
325: }
326:
327: public void testTwoResourceOneLocalSetRollbackOneReadOnly()
328: throws Exception {
329: runTest(new Operation[] {
330: new Operation(Operation.BEGIN, 1),
331: new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE),
332: new Operation(Operation.CREATE_LOCAL, 1),
333: new Operation(Operation.ENLIST, 1),
334: new Operation(Operation.STATE, 1, Resource.ACTIVE),
335: new Operation(Operation.CREATE, 2),
336: new Operation(Operation.ENLIST, 2),
337: new Operation(Operation.STATE, 2, Resource.ACTIVE),
338: new Operation(Operation.SETSTATUS, 2,
339: XAResource.XA_RDONLY),
340: new Operation(Operation.SETROLLBACK, 1),
341: new Operation(Operation.STATUS, 1,
342: Status.STATUS_MARKED_ROLLBACK),
343: new Operation(Operation.COMMIT, 1, 0,
344: new RollbackException()),
345: new Operation(Operation.STATE, 1, Resource.ROLLEDBACK),
346: new Operation(Operation.STATE, 2, Resource.ROLLEDBACK), });
347: }
348:
349: public void testTwoResourceOneLocalCommitFailOneReadOnly()
350: throws Exception {
351: runTest(new Operation[] {
352: new Operation(Operation.BEGIN, 1),
353: new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE),
354: new Operation(Operation.CREATE_LOCAL, 1),
355: new Operation(Operation.ENLIST, 1),
356: new Operation(Operation.STATE, 1, Resource.ACTIVE),
357: new Operation(Operation.CREATE, 2),
358: new Operation(Operation.ENLIST, 2),
359: new Operation(Operation.STATE, 2, Resource.ACTIVE),
360: new Operation(Operation.SETSTATUS, 2,
361: XAResource.XA_RDONLY),
362: new Operation(Operation.FAIL_LOCAL, 1),
363: new Operation(Operation.COMMIT, 1, 0,
364: new RollbackException()),
365: new Operation(Operation.STATE, 1, Resource.ROLLEDBACK),
366: new Operation(Operation.STATE, 2, Resource.PREPARED), });
367: }
368:
369: public void testTwoResourceDifferentRMCommit() throws Exception {
370: runTest(new Operation[] {
371: new Operation(Operation.BEGIN, 1),
372: new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE),
373: new Operation(Operation.CREATE, 1),
374: new Operation(Operation.ENLIST, 1),
375: new Operation(Operation.STATE, 1, Resource.ACTIVE),
376: new Operation(Operation.CREATE, 2),
377: new Operation(Operation.ENLIST, 2),
378: new Operation(Operation.DIFFRM, 2),
379: new Operation(Operation.STATE, 2, Resource.ACTIVE),
380: new Operation(Operation.COMMIT, 1),
381: new Operation(Operation.STATE, 1, Resource.COMMITTED),
382: new Operation(Operation.STATE, 2, Resource.COMMITTED), });
383: }
384:
385: public void testTwoResourceDifferentRMRollback() throws Exception {
386: runTest(new Operation[] {
387: new Operation(Operation.BEGIN, 1),
388: new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE),
389: new Operation(Operation.CREATE, 1),
390: new Operation(Operation.ENLIST, 1),
391: new Operation(Operation.STATE, 1, Resource.ACTIVE),
392: new Operation(Operation.CREATE, 2),
393: new Operation(Operation.ENLIST, 2),
394: new Operation(Operation.DIFFRM, 2),
395: new Operation(Operation.STATE, 2, Resource.ACTIVE),
396: new Operation(Operation.ROLLBACK, 1),
397: new Operation(Operation.STATE, 1, Resource.ROLLEDBACK),
398: new Operation(Operation.STATE, 2, Resource.ROLLEDBACK), });
399: }
400:
401: public void testTwoResourceDifferentRMSetRollback()
402: throws Exception {
403: runTest(new Operation[] {
404: new Operation(Operation.BEGIN, 1),
405: new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE),
406: new Operation(Operation.CREATE, 1),
407: new Operation(Operation.ENLIST, 1),
408: new Operation(Operation.STATE, 1, Resource.ACTIVE),
409: new Operation(Operation.CREATE, 2),
410: new Operation(Operation.ENLIST, 2),
411: new Operation(Operation.DIFFRM, 2),
412: new Operation(Operation.STATE, 2, Resource.ACTIVE),
413: new Operation(Operation.SETROLLBACK, 1),
414: new Operation(Operation.STATUS, 1,
415: Status.STATUS_MARKED_ROLLBACK),
416: new Operation(Operation.COMMIT, 1, 0,
417: new RollbackException()),
418: new Operation(Operation.STATE, 1, Resource.ROLLEDBACK),
419: new Operation(Operation.STATE, 2, Resource.ROLLEDBACK), });
420: }
421:
422: public void testTwoResourceOneLocalCommit() throws Exception {
423: runTest(new Operation[] {
424: new Operation(Operation.BEGIN, 1),
425: new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE),
426: new Operation(Operation.CREATE_LOCAL, 1),
427: new Operation(Operation.ENLIST, 1),
428: new Operation(Operation.STATE, 1, Resource.ACTIVE),
429: new Operation(Operation.CREATE, 2),
430: new Operation(Operation.ENLIST, 2),
431: new Operation(Operation.STATE, 2, Resource.ACTIVE),
432: new Operation(Operation.COMMIT, 1),
433: new Operation(Operation.STATE, 1, Resource.COMMITTED),
434: new Operation(Operation.STATE, 2, Resource.COMMITTED), });
435: }
436:
437: public void testTwoResourceOneLocalRollback() throws Exception {
438: runTest(new Operation[] {
439: new Operation(Operation.BEGIN, 1),
440: new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE),
441: new Operation(Operation.CREATE_LOCAL, 1),
442: new Operation(Operation.ENLIST, 1),
443: new Operation(Operation.STATE, 1, Resource.ACTIVE),
444: new Operation(Operation.CREATE, 2),
445: new Operation(Operation.ENLIST, 2),
446: new Operation(Operation.STATE, 2, Resource.ACTIVE),
447: new Operation(Operation.ROLLBACK, 1),
448: new Operation(Operation.STATE, 1, Resource.ROLLEDBACK),
449: new Operation(Operation.STATE, 2, Resource.ROLLEDBACK), });
450: }
451:
452: public void testTwoResourceOneLocalSetRollback() throws Exception {
453: runTest(new Operation[] {
454: new Operation(Operation.BEGIN, 1),
455: new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE),
456: new Operation(Operation.CREATE_LOCAL, 1),
457: new Operation(Operation.ENLIST, 1),
458: new Operation(Operation.STATE, 1, Resource.ACTIVE),
459: new Operation(Operation.CREATE, 2),
460: new Operation(Operation.ENLIST, 2),
461: new Operation(Operation.STATE, 2, Resource.ACTIVE),
462: new Operation(Operation.SETROLLBACK, 1),
463: new Operation(Operation.STATUS, 1,
464: Status.STATUS_MARKED_ROLLBACK),
465: new Operation(Operation.COMMIT, 1, 0,
466: new RollbackException()),
467: new Operation(Operation.STATE, 1, Resource.ROLLEDBACK),
468: new Operation(Operation.STATE, 2, Resource.ROLLEDBACK), });
469: }
470:
471: public void testTwoResourceOneLocalCommitFail() throws Exception {
472: runTest(new Operation[] {
473: new Operation(Operation.BEGIN, 1),
474: new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE),
475: new Operation(Operation.CREATE_LOCAL, 1),
476: new Operation(Operation.ENLIST, 1),
477: new Operation(Operation.STATE, 1, Resource.ACTIVE),
478: new Operation(Operation.CREATE, 2),
479: new Operation(Operation.ENLIST, 2),
480: new Operation(Operation.STATE, 2, Resource.ACTIVE),
481: new Operation(Operation.FAIL_LOCAL, 1),
482: new Operation(Operation.COMMIT, 1, 0,
483: new RollbackException()),
484: new Operation(Operation.STATE, 1, Resource.ROLLEDBACK),
485: new Operation(Operation.STATE, 2, Resource.ROLLEDBACK), });
486: }
487:
488: public void testOneResourceCommitHeurRB() throws Exception {
489: runTest(new Operation[] {
490: new Operation(Operation.BEGIN, 1),
491: new Operation(Operation.STATUS, 1, Status.STATUS_ACTIVE),
492: new Operation(Operation.CREATE, 1),
493: new Operation(Operation.ENLIST, 1),
494: new Operation(Operation.STATE, 1, Resource.ACTIVE),
495: new Operation(Operation.SETSTATUS, 1,
496: XAException.XA_HEURRB),
497: new Operation(Operation.COMMIT, 1, 0,
498: new RollbackException()),
499: new Operation(Operation.STATE, 1, Resource.FORGOT), });
500: }
501: }
|