2015-10-14 2 views
6

Est-ce que quelqu'un a parfois essayé d'utiliser JRebel avec Mule au lieu d'un serveur d'application typique? Si oui, pourriez-vous décrire votre expérience? Pour autant que je sache, actuellement Mule n'est pas officiellement supporté par l'équipe JRebel. Cependant, je me demandais s'il y aurait une solution de contournement à cette limitation.Comment intégrer JRebel à Mule ESB?

Répondre

4

Bien que Mule ESB ne soit pas officiellement supporté par JRebel, nous avons trouvé une solution de contournement. Tout d'abord, permettez-moi de commencer en disant que:

  • A ce jour, il est pas possible de déployer à chaud flux XML Mule en utilisant JRebel. Mule, cependant, offre ses propres mécanismes pour atteindre la même chose. En tant que tel, le manque de soutien JRebel pour cela n'est pas une rupture d'affaire. Ainsi, la seule chose que nous pouvons déployer à chaud est les classes Java, qui sont toujours les bienvenues. Comment fait-on cela?

    • Commencez par configurer l'agent JRebel dans $ MULE_HOME/conf/wrapper.conf. Les lignes requises, dans notre cas, étaient les suivants:

      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} 
      

    Ce sont les paremeters JVM nécessaires pour lancer JRebel avec Mule. La numérotation des paramètres est arbitraire.

    Nous voulons utiliser JRebel en mode distant. Vous pouvez lire à propos de ce mode dans le docs. C'est la raison des paremètres wrapper.java.additional.16=-Drebel.remoting_plugin=true et wrapper.java.additional.19=-Drebel.remoting_port={whatever}. Maintenant, allez-y et lancez Mule en exécutant mule.bat ou mule.sh, en fonction de votre environnement (Windows ou * nix). JRebel devrait commencer avec ça.

  • Placez vos applications Mule dans $ MULE_HOME/apps. Ils seront automatiquement déployés et, à partir de maintenant, leurs fichiers .class seront surveillés par JRebel.
  • Dans votre IDE, installez le plugin JRebel et appliquez votre licence. Ensuite, ajoutez la nature JRebel à votre projet et configurez son URL de serveur distant en utilisant le port précédemment défini à l'intérieur de wrapper.conf.
  • Faites les modifications que vous devez apporter à votre code et synchronisez. Ils doivent être déployés avec succès dans l'instance Mule en cours d'exécution.
+0

- Certains des paramètres JVM présentés ne sont pas requis pour la configuration. D'abord, le paramètre JVM "wrapper.java.additional.15 = -agentpath: {chemin vers jrebel64.dll}" n'est pas nécessaire car vous avez déjà configuré javaagent "wrapper.java.additional.13 = -javaagent: {chemin vers jrebel .pot}". Deuxièmement, le paramètre "wrapper.java.additional.20 = -Drebel.resource_cache = true" n'est pas nécessaire car la valeur par défaut est true. –

+0

Je vais mettre à jour la réponse avec vos corrections. Merci beaucoup. :) – Enrique

1

Quand je Configuré avec les points indiqués, j'ai l'exception suivante dans la console Mule's:

Lancement d'une machine virtuelle 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


quand je testais, je remarqué que vous devez ajouter dans le fichier wrapper.conf les attributs suivants:

wrapper.java.additional.18 = -Drebel.log = true
wrapper.java.additional.19 = -Drebel.log.file =/MyPath/LogName. log

Avec ceux-ci, JRebel fonctionne correctement.En conclusion, lorsque nous utilisons un port spécifique, il est nécessaire d'activer la journalisation de JRebel.
Plus d'informations, consultez à l'étape 6:
https://zeroturnaround.com/software/jrebel/learn/remoting/setting-up-jrebel-remoting-with-intellij-idea-and-tomcat/

0

Configuration JRebel dans Mule est très similaire à configuration in tc Server.

Vous devez ajouter JRebel Agent comme une propriété wrapper.java.additional.* dans $MULE_HOME/conf/wrapper.conf:

wrapper.java.additional.10 = -agentpath: [c: \ chemin \] lib \ jrebel64.dll

Si vous utilisez la version Java 7 et plus récente, vous utilisez l'agent:

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 

Si vous utilisez la version Java 6 et ci-dessous, vous devez utiliser legacy agentjrebel.jar fichier.