一千萬個為什麽

搜索

實現可序列化的Java singleton VO類,使用getter方法具有默認值

我有一個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. Singleton VO 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:

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設置的值,但顯示在對象創建期間設置的默認值。

轉載註明原文: 實現可序列化的Java singleton VO類,使用getter方法具有默認值