首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Glassfish 3.1.2 -远程EJB -通过引用调用

Glassfish 3.1.2 -远程EJB -通过引用调用
EN

Stack Overflow用户
提问于 2013-05-28 20:56:52
回答 1查看 491关注 0票数 1

我在这里尝试了以下方法:我有一个调用远程EJB的EJB应用程序:

代码语言:javascript
复制
@WebServlet("/token")
@SuppressWarnings("serial")
public class TokenServlet extends HttpServlet {

@EJB
private TokenService tokenService;

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
    Token token = tokenService.getToken();

    tokenService.setToken(token);

}

}

服务ejb:

代码语言:javascript
复制
@Stateless
@Remote
public class TokenServiceImpl implements TokenService {

private Token token = new Token();

@Override
public Token getToken() {
    System.out.println("class: " + TokenServiceImpl.class
            + ", method: getToken() - " + "token value: '"
            + token.getToken() + "' reference: " + this.token);

    return this.token;
}

@Override
public void setToken(Token token) {
    boolean referenceEquality = this.token == token;
    boolean valueEquality = this.token.equals(token);
    System.out.println("class " + TokenServiceImpl.class
            + ", methos: setToken(Token token)");
    System.out.println("test for reference equality: " + " " + this.token
            + " == " + token + " --> " + referenceEquality);
    System.out.println("test for value equality: " + " " + this.token
            + " equals " + token + " --> " + valueEquality);

    this.token = token;
}

webproject(.war)和ejbproject(.ear)分别使用glassfish-application.xml条目进行部署:

代码语言:javascript
复制
<!DOCTYPE glassfish-application PUBLIC "-//GlassFish.org//DTD
GlassFish Application Server 3.1 Java EE Application 6.0//EN"
"http://glassfish.org/dtds/glassfish-application_6_0-1.dtd">
<glassfish-application>
   <pass-by-reference>true</pass-by-reference>
</glassfish-application>

class: class TokenServiceImpl, method: getToken() - token value: '     
'default token value' reference: com.ebcont.domain.impl.Token@7fef01a8|#]

class TokenServiceImpl, method: setToken(Token token)|#]
test for reference equality:  Token@7fef01a8 == Token@2f4d4e75 --> false|#]
test for value equality:  Token@7fef01a8 equals Token@2f4d4e75 --> false|#]

我是不是出了什么问题,或者不能在远程EJB中使用call-by-reference?

EN

回答 1

Stack Overflow用户

发布于 2013-07-06 07:24:49

您的无状态会话Bean实现中存在问题。这是变量的介绍和用法

代码语言:javascript
复制
private Token token = new Token();

根据规范here

当客户端调用无状态bean的方法时,该bean的实例变量可能包含特定于该客户端的状态,但仅限于调用期间。当方法完成时,不应保留特定于客户端的状态。

简而言之,对会话bean的每个调用很可能都会在单独的独立线程或上下文中运行,这些线程或上下文将相应地关联和初始化实例变量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16792703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档