2014-09-01 31 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