![](/img/trans.png)
[英]EJB - Serialization error while doing a JNDI lookup for a Stateful Session Bean
[英]EJB3: stateful bean: How to access first instance created on jndi lookup
我的代码:
@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时,我得到空值。 我检查了jmx控制台,以查看是否创建了新实例,并且确实创建了该实例。 每次查找完成后,都会创建一个新实例。
我需要访问先前设置的值。 这可能吗 ?
这可以按预期工作:有状态会话bean的每次查找都将返回一个新实例。 如果要保存实例,则需要将ia
存储在某个位置。 (如果不想保存该实例,则需要调用@Remove
方法以避免浪费内存@Remove
容器最终@Remove
该实例超时,但是如果知道已完成操作,则最好立即将其删除。用它。)
新实例(对象)将具有一组自己的值或状态。 因为它们彼此独立。 就像你说的一样:
我查找该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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.