الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف أطبق Data Access Layer في JEE .

بدأه Abdullah.Alshammeri في 24 مارس 2010 · 22 رد · 1,732 مشاهدة · في JavaEE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم /

لدي تطبيق على الويب web-app ، استخدم حالياً JSP-Servlets .

صممت تطبيقي ليكون MVC ،

وأريد أن اطبق pattern آخر ، الذي يسمّى بـ Data Access Layer ، أي أني أريد أن أصنع طبقة بين Models و Data Source .. بحيث أستطيع الكتابة الى مصدر بيانات بغض النظر عن نوع مصدر البيانات .

فمثلاً : أريد أن ادعم نوعين من مصادر البيانات ، XML - Relational Database .

السؤال :

وجدت أنه ومن الصعوبة أن أصنع واجهة أو abstract عامة مثل DataAccess ، وأبناءها XmlDataAccess و DbDataAccess .

لأن طريقة ادخال البيانات في الداتابيس مختلفة كلياً عن xml ..

الهدف هو أن أصل لكود شبيه بالتالي :

 	// enter data from View page .
 	User user = new User();
 	user = .... -> 

 	// model layer
 	if( I want to write to a database)
 	da = DataAccessFactory.createDatabaseAccess(...); // I can change this dynamically.
 	else
 	da = DataAccessFactory.createXmlAccess(...); // I can change this dynamically. 	
 	UserModule module = new UserModule(da);
 	module.insert(user); // this will use data access layer (da) to write data to a data source
 	.
 	.
 	.
 	in DatabaseAcess Class :da
 	insert(user){
 	convert user to sql statement.
 	executeUpdate(sql);
 	}

 	in XmlAcess Class :da
 	insert(user){
 	convert user to xml tree
 	dom.write(user);
 	}

فهل يمكن أن استفيد من data access layer في هذه الحالة ؟ أم أن الأمر صعب لاختلاف مصدر البيانات ..

كيف استفيد من هذا pattern عموماً .

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#2

الكود اللي إنت كاتبه بيعكس فكره جميله, و أظن تحقيقها ممكن (composition + delegation).

بالنسبه للتعامل مع أكثر من مصدر للبيانات, XML, DBMS, .. , لم لا تستخدم JDO, فإنها صممت للتعامل مع أكثر من مصدر من المصادر المختلفه ؟

#3

هل Hibernate تقوم باللازم أخ هويدي؟

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#4

لا, سياسة ال Hibernate و كل ال POJO-based frameworks إنها تجعلك أنت من يدير علاقاتك, وبالتالي فإن ال POJOs المستخدمه يمكن أن تكون ذات قيمه بدون ال Hibernate

#5

طيب بالنسبة للحجة JDO ما الذي تقوم به بالضبط

أقصد كيف تعمل على تمثيل العلاقات وكيف يتم جلب البيانات من قواعد البيانات select statement

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#6

للأسف ليس لدي خبره بها, ولكني قرأت ذات مره أنها تعتمد تعدد مصادر البيانات (من قواعد بينانات و ملفات xml ,,,)

#7

السلام عليكم.

أعتقد أن ما تحدث عنه الأخ "الشمري" أنه يريد أن يتعامل مع ال Database بغض النظر عن بنيتها.

هذه الأطر تسمى ORM(Object Relation Mapping)... صحيح أن Hibernate هي الأشهر في هذا المجال لكن لديك احتمال آخر جيد جدا وهو JPA(Java Persistence API).

DAO

#8

أخطأت

JPA هي مجرد مواصفات Specification

أما تحقيقات هذه الـ Specification فهي متعددة مثل: Hibernate، EclipseLink، TopLink ...

وجميع هذه التحقيقات هي عبارة عن ORM بالتالي لا تستطيع التعامل مع جميع أنواع قواعد البيانات بل فقط مع قواعد البيانات العلائقية Rational

#9

شكرا على التصحيح..

#10
اقتباس
وجميع هذه التحقيقات هي عبارة عن ORM بالتالي لا تستطيع التعامل مع جميع أنواع قواعد البيانات بل فقط مع قواعد البيانات العلائقية Rational

و هذا هو الفرق بين ال JPA و ال JDO

ال JDO تستطيع أن تتعامل مع كثير من مصادر البيانات ليست العلائقيه (Relational) فقط

#11

شكراً .. معلومات قيمة .

اقتباس
ال JDO تستطيع أن تتعامل مع كثير من مصادر البيانات ليست العلائقيه (Relational) فقط

هذا بالظبط ما أحتاجه .

