1

以下を使用した jruby/rails アプリがあります。

jruby 1.4.0
Rails 2.3.5
ActiveMQ 5.3.0
Mule ESB 2.2.1

現在、environment.rb ファイルでは、イニシャライザで Mule を起動しています。db:migrate などの JMS/Mule を必要としない通常の rake タスクを実行する場合、毎回 Mule を起動/シャットダウンするのに長い時間がかかるため、これは大きな苦痛になります。

コードは次のようになります。

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

そしてAPP_CONTEXT、適切なサービスに接続するために Bean をフェッチするために使用します。

初期化時にMuleを起動しなければならないというすべての苦痛を回避するために、APP_CONTEXTを(初期化ではなく)遅延してインスタンス化できるメカニズムを見つけようとしています。

現在、application_controller で before_filter としてインスタンス化される ruby​​ クライアント クラスがいくつかあります。これ@data_service = DataService.new(APP_CONTEXT)は、コントローラーで使用するための各要求に対して適切な Java クライアントを初期化するなどです。

私はすべての提案を受け入れます。この怠惰なインスタンス化を配置する適切な場所を見つけるのに苦労しています。

4

1 に答える 1

0

最後に、(そして、なぜこれを考えなかったのかわかりません)クラスメソッドが返されるクラス App を作成しました

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

頭の中で何が起こっていたのかわかりませんが、これが 2 つの関数によって同時に参照された場合、AppContext の 2 つの異なるインスタンス化が発生するのではないかと考えました。Ruby では、クラスは実際には単なるシングルトン オブジェクトであることを忘れていました。であるため、これは常に 1 つのコンテキストを返します。

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 に答える