Java singleton VO класс, реализующий сериализуемый, имеющий значения по умолчанию с использованием методов получения - PullRequest
0 голосов
/ 04 мая 2010

У меня есть приложение J2SE с пользовательскими потоками, работающими в отдельной JVM вне сервера JBOSS. Во время запуска J2SE вызывает EJB внутри jboss, передавая новый объект (singleton) простого класса VAV JAVA, имеющий методы getter / setter. {Класс VO является одиночным и реализует сериализуемый (согласно EJB)}.

EJB получает объект, читает всю конфигурацию дБ и использует методы установки нового объекта для установки всех значений. Затем он возвращает этот обновленный объект обратно в J2SE в том же удаленном вызове.

После того, как J2SE получает объект (singleton / serializable), если я вызываю методы получения, я могу видеть только значения по умолчанию, установленные при создании объекта перед вызовом EJB, а не значения, установленные EJB.

Просьба прояснить, почему полученный объект от EJB не видит обновленных значений и как это исправить.

Я полагаю, что это связано с инициализацией объекта во время десериализации. И я попытался переопределить readResolve () в классе VO, но безрезультатно.

С уважением, Кришна

1 Ответ

0 голосов
/ 04 мая 2010

Ниже приведены некоторые фрагменты кода:


  1. Синглтон ВО класс

открытый класс TekelecConfigurationInfo реализует Serializable { / ** * * / приватный статический финал 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:

mConfigurationInfo = TekelecConfigurationInfo.getObjectReference ();


// Вызов в EJB из J2SE:

public TekelecConfigurationInfo getNPConfigurationDetails (long sigConfigId, long tekelecConfigId, TekelecConfigurationInfo mConfigurationInfo) выдает исключение TekelecException { Контекст ic; пытаться { ic = getInitialContext ();
Object obj = ic.lookup (JNDI_NAME); ReadNPConfigurationTableEJBRemote ds = (ReadNPConfigurationTableEJBRemote) obj; mConfigurationInfo = ds.getNPConfigurationDetails (sigConfigId, tekelecConfigId, mConfigurationInfo);


  1. При выполнении mConfigurationInfo.getter (методы) для полученного объекта от сервера, он не показывает значения, установленные EJB, но показывает значение по умолчанию, установленное при создании объекта.
...