如何将JRebel与Mule ESB集成?

时间:2015-10-14 17:17:11

标签: java mule esb jrebel

是否有人试图将JRebel与Mule一起使用而不是典型的应用程序服务器?如果是这样,你能描述一下你的经历吗?

据我所知,目前,Mule并未得到JRebel团队的正式支持。但是,我想知道这个限制是否可能有一些解决方法。

4 个答案:

答案 0 :(得分:4)

虽然JRebel没有正式支持Mule ESB,但我们找到了一种解决方法。首先,让我首先说明:

  • 截至今天,使用JRebel热插拔Mule XML流是。然而,骡子提供了自己的机制来实现同样的事情。因此,JRebel缺乏对此的支持并不是违规行为。

因此,我们唯一可以热部署的是Java类,这仍然是非常受欢迎的。我们怎么做?

  • 首先在$ MULE_HOME / conf / wrapper.conf中配置JRebel代理。在我们的例子中,所需的行是:

    wrapper.java.additional.13=-javaagent:{path to jrebel.jar}
    wrapper.java.additional.14=-Xbootclasspath:{path to rebelboot.jar}
    wrapper.java.additional.16=-Drebel.remoting_plugin=true
    wrapper.java.additional.19=-Drebel.remoting_port={whatever}
    

这些是与Mule一起启动JRebel所需的JVM参数。参数的编号是任意的。

我们希望在远程模式下使用JRebel。您可以在docs中了解此模式。这就是wrapper.java.additional.16=-Drebel.remoting_plugin=truewrapper.java.additional.19=-Drebel.remoting_port={whatever}参数的原因。

  • 现在继续执行mule.bat或mule.sh,启动Mule,具体取决于您的环境(Windows或* nix)。 JRebel应该从它开始。
  • 将您的Mule应用程序放在$ MULE_HOME / apps中。它们将自动部署,从现在开始,它们的.class文件将由JRebel监控。
  • 在IDE中,安装 JRebel插件并应用许可证。然后,将JRebel性质添加到项目中,并使用我们之前在wrapper.conf中定义的端口配置其远程服务器URL。
  • 对代码进行任何更改并进行同步。它们应该成功热部署到正在运行的Mule实例中。

答案 1 :(得分:3)


当我测试时,我注意到你需要在文件wrapper.conf中添加下一个属性:

wrapper.java.additional.18 = -Drebel.log =真
wrapper.java.additional.19 = -Drebel.log.file = / mypath中/ LogName.log

有了这些,JRebel就能正常运行。总之,当我们使用特定端口时,必须启用JRebel的日志记录。
更多信息,请查看步骤6:
https://zeroturnaround.com/software/jrebel/learn/remoting/setting-up-jrebel-remoting-with-intellij-idea-and-tomcat/

答案 2 :(得分:1)

当我配置了指示的点数时,我在Mule的控制台中有下一个例外:

启动JVM ......

2015-10-27 11:00:27 JRebel: WARN You are running JRebel using the -javaagent option on a system where -agentpath is supported.<br/>
2015-10-27 11:00:29 JRebel: Monitoring Log4j configuration in 'file:/C:/Dev/Mule%20-%2002-esb-mule-ee%20-%203.4/conf/log4j.properties'.<br/>
Exception in thread "main" java.lang.NoSuchMethodError: javax.xml.parsers.SecuritySupport$1: method <init>()V not found<br/>
        at javax.xml.parsers.SecuritySupport.getContextClassLoader(Unknown Source)<br/>
        at javax.xml.parsers.FactoryFinder.find(Unknown Source)<br/>
        at javax.xml.parsers.DocumentBuilderFactory.newInstance(Unknown Source)<br/>
        at com.opensymphony.module.propertyset.config.PropertySetConfig.<init>(PropertySetConfig.java:53)<br/>
        at com.opensymphony.module.propertyset.config.PropertySetConfig.getConfig(PropertySetConfig.java:113)<br/>
        at com.opensymphony.module.propertyset.PropertySetManager.getInstance(PropertySetManager.java:32)<br/>
        at com.opensymphony.module.propertyset.PropertySetManager.getInstance(PropertySetManager.java:22)<br/>
        at com.mulesource.licm.pref.MulePropertySetPreferences.loadPropertySet(MulePropertySetPreferences.java:208)<br/>
        at com.mulesource.licm.pref.MulePropertySetPreferences.<clinit>(MulePropertySetPreferences.java:50)<br/>
        at com.mulesource.licm.pref.MulePreferencesFactory.<clinit>(MulePreferencesFactory.java:19)<br/>
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)<br/>
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)<br/>
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)<br/>
        at java.lang.reflect.Constructor.newInstance(Unknown Source)<br/>
        at java.lang.Class.newInstance(Unknown Source)<br/>
        at java.util.prefs.Preferences.factoryOrig(Unknown Source)<br/>
        at java.util.prefs.Preferences.userRoot(Unknown Source)<br/>
        at com.mulesource.licm.impl.TrueLicenseHelper.createLicenseManagerParameters (TrueLicenseHelper.java:338)<br/>
        at com.mulesource.licm.impl.TrueLicenseHelper.createLicenseManagerParameters(TrueLicenseHelper.java:330)<br/>
        at com.mulesource.licm.impl.TrueLicenseHelper.<init>(TrueLicenseHelper.java:120)<br/>
        at com.mulesource.licm.impl.MuleLicenseManager.<init>(MuleLicenseManager.java:25)<br/>
        at com.mulesource.licm.LicenseManagementFactory.createLicenseManager(LicenseManagementFactory.java:48)<br/>
        at org.mule.module.boot.LicenseKeyHandler.<init>(LicenseKeyHandler.java:43)<br/>
        at org.mule.module.reboot.MuleContainerBootstrap.handleLicenseKey(MuleContainerBootstrap.java:192)<br/>
        at org.mule.module.reboot.MuleContainerBootstrap.main(MuleContainerBootstrap.java:62)<br/>

答案 3 :(得分:0)

Mule中的配置JRebel与configuration in tc Server非常相似。

您需要在wrapper.java.additional.*中添加 JRebel代理作为$MULE_HOME/conf/wrapper.conf媒体资源:

wrapper.java.additional.10 = -agentpath:[C:\路径\至] LIB \ jrebel64.dll

如果您使用的是Java 7及更高版本,则使用代理:

Windows 64-bit JDK  jrebel64.dll
Windows 32-bit JDK  jrebel32.dll
Mac OS X 64-bit JDK libjrebel64.dylib
Mac OS X 32-bit JDK libjrebel32.dylib
Linux 64-bit JDK    libjrebel64.so
Linux 32-bit JDK    libjrebel32.so

如果您使用Java版本6及更低版本,则需要使用legacy agent jrebel.jar 文件。