3

在 EJB 3.1 JSR 中,它在第 16.3.4 节中声明

容器必须确保企业 bean 实例对其环境变量只有读访问权。容器必须从修改环境命名上下文及其子上下文的 javax.naming.Context 接口的所有方法中抛出 javax.naming.OperationNotSupportedException。

问题 1:根据 JSR,从无状态 bean 方法向 JNDI 添加/编辑对象(例如字符串“hello”)是不合法的?

因此,如果这是真的,下面的代码应该会失败,但是在我的 jboss 6 中对其进行测试时,它工作得很好。

public void RebindVars() throws NamingException{
    Context ctx = new InitialContext();
    String testString = (String) ctx.lookup("java:comp/env/testString");
    String newString = "helloRebindFromJndi"; //Assume that this is a valid call.
    if (!testString.equals(newString)) {
        ctx.rebind("java:comp/env/testString", newString);
    }
}

问题 2:既然它在我的 jboss 中工作,是 jboss 的实现允许更多的需求还是我完全误解了 JSR?

我正在接受 EJB 认证,这就是我问这个的原因,所以不需要评论我为什么会这样做 =)

4

1 回答 1

1

I do believe what EJB specification says is true. The ENC is a read-only naming space - try it on JBoss AS 7.1.1 and it should fail.

Some further reading which you might be interested in:

于 2012-10-10T14:26:54.327 回答