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