2011-08-31 53 views
1

我有一個JBoss Seam應用程序,它利用Seam的IdentityManagerJpaIdentityStore組件來處理用戶帳戶的創建和驗證。我的components.xml文件設置正確,我可以使用IdentityManager創建沒有問題的帳戶。Seam - IdentityManager.isUserEnabled問題()

我創建了一個頁面,允許我執行基本帳戶維護,例如啓用/禁用帳戶。但是,只要我撥打IdentityManager上的isUserEnabled(String username)方法,它總是返回false。 JpaIdentityStore中的相應方法也返回false。即使我可以看到帳戶已在數據庫中啓用,也會發生這兩種情況。我的用戶帳戶類被註解如下:

@Name("user") 
@Entity(name = "UserAccount") 
@Table(name = "tbl_user_acct", uniqueConstraints = { @UniqueConstraint(columnNames = "username") }) 
public class UserAccountBean extends BaseDomainEntity implements 
     VersionedDomainEntity { 

    private static final long serialVersionUID = -3573332411594504888L; 

    @UserEnabled 
    private boolean enabled; 

     ... 

} 

我沒有任何問題與任何IdentityManager類的其他方面(修改口令,創建/刪除帳戶等)我經營的唯一錯誤進入是當我嘗試確定用戶是否啓用。我沒有收到任何異常或錯誤消息,只是返回錯誤的結果。

有沒有其他人遇到過這個?任何想法如何最好地開始解決這個問題?

編輯:一些額外的信息...

我注意到,當我打電話disableUser(String username),我的確看到數據庫反映在啓用列。此外,當我撥打enableUser(String username)時,我立即看到該帳戶已啓用。但是,如果我導航到另一個頁面,然後回來並撥打isUserEnabled(),它仍然顯示爲false。

+0

通過調用isUserEnabled(username)和Hibernate SQL日誌記錄開啓的斷點,您能看到'select ... from tbl_user_acct where username =?'在日誌中當你讓方法執行? –

回答

0

原來是一個與懶惰抓取相關的問題。我有一個UserProfile對象,它具有一個userAccount屬性。這種關係是懶惰的。一旦我將其更改爲Eager抓取,我從isUserEnabled()收到相應的響應。