如何让payara(eclipsepayara工具)更新所有/过时的文件?

xmakbtuz  于 2021-06-27  发布在  Java
关注(0)|答案(0)|浏览(251)

**赏金6天后到期。回答这个问题可以获得+500声望奖励。jayc667正在寻找一个可靠来源的答案。

我正在用eclipse(版本:2019-09r(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/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工具会自动并正确地上传更改到payara服务器。当我进入 /dyn/db/merge/dbmerge 通过服务器上的浏览器,我总能获得dbmerge本身的最新正确行为。
当我在某个java项目库或类httpconnector中更改与dbmerge位于完全相同的包/目录中的代码时,payara tools仍然告诉我它正在重新发布一段时间(eclipse服务器视图 [Started, Synchronized][Started, Republish][Started, Synchronized] ).
但是:当我进入 /dyn/db/merge/dbmerge 同样在浏览器中,httpconnector(或库中的其他类)中的代码更改不会生效。我必须'重新启动'或重新部署项目,以使这些更改生效。
在这个例子中,我做了:
部署项目
访问 /dyn/db/merge/dbmerge =>日志显示“新闻1”
第二行评论(新闻2)
eclipse/payara工具刷新
我清除日志
当我进入 /dyn/db/merge/dbmerge :log只显示新的“news 1”,此时它应该显示“news 1”和“news 2”
我假设这是一种运行时优化,只加载一次类,并且只重新加载httpservlet类型的类或带有@webservlet注解的类,并在“重新发布”之后访问
那么,如何让eclipse/payara-tools/payara-server也更新那些过时的文件进行开发呢?
更新
我发现如果我写 public class HttpConnector extends HttpServlet (即使httpconnector不应该是httpservlet)并完全重新部署项目,那么它将始终保持该文件的最新状态,并始终产生预期的行为。如果我部署时没有“extends”并在以后添加它(仅重新发布),它将无法工作。
更新2
看来帕亚拉有个缓存漏洞。我必须完全停止并重新启动payara,然后使用部署我的项目 class HttpConnector extends HttpServlet 已经准备好了,那就行了。
如果我取消部署项目并重新部署(或者从eclipseservers视图“重新启动”它),那么 class HttpConnector extends HttpServlet 将无法工作,内容将保持陈旧。因此,第一次部署似乎是关键的一部分,后来的联合国部署和部署将不再影响这一点。。。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题