سؤال

أرغب في تكوين DataSource باستخدام JNDI في تطبيق Java SE.ما هي أفضل طريقة للقيام بذلك؟

لقد صادفت حتى الآن مشروعين:

  1. تسمية أباتشي.تحتوي صفحة المشروع على مثال محدد لتكوين مصدر بيانات، ولكن يبدو أن المشروع قديم جدًا ولم يعد نشطًا.
  2. JBossNS.يبدو أنه من السهل تكوين JNDI محليًا فقط باستخدام LocalOnlyContextFactory, ، لكنني لم أجد أي مستندات حول كيفية تكوين مصدر بيانات فعليًا.

إذا كان ذلك ممكنًا، أود أيضًا تكوين مصدر البيانات باستخدام مدير معاملات JTA (باستخدام JOTM؟).

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

المحلول

لماذا تستخدم JNDI لهذا؟لا يعني ذلك أن هذا حل سيئ إذا كان لديك موفر خدمة ولكن هناك بدائل مثل حقن التبعية (IoC:عبر ربيع أو غيس).

تم وصف الوصول إلى بيانات Spring JDBC هنا.الشيء العظيم هو أنه يمكنك استخدام الربيع لحقن DataSource في التعليمات البرمجية الخاصة بك:

<bean class="com.my.Persister">
    <property name="dataSource" ref="dataSource" />
</bean>

يمكن تعريف مصدر البيانات باستخدام بحث JNDI:

<jee:jndi-lookup id="dataSource" jndi-name="jdbc/MyDataSource" /> 

في بيئة الاختبار، يمكنك إدخال مصدر البيانات مباشرة:

<bean id="dataSource" class="apache.db.PoolingDataSource">
    <!-- config goes here -->
</bean>

نصائح أخرى

هذه المراجع قديمة جدًا ولكنها قد تساعد في استخدام jnpserver (موفر خدمة التسمية JBoss):

الحل سهل الاستخدام للغاية لـ JNDI المستقل هو simple-jndi.إنه يعمل مثل السحر طالما أنك تحتاج إليه فقط داخل JVM واحد، نظرًا لأنه مكتبة وليس خادم شبكة.

إصدار Simple-JNDI، المشار إليه بواسطة klenkes74، لم يعد قيد التطوير النشط بعد الآن.نظرًا لأنني واجهت بعض المشكلات فيه، فقد قمت بتقسيمه وإجراء بعض إصلاحات الأخطاء وتنفيذ بعض الميزات الجديدة.لقد استخدمت الإصدار القديم بالفعل ليس فقط للاختبار ولكن في الإنتاج أيضًا لأنني أفضل نمط محدد موقع الخدمة على حقن التبعية على الرغم من أن النمط الأخير أكثر عصرية في الوقت الحاضر.

يمكنك بسهولة استخدام Simple-JNDI لتحديد مصدر البيانات أو تجمع الاتصال بشكل تعريفي وربطه بسياق JNDI.

حدد ملف jndi.properties في مسار الفصل الخاص بك:

java.naming.factory.initial=org.osjava.sj.SimpleContextFactory
org.osjava.sj.root=[absolute_or_relative_path_to_a_property_file]

يبدو ملف الخاصية كما يلي:

type=javax.sql.DataSource
driver=org.gjt.mm.mysql.Driver
url=jdbc:mysql://localhost/testdb
user=testuser
password=testing

يمكنك الآن الوصول إلى DataSource الخاص بك من داخل التعليمات البرمجية الخاصة بك بهذه الطريقة:

  InitialContext ctxt = new InitialContext();
  DataSource ds = (DataSource) ctxt.lookup("name_of_your_datasource");

لمزيد من المعلومات، راجع https://github.com/h-thurow/Simple-JNDI

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