2010-12-02 21 views
3

Ich kann anscheinend keine Ausnahmen wie NoResultException oder EJBException in meinem Java EE 6 Projekt abfangen. Gibt es etwas, was ich falsch mache? Ich habe Ausnahmen außerhalb des EJB-Containers erfasst, aber dies ist das erste Mal, dass ich EJB verwende. Vielen Dank.Warum kann ich keine EJB-Ausnahmen erfassen?

@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

Woher wissen Sie, dass die Ausnahme nicht ausgelöst wird, wenn Sie 'Exception' fangen und nicht protokollieren? catch (Exception e) {} Versuchen Sie 'e.printStacktrace()' ' –

+0

zu schreiben Wären Sie in der Lage, den Stack-Trace aus dem Glassfish-Log hier hinzuzufügen? –

+0

Die Antwort, die Sie angenommen haben, hat Ihr Problem gelöst? Ich habe das gleiche Problem –

Antwort

1

Was ist, wenn Sie zwei System.out.printlns in den Code eingeben? Eine im Exception-Handler und eine direkt vor der if-Anweisung. Was bekommst du?

Mit Blick auf den Code würde ich sagen, Sie würden in der Lage sein, die Ausnahme zu fangen, die eine JPA-Ausnahme in einem EJB sein sollte.

+0

Nun, der Code läuft gut. Ich möchte einfach nur die EJBException und die NoResultException abfangen. –

+0

Vielleicht ist das wirklich ein sehr einfacher Fall, dass die Ausnahme einfach nie geworfen wurde? Wenn der Code ordnungsgemäß ausgeführt wird, werden keine Ausnahmen ausgelöst. Wenn keine Ausnahmen ausgelöst werden, fängt Ihr Code keine ab. Aber das ist sehr einfach Java ... Ich nehme an, Ihr Problem ist nicht -das-grundlegende ... –

+0

Ich verstehe. Aber eine Ausnahme wird geworfen. Ich kann es in den Glasfischprotokollen sehen. Ich zwinge es, geworfen zu werden, weil ich einen Benutzer suche, der nicht existiert. Ich werde eine Ausnahme ohne Ergebnis haben. Ich habe diese Strafe schon 100 Mal bekommen. Es wird in den EJB-Container verschoben, der etwas verändert hat. Gibt es nichts Besonderes, das ich ändern muss, um Ausnahmen zuzulassen? –

Verwandte Themen