Ленивая загрузка ESB в приложении Jruby Rails
-
01-10-2019 - |
Вопрос
У меня есть приложение 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