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.jca.inflow;
023:
024: import javax.naming.InitialContext;
025: import javax.resource.spi.XATerminator;
026: import javax.resource.spi.endpoint.MessageEndpoint;
027: import javax.resource.spi.work.ExecutionContext;
028: import javax.resource.spi.work.Work;
029: import javax.resource.spi.work.WorkManager;
030: import javax.transaction.Transaction;
031: import javax.transaction.TransactionManager;
032: import javax.transaction.xa.XAException;
033: import javax.transaction.xa.XAResource;
034: import javax.transaction.xa.Xid;
035:
036: /**
037: * Management interface of TestResourceAdapter.
038: *
039: * @author <a href="adrian@jboss.com">Adrian Brock</a>
040: * @version $Revision: 57211 $
041: */
042: public class TestResourceAdapterTxInflow {
043: TestResourceAdapter adapter;
044:
045: public TestResourceAdapterTxInflow(TestResourceAdapter adapter) {
046: this .adapter = adapter;
047: }
048:
049: public TestResourceAdapterTxInflowResults run() throws Exception {
050: TestResourceAdapterTxInflowResults results = new TestResourceAdapterTxInflowResults();
051: try {
052: basicTest();
053: results.basicTest.pass();
054: } catch (Throwable t) {
055: results.basicTest.fail(t);
056: }
057:
058: return results;
059: }
060:
061: public TransactionManager getTransactionManager() throws Exception {
062: InitialContext ctx = new InitialContext();
063: return (TransactionManager) ctx
064: .lookup("java:/TransactionManager");
065: }
066:
067: public void basicTest() throws Exception {
068: XATerminator xt = adapter.ctx.getXATerminator();
069: WorkManager wm = adapter.ctx.getWorkManager();
070: TestWork work = new TestWork();
071: ExecutionContext ec = new ExecutionContext();
072: Xid xid = new MyXid(1);
073: ec.setXid(xid);
074:
075: wm.doWork(work, 0l, ec, null);
076: if (work.complete == false)
077: throw new Exception("Work was not done");
078: if (work.e != null)
079: throw work.e;
080: if (work.enlisted == false)
081: throw new Exception("Not enlisted");
082: if (work.delisted)
083: throw new Exception("Should not be ended yet");
084: if (work.committed)
085: throw new Exception("Should not be committed yet");
086:
087: xt.commit(xid, true);
088: if (work.delisted == false)
089: throw new Exception("Should be ended");
090: if (work.committed == false)
091: throw new Exception("Should be committed");
092: }
093:
094: public class MyXid implements Xid {
095: int id;
096:
097: public MyXid(int id) {
098: this .id = id;
099: }
100:
101: public byte[] getBranchQualifier() {
102: // TODO getBranchQualifier
103: return null;
104: }
105:
106: public int getFormatId() {
107: return 666;
108: }
109:
110: public byte[] getGlobalTransactionId() {
111: return new byte[] { (byte) id };
112: }
113: }
114:
115: public class TestWork implements Work, XAResource {
116: public boolean complete = false;
117: public Exception e;
118:
119: public boolean enlisted = false;
120: public boolean delisted = false;
121: public boolean committed = false;
122:
123: public void run() {
124: try {
125: complete = true;
126: TransactionManager tm = getTransactionManager();
127: Transaction tx = tm.getTransaction();
128: tx.enlistResource(this );
129: } catch (Exception e) {
130: this .e = e;
131: }
132: }
133:
134: public void release() {
135: }
136:
137: public void commit(Xid arg0, boolean arg1) throws XAException {
138: committed = true;
139: }
140:
141: public void end(Xid arg0, int arg1) throws XAException {
142: delisted = true;
143: }
144:
145: public void forget(Xid arg0) throws XAException {
146: throw new XAException("NYI");
147: }
148:
149: public int getTransactionTimeout() throws XAException {
150: // TODO getTransactionTimeout
151: return 0;
152: }
153:
154: public boolean isSameRM(XAResource arg0) throws XAException {
155: // TODO isSameRM
156: return false;
157: }
158:
159: public int prepare(Xid arg0) throws XAException {
160: throw new XAException("NYI");
161: }
162:
163: public Xid[] recover(int arg0) throws XAException {
164: throw new XAException("NYI");
165: }
166:
167: public void rollback(Xid arg0) throws XAException {
168: throw new XAException("NYI");
169: }
170:
171: public boolean setTransactionTimeout(int arg0)
172: throws XAException {
173: return false;
174: }
175:
176: public void start(Xid arg0, int arg1) throws XAException {
177: enlisted = true;
178: }
179: }
180: }
|