2015-04-13 2 views
3

Contexte

A partir de ColdFusion 10 en avant, il est possible de include JARs from a custom location.de Java rechargement Programmatic JARs sans redémarrer ColdFusion

Pour charger les bibliothèques personnalisées Java (ou fichiers .java) un code similaire au suivant est ajouté à Application.cfc

this.javaSettings = {LoadPaths = [".\java_lib\",".\java\myjar.jar"], 
     loadColdFusionClassPath = true, reloadOnChange = false} 

ou aux changements de pick-up (avec une valeur par défaut 60 secondes de temps de rafraîchissement) le texte suivant est ajouté

this.javaSettings = {LoadPaths = [".\java_lib\",".\java\myjar.jar"], 
     loadColdFusionClassPath = true, reloadOnChange = true} 

question

Pour le développement de la deuxième option est bonne (probablement avec un temps de rafraîchissement beaucoup plus faible). Pour la production, la première option serait idéale, mais redémarrer le serveur chaque fois que nous avons besoin de changer un code Java n'est pas acceptable. Est-il possible de déclencher un rechargement de classes Java (de préférence programmatique) sans redémarrer le serveur lorsque reloadOnChange = false est défini?

+0

* redémarrer le serveur à chaque fois que nous avons besoin de changer de code java * Je ne suis pas 100% positif, mais ... IIRC il ne devrait exiger le redémarrage l'application, pas le serveur entier. Est-ce que tu l'as essayé? (Je me rends compte que ce n'est pas aussi granulaire que ce que vous cherchez, mais AFAIK CF n'expose aucune méthode de rechargement à la demande.) – Leigh

Répondre

1

Je suggère d'utiliser plutôt:

https://github.com/markmandel/JavaLoader

+0

Si c'est le cas, je peux le faire, même s'il est légèrement accablant de la fonctionnalité CF10 ne peut pas vraiment être utilisé en production –

+0

@RichardTingle - Je ne suis pas sûr que ce soit aussi simple que nous pouvons le penser ... Étant donné qu'il implique des chargeurs de classes dynamiques, il peut y avoir [quelques limitations techniques] (http://stackoverflow.com/a/26189233/104223) en fonction de l'implémentation. RE: JavaLoader.cfc - Dernière fois que j'ai vérifié, il a été recommandé que le JavaLoader soit stocké dans la portée du serveur pour éviter [fuites de mémoire avec URLClassLoaders] (http://www.compoundtheory.com/using-a-java-urlclassloader-in-cfmx -can-cause-a-memory-fuite /). Vous ne savez pas si/si le problème concerne la fonctionnalité CF10 (puisqu'il utilise aussi des chargeurs de classes dynamiques). – Leigh