ولكن حسب ما فهمت ـ أن JDO مجرد مواصفات ، هل هناك Implementation معينة ، تنصحون باستخدامها ؟

مثل :

http://db.apache.org/jdo/

JDurrah كتب:

الموقع غني بالمعلومات عن هذا الـ pattern ، شكراً .

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#12

بالنسبه ل implementation معين, فحقيقه لا أعرف , اسمع عن Kodo

لكن , شوف حاجه opensource مناسبه لإحتياجاتك,,

http://db.apache.org/jdo/impls.html

تم تعديل هذه المشاركة بواسطة {هويدي} في 25 مارس 2010 في 20:04

1
#13

طيب هل الجملة التالية صحيحة

هل JDO يعمل فقط على عملية التخزين في قاعدة البيانات؟

بغض النظرعن طول المتغير أو نوعه

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#14

موش فاهم, ممكن توضح أكثر ؟

#16

أقصد هل JDO يكتفي بعملية التخزين بدون أن يفحص أي قواعد أو يضع أي شروط؟

بالمناسبة لا أعرف لماذا أحس أن هناك تعقيد لا فائدة منه

بوجود مكتبتين

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#17

If you are looking for a standard API use JPA implementations

بالنسبة للفروقات بين JDO و JPA في الروابط التي قدمها الأخ Speed_Of_Light لابد أنها تغيرت لأن الإصدار JPA أصبح 2.0 وفيه تعديلات كثيرة وتقدم جيد.

تم تعديل هذه المشاركة بواسطة JDurrah في 27 مارس 2010 في 02:38

#18

بيني وبينكم أنا أستخدم HIbernate وهو أكثر من رائع فلماذا أغيره؟

ماهي المشاكل التي يحلها JDO حتى أفكر فيه أكثر

بمعنى آخر لماذا مكتبتين وليست مكتبة واحدة

لا بد من وجود فرق رئيسي

لو قلنا أن الفرق الرئيسي هو RDBMS وهل يعرف أحدكم قاعدة بيانات واحدة محترمة غير علائقية؟

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#19

@ JDurrah: نعم بالحقيقة أن JPA تستخدم اليوم على نطاق أوسع من JDO وتتطور بشكل أسرع منها

@ علاء:

اقتباس
وهل يعرف أحدكم قاعدة بيانات واحدة محترمة غير علائقية؟

نعم !

DB4O

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

هذا يعني في الحقيقة أنك لن تحتاج إلى ORM !

لأن قاعدة البيانات ستعيد أغراض مباشرة وليس DataSets !

#20

أعرف عن DB4O

فهل JDO تهتم بهذا النوع من قواعد البيانات؟

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#21

DB4O كان جواباً لسؤالك عن قاعدة بيانات محترمة غير علائقية

أما بالنسبة لـ JDO فيمكنك استخدامها أياً كان نوع قاعدة البيانات!

#22

أنا لم يخطر ببالي موضوع قواعد البيانات الغرضية

لهذا قلت ما قلت

طيب لنعد مرة أخرى

أعرف أنكم مللتم مني

لكني أريد أن أفهم

هل هناك سبب محترم يجعل sun تقوم بكتابة نوعين من specification يدوران حول نفس الموضوع؟

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#23

بالحقيقة كان هناك تخبط كبير قبل أن تصل الـ specification لما هو عليه

حيث كانت الـ JPA جزءً من الـ EJB ولكن ومنذ EJB3.0 أي(JSR 220) تم الفصل بينهما بشكل واضح حيث يمكنك الآن استخدام الـ JPA في الـ JavaSE

أيضاً كان هناك:

EJBQL من sun للـ EJB

و HQL من hibernate

و JDOQL من sun للـ JDO !!

أما الآن فيوجد JPAQL من sun للـ JPA وهي مجموعة جزئية من HQL من hibernate

ومازالت JDOQL تستخدم مع الـ JDO

هذا جزء بسيط من التعقيدات اللانهائية للـ JPA !

ومن الجدير التذكير بوجود JSR 317 (JPA 2.0)

الآن عودة لسؤالك:

اقتباس
هل هناك سبب محترم يجعل sun تقوم بكتابة نوعين من specification يدوران حول نفس الموضوع؟

برأيي الشخصي: كانت sun تحلم بتطوير JDO لمستويات عالية لكن دخول hibernate وغيرها بقوة وانتشارها بالسوق أدى إلى دعم sun لها وإنتاج JPA على حساب تطور JDO

تم تعديل هذه المشاركة بواسطة Speed_Of_Light في 28 مارس 2010 في 17:37

مواضيع مشابهة