繁体   English   中英

EJB3:有状态bean:如何访问在jndi查找上创建的第一个实例

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM