001: /**
002: * EasyBeans
003: * Copyright (C) 2006 Bull S.A.S.
004: * Contact: easybeans@ow2.org
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation; either
009: * version 2.1 of the License, or any later version.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: *
016: * You should have received a copy of the GNU Lesser General Public
017: * License along with this library; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
019: * USA
020: *
021: * --------------------------------------------------------------------------
022: * $Id: StatefulBean.java 1970 2007-10-16 11:49:25Z benoitf $
023: * --------------------------------------------------------------------------
024: */package org.ow2.easybeans.examples.statefulbean;
025:
026: import java.rmi.RemoteException;
027:
028: import javax.ejb.Remote;
029: import javax.ejb.SessionSynchronization;
030: import javax.ejb.Stateful;
031:
032: /**
033: * Simple stateful bean.
034: * @author Florent Benoit
035: */
036: @Stateful
037: @Remote(StatefulRemote.class)
038: public class StatefulBean implements SessionSynchronization,
039: StatefulRemote {
040:
041: /**
042: * Actual state of the bean.
043: */
044: private int total = 0;
045:
046: /**
047: * value inside Tx, not yet committed.
048: */
049: private int newtotal = 0;
050:
051: /**
052: * Initialize the amounts for with and without Tx.
053: */
054: public StatefulBean() {
055: total = 0;
056: newtotal = total; // in case we are outside transactions
057: }
058:
059: /**
060: * The afterBegin method notifies a session Bean instance that a new
061: * transaction has started, and that the subsequent business methods on the
062: * instance will be invoked in the context of the transaction. The instance
063: * can use this method, for example, to read data from a database and cache
064: * the data in the instance fields. This method executes in the proper
065: * transaction context.
066: * @throws java.rmi.RemoteException - This exception is defined in the
067: * method signature to provide backward compatibility for enterprise
068: * beans written for the EJB 1.0 specification. Enterprise beans
069: * written for the EJB 1.1 and higher specifications should throw
070: * the javax.ejb.EJBException instead of this exception. Enterprise
071: * beans written for the EJB 2.0 and higher specifications must not
072: * throw the java.rmi.RemoteException.
073: */
074: public void afterBegin() throws RemoteException {
075: newtotal = total;
076: }
077:
078: /**
079: * The beforeCompletion method notifies a session Bean instance that a
080: * transaction is about to be committed. The instance can use this method,
081: * for example, to write any cached data to a database. This method executes
082: * in the proper transaction context. <b>Note: </b> The instance may still
083: * cause the container to rollback the transaction by invoking the
084: * setRollbackOnly() method on the instance context, or by throwing an
085: * exception.
086: * @throws java.rmi.RemoteException - This exception is defined in the
087: * method signature to provide backward compatibility for enterprise
088: * beans written for the EJB 1.0 specification. Enterprise beans
089: * written for the EJB 1.1 and higher specifications should throw
090: * the javax.ejb.EJBException instead of this exception. Enterprise
091: * beans written for the EJB 2.0 and higher specifications must not
092: * throw the java.rmi.RemoteException.
093: */
094: public void beforeCompletion() throws RemoteException {
095: }
096:
097: /**
098: * The afterCompletion method notifies a session Bean instance that a
099: * transaction commit protocol has completed, and tells the instance whether
100: * the transaction has been committed or rolled back. This method executes
101: * with no transaction context.
102: * @param committed - True if the transaction has been committed, false if
103: * is has been rolled back.
104: * @throws java.rmi.RemoteException - This exception is defined in the
105: * method signature to provide backward compatibility for enterprise
106: * beans written for the EJB 1.0 specification. Enterprise beans
107: * written for the EJB 1.1 and higher specifications should throw
108: * the javax.ejb.EJBException instead of this exception. Enterprise
109: * beans written for the EJB 2.0 and higher specifications must not
110: * throw the java.rmi.RemoteException.
111: */
112: public void afterCompletion(final boolean committed)
113: throws RemoteException {
114: if (committed) {
115: total = newtotal;
116: } else {
117: newtotal = total;
118: }
119: }
120:
121: /**
122: * Business method implementation.
123: * @param s nb of shares to be bought
124: */
125: public void buy(final int s) {
126: newtotal = newtotal + s;
127: return;
128: }
129:
130: /**
131: * Business method implementation.
132: * @return the nb of shares bought
133: */
134: public int read() {
135: return newtotal;
136: }
137: }
|