Dennis/Ate,

The credential is not transient. It is persistent and I verified it was written to the database. The "feature" is that setting a password is deferred by transient tracking members in PasswordCredentialImpl. With OBJ, a new credential instance is read from the DB on every access and that circumvents the set password tracking. With JPA, the objects are cached. Within the same transaction, you are ensured of getting the same instance back, even if it has been flushed to the database on a commit. Because its the same instance, the getPassword() access retrieves the old value, despite the fact that the credential has in fact been updated.

I do not want to do something that is wrong here. The deferred password set operation is there for a reason no doubt, but I am wondering if it is safe to override that capability in this case. Perhaps Ate can comment on why PasswordCredential does this in general and if it is appropriate to disable it here?

Randy

Dennis Dam wrote:
Hi Randi,

it's fine by me if you don't have other options. I guess you can't (or don't 
want to) force a write-through of the password, and discard the transient 
credential?

regards,
Dennis

-----Oorspronkelijk bericht-----
Van: Randy Watler [mailto:wat...@wispertel.net]
Verzonden: ma 9-2-2009 10:41
Aan: Jetspeed Developers List
Onderwerp: SSO PasswordCredential Question
Ate/Dennis,

In SSOManagerImpl.setPassword(), we invoke PasswordCredential.setPassword(xxx, false) from TestSSOManager.testCredentials() and then requery the password later in the test to see if it has changed.

This works fine with OBJ, but with JPA I get the same PasswordCredential instance back on the requery because it is in an 'Extended'/'Conversational' transaction. As a result, the 'new password set' transient tracking in PrincipalCredentialImpl is active and is as if the user just set the password. This means that the PasswordCredential.getPassword() returns the previous password value and the test fails.

I am wondering if immediately after the PasswordCredential.setPassword() call the SSOManagetImpl.setPassword() method should invoke PasswordCredential.clearNewPasswordSet()? That seems like it might make sense in this case since we're forcing a password change, no?

Randy


---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscr...@portals.apache.org
For additional commands, e-mail: jetspeed-dev-h...@portals.apache.org




------------------------------------------------------------------------

---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscr...@portals.apache.org
For additional commands, e-mail: jetspeed-dev-h...@portals.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscr...@portals.apache.org
For additional commands, e-mail: jetspeed-dev-h...@portals.apache.org

Reply via email to