2010-04-26 83 views
1

我有一個使用的JRuby/Rails應用程序:ESB在JRuby中的延遲加載Rails應用程序

jruby 1.4.0 
Rails 2.3.5 
ActiveMQ 5.3.0 
Mule ESB 2.2.1 

目前在我們的environment.rb文件中,我們在初始化啓動騾子。當我們去做一些不需要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客戶端。

我接受所有建議。我很難找到放置這個懶惰實例的合適位置。

回答

0

最後,(我不知道爲什麼我沒有想到這個問題)我剛剛做了一個類應用程序,有一個類的方法返回

@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