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

كيف يتم ربط البيانات مع المكونات المرئية (databinding) في Java؟

بدأه Speed_Of_Light في 14 ديسمبر 2009 · 14 رد · 1,509 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

بفرض وجود برنامج يستخدم قاعدة بيانات

كيف أقوم بربط بعض خصائص العناصر المرئية مع قاعدة البيانات بحيث عند تغيير أحدهما يتغير الأخر تلقائياً ؟

(أقصد هنا الـ DataBending وليس الربط اليدوي)

فمثلاً بالـ NetBeans يملك كل عنصر مرئي قائمة من الخصائص القابلة للربط مع غيرها (تجدها في Properties > Binding)

فكيف يتم ربطها مع قاعدة البيانات ؟

تم تعديل هذه المشاركة بواسطة Speed_Of_Light في 14 ديسمبر 2009 في 02:18

#2

ممكن يفيدك هذا الرابط http://netbeans.org/kb/60/java/gui-binding.html شخصيا لم يسبق لي أن جربت الdata binding، لكن ما أعرفه أنك يجب أن تكتب bean خاص بكل جدول في قاعدة البيانات، لكن أظن أن netbeans يقوم بهذا تقائيا

#3

بالفعل herch يمكن إجراء الـ dataBinding عن طريق الـ NetBeans بسهولة كما هو موضح بالمثال الذي ذكرت

لقد اطلعت على ذلك المثال من قبل ...

لكن المشكلة أنني أريد الربط مع قاعدة بيانات وليس مع عنصر آخر من الـ swing

ولا أستطيع إيجاد قااعدة البيانات المتصل معها في القائمة المنسدلة هنا:

bind-dialog.png

#4

هذا ممكن من خلال ال- Entities of EJBs لكن إذا التغير حصل مباشرةً على ال-database وليس من خلال ال-java application عندها ال-java application لا تعلم عن هذا التغيير

#6

لا أظن أنه يمكنك هذه العملية عن طريقة application layer

إلا بطريقة واحدة ألا وهي spooling وهي ببساطة عم loop يفحص القيمة كل فترة من الزمن

بأمانة هذا الأسلوب سيء جداً

هناك طريقة عكسية

بمعنى أن يتم تنبيه طبقة البرمجيات application layer إلى وجود تغييرات

وهذه تسمى notification ويجب أن تقوم طبة قاعدة الباينات بها

تحياتي

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

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

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

728x90.png

#7
اقتباس
هذا ممكن من خلال ال- Entities of EJBs لكن إذا التغير حصل مباشرةً على ال-database وليس من خلال ال-java application عندها ال-java application لا تعلم عن هذا التغيير

تماماً !

وهذا ليس بمشكلة لأن الاتصال بقاعدة البيانات يتم مباشرة فقط عن طريق البرنامج (أو مجموعة من البرامج) المكتوبة على جافا والتي تستخدم الـ EJB ذاتها

هل عندك معرفة حول الموضوع؟ ممكن شرح بسيط ؟

ولا حاجة لعمل loop لنفس السبب.

اقتباس
هناك طريقة عكسية

بمعنى أن يتم تنبيه طبقة البرمجيات application layer إلى وجود تغييرات

وهذه تسمى notification ويجب أن تقوم طبة قاعدة الباينات بها

مممممممم

ممكن تفاصيل وقليل من التوضيح ؟

هل تتكلم عن تقنية موجودة قابلة للاستخدام أم عن مبدأ في التصميم في هندسة البرمجيات؟

تم تعديل هذه المشاركة بواسطة Speed_Of_Light في 14 ديسمبر 2009 في 18:57

#8

نعم استطيع أن اشرح لكن بال-english :) ممكن شرح بسيط عن برنامجك ؟هل هو enterprise application؟ أي application server تستخدم ؟

#9

بالحقيقة برنامجي بسيط نوعاً ما ويقوم بإدارة وأتمتة مهام مكتب الامتحانات في معهد أو جامعة

وهو ليس enterprise application لكنني أحاول القيام به بمعايير عالية :D

#10
/**
 *  
 *  EJBs require deployment on application server, I don't know how much you know about it.
 *  Its usually recomendded for huge and enterprise applications, and If you don't know 
 *  anything about it, you can't be learn it so fast :( but if you want to start with it, 
 *  then I recommend you to start by installing the application server JBoss AS or Glassfish. 
 *  Then you can find simple examples online so you can try and if you have specific questions, 
 *  I can help you. If you're using netbeans I recommend you Glassfish which can be downloaded with
 *  netbeans in one package. I use Glassfish with netbeans and Jboss with eclipse.
 *  
 */
#11

ترجمة رد الأخ NullOne:

اقتباس
EJB تتطلب نشر على خادم التطبيق، أنا لا أعرف مقدار ما تعرفه عن ذلك. ينصح بها عادة لتطبيقات المؤسسات الضخمة، وإذا كنت لا تعرف أي شيء عنها فلا يمكنك أن تتعلمها بسرعة :(

لكن إذا أردت البدء بها فأنصحك أن تقوم بتركيب سيرفر JBoss AS أو Glassfish.

ويمكن أن تجد أمثلة بسيطة على الإنترنت لتجربها، إن كان لديك أسئلة محددة فيمكنني مساعدتك

إن كنت تستخدم netbeans أنصحك بـ Glassfish التي يمكن تحميلها مع netbeans في حزمة واحدة.

أنا استخدم Glassfish مع netbeans وJboss مع eclipse.

شكراً على هذا الرد،

بالحقيقة خبرتي متواضعة جداً في الـ Java EE ...

أرى أنه من الأفضل استخدام Entity classes متصلة بقاعدة البيانات بدلاً من EJBs

فبالرغم من رغبتي في أن يكون البرنامج مصمم ومنفذ وفق "معايير عالية" إلا أن إستخدام Application Server في برنامج بهذا الحجم يعتبر سوءً في التصميم.

ما رأيكم؟ وبماذا تنصحونني؟

#12

شكراً على الترجمة :)

