📄 traderbean.java
字号:
//定义本类在包examples.ejb.basic.statelessSession中
package examples.ejb.basic.statelessSession;
//本类用到的其他类。javax.ejb.*是开发EJB应用需要的类库。javax.naming.*是实现JNDI服务需要的类库。
import javax.ejb.CreateException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import javax.naming.InitialContext;
import javax.naming.NamingException;
/**
* TraderBean 是一个无状态EJB,它演示了如何:
* 在会话过程中不保持用户的状态
* 用户定义异常
*/
//这个类是会话Bean,因此必须实现接口 SessionBean
public class TraderBean implements SessionBean {
//设置是否打印控制台
private static final boolean VERBOSE = true;
//声明会话上下文变量
private SessionContext ctx;
//设计交易限制变量
private int tradeLimit;
// 使用日志记录
private void log(String s) {
if (VERBOSE) System.out.println(s);
}
/**
* 这是本类必须实现的方法,在本例中没有用到
*
*/
public void ejbActivate() {
log("ejbActivate called");
}
/**
* 这是本类必须实现的方法,在本例中没有用到
*
*/
public void ejbRemove() {
log("ejbRemove called");
}
/**
* 这是本类必须实现的方法,在本例中没有用到
*
*/
public void ejbPassivate() {
log("ejbPassivate called");
}
/**
* 设置会话上下文变量
*
* @参数 ctx SessionContext Context for session
*/
public void setSessionContext(SessionContext ctx) {
log("setSessionContext called");
this.ctx = ctx;
}
/**
* 这个方法与"TraderHome.java"中定义的主接口中的"create"方法相对应
* 两个方法的参数相同。当客户端调用主接口的"TraderHome.create()"方法时,
* 容器会分配一个EJBean实例,并调用它的"ejbCreate()"方法。
*
* @异常 javax.ejb.CreateException 创建EJBean出错时抛出的异常
* @参看 examples.ejb.basic.statefulSession.Trader
*/
public void ejbCreate () throws CreateException {
log("ejbCreate called");
try {
//初始化JNDI名称服务上下文
InitialContext ic = new InitialContext();
//从环境变量上下文中查找交易限制参数值
Integer tl = (Integer) ic.lookup("java:/comp/env/tradeLimit");
tradeLimit = tl.intValue();
} catch (NamingException ne) {
throw new CreateException("Failed to find environment value "+ne);
}
}
/**
* 购买指定用户和股票类别、数量的股票。
*
* @参数 stockSymbol 股票代码
* @参数 shares 购买股票的数量
* @返回 TradeResult 交易结果对象
*/
public TradeResult buy(String stockSymbol, int shares) {
if (shares > tradeLimit) {
log("Attempt to buy "+shares+" is greater than limit of "+tradeLimit);
shares = tradeLimit;
}
log("Buying "+shares+" shares of "+stockSymbol);
//返回交易结果对象
return new TradeResult(shares, stockSymbol);
}
/**
* 出售指定用户和股票类别、数量的股票。
*
* @参数 stockSymbol 股票代码
* @参数 shares 出售股票的数量
* @返回 TradeResult Trade Result
*/
public TradeResult sell(String stockSymbol, int shares) {
if (shares > tradeLimit) {
log("Attempt to sell "+shares+" is greater than limit of "+tradeLimit);
shares = tradeLimit;
}
log("Selling "+shares+" shares of "+stockSymbol);
//返回交易结果对象
return new TradeResult(shares, stockSymbol);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -