2015-10-14 4 views
6

Кто-нибудь когда-нибудь пытался использовать JRebel с Mule вместо обычного сервера приложений? Если да, не могли бы вы описать свой опыт?Как интегрировать JRebel с Mule ESB?

Насколько я знаю, в настоящее время Мул официально не поддерживается командой JRebel. Однако мне было интересно, может ли быть какое-то обходное решение для этого ограничения.

ответ

4

Хотя Mule ESB официально не поддерживается JRebel, мы нашли обходное решение. Прежде всего, позвольте мне начать, заявив, что:

  • По состоянию на сегодняшний день, это не возможность горячего развертывания Mule XML потоков с помощью JRebel. Однако Мул предлагает свои собственные механизмы для достижения этой же цели. Таким образом, отсутствие поддержки JRebel для этого не является нарушителем транзакций.

Итак, единственное, что мы можем развернуть, - это классы Java, которые по-прежнему очень приветствуются. Как мы это делаем?

  • Начать настройку агента JRebel в $ MULE_HOME/conf/wrapper.conf. Требуемые линии, в нашем случае были:

    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} 
    

Эти параметры при JVM, необходимые для запуска JRebel вместе с Mule. Нумерация параметров произвольна.

Мы хотим использовать JRebel в удаленном режиме. Вы можете прочитать об этом режиме в docs. В этом и состоит причина использования пареметров wrapper.java.additional.16=-Drebel.remoting_plugin=true и wrapper.java.additional.19=-Drebel.remoting_port={whatever}.

  • Теперь запустите Mule, выполнив mule.bat или mule.sh, в зависимости от вашей среды (Windows или * nix). JRebel должен начать с этого.
  • Разместите свои приложения Mule внутри $ MULE_HOME/apps. Они будут автоматически развернуты, и отныне их файлы .class будут контролироваться JRebel.
  • Внутри вашей IDE установите плагин JRebel и примените свою лицензию. Впоследствии добавьте природу JRebel в свой проект и настройте URL-адрес удаленного сервера, используя порт, который мы предварительно определили внутри wrapper.conf.
  • Выполняйте любые изменения, которые необходимо выполнить для вашего кода и синхронизации. Они должны быть успешно развернуты в запущенном экземпляре Mule.
+0

- Некоторые из представленных параметров JVM не требуются для конфигурации. Сначала параметр JVM «wrapper.java.additional.15 = -agentpath: {path to jrebel64.dll}» не нужен, потому что вы уже настроили javaagent «wrapper.java.additional.13 = -javaagent: {путь к jrebel .jar}». Второй параметр «wrapper.java.additional.20 = -Drebel.resource_cache = true» не требуется, поскольку значение по умолчанию - true. –

+0

Я буду корректировать ответ с вашими исправлениями. Большое спасибо. :) – Enrique

1

Когда я настроил с точками, указанными, у меня есть следующий исключение в Mule's консоли:

Запуск виртуальной машины Java ...

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. log

С этими JRebel работает правильно.В заключение, когда мы используем определенный порт, необходимо включить ведение журнала JRebel.
Более подробную информацию, проверить на шаге 6:
https://zeroturnaround.com/software/jrebel/learn/remoting/setting-up-jrebel-remoting-with-intellij-idea-and-tomcat/

0

Конфигурация JRebel в Mule очень похож на configuration in tc Server.

Вам нужно добавить JRebel Agent как 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 файл.

Смежные вопросы