我的代码:
@Local
public interface IA{
public void setX(String x);
public String getX();
}
@Stateful
@LocalBinding(jndiBinding="a/b/c")
public class BC implements IA{
private String value;p
@Override
public void setX(String x) {
this.value = x;
}
@Override
public String getX() {
return this.value;
}
}
我查找bean,然后设置x。然后将响应发送回客户端。客户端触发一个新请求,作为处理此请求的一部分,我需要先查找数据集。这就是我做的方式
InitialContext ic = new InitialContext();
IA ia= (IA)ic.lookup("a/b/c");
String x = ia.getX();
此时我记录字符串x,我得到null。 我检查了jmx控制台,看看是否创建了一个新实例,并确实创建了它。每次查找完成后,都会创建一个新实例。
我需要的是访问先前设置的值。这有可能吗?
答案 0 :(得分:0)
这是按预期工作的:有状态会话bean的每次查找都将返回一个新实例。如果要保存实例,则需要将ia
存储在某处。 (如果您不想保存实例,则需要调用@Remove
方法以避免浪费内存.EJB容器最终应该超时实例,但如果您知道,最好立即将其删除完成它。)
答案 1 :(得分:0)
新实例(Object)将拥有自己的一组值或状态。因为它们彼此独立。像你说的那样:
我查找bean,然后设置x。然后将响应发送回 客户。作为处理此问题的一部分,客户端会触发新请求 请求我需要先查找数据集。
您可以提前获取该值并将其设置为单独对象,如:
InitialContext ic = new InitialContext();
IA ia= (IA)ic.lookup("a/b/c");
String x = ia.setX(OldValue);
我认为这是一个单独的方法:
String oldvalue = oldObj.getX();
fireNewRequest(oldValue);