代码之家  ›  专栏  ›  技术社区  ›  brad

在jrubyrails应用程序中延迟加载ESB

  •  1
  • brad  · 技术社区  · 15 年前

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

    jruby 1.4.0
    Rails 2.3.5
    ActiveMQ 5.3.0
    Mule ESB 2.2.1
    

    代码类似于:

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

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

    我正试图找出一种机制,通过这种机制可以延迟实例化APP\u上下文(而不是在initialize中),以避免在initialize时启动Mule的所有痛苦。

    目前,我们有一些ruby客户机类在应用程序控制器中被实例化为before\u过滤器,例如 @data_service = DataService.new(APP_CONTEXT)

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

    1 回复  |  直到 15 年前
        1
  •  0
  •   brad    15 年前

    最后,(我不知道为什么我没有想到这一点)我刚刚做了一个类应用程序,它有一个类方法返回

    @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