gpt4 book ai didi

jakarta-ee - 如何在 Java EE 中使用 CDI 编写 main()?

转载 作者:行者123 更新时间:2023-12-02 01:11:57 25 4
gpt4 key购买 nike

我有一个想要运行的无客户端应用程序。它没有客户端,但会进行 HTTP 调用并充当其他服务的客户端。它可能会运行几个小时或几天(但不需要定期运行 - 只需一次)。

我想在 Java EE 7 容器中运行它,因为它具有标准上下文依赖注入(inject) (CD) 和标准 JAX-RS 客户端(自 Java EE 7 以来新增)的优势。有 JMS、JPA 等服务也不错。

问题是如何以标准方式编写/注释 main 方法? @Inject在一个方法上是不好的,因为这样的方法必须快速返回。 @Schedule并不理想,因为它会定期运行,除非我以编程方式确定当前系统时间。

我能想到的最好办法是设置一个一次性 Timer@Inject方法并用 @Timeout 注释我的主要方法.

不知何故,这似乎有点脆弱或不雅。 有没有更好的标准方法来启动服务?一些注释只会导致它启动并开始运行?

此外,如何在取消部署时中断和关闭服务的最佳标准方法是什么

最佳答案

当PostConstruct长时间运行时,与事件解耦:

@Singleton
@Startup
public class YourBean{
@Inject
private Event<XXX> started;
@PostConstruct
private void theMainMethod(){
started.fire(new XXX());
}
public void handleStarted(@Observes XXX started) {
// the real main method.
}

关于jakarta-ee - 如何在 Java EE 中使用 CDI 编写 main()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16491243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com