我有一个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(),但没有帮助。
关心, 克里希纳
答案 0 :(得分:0)
以下是一些代码段:
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;
}
//等等...... .....
...
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);