如何使Payara(Eclipse Payara Tools)更新所有/过时的文件



我在Eclipse(版本:2019-09 R(4.13.0(Build id:20190917-1200(中进行编码,并使用Payara Tools(1.0.0.201909271753(管理本地Payara服务器(5.201#badasfish(Build 512((。

该项目相当广泛,使用了多个库;Eclipse Java项目和.jar文件。它还有85个WebServlet类。基本上一切都很好,只有一个例外:

我有一个名为"DbMerge"的WebServlet类

@WebServlet("/dyn/db/merge/dbmerge")
public class DbMerge extends HttpServlet {
@Override protected void doGet(final HttpServletRequest pReq, final HttpServletResponse pResp) throws IOException {
final HttpConnector c = new HttpConnector();
c.printNews();
}
}

和另一个类,称为HttpConnector:

public class HttpConnector {
public void printNews() {
System.out.println("News 1");
// System.out.println("News 2"); // comment in later
}
}

当我部署动态Web项目时(右键单击prohect->调试为->在服务器上调试(,它部署正确,没有问题。

当我在DbMerge中更改代码时,Payara Tools会自动正确地将更改后的代码上传到Payara Server。当我通过服务器上的浏览器访问/dyn/db/merge/dbmerge时,我总是得到DbMerge本身正确的最新行为。

当我更改某些Java项目库或Class HttpConnector中的代码时,Payara Tools仍然告诉我它正在重新发布一段时间,该类与DbMerge位于完全相同的包/目录中。(Eclipse Server视图从[Started, Synchronized][Started, Republish]再到[Started, Synchronized](。

但是:当我在浏览器中再次访问/dyn/db/merge/dbmerge时,HttpConnector(或库中的其他类(中的代码更改不会生效。为了使这些更改生效,我必须"重新启动"或重新部署项目。

在这个例子中,我做了:

  1. 部署项目
  2. 访问CCD_ 6=>日志显示";新闻1">
  3. 第二行评论(新闻2(
  4. Eclipse/Payara工具刷新
  5. 我清除日志
  6. 当我访问CCD_ 7:log时;新闻1";,当它应该显示";新闻1";以及";新闻2">

我假设这是某种运行时优化,只加载一次类,并且只重新加载HttpServlet类型或用@WebServlet注释的类,并在"重新发布"后访问

那么,我如何让Eclipse/Payara Tools/Payara Server也更新其他过时的文件进行开发呢?

更新

我发现,如果我编写public class HttpConnector extends HttpServlet(即使HttpConnector不应该是HttpServlet(并完全重新部署项目,那么它将始终保持该文件的最新状态,并始终产生预期的行为。如果我在没有"extends"的情况下部署并在以后添加(仅重新发布(,它将不起作用。

更新2

看起来Payara中有一个缓存错误。我必须完全停止并重新启动Payara,然后用class HttpConnector extends HttpServlet部署我的项目,然后它就可以工作了。

如果我取消部署项目并重新部署(或者只是从Eclipse服务器视图"重新启动"它(,class HttpConnector extends HttpServlet的效果将不起作用,内容将保持陈旧。因此,第一次部署似乎是关键部分,之后的取消部署和部署将不再影响这一点。。。

在Payara GitHub存储库中,有一个与您的问题类似的问题。它解决了在部署时重新加载配置文件的问题。基本上,开发环境中有一些第三方选项可供重新加载,例如JRebel,但部署环境中没有。从声音上看,Payara也不打算开发这样的功能。

引用RedHat高级顾问Mikecroft的话:

嗨@edilmar-#886已将热重新加载处理为@lprimak提到。这不是我们想要添加的功能,因为JRebel已经满意了,但这不是一个可用于生产ZeroTurnaround在创建相当于LiveRebel的制作,但是发布后不久就停止了。。

滚动升级将为您提供所需的零停机时间,或者,如果您希望转向更现代的容器驱动部署风格,有一些第三方工具可以让你实现同样的目标和docker的事。

我现在就结束,因为这不是我们要追求的。

相关内容

  • 没有找到相关文章

最新更新