You are viewing a plain text version of this content. The canonical link for it is here.
Posted to kandula-dev@ws.apache.org by da...@apache.org on 2006/05/13 15:51:17 UTC
svn commit: r406100 - in
/webservices/kandula/branches/Kandula_1/src/samples/banking/src: ./
bankone/ bankone/BankOneDBMS.java bankone/BankOneSoapBindingImpl.java
Author: dasarath
Date: Sat May 13 06:51:16 2006
New Revision: 406100
URL: http://svn.apache.org/viewcvs?rev=406100&view=rev
Log: (empty)
Added:
webservices/kandula/branches/Kandula_1/src/samples/banking/src/
webservices/kandula/branches/Kandula_1/src/samples/banking/src/bankone/
webservices/kandula/branches/Kandula_1/src/samples/banking/src/bankone/BankOneDBMS.java
webservices/kandula/branches/Kandula_1/src/samples/banking/src/bankone/BankOneSoapBindingImpl.java
Added: webservices/kandula/branches/Kandula_1/src/samples/banking/src/bankone/BankOneDBMS.java
URL: http://svn.apache.org/viewcvs/webservices/kandula/branches/Kandula_1/src/samples/banking/src/bankone/BankOneDBMS.java?rev=406100&view=auto
==============================================================================
--- webservices/kandula/branches/Kandula_1/src/samples/banking/src/bankone/BankOneDBMS.java (added)
+++ webservices/kandula/branches/Kandula_1/src/samples/banking/src/bankone/BankOneDBMS.java Sat May 13 06:51:16 2006
@@ -0,0 +1,146 @@
+/*
+ * Created on May 10, 2006
+ *
+ */
+package bankone;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.transaction.xa.XAException;
+import javax.transaction.xa.XAResource;
+import javax.transaction.xa.Xid;
+
+import org.apache.geronimo.transaction.manager.NamedXAResource;
+
+/**
+ * @author Dasarath Weeratunge
+ *
+ */
+public class BankOneDBMS implements NamedXAResource {
+ private static BankOneDBMS instance;
+
+ private boolean locked;
+
+ private Xid tx;
+
+ private double account[];
+
+ private double cache[];
+
+ private Map store;
+
+ protected BankOneDBMS() {
+ this.tx = null;
+ this.cache = null;
+ this.account = new double[2];
+ this.account[0] = 0.0;
+ this.account[1] = 0.0;
+ locked = false;
+ store = Collections.synchronizedMap(new HashMap());
+ }
+
+ public static BankOneDBMS getInstance() {
+ if (instance == null)
+ instance = new BankOneDBMS();
+ return instance;
+ }
+
+ public double getBalance(int accountNo) {
+ if (cache == null)
+ return this.account[accountNo];
+ return cache[accountNo];
+ }
+
+ public double debit(int accountNo, double amount) {
+ if (cache == null)
+ throw new IllegalStateException("transaction required.");
+ return cache[accountNo] -= amount;
+ }
+
+ public double credit(int accountNo, double amount) {
+ if (cache == null)
+ throw new IllegalStateException("transaction required.");
+ return cache[accountNo] += amount;
+ }
+
+ public void commit(Xid arg0, boolean arg1) throws XAException {
+ System.out.println("[BankOneDBMS] commit");
+ if (!locked)
+ throw new XAException();
+ double[] _cache = (double[]) store.get(arg0);
+ this.account[0] = _cache[0];
+ this.account[1] = _cache[1];
+ locked = false;
+ store.remove(arg0);
+ }
+
+ public void end(Xid arg0, int arg1) throws XAException {
+ System.out.println("[BankOneDBMS] end");
+ cache = null;
+ }
+
+ public void forget(Xid arg0) throws XAException {
+ System.out.println("[BankOneDBMS] forget");
+ store.remove(arg0);
+ }
+
+ public int getTransactionTimeout() throws XAException {
+ return 0;
+ }
+
+ public boolean isSameRM(XAResource arg0) throws XAException {
+ System.out.println("[BankOneDBMS] isSameRM");
+ return arg0 == this;
+ }
+
+ public int prepare(Xid arg0) throws XAException {
+ System.out.println("[BankOneDBMS] prepare");
+ locked = true;
+ if (tx.equals(arg0))
+ return XAResource.XA_OK;
+ locked = false;
+ throw new XAException();
+ }
+
+ public Xid[] recover(int arg0) throws XAException {
+ return null;
+ }
+
+ public void rollback(Xid arg0) throws XAException {
+ System.out.println("[BankOneDBMS] rollback");
+ if (tx.equals(arg0))
+ locked = false;
+ store.remove(arg0);
+ }
+
+ public boolean setTransactionTimeout(int arg0) throws XAException {
+ return false;
+ }
+
+ public void start(Xid arg0, int arg1) throws XAException {
+ System.out.println("[BankOneDBMS] start");
+ if (locked)
+ throw new XAException();
+ this.tx = arg0;
+ cache = (double[]) store.get(arg0);
+ if (cache == null) {
+ cache = new double[2];
+ this.cache[0] = this.account[0];
+ this.cache[1] = this.account[1];
+ store.put(arg0, cache);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.geronimo.transaction.manager.NamedXAResource#getName()
+ */
+ public String getName() {
+ // TODO Auto-generated method stub
+ return "BankOneDBMS";
+ }
+
+}
\ No newline at end of file
Added: webservices/kandula/branches/Kandula_1/src/samples/banking/src/bankone/BankOneSoapBindingImpl.java
URL: http://svn.apache.org/viewcvs/webservices/kandula/branches/Kandula_1/src/samples/banking/src/bankone/BankOneSoapBindingImpl.java?rev=406100&view=auto
==============================================================================
--- webservices/kandula/branches/Kandula_1/src/samples/banking/src/bankone/BankOneSoapBindingImpl.java (added)
+++ webservices/kandula/branches/Kandula_1/src/samples/banking/src/bankone/BankOneSoapBindingImpl.java Sat May 13 06:51:16 2006
@@ -0,0 +1,71 @@
+/**
+ * BankOneSoapBindingImpl.java
+ */
+
+package bankone;
+
+import java.rmi.RemoteException;
+
+import javax.transaction.RollbackException;
+import javax.transaction.Status;
+import javax.transaction.SystemException;
+import javax.transaction.TransactionManager;
+import javax.transaction.xa.XAResource;
+
+import org.apache.kandula.geronimo.Bridge;
+
+public class BankOneSoapBindingImpl implements BankOne {
+
+ TransactionManager tm = Bridge.getInstance().getTM();
+
+ public double getBalance(int accountNo) throws RemoteException {
+ System.out.println("[BankOne] getBalance(" + accountNo + ")");
+ try {
+ if (tm.getStatus() == Status.STATUS_NO_TRANSACTION)
+ return BankOneDBMS.getInstance().getBalance(accountNo);
+ BankOneDBMS conn = getConnection();
+ double balance = conn.getBalance(accountNo);
+ closeConnection(conn);
+ return balance;
+ } catch (Exception e) {
+ throw new RemoteException(e.getMessage());
+ }
+ }
+
+ public double debit(int accountNo, double amount) throws RemoteException {
+ System.out.println("[BankOne] debit(" + accountNo + ", " + amount + ")");
+ try {
+ BankOneDBMS conn = getConnection();
+ double balance = conn.debit(accountNo, amount);
+ closeConnection(conn);
+ return balance;
+ } catch (Exception e) {
+ throw new RemoteException(e.getMessage());
+ }
+ }
+
+ public double credit(int accountNo, double amount) throws RemoteException {
+ System.out.println("[BankOne] credit(" + accountNo + ", " + amount
+ + ")");
+ try {
+ BankOneDBMS conn = getConnection();
+ double balance = conn.credit(accountNo, amount);
+ closeConnection(conn);
+ return balance;
+ } catch (Exception e) {
+ throw new RemoteException(e.getMessage());
+ }
+ }
+
+ private BankOneDBMS getConnection() throws IllegalStateException,
+ RollbackException, SystemException {
+ BankOneDBMS conn = BankOneDBMS.getInstance();
+ tm.getTransaction().enlistResource(conn);
+ return conn;
+ }
+
+ private void closeConnection(BankOneDBMS conn)
+ throws IllegalStateException, SystemException {
+ tm.getTransaction().delistResource(conn, XAResource.TMSUSPEND);
+ }
+}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: kandula-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: kandula-dev-help@ws.apache.org