سؤال

لدي تطبيق JRuby/Rails باستخدام:

jruby 1.4.0
Rails 2.3.5
ActiveMQ 5.3.0
Mule ESB 2.2.1

حاليًا في ملف البيئة. RB ، نبدأ MULE في المهيئة. يصبح هذا ألمًا كبيرًا عندما نذهب للقيام بمهام أشعل النار العادية التي لا تتطلب JMS/Mule مثل DB: ترحيل لأنها تستغرق وقتًا طويلاً لبدء التشغيل/الإغلاق في كل مرة.

الرمز مشابه لهذا:

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

ونحن نستخدم APP_CONTEXT لجلب الفول للاتصال بالخدمة المناسبة.

أحاول اكتشاف بعض الآليات التي يمكن من خلالها إنشاء مثيل له (وليس في التهيئة) لتجنب كل آلام بغل بدء التشغيل عند التهيئة.

حاليًا لدينا عدد قليل من فئات عميل Ruby التي تم إنشاء مثيل لها على أنها قبل_filter في Application_Controller مثل @data_service = DataService.new(APP_CONTEXT) التي تهيئة عميل Java المناسب لكل طلب للاستخدام في وحدات التحكم لدينا.

أنا منفتح على جميع الاقتراحات. أواجه صعوبة في محاولة إيجاد المكان المناسب لوضع هذا الاستئصال الكسول.

هل كانت مفيدة؟

المحلول

في النهاية ، (وأنا لا أعرف لماذا لم أفكر في هذا) لقد قمت للتو بتطبيق الفصل الذي يعود إلى طريقة الفصل

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

لست متأكدًا مما كان يمر برأسي ، لكنني اعتقدت أنه ربما إذا تمت الإشارة إلى هذا من خلال وظيفتين في نفس الوقت ، فلدي اثنين من مثيلتين مختلفتين لـ AppContext ، متناسين في أن فئة Ruby هي مجرد كائن Singleton ، لذلك سيعود هذا دائمًا السياق الواحد.

class App

  def self.context
    @context ||= Java::our.company.package.service_clients.Initializer.getAppContext(MULE_CONFIG_PATH)
  end
end
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top