【问题标题】:Lazy loading of ESB in a jruby rails app在 jruby rails 应用程序中延迟加载 ESB
【发布时间】:2010-04-28 04:48:47
【问题描述】:

我有一个 jruby/rails 应用程序,使用:

jruby 1.4.0
Rails 2.3.5
ActiveMQ 5.3.0
Mule ESB 2.2.1

目前在我们的 environment.rb 文件中,我们在初始化程序中启动 Mule。当我们执行不需要 JMS/Mule 的普通 rake 任务(例如 db:migrate)时,这会变得很痛苦,因为每次启动/关闭 Mule 都需要很长时间。

代码类似这样:

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

我们使用APP_CONTEXT 获取 bean 以连接到相应的服务。

我正在尝试找出一些可以延迟实例化 APP_CONTEXT 的机制(不在初始化中),以避免在初始化时必须启动 Mule 的所有痛苦。

目前我们有一些 ruby​​ 客户端类,它们在 application_controller 中被实例化为 before_filter,例如 @data_service = DataService.new(APP_CONTEXT),它们为每个请求初始化适当的 java 客户端,以便在我们的控制器中使用。

我愿意接受所有建议。我很难找到合适的位置来放置这个惰性实例化。

【问题讨论】:

    标签: ruby-on-rails jms jrubyonrails mule


    【解决方案1】:

    最后,(我不知道为什么我没有想到这个)我刚刚制作了一个类 App,它有一个类方法返回

    @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
    

    【讨论】:

      猜你喜欢
      • 2015-01-11
      • 2013-12-31
      • 1970-01-01
      • 1970-01-01
      • 2018-09-30
      • 2011-06-28
      • 1970-01-01
      • 1970-01-01
      • 2018-10-04
      相关资源
      最近更新 更多