2011-08-31 3 views
1

사용자 계정 생성 및 인증 처리를 위해 Seam의 IdentityManagerJpaIdentityStore 구성 요소를 활용하는 JBoss Seam 앱이 있습니다. 내 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

게으른 인출과 관련된 문제로 나타났습니다. 거기에 userAccount 속성이있는 UserProfile 객체가 있습니다. 릴레이션은 게으른 페치입니다. 일단 그것을 Eager fetching으로 변경하면 isUserEnabled()에서 적절한 응답을 받았습니다.