2011-02-02 22 views
0

我通常会像这样布置我的Java SE方法。我应该尝试捕捉这样的简单读取的任何异常吗?我可以看到使用捕获任何插入,但为此我没有看到需要。只是要求提供建议。我应该试图捕捉任何EnityManager查询异常吗?

public List<PkgLineStateHistory> findAllStateHistory() { 

    EntityManager em = getEntityManager(); 
    List<PkgLineStateHistory> list = null; 
    try { 
     return em.createNamedQuery("PkgLineStateHistory.findAll").getResultList();   
    } finally { 
     em.close(); 
    } 
} 

回答

1

对于Java SE应用程序(您的情况),关闭EM是一种很好的做法,因为您可能正在自行管理EntityManagerFactory。

在托管环境中,就像在提供EM的Java EE容器中一样,您不需要关闭它,因为容器正在管理它。听起来微不足道,但并不总是显而易见的;-)

1

你需要让异常泡到你的交易范围之外的,否则您的交易不会回滚(除非您处理您的交易明确,这是更多的工作比你需要做的)。

此外,我不认为只是一个finally子句实际上捕捉到异常。

FWIW,我见过的大多数web应用程序都让异常一路冒出来,并且有一些通用的错误处理机制,它可以产生适当的响应。只有在你要对他们做些什么的时候才能发现异常。

+2

在他的例子中,异常*被传播。我认为他的观点是:他是否应该在试卷中包装他的陈述,只是为了在最后得到“接近”? – jpkrohling 2011-02-04 13:46:19