实现可序列化的Java singleton VO类,使用getter方法具有默认值

时间:2010-05-04 15:14:23

标签: java jboss singleton ejb

我有一个J2SE应用程序,其用户线程在JBOSS服务器外部的单独JVM中运行。 在启动期间,J2SE通过传递具有getter / setter方法的简单JAVA VO类的新对象(singleton)来调用jboss中的EJB。 {VO类是一个单例并实现可序列化(由EJB强制要求)}。

EJB接收对象,读取所有数据库配置并使用新对象的setter方法设置所有值。然后,它会在同一个远程调用中将此更新的对象返回给J2SE。

在J2SE收到对象(singleton / serializable)之后,如果我调用getter方法,我只能在EJB调用之前看到在对象创建期间设置的默认值,而不是EJB设置的值。

请注意,为什么EJB中收到的对象没有看到任何更新的值以及如何纠正这一点。

我相信它与反序列化期间的对象初始化有关。我尝试在VO类中重写readResolve(),但没有帮助。

关心, 克里希纳

1 个答案:

答案 0 :(得分:0)

以下是一些代码段:


  1. Singleton VO class
  2. public class TekelecConfigurationInfo实现Serializable {     / **      *      * /     private static final long serialVersionUID = -7518766779917305604L;

    /**
     * 
     */
    
    private static TekelecConfigurationInfo mObjectReference = null;
    
    String mActiveStandby;
    String mActiveIPAddress;
    String mStandByIPAddress;
    int mActiveLNPDBPort;
    int mStandByLNPDBPort;
    int mDBPort;
    int mActiveSocketTimeOut;
    int mStandBySocketTimeOut;
    int mThreadCount;
    int mRetryCount;
    int mRetryInterval;
    
    int mPublisher_Daemon_interval;
    int mProvisioning_Daemon_interval;
    String mCountryCode;
    
    String serverType;
    
    String DataPerTxn;
    int maxRetryCount;
    String commandMode;
    String dataDir;
    String fileName;
    
    String errorCodes;
    
    int tekelecCmdTimeOutVal;
    
    public int getTekelecCmdTimeOutVal() {
        return tekelecCmdTimeOutVal;
    }
    
    public void setTekelecCmdTimeOutVal(int tekelecCmdTimeOutVal) {
        this.tekelecCmdTimeOutVal = tekelecCmdTimeOutVal;
    }
    
    public String getErrorCodes() {
        return errorCodes;
    }
    
    public void setErrorCodes(String errorCodes) {
        this.errorCodes = errorCodes;
    }
    
    public String getDataDir() {
        return dataDir;
    }
    
    public void setDataDir(String dataDir) {
        this.dataDir = dataDir;
    }
    
    private TekelecConfigurationInfo()
    {
    
    }
    
    public static TekelecConfigurationInfo getObjectReference()
    {
        if(mObjectReference == null)
        {           
            mObjectReference = new TekelecConfigurationInfo();
        }
        return mObjectReference;
    }   
    
    /**
     * @return Returns the mActiveStandby.
     */
    public String getActiveStandby() {
        return mActiveStandby;
    }
    /**
     * @param activeStandby The mActiveStandby to set.
     */
    public void setActiveStandby(String activeStandby) {
        mActiveStandby = activeStandby;
    }
    

    //等等...... .....

    ...


    1. 在J2SE启动期间初始化Singleton:
    2. mConfigurationInfo = TekelecConfigurationInfo.getObjectReference();


      //从J2SE调用EJB:

      public TekelecConfigurationInfo getNPConfigurationDetails(long sigConfigId,long tekelecConfigId,TekelecConfigurationInfo mConfigurationInfo)抛出TekelecException     {         上下文;         尝试{             ic = getInitialContext();
                  Object obj = ic.lookup(JNDI_NAME);             ReadNPConfigurationTableEJBRemote ds =(ReadNPConfigurationTableEJBRemote)obj;             mConfigurationInfo = ds.getNPConfigurationDetails(sigConfigId,tekelecConfigId,mConfigurationInfo);


      1. 对从服务器接收的obj执行mConfigurationInfo.getter(方法)时,它不显示EJB设置的值,但显示在对象创建期间设置的默认值。