如何在Wildfly中“刷新”已部署的应用程序?

时间:2016-11-18 09:03:56

标签: java java-ee wildfly application-server

我是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));
        }   
    }
}

2 个答案:

答案 0 :(得分:0)

最佳做法是让容器(在您的情况下为Wildfly 10)处理数据库连接,您可以在standalone.xml文件中对其进行配置。

Documentation for configuration

答案 1 :(得分:0)

在您的情况下,在Wildfly中创建一个(池)数据源,并在Wildfly中启用连接验证和连接重试。这样,Wildfly将管理您的数据库连接并在失败时重新建立连接。

在Wildfly中安装MySQL驱动程序后,您可以在Wildfly管理控制台上创建数据源(默认情况下,它在端口9990上运行)或使用JBoss CLI。

进一步阅读: