Вопрос

У меня есть приложение JRuby / Rails, используя:

jruby 1.4.0
Rails 2.3.5
ActiveMQ 5.3.0
Mule ESB 2.2.1

В настоящее время в нашей среде. Это становится большим болью, когда мы ходим, чтобы делать обычные грабли, которые не требуют JMS / MULE, таких как БД: мигрировать, так как требуется много времени для запуска / отключения MULE.

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

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

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

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

В настоящее время у нас есть несколько классов клиентов Ruby, которые создаются как A FORE_FILTER в Application_Controller, например, @data_service = DataService.new(APP_CONTEXT) которые инициализируют соответствующую Java-клиент для каждого запроса для использования в наших контроллерах.

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

Это было полезно?

Решение

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

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

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

class App

  def self.context
    @context ||= Java::our.company.package.service_clients.Initializer.getAppContext(MULE_CONFIG_PATH)
  end
end
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top