【问题标题】:EJB 3.1 - Inject Session Scope PojoEJB 3.1 - 注入会话范围 Pojo
【发布时间】:2014-09-01 09:18:08
【问题描述】:

使用:EJB 3.1、JBoss AS 7、RestEasy。

我有一个会话范围的 bean,我想用它来存储会话的用户信息。

import java.io.Serializable;
import javax.enterprise.context.SessionScoped
@SessionScoped
public class LoggedInUser implements Serializable {
    private String id;
    ...
}

如果用户打开我的 Web 应用程序,过滤器会提取包含用户标识的标题信息(应用程序在 webseal 后面运行)。我需要在那里(在调用 ldap 之后)创建一个登录用户对象(参见上面的 LoggedInUser)。之后我想在不同的@Stateless Beans 中注入这个 LoggedInUser 对象,但是 LoggedInUser 总是“空的”(成员为空)。

注入样本:

@Path("/country")
@Stateless
public class CountryController extends AbstractController {
@Inject
private Logger LOGGER;
@Inject
private LoggedInUser loggedInUser;
//@Inject dont work too..
//private Instance<LoggedInUser> loggedInstance

我做错了什么?

【问题讨论】:

  • 您应该显示您认为应该填写 LoggedInUser 字段的代码。
  • 填充 LoggedInUser 字段的代码尚不存在。实例化 bean 后是否可以更改 LoggedInUser 字段?还是我必须在 LoggedInUser 中添加一个 @PostContruct 方法(所以我也必须在那里阅读标题)。

标签: java jboss7.x resteasy ejb-3.1 session-scope


【解决方案1】:

从评论和问题来看 - 您需要一些有关 EJB 概念的帮助。

@SessionScoped bean 是每个会话有一个实例的 bean。在一个会话期间,每个带有 bean 的 @Inject 都会引用同一个对象。仅此而已 - 如果您希望您的 bean 包含特定于该会话的一些信息,您需要自己将它放在那里,使用 setter 或其他方法,就像在每个普通 Java 类中所做的那样。

【讨论】:

  • 我知道会话范围的 bean 每个会话有一个实例,我的问题是我无法更改 LoggedInUser 的值。例如,如果我在 CountryController 调用 loggedInUser.setId("myNewId"),则该值不会更改。我可以在使用 eclipse 调试时观看它,我调用 setId 但值不会改变。使用默认构造函数初始化对象。
  • 所以你可以调用loggedInUser.setId("myNewId");System.out.println(loggedInUser.getId()); 并且没有设置Id?此外,这正是我最初希望您添加到问题中的部分 - 填充 loggedInUser 并且不起作用的代码
  • 好吧,我尝试以不同的方式填充 LoggedInUser。尝试在 LoggedInUser#LoggedInUser(构造函数)、LoggedInUser#initial(@PostConstruct)中设置 id,或者只是尝试使用 this.loggedInUser.setId("testId") 在 CountryController#someMethod() 中设置值。如果您只是告诉我应该如何存储用户信息会有所帮助,我不知道我是否做对了。最佳实践?
  • I cannot change values of LoggedInUser 表明出了点问题,因为您提到的所有方法都应该有效。你的测试用例是什么,你是如何确定你所做的没有工作的?
  • 亲爱的,sysout 显示正确的结果!只是 eclipse 不能显示 LoggedInUser 值..对不起,谢谢你的时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-23
  • 1970-01-01
  • 2012-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-25
相关资源
最近更新 更多