2014-09-01 82 views
0

使用:EJB 3.1,JBoss AS 7,RestEasy。EJB 3.1 - 注入会话范围Pojo

我有一个会话scoped bean,我想要用户存储会话的用户信息。

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

如果用户打开我的web应用程序,过滤器提取包含用户标识的头信息(应用程序在webseal后面运行)。我需要创建一个登录用户对象(请参阅上面的LoggedInUser)(在调用ldap之后)。之后我想在不同的@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 

什么我错了?

+0

您应该显示您认为应填写LoggedInUser字段的代码。 – Deltharis 2014-09-01 09:25:34

+0

填写LoggedInUser字段的代码尚不存在。 bean实例化后是否可以更改LoggedInUser字段?或者我必须在LoggedInUser中添加一个@PostContruct方法(所以我也必须在那里读取头文件)。 – user2983732 2014-09-01 09:31:28

回答

0

根据评论和问题来判断 - 您需要EJB概念的帮助。

@SessionScoped bean是每个会话都有一个实例的bean。在一次会话期间,每个@Inject bean都会引用同一个对象。但是,如果你想让你的bean包含一些特定于该会话的信息,那么你需要使用setter或其他方法,像你在每个普通的Java类中所做的那样。

+0

我知道会话scoped bean每个会话都有一个实例,我的问题是我无法更改LoggedInUser的值。例如,如果我在CountryController中调用loggedInUser.setId(“myNewId”),则该值不会被更改。我可以在使用eclipse进行调试时观察它,我调用setId但值不会改变。初始对象通过默认构造函数实例化。 – user2983732 2014-09-01 09:43:46

+0

所以你可以调用'loggedInUser.setId(“myNewId”);''System.out.println(loggedInUser.getId());'并且Id没有设置?另外,这正是我最初希望你添加到这个问题的部分 - 填充loggedInUser并且不起作用的代码 – Deltharis 2014-09-01 10:12:23

+0

好吧,我尝试以不同的方式填充LoggedInUser。尝试在LoggedInUser#LoggedInUser(构造函数),LoggedInUser#initial(@PostConstruct)中设置id,或者试图使用this.loggedInUser.setId(“testId”)在CountryController#someMethod()中设置值。如果你告诉我应该如何存储用户信息,我不知道我是否正确执行。最佳实践? – user2983732 2014-09-01 10:28:56