我是Java EE的新手,对于在应用程序服务器中运行应用程序有一个理解问题,在我的例子中是Wildfly 10。
我的问题是,即使我关闭并重新打开浏览器会话,对象显然会保持其状态,一旦它们在应用程序启动时实例化。在我的情况下,我正在使用一个尝试打开jdbc连接的bean,并在出现问题时写入facelet的消息。
因此,为了测试场景,我关闭了数据库并启动了应用程序。正如预期的那样,出现错误消息。现在,重新启动数据库后,它仍然没有连接并给我“无数据库”消息。必须完全重启应用程序服务器才能使bean重新开始。
所以问题是,我该怎么办,重新初始化我的应用程序的所有涉及的对象实例?
以下是相关bean的代码:
@Named
@Stateless
public class CoworkerProducer
{
@Inject
private EntityManager em;
@Resource(lookup="java:/JMPostgres")
private DataSource dsJM;
public void addCoworkers(Long projectId)
{
Project managedProject = em.find(Project.class, projectId);
Long jmId = managedProject.getJmId();
try {
Connection con = dsJM.getConnection();
PreparedStatement ps = con.prepareStatement("SELECT * FROM employees e, departments d WHERE e.department_id = d.id AND d.project_id = " + jmId);
ResultSet result = ps.executeQuery();
while(result.next()){
Coworker cow = new Coworker();
cow.setProject(managedProject);
em.persist(cow);
}
}
catch (SQLException e) {
final FacesContext facesContext = FacesContext.getCurrentInstance();
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "no database!", null));
}
}
}
答案 0 :(得分:0)
最佳做法是让容器(在您的情况下为Wildfly 10)处理数据库连接,您可以在standalone.xml文件中对其进行配置。
答案 1 :(得分:0)
在您的情况下,在Wildfly中创建一个(池)数据源,并在Wildfly中启用连接验证和连接重试。这样,Wildfly将管理您的数据库连接并在失败时重新建立连接。
在Wildfly中安装MySQL驱动程序后,您可以在Wildfly管理控制台上创建数据源(默认情况下,它在端口9990
上运行)或使用JBoss CLI。
进一步阅读: