为什么我不能捕获EJB异常? [英] Why can't I catch EJB exceptions?

查看:118
本文介绍了为什么我不能捕获EJB异常?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的java ee 6项目中,我似乎无法捕获诸如NoResultException或EJBException之类的异常。有什么我做错了吗?我在EJB容器之外捕获了异常,但这是我第一次使用EJB。谢谢。

  @Stateless 
public class UserEJB {

@PersistenceContext
实体管理器

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

public用户fetchUserByEmail(String email){

用户user = em.createNamedQuery(User.findByEmail,User.class).setParameter(电子邮件,电子邮件).getSingleResult();
返回用户;
}

public用户fetchUserById(int id){
返回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 {

用户userLogin = userEJB.fetchUserByEmail(user.getEmail());

} catch(Exception e){

}

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

/ **
* @返回用户
* /
public User getUser(){
返回用户;
}

/ **
* @param用户设置
* /
public void setUser(User user){
this.user = user;
}


解决方案

.out.printlns在代码中?一个在异常处理程序中,一个在if语句之前。你得到什么?



看看代码我会说你将能够捕获异常,这应该是一个JPA异常包装在一个EJB中。 p>

I can't seem to catch exceptions such as NoResultException or EJBException in my java ee 6 project. Is there something I am doing wrong? I have caught exceptions outside the EJB container but this is my first time using EJB. Thanks.

@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;
    }

解决方案

What if you put two System.out.printlns in the code? One in the exception handler and one right before the if statement. What do you get?

Looking at the code I would say you would be able to catch the exception, which should be a JPA exception wrapped in an EJB one.

这篇关于为什么我不能捕获EJB异常?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