【发布时间】:2022-10-09 05:41:01
【问题描述】:
我试图从 payara/micro:4.181 迁移到 payara/micro:5.2022.3,我注意到在 Jar 文件中没有调用带有观察者 [@initialized(ApplicationScoped.class) ServletContext init] 的初始化方法。
public void init(@Observes @Initialized(ApplicationScoped.class) ServletContext init)
但是,在使用 payara/micro:4.181 时会正确调用它。
要重现所描述的行为:
- 从github_link_to_illustration_files 下载附件reproduce_observer_issue.zip
- 解压文件到“current_dir”
解压后的文件包含一个 Dockerfile,内容如下:
#FROM payara/micro:5.2022.3 FROM payara/micro:4.181 COPY app.war $DEPLOY_DIR取消注释与您要运行应用程序的 payara/micro 版本相对应的行。
- 运行以下 docker 命令来部署应用程序:
- docker build -t reissue:v1。
- docker 运行重新发布:v1
- 如果您检查路径“current_dir\sources\libs\lib\src\main\java\mylib\Library.java”,您可以看到它包含两个初始化方法,但是在 payara/micro:5.2022.3 上部署时init(@observes @initialized(ApplicationScoped.class) ServletContext init) 不会被调用(检查日志)
package mylib; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.context.Initialized; import javax.enterprise.event.Observes; import javax.servlet.ServletContext; @ApplicationScoped public class Library { public boolean someLibraryMethod() { return true; } public void init(@Observes @Initialized(ApplicationScoped.class) Object init) { System.out.println(" ### log-1 mylib.Library.init(java.lang.Object) called ###"); } public void init(@Observes @Initialized(ApplicationScoped.class) ServletContext init) { System.out.println(" ### log-2 mylib.Library.init(javax.servlet.ServletContext) invoked ###"); } }提前感谢任何最终的回复/提示
【问题讨论】:
-
请从 server.log 添加带有错误消息的部分
-
嗨@SlavaKuravsky,没有错误日志只是不会调用带有ServletContext参数的init方法(因此会丢失相应的日志)这仅在payara 5上运行时才会发生。但是在payara 4上部署时,所有init方法都在上面的描述被称为。谢谢
-
我建议您查看从 4 到 5 的迁移指南,也许它以不同的方式工作
-
我会再检查一遍,谢谢
-
我查了一下,但没有找到关于这个的东西
标签: java docker payara-micro