Класс Java singleton VO, реализующий сериализуемый, имеющий значения по умолчанию с использованием методов получения

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

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

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

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

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

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


person user309281    schedule 04.05.2010    source источник
comment
После удаленного вызова EJB у меня есть другие места в J2SE, где я вызываю статический метод класса VO, который возвращает изначально созданный объект. И я ожидаю увидеть значения, установленные EJB, используя методы получения.   -  person user309281    schedule 04.05.2010
comment
Некоторый код был бы действительно полезен? Похоже, что экземпляр singleton в вашем локальном клиентском загрузчике классов не заменяется объектом с сервера.   -  person Affe    schedule 04.05.2010


Ответы (1)


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


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

открытый класс 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:

mConfigurationInfo = TekelecConfigurationInfo.getObjectReference();


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

public TekelecConfigurationInfo getNPConfigurationDetails (long sigConfigId, long tekelecConfigId, TekelecConfigurationInfo mConfigurationInfo) выдает TekelecException { Context ic; try { ic = getInitialContext();
Object obj = ic.lookup(JNDI_NAME); ReadNPConfigurationTableEJBRemote ds = (ReadNPConfigurationTableEJBRemote) obj; mConfigurationInfo = ds.getNPConfigurationDetails(sigConfigId, tekelecConfigId, mConfigurationInfo);


  1. При выполнении mConfigurationInfo.getter (методы) для полученного объекта с сервера он не показывает значения, установленные EJB, а показывает значение по умолчанию, установленное при создании объекта.
person user309281    schedule 04.05.2010
comment
внутри ds.getNPConfigurationDetails вы обновляете свойства mConfigurationInfo значениями с сервера или просто используете их в качестве параметра? Кажется, вы перезаписываете свою ссылку новым объектом с сервера, как вы возвращаете его обратно в свой держатель синглтона? - person Affe; 04.05.2010
comment
ds.getNPConfigurationDetails вызывает метод в EJB, где я устанавливаю значения для mConfigurationInfo. - person user309281; 05.05.2010
comment
Я создаю новый объект для класса TekelecConfigurationInfo с переменной ref mConfigurationInfo и передаю EJB в этом вызове ds.getNPConfigurationDetails(sigConfigId, tekelecConfigId, mConfigurationInfo); и назначение той же переменной ref для получения обновленного объекта. Есть ли здесь какие-либо проблемы? - person user309281; 05.05.2010