Ленивая загрузка ESB в приложении jruby rails - PullRequest
1 голос
/ 26 апреля 2010

У меня есть приложение jruby / rails, использующее:

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-клиент для каждого запроса для использования в наших контроллерах.

Я открыт для всех предложений. Я с трудом пытаюсь найти подходящее место, чтобы поставить этот ленивый экземпляр.

1 Ответ

0 голосов
/ 28 апреля 2010

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

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