2011-08-31 51 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()收到相应的响应。