Can't set properties of Seam component
t1mb0 Apr 13, 2008 4:46 PMThis seems very strange .. In the authenticate method I create a Seam java bean component of session scope (only if authentication is sucessful). However, the attributes of loggedInUser are still null after I have just set them! Watching this in the debugger is quite unsettling. dbUserAccount.getAccountId() does have a value as do the other values used to populate loggedInUser.
It seems like I'm doing basic stuff but I can't understand this behaviour. If you have any ideas please let me know.
I'm using Seam 2.0.1, jdk 1.5.15 on Jboss 4.2.2
here is my authenticate class:-
@Stateless
@Name("authenticator")
public class AuthenticatorImpl implements Authenticator, Serializable
{
/** serialVersionUID */
private static final long serialVersionUID = 1L;
@Logger
Log log;
@In
Identity identity;
@In(create = true)
AccountDao accountDao;
@Out(required = false)
LoggedInUser loggedInUser;
public boolean authenticate()
{
log.info("authenticating #0", identity.getUsername());
boolean success = false;
UserAccount dbUserAccount = accountDao.getUserAccount(identity.getUsername(), identity.getPassword());
if (dbUserAccount != null)
{
success = true;
Set<UserRole> roles = dbUserAccount.getUserRoles();
for (UserRole role : roles)
{
if (role != null)
{
log.debug("Adding role {0}", role.getRoleName());
identity.addRole(role.getRoleName());
}
}
loggedInUser = (LoggedInUser) Component.getInstance(LoggedInUser.class);
loggedInUser.setAccountId(dbUserAccount.getAccountId());
loggedInUser.setProfileId(dbUserAccount.getUserProfile().getProfileId());
loggedInUser.setUserName(dbUserAccount.getUserName());
log.info("Authentication successful");
}
else
{
// Clearing the identity object fields on authentication failure
// seems to prevent constant silent authentication attempts
identity.setUsername(null);
identity.setPassword(null);
}
return success;
}
}
and the loggedInUser component:-
@Name("loggedInUser")
@Scope(value = ScopeType.SESSION)
public class LoggedInUser
{
private Integer accountId;
private Integer profileId;
private String userName;
public LoggedInUser() {
}
public Integer getAccountId()
{
return accountId;
}
public void setAccountId(Integer accountId)
{
this.accountId = accountId;
}
....
}