1 package indyjug.jboss.ejb;
2
3 import java.util.ArrayList;
4 import java.util.Collection;
5 import java.util.Date;
6 import java.util.Iterator;
7 import javax.ejb.CreateException;
8 import javax.ejb.FinderException;
9 import javax.ejb.SessionBean;
10import javax.ejb.SessionContext;
11import javax.naming.NamingException;
12
13public class StockTraderBean implements SessionBean
14{
15 private SessionContext ctx;
16
17 public Collection getStocks() throws NamingException, FinderException
18 {
19 try
20 {
21 StockLocalHome stockHome = StockUtil.getLocalHome();
22 Collection stocks = stockHome.findAll();
23
24 return getStockValues(stocks);
25 }
26 catch (NamingException e)
27 {
28 ctx.setRollbackOnly();
29 throw e;
30 }
31 catch (FinderException e)
32 {
33 ctx.setRollbackOnly();
34 throw e;
35 }
36 }
37
38 public Collection getStocksByExchange(String exchange)
39 throws NamingException, FinderException
40 {
41 try
42 {
43 StockLocalHome stockHome = StockUtil.getLocalHome();
44 Collection stocks = stockHome.findByExchange(exchange);
45
46 return getStockValues(stocks);
47 }
48 catch (NamingException e)
49 {
50 ctx.setRollbackOnly();
51 throw e;
52 }
53 catch (FinderException e)
54 {
55 ctx.setRollbackOnly();
56 throw e;
57 }
58 }
59
60 public OrderValue trade(String exchange, String symbol, String action,
61 double price, double shares)
62 throws CreateException, NamingException, FinderException
63 {
64 try
65 {
66 StockLocalHome stockHome = StockUtil.getLocalHome();
67 StockLocal stock = stockHome.findByPrimaryKey(symbol);
68
69 OrderLocalHome orderHome = OrderUtil.getLocalHome();
70 OrderLocal order = orderHome.create(stock, action, new Date(),
71 price, shares);
72
73 return getOrderValue(order, getStockValue(stock));
74 }
75 catch (CreateException e)
76 {
77 ctx.setRollbackOnly();
78 throw e;
79 }
80 catch (NamingException e)
81 {
82 ctx.setRollbackOnly();
83 throw e;
84 }
85 catch (FinderException e)
86 {
87 ctx.setRollbackOnly();
88 throw e;
89 }
90 }
91
92 private Collection getStockValues(Collection originals)
93 {
94 Collection values = new ArrayList();
95 StockValue value = null;
96
97 for (Iterator iter = originals.iterator(); iter.hasNext();)
98 {
99 StockLocal local = (StockLocal)iter.next();
00 value = getStockValue(local);
01 values.add(value);
02 }
03
04 return values;
05 }
06
07 private StockValue getStockValue(StockLocal original)
08 {
09 StockValue value = new StockValue(original.getExchange(),
10 original.getSymbol(), original.getName(), original.getPrice());
11
12 return value;
13 }
14
15 private OrderValue getOrderValue(OrderLocal original, StockValue stock)
16 {
17 OrderValue value = new OrderValue(stock, original.getAction(),
18 original.getDate(), original.getPrice(), original.getShares());
19
20 return value;
21 }
22
23 public void ejbCreate() throws CreateException
24 {
25 }
26
27 public void ejbRemove()
28 {
29 }
30
31 public void ejbActivate()
32 {
33 }
34
35 public void ejbPassivate()
36 {
37 }
38
39 public void setSessionContext(SessionContext ctx)
40 {
41 this.ctx = ctx;
42 }
43
44 public void unsetSessionContext()
45 {
46 this.ctx = null;
47 }
48}
49