1

我有一个 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 客户端以在我们的控制器中使用。

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

4

1 回答 1

0

最后,(我不知道为什么我没有想到这一点)我刚刚制作了一个类 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
于 2010-04-27T20:48:47.473 回答