【问题标题】:How to "refresh" a deployed application in Wildfly?如何在 Wildfly 中“刷新”已部署的应用程序?
【发布时间】:2016-11-18 09:03:56
【问题描述】:

我是 Java EE 的新手,对在应用程序服务器中运行应用程序有一个理解问题,在我的例子中是 Wildfly 10。

我的问题是,对象显然会保持它们的状态,一旦它们在应用程序启动时被实例化,即使我关闭并重新打开浏览器会话也是如此。就我而言,我正在使用一个尝试打开 jdbc 连接并写入 facelet 消息的 bean,以防出现问题。

所以,为了测试场景,我关闭了数据库并启动了应用程序。正如预期的那样,出现了错误消息。现在,重新启动数据库后,它仍然没有连接并给我“无数据库”消息。为了让 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));
        }   
    }
}

【问题讨论】:

  • 你为什么要同时注入EntityManager和注入DatasSource
  • 因为我从 DataSource(外部 RDBMS)读取了一些数据并将这些数据存储在由实体管理器持久化的对象中

标签: java jakarta-ee wildfly application-server


【解决方案1】:

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

Documentation for configuration

【讨论】:

    【解决方案2】:

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

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

    进一步阅读:

    【讨论】:

    • 其实我已经这样做了。我已经在 Wildfly 中创建了 Postgres 数据源,尽管我将所有池化和超时设置保留为默认值。是规格问题吗?如果是这样,我如何设置参数以让 Wildfly 尝试为每个新的浏览器会话重新打开连接?
    • 数据源的配置将取决于您的应用程序对数据库资源的使用情况(例如,数据库连接)。在任何 Java EE 规范中,连接池都没有特定的默认配置值。
    • 谢谢布哈克。我只是希望 Wildfly 尝试为每个新会话重新连接到 Db,或者更好地为 JSF 页面的每个新请求重新连接。
    猜你喜欢
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 2021-09-04
    • 2017-07-13
    • 2016-05-25
    相关资源
    最近更新 更多