سؤال

لدي تطبيق Enterprise A و B تم نشره (في WLS 10.0). A هو "الإطار" ، B هو تطبيق عميل. يصدر العميل المكالمات التالية:

Object o = ctx.lookup(jndiName); // line 1
cf = (ConnectionFactory) o; // line 2

ConnectionFactory هي واجهة ، تُعرّف بأنها:

public interface ConnectionFactory 
    extends java.io.Serializable, javax.resource.Referenceable {
    ...
}

ما يحدث هو:

  1. إذا كانت الجرة التي تحتوي على فئة الواجهة موجودة على ClassPath ، يتم تنفيذ السطر 2 بشكل جيد
  2. إذا لم تكن فئة الواجهة موجودة على ClassPath ، ولكن تم تعبئتها بالتطبيقات بشكل منفصل ، فإن السطر 2 يلقي classcastexception (الذي يحتوي على نص مفيد بأن O هو اتصال FactoryImpl)

لماذا هذا ممكن؟ أفترض أن بحث JNDI يعيد فقط كعبًا إلى الكائن البعيد (هل أنا على صواب في هذه النقطة؟) ، فلماذا يهم إذا كان جهاز تحميل الفئة من فئة الواجهة مختلفًا؟

نوع الإجابة التي أتوقعها:

  1. نعم ، يجب أن يحدث هذا بالطريقة التي تجربها ، لأن ...
  2. لا ، لا ينبغي أن يحدث بهذه الطريقة ، لأنه إذا ... ثم ... ، هناك شيء مريب في الإعداد الخاص بك
  3. الموقف الذي وصفته غريب جدًا ، هل أنت متأكد من أنك لا تفوت نقطة ما في مكان ما؟
  4. ... :)

سيكون من الرائع أيضًا أن يوضح شخص ما كيف يعمل JNDI و Stubs ، أين يحدث الصب (على جانب العميل على كعب الكبير؟ أو على الكائن الأصلي على الجانب البعيد؟) ، إلخ.

شكرا لمساعدتك!

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

المحلول

الجواب ، للأسف ، هو (1).

JNDI لا تملي آلية لكيفية تخزين الكائن على الشجرة ، أو كيف يتم تسليمه للعملاء. إنها مجرد واجهة برمجة تطبيقات لاستخدامها لأداء العمليات.

إذا كان كلا التطبيقين في نفس JVM ، كما هو الحال هنا ، فمن المحتمل جدًا أن تقوم WebLogic بتسليم الكائن مباشرة إلى تطبيق العميل. لا يوجد كعب ، و "الجانب البعيد". نظرًا لأن الأنواع التي ينفذها هذا الكائن غير مرئي لتطبيق العميل (تذكر ، يتم تعريف هوية النوع بواسطة اسم الفئة ، وأيضًا محمل Classed الذي تم تحميله منه).

قد تعتقد أن هذا أمر غريب أن يحدث ، لكن ضع في اعتبارك أن التطبيقات التي تتحدث فيما بينها مثل هذا ليست هي القاعدة في تطوير Javaee - من المفترض أن تكون التطبيقات معزولة عن بعضها البعض ، حيث تتقاسم الموارد على مستوى النظام فقط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top