إذا ال-entity class ليست deployed on a server then other java applications wont know about any change on the database

لهذا يمكنك إستخدام ال-JDBC connection لل-database وهي تكفي

لكن إذا تريد إستخدام ال- entity classes then this link will help you

http://java.sun.com/developer/technicalArticles/J2SE/Desktop/persistenceapi

#13

ببساطة يوجد في DB نظام أحداث events ينبهك إلى وجود تعديل على جدول ما

(oracle و SQL server على حد علمي يوجد بهما هذه الخاصية)

متى تحتاج هذه الخاصية؟

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

أو برنامج يعتمد على التغييرات في قاعدة بيانات أخرى

مثال تعديل علامات الطالب يقتضي بالضرورة فحص استحقاقه لمنحة أوائل الطلبة

برنامج المنح مفصول عن برنامج إدارة العلامات

ما رأيك أن تكلمنا بقليل من التفصيل عن برنامجك؟

هذا يساعد على الفهم وبالتالي يساعد على التعبير

أخ NullPne من الجيد أن نرى أخ لديه معلومات جيدة ويريد أن يساعد

كلنا درسنا بالإنجليزية أو الفرنسية وكلنا كنا نعاني من الكتابة بالعربية

لكن حاول على قدر ما تستطيع

تحياتي

تم تعديل هذه المشاركة بواسطة علاء الصالحي في 16 ديسمبر 2009 في 09:53

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

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

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

728x90.png

#14
اقتباس
ما رأيك أن تكلمنا بقليل من التفصيل عن برنامجك؟

هذا يساعد على الفهم وبالتالي يساعد على التعبير

بكل سرور :D

حسناً ... سأحاول الاختصار قدر الإمكان:

البرنامج كما ذكرت سابقاً يقوم بأتمتة وإدارة أعمال مكتب الامتحانات في معهد أو جامعة

قاعدة البيانات بسيطة إلى حد كبير! تحوي ثلاث جداول رئيسية (وبضع جداول فرعية):

- الطلاب: (معرف الطالب، اسمه، عام التسجيل)

- المواد (معرف المادة، اسمها، العلامة الكاملة، المادة الأب، السنة الدراسية، السنة في التاريخ، الفصل، الاختصاص، )

- العلامات(معرف العلامة، معرف المادة، معرف الطالب، الاختصاص، السنة في التاريخ، الفصل، قيمة العلامة)

تم تصميم جدول المواد بهذا الشكل بسبب وجود طبيعة شجرية للمواد وعدم وجود طريقة موحدة لحساب محصلة كل مادة!

هذا مثال عن إحدى المواد المتشعبة:

post-151966-12609694142757_thumb.png

وهنا أريد استخدام الـ DataBinding:

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

يقوم المستخدم في بداية كل عام دراسي بإدخال أسماء الطلاب الجدد (سنة أولى)، ويمكنه تعديل وإضافة وحذف الطلاب لاحقاً إن لزم الأمر.

ثم يقوم في نهاية كل دورة (فصل أول، فصل، ثاني، دورة صيفية) بإدخال علامات الطلاب في قاعدة البيانات، ويمكنه تعديل وإضافة وحذف العلامات لاحقاً إن لزم الأمر. (في حال نسيان إدخال علامة مثلاً أو في حال حدوث أخطاء)

كما يقوم البرنامج بالتحقق من إدخالات المستخدم ويقوم بتوليد تنبيهات وملاحظات (مثلاً تنبيه المستخدم أن الطالب محروم من تقديم الامتحان بسبب انخفاض درجة أعماله) والعديد من التقارير المفيدة مثل: (إعلان نتائج الطلاب، جدول النتائج النهائي، قرار تخرج، وضع طالب، كشف علامات، الأوائل، المكافآت، الطلاب المستنفذون ....)

#15

يظهر لي أنك لديك مدخل واحد فقط

أقصد أنك ليس لديك أكثر من موظف يدخل البيانات في نفس الوقت

بالتالي فأنت لن تعاني من مشكلتك وجود تعديل في قاعدة البيانات لا تعلم عنه

لذا فلا حاجة لعملية التنبيه من notification في DB

كل ما تحتاجه عملية binding عادية

بالنسبة لعملية binding أظن هناك jsr من شركة أوراكل

وتم اعتماده من sun لهذه العملية

لكني لا أعرف هل هناك أحد قام بعملية بناء implementation لهذا الـ jsr غير أوراكل

ولا أعلم إن كانت أوراكل نشرته للجميع

على كل يكفيك أن تستخدم binding الموجود في Netbeans

بالمناسبة أظن Netbeans لديه implementation لـ jsr أوركل :)

أبغلني لو كان لديك أكثر من مستخدم للنظام

(أقصد يمكن أن يتم التعديل على DB من أكثر من شخص)

تحياتي

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

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

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

728x90.png

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