⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 traderbean.java

📁 weblogic应用全实例
💻 JAVA
字号:
//定义本类在包examples.ejb.basic.statefulSession中
package examples.ejb.basic.statefulSession;
//本类用到的其他类。javax.ejb.*是开发EJB应用需要的类库。javax.naming.*是实现JNDI服务需要的类库。
import javax.ejb.CreateException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

/**
 * TraderBean 是一个有状态EJB,它演示了如何:
 * 在会话过程中如何自动保持用户的状态
 * 从bean环境中获取参数
 * 用户定义异常
 */
//这个类是会话Bean,因此必须实现接口 SessionBean
 
public class TraderBean implements SessionBean {
//设置是否打印控制台
  static final boolean VERBOSE = true;
//声明会话上下文变量
  private SessionContext ctx;
//声明环境上下文变量
  private Context environment;
//声明与业务相关的变量:交易结算  
  private double tradingBalance;

  /**
   * 设置会话上下文变量
   *
   * @参数 ctx               SessionContext Context for session
   */
  public void setSessionContext(SessionContext ctx) {
    log("setSessionContext called");
    this.ctx = ctx;
  }

  /**
   * 这是本类必须实现的方法,在本例中没有用到
   *
   */
  public void ejbActivate() {
    log("ejbActivate called");
  }

  /**
   * 这是本类必须实现的方法,在本例中没有用到   
   */
  public void ejbPassivate() {
    log("ejbPassivate called");
  }

  /**
   * 这是本类必须实现的方法,在本例中没有用到   
   */
  public void ejbRemove() {
    log("ejbRemove called");
  }

  /**
   * 这个方法与"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();
      //从配置文件(ejb-jar.xml)中获取环境变量上下文,相当于初始化参数
      environment = (Context) ic.lookup("java:comp/env");
    } catch (NamingException ne) {
      //如果名称服务器异常,则抛出	CreateException异常
      throw new CreateException("Could not look up context");
    }
    //业务变量赋初值
    this.tradingBalance = 0.0;
  }

  /**
   * 购买指定用户和股票类别、数量的股票。
   *
   * @参数 customerName  顾客名
   * @参数 stockSymbol   股票代码
   * @参数 shares        购买股票的数量
   * @返回               TradeResult 交易结果对象
   * @异常               ProcessingErrorException
   *                          购买操作出错时抛出的异常
   * @异常		RemoteException 当系统通讯发生故障时抛出
   */
  public TradeResult buy(String customerName, String stockSymbol, int shares)
    throws ProcessingErrorException
  {
    //控制台提示
    log("buy (" + customerName + ", " + stockSymbol + ", " + shares + ")");
    //从环境变量中获取价格参数
    double price = getStockPrice(stockSymbol);
    //计算本次交易结算
    tradingBalance -= (shares * price); // subtract purchases from cash account
    //返回本次交易结果对象
    return new TradeResult(shares, price, TradeResult.BUY);
  }

  /**
   * 出售指定用户和股票类别、数量的股票。
   *
   * @参数 customerName  顾客名
   * @参数 stockSymbol   股票代码
   * @参数 shares        出售股票的数量
   * @返回               TradeResult Trade Result
   * @异常               ProcessingErrorException
   *                          购买操作出错时抛出的异常
   * @异常		RemoteException 当系统通讯发生故障时抛出
   */
  public TradeResult sell(String customerName, String stockSymbol, int shares)
    throws ProcessingErrorException
  {
    //控制台提示	
    log("sell (" + customerName + ", " + stockSymbol + ", " + shares + ")");
    //从环境变量中获取价格参数
    double price = getStockPrice(stockSymbol);
    //计算本次交易结算
    tradingBalance += (shares * price);
    //返回本次交易结果对象
    return new TradeResult(shares, price, TradeResult.SELL);
  }

  /**
   * Returns the current balance of a trading session.
   *
   * @返回                  double 结算值
   */
  public double getBalance() {
    return tradingBalance;
  }

  /**
   * 返回给定股票的价格
   *
   * @参数 stockSymbol  String 股票代号
   * @返回              double 股票价格
   * @异常               examples.ejb.basic.statefulSession.ProcessingErrorException
   *                          当获取参数发生异常时抛出
   */
  public double getStockPrice(String stockSymbol) 
    throws ProcessingErrorException 
  {
    try {
      //从环境变量上下文中查找给定股票代号的股票价格	
      return ((Double) environment.lookup(stockSymbol)).doubleValue();
    } catch (NamingException ne) {
    //当出现问题时,生成自定义的异常实例ProcessingErrorException,并抛出	
      throw new ProcessingErrorException ("Stock symbol " + stockSymbol + 
                                          " does not exist");
    } catch (NumberFormatException nfe) {
    //	ejb-jar.xml文件中含非有效数字时,抛出这个异常,
    // 生成自定义的异常实例ProcessingErrorException,并抛出
      throw new ProcessingErrorException("Invalid price for stock "+stockSymbol);
    }
  }
  //控制台输出
  private void log(String s) {
    if(VERBOSE) {
      System.out.println(s);
    }
  }
}





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -