accountbean.java

来自「weblogic应用全实例」· Java 代码 · 共 280 行

JAVA
280
字号
//定义本接口在包examples.ejb20.relationships.many2many
package examples.ejb20.relationships.many2many;
//本类用到的其他类。javax.ejb.*是开发EJB应用需要的类库。javax.naming.*是实现JNDI服务需要的类库
import java.io.Serializable;
import java.util.Enumeration;
import java.util.Vector;
import java.util.Collection;

import javax.ejb.CreateException;
import javax.ejb.DuplicateKeyException;
import javax.ejb.EJBException;
import javax.ejb.EntityBean;
import javax.ejb.EntityContext;
import javax.ejb.FinderException;
import javax.ejb.NoSuchEntityException;
import javax.ejb.ObjectNotFoundException;
import javax.ejb.RemoveException;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import java.util.List;
import java.util.Iterator;
import java.util.ArrayList;


/**
 * AccountBean是一个实体Bean。这个EJBean演示:
 * 
 * 容器管理的JDBC一致性和事务; 
 * 用户定义的异常;
 * EJB 2.0 关系的使用;
 * EJB-QL在查询方法中的使用。
 * 
 */
 //这个类是实体Bean,必须实现接口 EntityBean 
abstract public class AccountBean implements EntityBean {
//设置是否打印控制台
  final static boolean VERBOSE = true;
//声明实体上下文变量
  private EntityContext ctx;
//构造方法
	public AccountBean() {}

  /**
   * 为EJBean设置实体EJB上下文
   * 
   * @参数 ctx               EntityContext 
   */
  public void setEntityContext(EntityContext ctx) {
    log("setEntityContext called (" + id() + ")");
    this.ctx = ctx;
  }

  /**
   * 取消实体上下文设置
   * 
   */
  public void unsetEntityContext() {
    log("AccountBean.unsetEntityContext (" + id() + ")");
    this.ctx = null;
  }

  /**
   * 容器管理的属性
   */
  abstract public String getAccountId();
  abstract public void setAccountId(String val);

  abstract public double getBalance();
  abstract public void setBalance(double val);

  abstract public String getAccountType();
  abstract public void setAccountType(String val);

  abstract public Collection getCustomers();
  abstract public void setCustomers(Collection col);
  //增加一个客户
  public void addCustomer(Customer cust) 
  {
    log("CustomerBean.addAccount");
    //获取客户结合
    Collection custs = getCustomers();
    //加入新客户
    custs.add(cust);
  }

  public String toString() {
    return "[AccountBean (" + getAccountId() + ", " + getBalance() + ", " + getAccountType() + "]";
  }

  /**
   * 返回主键标识这个EJBean.
   * 
   * @返回                  String 标识
   */
  private String id() {
    return "" + System.identityHashCode(this) + ", PK = " + 
      (String) ((ctx == null) ? "nullctx" 
                 : ((ctx.getPrimaryKey() == null ?
                   "null" : ctx.getPrimaryKey().toString())));
  }

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

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

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

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

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

  /**
   * 这个方法和"AccountBean.java"中定义的的Bean的"ejbCreate"方法相对应
   * 这两个方法的参数应该相同。当客户端调用"TraderHome.create()"方法时,EJB容器
   * 会找到EJBean的实例,并调用它的"ejbCreate()"方法。
   * 对容器管理的ejb,ejbCreate方法返回为null,而bean管理的ejb,返回的是主键类。
   * @参数 accountID         String 账号ID
   * @参数 initialBalance    double 初始化结算值
   * @参数 type              String 账号类型
   * @异常               javax.ejb.CreateException
   *                          创建bean错误时抛出的异常
   */
  public String ejbCreate(String accountId, 
													double initialBalance, 
													String type) 
    throws CreateException
  {
    log("AccountBean.ejbCreate( id = " + System.identityHashCode(this) + 
				", PK = " +
				accountId + ", " + "initial balance = $ " + initialBalance + ")");

    setAccountId(accountId);
    setBalance(initialBalance);
    setAccountType(type);

    return null;  // See 9.4.2 of the EJB 1.1 specification
  }

  /**
   * 这是本类必须实现的方法,在本例中没有用到
   *
   */
  public void ejbPostCreate(String accountId, 
														double initialBalance, 
														String type) throws CreateException
  {
    log("AccountBean.ejbPostCreate (" + id() + ")");
  }

  // 用户定义的方法

  /**
   * 存入一定数量
   *
   * @参数 amount            double Amount
   * @返回                  double 结算
   */
  public double deposit(double amount)
  {
    log("AccountBean.deposit: Depositing $" + 
				amount + 
				" into '" + 
				getAccountId() + "'");

    setBalance(getBalance() + amount);
    return getBalance();
  }

  /**
   * 提取
   *
   * @参数 amount            double 数量
   * @返回                  double 结算
   * @异常               ProcessingErrorException
   *                          如果数量大于结算
   */
  public double withdraw(double amount)
  {
    log("AccountBean.withdraw: Withdrawing $" + amount + " from '" + 
				getAccountId() + "'");
    setBalance(getBalance() - amount);
    return getBalance();
  }

  /**
   * 返回当前结算值
   *
   * @返回                  double 结算
   */
  public double balance() {
    log("AccountBean.balance (" + id() + ")");

    return getBalance();
  }

  /**
   * 返回账号类型
   *
   * @返回                  String 账号类型
   */
  public String accountType() {
    log("AccountBean.accountType (" + id() + ")");

    return getAccountType();
  }

  // 也可以使用WebLogic日志服务
  private void log(String s) {
    if (VERBOSE) System.out.println(s);
  } 
  //获取所有客户集合
  public Collection getAllCustomers()
  {
    log("AccountBean.getAllCustomers");
    List returnList = new ArrayList();

    Collection custs = getCustomers();
    Iterator iter = custs.iterator();
    log("customers------------------------------");
    while (iter.hasNext()) {
      Object ob = iter.next();
      log(ob.getClass().getName());
      returnList.add(ob);
    }

    return returnList;
  }

}

















⌨️ 快捷键说明

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