2010-04-26 2 views
1

У меня есть JRuby/рельсы приложение с помощью:Ленивая загрузка ESB в JRuby рельсы приложение

jruby 1.4.0 
Rails 2.3.5 
ActiveMQ 5.3.0 
Mule ESB 2.2.1 

В настоящее время в нашем файле environment.rb мы начинаем до Mule в инициализаторе. Это становится большой болью, когда мы идем делать обычные задачи рейка, которые не требуют JMS/Mule, таких как db: migrate, так как требуется много времени для запуска/остановки Mule каждый раз.

код похож на этот:

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

И мы используем APP_CONTEXT для извлечения компонент для подключения к соответствующей службе.

Я пытаюсь выяснить какой-то механизм, с помощью которого APP_CONTEXT может быть лениво инстанцирован (не инициализирован), чтобы избежать всех проблем, связанных с запуском Mule при инициализации.

В настоящее время у нас есть несколько классов клиентов ruby, которые создаются как before_filter в application_controller, такие как @data_service = DataService.new(APP_CONTEXT), которые инициализируют правильный клиент java для каждого запроса для использования в наших контроллерах.

Я открыт для всех предложений. Мне трудно найти подходящее место для создания этого ленивого экземпляра.

ответ

0

В конце концов, (и я не знаю, почему я не думал об этом), я только что сделал класс приложения, который имеет метод класса возвращающегося

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

Я не уверен, что было у меня в голове, но я подумал, может быть, если бы на это ссылались две функции одновременно, у меня было бы два разных экземпляра AppContext, забыв, что в Ruby класс - это всего лишь одноэлементный объект, поэтому это всегда будет возвращает один контекст.

class App 

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

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

  • Нет связанных вопросов^_^