Hello guys,

I'm a bit confused. Does #{identity.login} start a long running conversation? 
I'm just asking because after successfully logging in, my User entity bean 
which I have outjected in the Authenticator.authenticate() method and injected 
in my conversational-scoped Stateful EJB still lives after every other click.

I have no @Begin/@End annotations declared myself.

Here's the beginning of my EJB:

@Stateful
  | @Scope(ScopeType.CONVERSATION)
  | @Name("userAction")
  | public class UserActionImpl implements UserAction
  | {
  |     @Logger private Log log;
  |     
  |     @In
  |     FacesMessages facesMessages;
  | 
  |     @In(value="entityManager")
  |     private EntityManager em;
  |    
  |     @In(required=false) @Out(required=false)
  |     private User user;
  | 
  | [...]

And here's my Authenticator class:

@Name("authenticator")
  | public class Authenticator
  | {
  |     @Logger Log log;
  |     
  |     @In
  |     private Identity identity;
  | 
  |     @In(value="entityManager")
  |     private EntityManager entityManager;
  | 
  |     @Out(required=false)
  |     private User user;
  |     
  |     public boolean authenticate()
  |     {
  |         log.info("authenticating #0", identity.getUsername());
  |         
  |         //write your authentication logic here,
  |         //return true if the authentication was
  |         //successful, false otherwise
  | 
  |         try
  |         {
  |             user = (User) entityManager.createQuery(
  |                     "from User where username = :username and password = 
:password")
  |                     .setParameter("username", identity.getUsername())
  |                     .setParameter("password", identity.getPassword())
  |                     .getSingleResult();
  |     
  |             if( user.getRoles() != null )
  |             {
  |                for( Role role : user.getRoles() )
  |                        identity.addRole(role.getName());
  |             }
  |             
  |             //FacesMessages.instance().add("Successfully authenticated #0", 
identity.getUsername());
  |             log.info("Successfully authenticated #0", 
identity.getUsername());
  |             return true;
  |         }
  |         catch( NoResultException e )
  |         {
  |             //FacesMessages.instance().add("Invalid username/password");
  |             log.info("authentication of #0 failed.", 
identity.getUsername());
  |             return false;
  |         }
  |         catch( Exception e )
  |         {
  |             FacesMessages.instance().add("Unexpected error occurred.");
  |             log.error("Unexpected error occurred", e);
  |             return false;
  |         }
  |     }
  | }

Like you can see: it's just out- and injecting the User which I expect to live 
for only one cycle (when no long running conversation exists). But I can click 
on my 'show-user-details' form as many times as I want and - magic - every 
other time the user's properties are displayed. Don't misunderstand me, this is 
exactly the behaviour I want but I thought I would have to start a long running 
conversation manually.

Can someone explain that 'magic' to me?

Thanks i.a.,
Mark



View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4021943#4021943

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4021943
_______________________________________________
jboss-user mailing list
jboss-user@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to