【问题标题】:Try to use Payara + Jrebel + Eclipse尝试使用 Payara + Jrebel + Eclipse
【发布时间】:2017-12-12 17:26:15
【问题描述】:

我正在尝试在我的 Eclipse neon.3 (4.6.3) 中进行设置:

  • Payara 服务器容器 (4.1.2.174)
  • JRebel 代理 7.1.3

对于以 EAR 格式打包的应用程序。在部署过程中,Payara 或 JRebel 日志中没有显示错误。我收到以下关于我的 EJB 的消息:

2017-12-12T14:52:50.933-0200|INFORMAÇÕES: 2017-12-12 14:52:50 JRebel: Watching 'alfa.bc.logistica.core.ejb.AlfaTransportadorEJB' for changes
2017-12-12T14:52:50.936-0200|INFORMAÇÕES: Portable JNDI names for EJB AlfaTransportadorEJB: [java:global/alfa.bc.logistica.ee/alfa.bc.logistica.core.em/AlfaTransportadorEJB!alfa.bc.logistica.core.remote.AlfaTransportadorRemote, java:global/alfa.bc.logistica.ee/alfa.bc.logistica.core.em/AlfaTransportadorEJB]

当我对其监视的类(例如AlfaTransportadorEJB)进行任何更改时,不会对容器进行更改,而是在我的类路径的target 目录中成功编译并生成了.class 文件(在 IDE 选项“自动构建”= true)。

显然.class 文件没有“部署”在容器上以执行类加载的重新加载过程。

其他信息:

对于 JRebel 配置,我遵循 this 教程。

对于相应 EAR 应用程序的相同版本,使用 Glassfish 4.1Jrebel 7.0.5 成功完成了“类的重新加载”。但是在这种情况下,在部署过程中,容器会说以下内容。

.

2017-12-12T15:02:24.167-0200|Informações: 2017-12-12 15:02:24 JRebel: Directory 'C:\Documentos\cooperateEE\logistica\alfa.bc.logistica.core.em\target\classes' will be monitored for changes.
... <another logs here> ...
2017-12-12T15:03:45.994-0200|Informações: 2017-12-12 15:03:45 JRebel: Watching 'alfa.bc.logistica.core.ejb.AlfaTransportadorEJB' for changes
2017-12-12T15:03:45.998-0200|Informações: Portable JNDI names for EJB AlfaTransportadorEJB: [java:global/alfa.bc.logistica.ee/alfa.bc.logistica.core.em/AlfaTransportadorEJB!alfa.bc.logistica.core.remote.AlfaTransportadorRemote, java:global/alfa.bc.logistica.ee/alfa.bc.logistica.core.em/AlfaTransportadorEJB]

我认为 JRebel 没有监控 target 目录,然后将编译后的 .class 文件重新加载到容器中。

JRebel 没有像上面的日志(“will be monitored for changes”)那样识别我的目标目录的原因是什么?

【问题讨论】:

  • 如果模块包含具有有效路径的 rebel.xml,则打印 will be monitored for changes。 rebel.xml 需要位于 EJB jar 的根目录和 WAR 的 WEB-INF/classes 中。 EAR-s 本身不需要 rebel.xml,只需要它们的子模块。您是说部署到 glassfish 时完全相同的 EAR 可以工作,但不能用于 payara 服务器,或者它们之间有什么区别?
  • @Murka 是的,rebel.xml 文件位于带有 EJB jar 的项目的根文件夹中,是的,带有 rebel.xml 文件的相同版本的应用程序会导致不同的行为.我刚刚使用 Payara 对 JRebel 7.0.5 版进行了另一次测试,但得到了相同的结果。看起来 Payara 在 JRebel 上引起了一些不同的行为。
  • 在这种情况下,它需要更深入的调查。为此,通过 JRebel 配置 -> 高级 -> 日志级别启用跟踪级别日志记录:跟踪。然后启动 payara 并尝试进行不重新加载的更改并通过 Help -> JRebel -> Submit a Support Ticket 提交支持票。还包括此问题的链接。

标签: jakarta-ee eclipse-plugin jrebel payara


【解决方案1】:

我发现了问题。比较 Glassfish(有效)和 payara(无效)之间的 jrebel.log,我意识到对于 Payara,日志显示:

2017-12-22 08:04:47.012 INFO  [10] [Banner]      
#############################################################
2017-12-22 08:04:47.012 INFO  [10] [Banner]  
2017-12-22 08:04:47.013 INFO  [10] [Banner]  Legacy Agent 7.0.5 (201702281652)
2017-12-22 08:04:47.013 INFO  [10] [Banner]  (c) Copyright ZeroTurnaround AS, Estonia, Tartu.
2017-12-22 08:04:47.014 INFO  [10] [Banner]  
2017-12-22 08:04:47.015 INFO  [10] [Banner]  Over the last 10 days JRebel prevented
2017-12-22 08:04:47.015 INFO  [10] [Banner]  at least 66 redeploys/restarts saving you about 2.7 hours.
2017-12-22 08:04:47.017 INFO  [10] [Banner]  
2017-12-22 08:04:47.017 INFO  [10] [Banner]  JRebel started in remote server mode.
2017-12-22 08:04:47.025 INFO  [10] [Banner]  
2017-12-22 08:04:47.026 INFO  [10] [Banner]  
2017-12-22 08:04:47.026 INFO  [10] [Banner]      
#############################################################

JRebel 以远程服务器模式启动

在 glassfish 中,不会记录此消息。所以我按照 JRebel 文档中的 this 链接并禁用 remote server mode 删除容器上的 VM 选项:

-Drebel.remoting_plugin=false

简而言之,问题在于 JRebel 正在使用活动服务器模式参数进行初始化

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    • 2017-02-21
    • 1970-01-01
    相关资源
    最近更新 更多