【问题标题】:Possible to detect when application starts successfully in Wildfly?可以检测应用程序何时在 Wildfly 中成功启动?
【发布时间】:2015-04-30 19:28:53
【问题描述】:

有没有办法检测一个war文件何时被Wildfly成功加载并导致一些代码执行?

【问题讨论】:

    标签: jboss wildfly wildfly-8


    【解决方案1】:

    你有几个选择。

    如果您使用 CDI,您可以为 @Observes @Initialized(ApplicationScoped.class) Object o 添加观察者方法 如果您使用 EJB,则可以使用带有 @PostConstruct 方法的 @javax.ejb.Singleton @javax.ejb.Startup 进行初始化。下面是两个示例实现。

    // using a CDI object
    @ApplicationScoped
    public class SomeStartupBean {
        public void initOnStartup(@Observes @Initialized(ApplicationScoped.class) Object obj) {
            // do your start up logic here
        }
    }
    

    // using an EJB
    @Singleton
    @Startup
    public class SomeStartupSingleton {
        @PostConstruct
        public void initOnStartup() {
            // do your start up logic here
        }
    }
    

    【讨论】:

    • 在这种情况下,我有一个 RESTeasy servlet。当 servlet 可用时,我想触发一些逻辑将当前环境转储到日志文件中。我正在为 ContextRefreshedEvent 寻找类似 Spring 的 ApplicationListener 的东西。理想情况下,我可以把它做成一个独立的类,可以包含在任何 war 文件中。
    • 我并不想变得迟钝,但我不确定如何做到这一点。我想做的是创建一个可以简单地包含在war文件中的类EnvironmentLogger。 @Observes @Initialized(ServletName) 注释在这样的类中放在哪里?再次感谢。
    • 我用你可以尝试的具体实现更新了我的答案。
    • 另外值得注意的是,您仍然可以使用诸如 servlet 上下文侦听器之类的东西。它们没有错,但是当使用其余 API 时,这将是您对 Web 层的唯一依赖。这提供了稍微更好的隔离。如果您正在处理 webapp,则初始化中的 Object 是一个 servlet 上下文。
    • 不,那会很糟糕。我建议使用两种不同的方法。 @PostConstruct 特别不应该带参数。
    【解决方案2】:

    您可以使用@Startup EJB。这将在应用程序成功部署后执行。

    【讨论】:

      猜你喜欢
      • 2015-05-14
      • 2016-02-23
      • 2011-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多