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

📄 accountbean.java

📁 weblogic应用全实例
💻 JAVA
字号:
//定义本接口在包examples.ejb.basic.containerManaged中
package examples.ejb.basic.containerManaged;
//本类用到的其他类。javax.ejb.*是开发EJB应用需要的类库。javax.naming.*是实现JNDI服务需要的类库。
import java.io.Serializable;
import java.util.Enumeration;
import java.util.Vector;

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;


/**
 * AccountBean是实体EJB,它演示了:
 * 	容器管理的JDBC持续性管理和事务管理;
 *      在这个文件中的代码并没有直接访问数据库;
 * 	用户定义的异常;
 * 	使用isModified方法,这个方法改变容器管理的字段,通过设置isDirty
 */
 //这个类是实体Bean,必须实现接口 EntityBean
public class AccountBean implements EntityBean {
//设置是否打印控制台
  final static boolean VERBOSE = true;
//声明实体上下文变量
  private EntityContext ctx;
//声明实体EJB属性变量
  public            String        accountId; // 这也是主键类
  public            double        balance;
  public            String        accountType;
  private transient boolean       isDirty;   // 决定bean是否谢数据库的标志

  /**
   * 为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;
  }

  /** 
   * 返回EJBean是否被改变
   *
   * 这个方法必须为public 以使被容器调用
   * 
   * @返回                  boolean isDirty
   */
  public boolean isModified() {
    log("isModified(): isDirty = " + (isDirty ? "true" : "false"));
    return isDirty;
  }

  /**
   * 设置EJBean的改变标志
   * 
   * @参数 flag              改变标志
   */
  public void setModified(boolean flag) {
    isDirty = flag;
    log("setModified(): " + id() + (String) (flag ? ": requires saving" 
                         : ": saving not required"));
  }

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

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

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

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

  /**
   * 设置EJBean的改变标记为false
   * 
   */
  public void ejbStore() {
    log("AccountBean.ejbStore (" + id() + ")");

    setModified(false);
  }

  /**
   * 这是本类必须实现的方法,在本例中没有用到
   *
   */
  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错误时抛出的异常
   * @参看                     examples.ejb.basic.containerManaged.AccountHome
   */
  public String ejbCreate(String accountId, double initialBalance, String type) 
    throws CreateException
  {
    log("AccountBean.ejbCreate( id = " + System.identityHashCode(this) + ", PK = " +
         accountId + ", " + "initial balance = $ " + initialBalance + ")");
    this.accountId = accountId;
    this.balance   = initialBalance;
    this.accountType   = type;
    return null;  // See 9.4.2 of the EJB 1.1 specification
  }

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

  // 应用程序定义的方法

  /**
   * 存入一定金额
   *
   * @参数 amount            double 数量
   * @返回                  double 结算
   */
  public double deposit(double amount)
  {
    log("AccountBean.deposit: Depositing $" + amount + " into '" + accountId + "'");
    //业务逻辑计算
    balance += amount;
    //设置改变标记
    setModified(true);
    return balance;
  }

  /**
   * 提取一定数量的金额
   *
   * @参数 amount            double 数量
   * @返回                  double 结算
   * @exception               ProcessingErrorException
   *                          如果提取的数量大于结算值
   */
  public double withdraw(double amount)
    throws ProcessingErrorException
  {
    log("AccountBean.withdraw: Withdrawing $" + amount + " from '" + accountId + "'");
    if (amount > balance) {
    	//抛出用户定义异常
      throw new ProcessingErrorException("Request to withdraw $" + amount +
                                         "; is more than balance $" + balance +
                                         " in account " + accountId);
    }
    //业务逻辑计算
    balance -= amount;
    //设置改变标记
    setModified(true);
    return balance;
  }

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

    return balance;
  }

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

    return accountType;
  }

  //控制台输出  
  private void log(String s) {
    if (VERBOSE) System.out.println(s);
  } 

}

⌨️ 快捷键说明

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