2015-10-14 94 views
6

有沒有人有時試過用Mule而不是典型的應用服務器來使用JRebel?如果是這樣,你能描述一下你的經歷嗎?如何將JRebel與Mule ESB集成?

據我所知,目前,Mule沒有得到JRebel團隊的正式支持。但是,我想知道是否可以解決這個限制。

回答

4

儘管Mule ESB並未得到JRebel的官方支持,但我們找到了一種解決方法。首先,讓我指出,啓動:

  • 截至今天,它是可熱部署騾子XML使用JRebel的流動。但是,Mule提供了自己的機制來實現同樣的事情。因此,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} 
    

這些都是用騾子一起推出JRebel的所需的JVM paremeters。參數的編號是任意的。

我們想在遠程模式下使用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實例中。
+0

- 提供的一些JVM參數不需要配置。首先,JVM參數「wrapper.java.additional.15 = -agentpath:{jrebel64.dll的路徑}」不是必須的,因爲您已經配置了javaagent「wrapper.java.additional.13 = -javaagent:{path to jrebel 。罐}」。其次,參數「wrapper.java.additional.20 = -Drebel.resource_cache = true」不是必需的,因爲默認值爲true。 –

+0

我將更新您的更正答案。非常感謝。 :) – Enrique

1

當我表示的點配置,我在Mule's控制檯下一個異常:

啓動一個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/> 
2


當我測試,我注意到您需要在文件wrapper.conf中添加下列屬性:

wrapper.java.additional.18 = -Drebel.log = true
wrapper.java.additional.19 = -Drebel.log.file =/mypath中/ LOGNAME。日誌

這些JRebel運行正常。總之,當我們使用特定的端口時,有必要啓用JRebel的日誌記錄。
更多信息,您在第6步:
https://zeroturnaround.com/software/jrebel/learn/remoting/setting-up-jrebel-remoting-with-intellij-idea-and-tomcat/

0

JRebel的配置在騾子是非常相似的configuration in tc Server

您需要添加JRebel的代理wrapper.java.additional.*財產$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 agentjrebel.jar文件。