2010-12-02 22 views
3

Je ne peux pas sembler attraper des exceptions telles que NoResultException ou EJBException dans mon projet java ee 6. Y a-t-il quelque chose que je fais de mal? J'ai attrapé des exceptions en dehors du conteneur EJB mais c'est la première fois que j'utilise EJB. Merci.Pourquoi ne puis-je pas détecter les exceptions EJB?

@Stateless 
public class UserEJB { 

    @PersistenceContext 
    EntityManager em; 

    public String getUserName(User user) { 
     return user.getName(); 
    } 

    public User fetchUserByEmail(String email) { 

     User user = em.createNamedQuery("User.findByEmail", User.class).setParameter("email", email).getSingleResult(); 
     return user; 
    } 

    public User fetchUserById(int id) { 
     return em.createNamedQuery("User.findByUserId", User.class).setParameter("userId", id).getSingleResult(); 
    } 

    public List<User> fetchAllUsers() { 
     return em.createNamedQuery("User.findAll", User.class).getResultList(); 
    } 
} 

@Named(value = "userController") 
@RequestScoped 
public class UserController { 

    private User user = new User(); 
    @EJB 
    UserEJB userEJB; 
    @Inject 
    SecurityController securityController; 

    public UserController() { 
    } 

    public void login(ActionEvent event) { 

     try { 

      User userLogin = userEJB.fetchUserByEmail(user.getEmail()); 

     } catch (Exception e) { 

     } 

     if (userLogin.getPassword().equals(user.getPassword())) { 
      securityController.setIsLoggedIn(true); 
      securityController.setIsAdmin(true); 
      securityController.setUser(user); 
     } 
    } 

    /** 
    * @return the user 
    */ 
    public User getUser() { 
     return user; 
    } 

    /** 
    * @param user the user to set 
    */ 
    public void setUser(User user) { 
     this.user = user; 
    } 
+0

Comment savez-vous que l'exception n'est pas levée, lorsque vous interceptez 'Exception' et que vous ne le connectez pas? catch (Exception e) {} Essayez d'écrire 'e.printStacktrace()' –

+0

Seriez-vous capable d'ajouter la trace de pile du journal glassfish ici? –

+0

La réponse que vous avez acceptée a résolu votre problème? J'ai le même problème –

Répondre

1

Que faire si vous mettez deux System.out.printlns dans le code? Un dans le gestionnaire d'exceptions et un juste avant l'instruction if. Qu'est ce que tu obtiens? En regardant le code, je dirais que vous seriez en mesure d'attraper l'exception, qui devrait être une exception JPA enveloppée dans une exception EJB.

+0

Eh bien le code fonctionne bien. Je veux juste attraper l'exception EJBException et l'exception NoResultException essentiellement. –

+0

Peut-être que c'est vraiment un cas très simple que l'exception n'a tout simplement jamais été lancée? Si le code fonctionne correctement, aucune exception ne sera générée. Si aucune exception n'est levée, votre code n'en contient aucun. Mais c'est très basique Java ... Je suppose que votre problème n'est pas-que-basique ... –

+0

Je comprends. Mais une exception est lancée. Je peux le voir dans les billes de verre. Je le force à être jeté parce que je cherche un utilisateur qui n'existe pas. Je vais avoir une exception sans résultat. J'ai été capable d'attraper cette amende 100 fois avant. Il se déplace vers le conteneur EJB qui a changé quelque chose. N'y a-t-il rien de spécial à changer pour me permettre d'attraper des exceptions? –