首先,我的框架是带有 JSF、托管 bean、EJB 和 JPA 的 Java EE 6。我编写了一个简单的程序来从数据库中查询信息。因此,当我单击一个按钮时,它会触发一个托管 bean 的事件,其中事件侦听器方法将访问 EJB 方法。select
EJB 方法将对实体进行简单查询。如果数据库在 I 之前或期间关闭select
,则会出现异常
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet successfully received from the server was 51,460 milliseconds ago. The last packet sent successfully to the server was 0 milliseconds ago.
Error Code: 0
如何避免此异常?绝对是try, catch
这里,但不知道放在哪里。当我做em.createNamedQuery
orem.remove
时,我尝试捕捉com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
,但我得到一个错误说:Exception com.mysql.jdbc.exceptions.jdbc4.CommunicationsException is never thrown in body of corresponding try statement
。
以下是我的代码,我将在哪里捕获异常?
这是我的EJB
@Stateless
@LocalBean
public class DocumentSBean {
@PersistenceContext
private EntityManager em;
public List<User> listUser(){
Query query = em.createNamedQuery("User.listUser");
query.returnResultList();
}
}
这是我的ManagedBean
@ManagedBean(name="document")
@ViewScoped
public class DisplayListController implements Serializable {
@EJB
DocumentSBean sBean;
List<User> users = null;
public void foo(){
users = sBean.listUser();
}
}
编辑
我尝试了下面列出的两种方式,但仍然在萤火虫上返回状态 200 而不是 500
<p:commandButton update="myform" actionListener="#{document.setDisplayFacility}" rendered="#{utility.admin}" value="Facilities"/>
或者
<p:commandButton update="myform" actionListener="#{document.setDisplayFacility}" rendered="#{utility.admin}" value="Facilities">
<p:ajax actionListener="#{document.setDisplayFacility}" update="myform" event="click"/>
</p:commandButton>
这是 setDisplayFacility()
public void setDisplayFacility(){
facilities = sBean.getAllFacilities(); //sBean is EJB
displayFacility = true;
}