Java 如何使Payara(Eclipse Payara工具)更新所有/过时的文件?
我使用Eclipse(版本:2019-09 R(4.13.0)构建id:20190917-1200)编码,并使用Payara工具(1.0.0.201909271753)管理本地Payara服务器(5.201#badassfish(构建512)) 该项目相当广泛,使用多个库;Eclipse Java项目和.jar文件。 它还有85个WebServlet类。基本上一切都很好,只有一个例外: 我有一个名为“DbMerge”的WebServlet类Java 如何使Payara(Eclipse Payara工具)更新所有/过时的文件?,java,eclipse,servlets,payara,Java,Eclipse,Servlets,Payara,我使用Eclipse(版本:2019-09 R(4.13.0)构建id:20190917-1200)编码,并使用Payara工具(1.0.0.201909271753)管理本地Payara服务器(5.201#badassfish(构建512)) 该项目相当广泛,使用多个库;Eclipse Java项目和.jar文件。 它还有85个WebServlet类。基本上一切都很好,只有一个例外: 我有一个名为“DbMerge”的WebServlet类 @WebServlet("/dyn/db/m
@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->Debug as->Debug on Server)时,它会正确部署,没有问题
当我在DbMerge中更改代码时,Payara工具会自动并正确地将更改的AOD上传到Payara服务器。当我通过服务器上的浏览器访问/dyn/db/merge/dbmerge
时,我总能获得dbmerge本身的正确最新行为
当我更改某些Java项目库或HttpConnector类中的代码时,它与DbMerge位于完全相同的包/目录中,Payara Tools仍然告诉我它正在重新发布一段时间。(Eclipse服务器视图从[Started,Synchronized]
到[Started,repubish]
到[Started,Synchronized]
)
但是:当我在浏览器中再次访问/dyn/db/merge/dbmerge
时,HttpConnector(或库中的其他类)中的代码更改不会生效。为了使这些更改生效,我必须“重新启动”或重新部署项目
在本例中,我会:
/dyn/db/merge/dbmerge
=>日志显示“新闻1”/dyn/db/merge/dbmerge
时:日志仅显示新的“新闻1”,而它应该显示“新闻1”和“新闻2”公共类HttpConnector扩展HttpServlet
(即使HttpConnector不应该是HttpServlet)并完全重新部署项目,那么它将始终保持该文件的最新状态,并始终产生预期的行为。
如果我部署时没有“extends”并在以后添加它(仅重新发布),它将无法工作
更新2
看起来Payara中有一个缓存错误。我必须完全停止并重新启动Payara,然后使用类HttpConnector extends HttpServlet部署我的项目,然后它就可以工作了
如果我取消部署项目并重新部署(或者只是从Eclipse服务器视图“重新启动”它),则类HttpConnector extends HttpServlet
的效果将不起作用,内容将保持陈旧。因此,第一次部署似乎是关键部分,随后的取消部署和部署将不再影响这一点…在Payara GitHub存储库中有一个与您类似的问题。它解决了在部署时重新加载配置文件的问题。基本上,对于开发环境来说,有一些第三方选项可以用于重新加载,例如,但对于部署环境来说,没有什么真正的选项。从sound if it来看,Payara也不打算开发这样的功能
引用RedHat高级顾问Mikecroft的话:
Hi@edilmar-热重新加载已由#886处理为@lprimak
提到。这不是我们想要添加的功能,因为它是
JRebel已经很满意了,但这不是一个用于
生产。ZeroTurnaround在创建
相当于在生产中工作的LiveRebel,但是
在发布后不久就停止了
滚动升级将为您提供所需的零停机时间,或者
您想转向更现代的容器驱动部署样式,
有第三方工具可以让您实现同样的目标
docker的事
我现在就结束这个,因为这不是我们要追求的东西
对问题是,Payara服务器中已经存在某种形式的热/重新部署。每当我在Eclipse中保存更改时,任何更改的文件都会被上传,但只有在首次部署时标记为@WebServlet的文件才会被热替换。不重新启动项目,保持静态内容不变。但是,即使正常的热替换(如在调试模式下Eclipse中对非静态内容的更改)可以正常工作,在第一次部署时未使用WebServlet标记的文件(甚至在以后使用WebServlet标记的文件)也不会得到更新。因此,我假设Payara端存在一些负载优化的bug。如果不回答你会得到赏金好的。。。为了不搞砸stackoverflow的工作原理,我给了你赏金,但收回了被接受的答案。因为这或多或少还是开放的。