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.ejb3.test.bank;
023:
024: import java.util.Collection;
025: import java.util.Iterator;
026: import javax.annotation.Resource;
027: import javax.ejb.TimerService;
028: import javax.naming.InitialContext;
029: import javax.transaction.TransactionManager;
030: import org.jboss.logging.Logger;
031:
032: /**
033: * @see <related>
034: * @author $Author: wolfc $
035: * @version $Revision: 60233 $
036: */
037: public class TellerBean implements Teller {
038: private static final Logger log = Logger
039: .getLogger(TellerBean.class);
040:
041: @Resource
042: private TimerService ts;
043: private TransactionManager tm;
044: private Bank bank;
045: private boolean constructed = false;
046: private String defaultValue = "original";
047:
048: public boolean isConstructed() {
049: return constructed;
050: }
051:
052: public void setTransactionManager(TransactionManager tm) {
053: this .tm = tm;
054: System.out.println("TransactionManager set: " + tm);
055: }
056:
057: public void transfer(Account from, Account to, float amount)
058: throws BankException {
059: try {
060: from.withdraw(amount);
061: to.deposit(amount);
062: } catch (Exception e) {
063: throw new BankException("Could not transfer " + amount
064: + " from " + from + " to " + to, e);
065: }
066: }
067:
068: public Account createAccount(Customer customer, float balance)
069: throws BankException {
070: try {
071: Bank bank = (Bank) new InitialContext()
072: .lookup(Bank.JNDI_NAME);
073:
074: return null;
075: } catch (Exception e) {
076: log.debug("failed", e);
077: throw new BankException("Could not create account", e);
078: }
079: }
080:
081: public Account getAccount(Customer customer, float balance)
082: throws BankException {
083: try {
084: // Check for existing account
085: Collection accounts = customer.getAccounts();
086: if (accounts.size() > 0) {
087: Iterator i = accounts.iterator();
088: Account acct = (Account) i.next();
089: // Set balance
090: acct.withdraw(acct.getBalance() - balance);
091:
092: return acct;
093: } else {
094: // Create account
095: return createAccount(customer, balance);
096: }
097: } catch (Exception e) {
098: log.debug("failed", e);
099: throw new BankException("Could not get account for "
100: + customer, e);
101: }
102: }
103:
104: public Customer getCustomer(String name) throws BankException {
105: try {
106: // Check for existing customer
107:
108: return null;
109: } catch (Exception e) {
110: log.debug("failed", e);
111: throw new BankException("Could not get customer for "
112: + name, e);
113: }
114: }
115:
116: public void transferTest(Account from, Account to, float amount,
117: int iter) throws java.rmi.RemoteException, BankException {
118: for (int i = 0; i < iter; i++) {
119: from.withdraw(amount);
120: to.deposit(amount);
121: }
122: }
123:
124: public String greetWithRequiredTransaction(String greeting)
125: throws Exception {
126: if (tm.getTransaction() == null)
127: throw new Exception("method has no tx set");
128: return greeting;
129: }
130:
131: public String greetWithNotSupportedTransaction(String greeting)
132: throws Exception {
133: if (tm.getTransaction() != null)
134: throw new Exception("method has tx set");
135: return greeting;
136: }
137:
138: public String greetWithServiceTimer(String greeting)
139: throws Exception {
140: if (ts == null)
141: throw new Exception("TimerService @Inject failed");
142: return greeting;
143: }
144:
145: public String greetUnchecked(String greeting) throws Exception {
146: if (tm.getTransaction() == null)
147: throw new Exception("method has no tx set");
148: return greeting;
149: }
150:
151: public String greetChecked(String greeting) throws Exception {
152: if (tm.getTransaction() == null)
153: throw new Exception("method has no tx set");
154: return greeting;
155: }
156:
157: public void storeCustomerId(String customerId) throws Exception {
158: bank.storeCustomerId(customerId);
159: }
160:
161: public String retrieveCustomerId() throws Exception {
162: return bank.retrieveCustomerId();
163: }
164:
165: public void excludedMethod() {
166:
167: }
168:
169: public void postConstruct() {
170: constructed = true;
171: }
172:
173: public String getDefaultValue() {
174: return defaultValue;
175: }
176:
177: public void testTransactionTimeout() {
178: boolean exceptionCaught = false;
179: try {
180: log
181: .info("************* calling bank.testTransactionTimeout()");
182: bank.testTransactionTimeout();
183: log
184: .info("************* finished calling bank.testTransactionTimeout()");
185: } catch (Exception e) {
186: log.info("********** caught exception");
187: exceptionCaught = true;
188: }
189: if (!exceptionCaught)
190: throw new RuntimeException(
191: "Failed to catch transactionTimeout");
192: }
193: }
|