我举个例子,比如一个entity beans 中的持久性数据发生变化 它想通知所有的 session beans 的实例来做相应变化,应该如何实现?

解决方案 »

  1.   

    一般都是通过entitybeans做数据的映射,然后sessionbeans封装业务逻辑方法,通过jndi找到entitybeans接口
      

  2.   

    import java.rmi.*;
    import java.util.*;import com.lanxin.newstar.dto.*;
    import com.lanxin.newstar.dto.newstar.*;
    import com.lanxin.newstar.exception.*;
    import com.lanxin.newstar.util.PageRoll;public interface NewStarSession extends javax.ejb.EJBObject { 
         *             Account Interface about Students' Payments Info
         * getAccount() and saveAccount() can be applied to paginate and display
         * students' payments info, and dispose this interface operations at the
         * same time.
         * 1. getAccount(): Pick out all notes from account table in newstart database
         * ,return a object of AccountDTO.
         * 2. saveAccount(): Dispose inputing specially  AccountDTO paramenter to
         * update data in account tab le
         */
        public AccountDTO getAccount(AccountDTO accountDTO) throws RemoteException, NSException;
        public void saveAccount(AccountDTO accountDTO) throws RemoteException, NSException;}package com.lanxin.newstar.ejb.session;import javax.ejb.*;
    import java.util.*;
    import java.rmi.*;public interface NewStarSessionHome extends javax.ejb.EJBHome {
        public NewStarSession create() throws CreateException, RemoteException;
    }package com.lanxin.newstar.ejb.session;import java.io.*;
    import java.math.*;
    import java.rmi.RemoteException;
    import java.util.*;import javax.ejb.*;
    import javax.transaction.UserTransaction;import com.lanxin.dto.BaseDTO;
    import com.lanxin.newstar.dto.*;
    import com.lanxin.newstar.util.EJBHomeUtil;
    import com.lanxin.newstar.ejb.account.*;
    import com.lanxin.newstar.ejb.career.*;
    import com.lanxin.newstar.ejb.location.*;
    import com.lanxin.newstar.ejb.user.*;
    import com.lanxin.newstar.exception.*;
    import com.lanxin.newstar.util.*;
    import com.lanxin.newstar.dto.newstar.*;
    import com.lanxin.newstar.ejb.newstar.*;public class NewStarSessionBean implements SessionBean, Serializable {
     public void saveAccount(AccountDTO accountDTO) throws RemoteException, NSException{
            AccountHome accountHome = (AccountHome)this.getHome(
                "com.lanxin.newstar.ejb.account.AccountHome");
            Account account = null;
            System.out.println("NewStarSession saveAccount() called");
            System.out.println("accountDTO id===================" + accountDTO.getId());
            try{
                account = accountHome.findByPrimaryKey(new AccountPK(new BigDecimal(accountDTO.getId())));
                account.setBz1(accountDTO.getBz1());
                account.setBz2(accountDTO.getBz2());
                account.setBz3(accountDTO.getBz3());
                account.setBz4(accountDTO.getBz4());
                account.setBz5(accountDTO.getBz5());
                account.setBz6(accountDTO.getBz6());
                account.setBz7(accountDTO.getBz7());
                account.setBz8(accountDTO.getBz8());
                account.setBz9(accountDTO.getBz9());
                account.setBz10(accountDTO.getBz10());
                account.setBz11(accountDTO.getBz11());
                account.setBz12(accountDTO.getBz12());
                account.setBz13(accountDTO.getBz13());
                account.setFstletterZx(JspUtil.getDouble(accountDTO.getFstletterZx()));
                account.setGreencardZx(JspUtil.getDouble(accountDTO.getGreencardZx()));
                account.setInterviewZx(JspUtil.getDouble(accountDTO.getInterviewZx()));
                account.setMoneyFstletter(JspUtil.getDouble(accountDTO.getMoneyFstletter()));
                account.setMoneyGreencard(JspUtil.getDouble(accountDTO.getMoneyGreencard()));
                account.setMoneyInterview(JspUtil.getDouble(accountDTO.getMoneyInterview()));
                account.setMoneyQyr(JspUtil.getDouble(accountDTO.getMoneyQyr()));
                account.setMoneyReturn(JspUtil.getDouble(accountDTO.getMoneyReturn()));
                account.setMoneySecletter(JspUtil.getDouble(accountDTO.getMoneySecletter()));
                account.setMoneyTotal(JspUtil.getDouble(accountDTO.getMoneyTotal()));
                account.setQyrZx(JspUtil.getDouble(accountDTO.getQyrZx()));
                account.setReason(JspUtil.getString(account.getReason()));
                account.setSecletterZx(JspUtil.getDouble(accountDTO.getSecletterZx()));
                account.setTotalZx(JspUtil.getDouble(accountDTO.getTotalZx()));
            }catch(Exception e){
                System.out.println("Warning,the method of saveAccount() is wrong in NewstarSessionBean!");
                e.printStackTrace();
                throw NSExceptionUtil.getNSException(
                    "Warning,the method of saveAccount() is wrong in NewstarSessionBean!");
            }    }
         private EJBLocalHome getHome(String jndi)
        {
            EJBHomeUtil ejbHome = new EJBHomeUtil();
            EJBLocalHome localHome = (EJBLocalHome)ejbHome.getEJBHome(jndi);
            return localHome;
        }
        private void writeObject(ObjectOutputStream oos) throws IOException {
            oos.defaultWriteObject();
        }
        private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException {
            ois.defaultReadObject();
        }
    }
      

  3.   

    import com.lanxin.dto.BaseDTO;public class AccountDTO extends BaseDTO{
        int id = 0;//主键Key
        java.lang.String name = "";
        java.lang.String moneyTotal = "";
        java.lang.String bz1 = "";
        java.lang.String totalZx = "";
        java.lang.String bz2 = "";
        java.lang.String moneyQyr = "";
        java.lang.String bz3 = "";
        java.lang.String qyrZx = "";
        java.lang.String bz4 = "";
        java.lang.String moneyFstletter = "";
        java.lang.String bz5 = "";
        java.lang.String fstletterZx = "";
        java.lang.String bz6 = "";
        java.lang.String moneySecletter = "";
        java.lang.String bz7 = "";
        java.lang.String secletterZx = "";
        java.lang.String bz8 = "";
        java.lang.String moneyInterview = "";
        java.lang.String bz9 = "";
        java.lang.String interviewZx = "";
        java.lang.String bz10 = "";
        java.lang.String moneyGreencard = "";
        java.lang.String bz11 = "";
        java.lang.String greencardZx = "";
        java.lang.String bz12 = "";
        java.lang.String moneyReturn = "";
        java.lang.String bz13 = "";
        java.lang.String reason = "";    public void setId(int id) {
            this.id = id;
        }
        public void setName(java.lang.String name) {
            this.name = name;
        }
        public void setMoneyTotal(java.lang.String moneyTotal) {
            this.moneyTotal = moneyTotal;
        }
        public void setBz1(java.lang.String bz1) {
            this.bz1 = bz1;
        }
        public void setTotalZx(java.lang.String totalZx) {
            this.totalZx = totalZx;
        }
        public void setBz2(java.lang.String bz2) {
            this.bz2 = bz2;
        }
        public void setMoneyQyr(java.lang.String moneyQyr) {
            this.moneyQyr = moneyQyr;
        }
        public void setBz3(java.lang.String bz3) {
            this.bz3 = bz3;
        }
        public void setQyrZx(java.lang.String qyrZx) {
            this.qyrZx = qyrZx;
        }
        public void setBz4(java.lang.String bz4) {
            this.bz4 = bz4;
        }
        public void setMoneyFstletter(java.lang.String moneyFstletter) {
            this.moneyFstletter = moneyFstletter;
        }
        public void setBz5(java.lang.String bz5) {
            this.bz5 = bz5;
        }
        public void setFstletterZx(java.lang.String fstletterZx) {
            this.fstletterZx = fstletterZx;
        }
        public void setBz6(java.lang.String bz6) {
            this.bz6 = bz6;
        }
        public void setMoneySecletter(java.lang.String moneySecletter) {
            this.moneySecletter = moneySecletter;
        }
        public void setBz7(java.lang.String bz7) {
            this.bz7 = bz7;
        }
        public void setSecletterZx(java.lang.String secletterZx) {
            this.secletterZx = secletterZx;
        }
        public void setBz8(java.lang.String bz8) {
            this.bz8 = bz8;
        }
        public void setMoneyInterview(java.lang.String moneyInterview) {
            this.moneyInterview = moneyInterview;
        }
        public void setBz9(java.lang.String bz9) {
            this.bz9 = bz9;
        }
        public void setInterviewZx(java.lang.String interviewZx) {
            this.interviewZx = interviewZx;
        }
        public void setBz10(java.lang.String bz10) {
            this.bz10 = bz10;
        }
        public void setMoneyGreencard(java.lang.String moneyGreencard) {
            this.moneyGreencard = moneyGreencard;
        }
        public void setBz11(java.lang.String bz11) {
            this.bz11 = bz11;
        }
        public void setGreencardZx(java.lang.String greencardZx) {
            this.greencardZx = greencardZx;
        }
        public void setBz12(java.lang.String bz12) {
            this.bz12 = bz12;
        }
        public void setMoneyReturn(java.lang.String moneyReturn) {
            this.moneyReturn = moneyReturn;
        }
        public void setBz13(java.lang.String bz13) {
            this.bz13 = bz13;
        }
        public void setReason(java.lang.String reason) {
            this.reason = reason;
        }    public int getId() {
            return id;
        }
        public java.lang.String getName() {
            return name;
        }
        public java.lang.String getMoneyTotal() {
            return this.moneyTotal;
        }
        public java.lang.String getBz1() {
            return bz1;
        }
        public java.lang.String getTotalZx() {
            return this.totalZx;
        }
        public java.lang.String getBz2() {
            return bz2;
        }
        public java.lang.String getMoneyQyr() {
            return this.moneyQyr;
        }
        public java.lang.String getBz3() {
            return bz3;
        }
        public java.lang.String getQyrZx() {
            return this.qyrZx;
        }
        public java.lang.String getBz4() {
            return bz4;
        }
        public java.lang.String getMoneyFstletter() {
            return this.moneyFstletter;
        }
        public java.lang.String getBz5() {
            return bz5;
        }
        public java.lang.String getFstletterZx() {
            return this.fstletterZx;
        }
        public java.lang.String getBz6() {
            return bz6;
        }
        public java.lang.String getMoneySecletter() {
            return this.moneySecletter;
        }
        public java.lang.String getBz7() {
            return bz7;
        }
        public java.lang.String getSecletterZx() {
            return this.secletterZx;
        }
        public java.lang.String getBz8() {
            return bz8;
        }
        public java.lang.String getMoneyInterview() {
            return this.moneyInterview;
        }
        public java.lang.String getBz9() {
            return bz9;
        }
        public java.lang.String getInterviewZx() {
            return this.interviewZx;
        }
        public java.lang.String getBz10() {
            return bz10;
        }
        public java.lang.String getMoneyGreencard() {
            return this.moneyGreencard;
        }
        public java.lang.String getBz11() {
            return bz11;
        }
        public java.lang.String getGreencardZx() {
            return this.greencardZx;
        }
        public java.lang.String getBz12() {
            return bz12;
        }
        public java.lang.String getMoneyReturn() {
            return this.moneyReturn;
        }
        public java.lang.String getBz13() {
            return bz13;
        }
        public java.lang.String getReason() {
            return reason;
        }
    }
      

  4.   


    import java.io.Serializable;public class BaseDTO implements Serializable
    {
    public final static int INS = 0;
    public final static int UPD = 2;
    public final static int DEL = 3; //数据是否
    public static int EXIST = 0; //操作状态
    private int dto = INS; /**
     * 设置操作状态
     * @param dto
     */
    public void setDTO(int dto)
    {
    this.dto = dto;
    } /**
     * 获取操作状态
     * @return
     */
    public int getDTO()
    {
    return this.dto;
    }
    }
      

  5.   

    感谢 netcobol(初学者) 提供的源码,小弟我天生愚笨,能不能讲一下原理呢?
      

  6.   

    entitybeans是由sessionbeans操纵的,已经由数据库中取出了,所以谈不上反过来再通知sessionbeans。
    我想你的问题是不是当数据库中的数据发生变化时怎么通知sessionbeans
      

  7.   

    to  gxg3 是这个意思,怎么做?
      

  8.   

    从另一个角度讲就是当数据库内容发生变化后,如何让所有已经实例化的session beans 及时的从entity beans 中获取新的数据
      

  9.   

    我没怎么做过,对与不对权当参考如果所有的数据库操作都是通过entity beans 操作的,那么可以在entity beans 的update 之前出发一个事件,
    session beans 在创建entity beans 时注册为事件监听者,这样当其它session beans 更新数据时就会通知这个session beans 了
      

  10.   

    to gxg3 你说的意思我明白,但ejb 的 beans能像 swing 中那样注册事件的监听器吗
      

  11.   

    sessionbean应该可以,不知道entitybean行不行
      

  12.   

    可以通过第三方单例class(作为服务启动)来实现;
    简单的化通过该class的一个bool属性的变化事件来实现;
    复杂的化该class可以设计成一个事件发布和监听的适配类
      

  13.   

    难道没有更直接的办法了吗,比如在EJB 中有没有可供所有bean调用的全局变量或类似的全局性的参数