2010-04-26 20 views
1

J'ai un JRuby/rails app utilisant:chargement Lazy d'ESB dans une application rails JRuby

jruby 1.4.0 
Rails 2.3.5 
ActiveMQ 5.3.0 
Mule ESB 2.2.1 

Actuellement dans notre fichier environment.rb nous commençons en Mule dans le initialiseur. Cela devient très pénible quand nous allons faire des tâches de rake normales qui ne nécessitent pas JMS/Mule comme db: migrer car il faut beaucoup de temps pour démarrer/arrêter Mule à chaque fois.

Le code est similaire à ceci:

APP_CONTEXT = Java::our.company.package.service_clients.Initializer.getAppContext(MULE_CONFIG_PATH) 

Et nous utilisons APP_CONTEXT pour aller chercher le grain de se connecter au service approprié. J'essaie de comprendre un mécanisme par lequel APP_CONTEXT pourrait être instancié paresseusement (pas en initialisation) pour éviter toutes les douleurs d'avoir à démarrer Mule à l'initialisation.

Actuellement nous avons quelques classes client Ruby qui sont instanciées comme before_filter dans application_controller tels que @data_service = DataService.new(APP_CONTEXT) qui initialisent le client approprié java pour chaque demande d'utilisation dans nos contrôleurs.

Je suis ouvert à toutes les suggestions. J'ai du mal à trouver le bon endroit pour mettre cette instanciation paresseuse.

Répondre

0

En fin de compte, (et je ne sais pas pourquoi je ne pensais pas cela), je viens de faire une application de classe qui a une méthode de classe retour

@context ||= Java::our.company.package.service_clients.Initializer.getAppContext(MULE_CONFIG_PATH) 

Je ne suis pas sûr ce qui se passait dans ma tête mais je pensais que si cela était référencé par deux fonctions en même temps, j'aurais deux instanciations différentes de l'AppContext, en oubliant que dans Ruby une classe est vraiment juste un objet singleton, donc ce sera toujours retourner le contexte unique.

class App 

    def self.context 
    @context ||= Java::our.company.package.service_clients.Initializer.getAppContext(MULE_CONFIG_PATH) 
    end 
end