الاثنين، 12 نوفمبر 2012

تقنية NoSQL



ما هي تقنية NoSQL ؟ و لماذا نسمع كل يوم -كما يبدو- أن شركة ضخمة بدأت باستخدام قاعدة بيانات NoSQL ؟  في هذا الدليل الذي أعدته مجلة H الألمانية محاولة للإجابة على هذه الأسئلة.
أدى صعود حركة NoSQL إلى إعادة النقاش و الجدل في فضاء قواعد البيانات ، حيث أثيرت أسئلة حول موائمة النموذج العلائقي التقليدي لجميع المشاكل ليس فقط في الجانب النظري بل تعدى ذلك إلى الجانب العملي ، إن NoSQL لا تعني رفض SQL بنفسها ، بل أن بعض أنصار حركة NoSQL يقولون أنها لا ترفض SQL كما في "No SQL" ولكن تعني في الحقيقة " Not Only SQL" أي " ليس SQL فقط" ، إنها تعبر عن رغبة عميقة لاستكشاف نماذج قواعد البيانات التي تركت في الماضي - لعدة أسباب -  تقبع في الغموض.
هذه ليس المرة الوحيدة التي تحديت فيها SQL التي تستخدم القواعد البيانات العلائقية ، ففي التسعينات ظهرت قواعد البيانات الكائنية التوجيه و قدمت طريقة - كما كان يبدو- أراحت المطورين من تحويل كائنات البيانات إلى صفوف و أعمدة ، و لكن واقعيا كانت قواعد البيانات كائنية التوجيه معقدة و هشة مما خيب أمل المطورين و جعلهم يبحثون عن حلول أفضل ، كانت الحصيلة هو ظهور مدراء للكائنات العلائقية أفضل ، قامت بإزاحة الكثير من الأعمال المطلوبة لتحويل كائنات البيانات إلى علاقات مع المحافظة على قواعد بيانات SQL كنواة لها.
الفرق مع حركة NoSQL أن الكثير من الإبداع أتى من تطورات عملية استفادت من قوة المصادر المفتوحة بدلا عن التأطير النظري ، و بالرغم من ذلك فإن NoSQL ليست حل سحريا لجميع احتياجات قواعد البيانات.
هناك بعض الخصائص المشتركة لقواعد بيانات NoSQL حيث أنها تميل إلى التخلص من المخططات الجامدة لقواعد البيانات العلائقية ، و تستخدم أساليب مرنة لتحديد البيانات التي يجب أن تحفظ في قاعدة البيانات أو تترك الأمر للتطبيقات التي تستخدم قاعدة البيانات ، و تميل أيضا خدمات NoSQL إلى استخدام بروتوكولات مفتوحة للتواصل مع العميل ، و هي في الغالب -لكن ليس بالضرورة - بنيت لتكون قابلة للتوسع بحيث توفر القدرة لإدارة مجموعات بيانات كبيرة موزعة على مزرعة من الخوادم بدلا عن خادم واحد عالي الأداء.
إذا نظرنا إلى أنواع NoSQL  سنجد أربعة سلالات رئيسية : خازنات الوثائق ، وخازنات مفتاح/ قيمة ، وقواعد بينات موجهة للأعمدة ، و خازنات الرسومات.
خازنات الوثائق Document stores و CouchDB
تحفظ خازنات الوثائق كل الوثائق مهما كان طولها و تسمح باسترجاعها بالاعتماد على محتويات الوثيقة ، فعلى سبيل المثال يمكن أن تحوي الوثيقة على هذا النص:
"الاسم الأول" : "والاس"
"العنوان" : "شارع 62 الكنيغر الغرب"
"الاهتمام" : ["الجبن" ، "المفرقعات" ، هبوط القمر ""]
بإمكاننا أن نسترجع هذه الوثيقة عن طريقة استعلام في قاعدة البيانات عن الاسم الأول "والاس" ،  كما تلاحظ أن هذه الوثيقة يحوي على معلومات غير مهيكلة و يمكن أن تتفاوت المستندات فيما تحوي من حقول ، و تندرج قواعد بيانات XML  في هذا الصنف حيث أنها قواعد بيانات موجهة للوثائق تحوي على بيانات شبه منظمة ، تعتبر قاعدة بيانات CouchDB أحد الأمثلة على للقواعد الموجهة للوثائق تقوم بحفض الوثائق على نفس النسق المعروض في الأعلى . لتستعلم في CouchDB تحتاج إلى تعريف دالة بسيطة تقوم بجلب الحقول و تعرضها على شكل قائمة مرتبة تسمح بتصفيتها أو تقيمها.
يتم تخزين النتائج نفسها كوثائق CouchDB في نفس الخادم ، و يتم توليد النتائج عن دخول أو عند الطلب ، حيث أن الفكرة هي تقليل الحمل على الخوادم بجعل النتائج جاهزة للتسليم ، و تستطيع CouchDB التوسع عن طريق النسخ التماثلي لقواعد البيانات على خوادم CouchDB بكفاءة ، و يعمل النسخ التماثلي أيضا مع العقد المترابطة بشكل غير دائم ،   فعلى سبيل المثال تستخدمه خدمة Ubuntu One  قاعدة بيانات CouchDB لمزامنة بين أجهزة الحواسيب المستخدمين مع سحابة التخزين الخاصة بها ، كذلك ستخدمها هيئة الإذاعة البريطانية BBC كقاعدة بيانات NoSQL داخلية لتقديم خدمة الحفظ لخدمات الويب الخاصة بها.
لتقرأ المزيد عن CouchDB اطلع على كتاب CouchDB أو زر موقعها.
قاعدة بيانات الرسومية و Neo4J
أحد الأشياء الأكثر استهلاكا للموارد و مسببة للمشاكل في قواعد بيانات SQL  هو حفظ معلومات العلاقات بين الأشياء ، إن تصفح العلاقات يتطلب عدة استعلامات ، تركز قواعد البيانات رسومية التوجيه على تمثيل الرسم في قاعدة البيانات ، و تعتبر Neo4J  أحد الأمثلة على قواعد البيانات رسومية التوجيه ، فبدلا عن أن تنشئ سجلات تقوم بإنشاء عقد ثم تقوم بإسناد العلاقات فيما بينها ، على سبيل المثال هذه قطعة الصغيرة من شفرة جافا :
Node firstNode = graphDb.createNode();
Node secondNode = graphDb.createNode();
Relationship relationship = firstNode.createRelationshipTo( secondNode,               MyRelationshipTypes.OWNS );
تقوم بإنشاء عقدتين ، ثم تسند علاقة تملك OWNS (معرفة في مكان آخر كسجل بسيط) ، و تحفظ البيانات المتعلقة بهذه العقدة و العلاقة كخصائص لكلا منها :
firstNode.setProperty("name","Wallace");
secondNode.setProperty("name","Grommit");
relationship.setProperty("licence","dog");
هذه الشفرة تحدد أن العقدة الأولى ( Wallace ) تملك ( بالإضافة إلى dog  و licence )  العقدة الثانية (Grommit ) ، من خلال هذه النموذج البسيط يمكننا إنشاء رسمة للعلاقات قابلة للتتبع بسهولة .
تعتبر FlockDB قاعدة بيانات رسومية أخرى ، تم إنشائها بواسطة مطوري تويتر مع تركيز من يتبع من في خدمة التدوين المصغر ، يمكن أن توفر قواعد البيانات الرسومية طريقة مبسطة بشكل كبير للتعامل مع العلاقات بين الأشياء مثل الشبكات الاجتماعية ، و بالرغم من إمكانية حفظ بيانات بدون علاقات في قاعدة بيانات رسومية ، و لكنها غير مناسبة لذلك.
معلومات أكثر حول Neo4J تجدها في موقعها.
خازنات المفتاح/قيمة و Redis
تعبر قواعد بيانات المفتاح/قيمة أبسط من سابقاتها ، حيث كل مفتاح وصف يشير إلى قيمة و التي بدورها قد تكون سلسلة حروف عشوائية ، و يتم تضمين خازنات المفتاح/قيمة في التطبيقات منذ زمن بعيد ، و يعتبر فرسان اليونكس مثل dbm و gdbm و Berkley DB من قواعد البيانات ذات التوجه المفتاح/قيمة ، التغير الذي حصل في حركة NoSQL في مجال قواعد بيانات المفتاح/قيمة هل جلعها قواعد البيانات خدمات قائمة بذاتها و يمكن الوصول إليها عبر تقنيات الويب مثل REST.
يوجد نوعين من خازنات المفتاح/قيمة ، النوع الأول هو خازنات في الذاكرة in-memory حيث تحفظ البيانات في الذاكرة من أجل الأداء ، و النوع الثاني هو في القرص in-disk  حيث تحفظ بياناتها مباشرة في القرص الصلب ، تكون الأنواع التي تحفظ في الذاكرة مفيدة لآليات الذاكرة المخبأة الموزعة بينما الأنواع الذي تحفظ في القرص الصلب تكون أفضل لحفظ البيانات.
تعتبر Redis مثال على قاعدة بيانات المفتاح/قيمة من نوع التخزين في القرص الصلب ، وبها إمكانيات تتعدى حفظ قيمة سلسلة محارف إلى حفظ قوائم و مجموعات و مجموعات مفروزة أيضا ، تقوم Redis بحفظ كل مجموعة بيانات في الذاكرة إلى القرص الصلب باستعمال طريقة واحد من اثنتين من المحافظة على الأداء الكلي ، و لكل نوع من البيانات المدعومة من قبل Redisمجموعة أوامر مخصصة و يمكن الوصول إليها عن طريق واجهات برمجية تشمل عدة لغات برمجية ، و تستخدم Redis في Yard و Github و Craigslist لتلبية احتياجاتهم التخزينية ، للمزيد عن Redis زر موقعها.
قواعد البيانات موجهة للأعمدة و Cassandra
تهتم قواعد SQL التقليدية بالصفوف فكل صف يمثل سجل من الحقول ، هذا العرض مريح للطبيعة البشرية حيث أنها تشابهة بسهولة كيفية التي نتبعها لتسجيل الأشياء على سبيل المثال فهرس البطاقات ،افترض أن لديك فهرس بطاقات في كل بطاقة يعرض اسم الشخص مع جملة مبيعاته ؛ لتحصل على المجموع الكلي للمبيعات فيجب عليك أن تمر على جميع البطاقات واحدة تلو الأخرى و في كل مرة تضيف مبيعات البطاقة التالية على مجموع البطاقات السابقة ، يمكن تضبط قواعد بيانات SQL لتعمل بشكل جيدة في هذا المثال ، و لكن مع زيادة حجم البيانات سوف تستغرق وقت أطول ، و الآن افترض أنه عندما كنت تكتب أرقام مبيعات كل شخص في بطاقته كنت تضيفها إلى قائمة خاصة بأرقام المبيعات ، هكذا ستصبح عملية إحصاء جميع المبيعات مجرد جمع الأرقام الموجودة في القائمة وحسب ، و هذا أسرع بكثير و هو جوهر قواعد البيانات الموجهة بالأعمدة ، حيث أنها تحفظ بياناتها بطريقة يمكن تجميعها بسرعة و بأقل نشاط في الدخل و الخرج I/O .
تستخدم قواعد بيانات الموجهة للأعمدة عادة في تطبيقات تعدين و تحليل البيانات حيث تكون طريقة الحفظ مثالية للعمليات العامة المستخدمة على البيانات ،و تميل قواعد بيانات الموجهة للأعمدة بطبيعتها إلى أن تكون جزءا من مزيج من قواعد البيانات العلائقية التقليدية و تقنية الموجهة للأعمدة.
خذ على سبيل المثال قاعدة بيانات أباتشي Cassandra و التي هي عبارة عن خليط من التوجه للأعمدة و خازنات المفتاح/قيمة حيث توفر قاعدة بينات لامركزية و موزعة بشكل Eventual consistency ، و قد طورت في البداية عن طريق فيس بوك ، و الآن أصبحت كمشروع تحت مظلة أباتشي و يستخدمها digg و تويتر و Reddit و غيرها من المواقع ،  تحوي Cassandra على أعمدة لاسم و قيمة و ختم الوقت ، و يمكن تجميع هذه الأعمدة تحت ColumnFamily التي تماثل جدول في قاعدة البيانات العلائقية ، و يمكن أيضا أن توسم الأعمدة كـ SuperColumn بحيث يمكن استرجاعها بترتيب ختم الوقت بدلا عن ترتيب المفتاح.
يجعل نموذج Cassandra المختلط مع قابليته للتوسع بديل مفيد للحالات التي تتطلب حفظ مجموعة ضخمة من البيانات النشطة و الآنية ، مما يجعلها مناسبة للشبكات الاجتماعية ، للتعرف على المزيد عن Cassandra يمكنك أن تزور موقعها على مشروع أباتشي.
إذا ما هي قاعدة بيانات NoSQL ؟
كما يمكنك أن ترى من الأمثلة الأربعة الماضية ، فإن قواعد البيانات NoSQL تركز على أنواع معينة من المشاكل ، فمن كونها مرنة جدا في حفظ البيانات (خازنات الوثائق ) إلى استهداف حالات استخدام مثل العلاقات (قواعد بيانات الرسومية) و تجميع البيانات (قواعد بيانات الموجهة للأعمدة) أو فقط تبسيط فكرة قاعدة البيانات لتكون شيء مثل حفظ قيمة (خازنات المفتاح/قيمة).
ما زال أمام نموذج قواعد البيانات العلائقية المعتمدة على SQL  سنوات طويلة قبل أن تزاح من تطبيقات حفظ البيانات ، و لكن بسبب نموذج المفتوح المصدر لتطوير قواعد بيانات NoSQL و بسبب نشرها المتكرر في خدمات منتجة ستوفر بديل سريع التحسن أو مكمل لقرينتها المعتمدة على SQL ، ستظل قواعد بيانات SQL محافظة على مزاياها من ناحية تقديم معاملات تحت مفهوم ACID ( الذرية ،التناسق ، العزل ،الدوام) ، و قدرات علائقية مما يجعلها أفضل خيار للعديد من استخدامات الأعمال ، كذلك لم تتوقف تقنية قواعد بيانات SQL ؛ فعلى سبيل المثال Ingres تضع تقنية VectorWise في قاعدة بياناتها ليعطيها قدرات لمنافسة خازنات الأعمدة في مجال تحيل البيانات.
تمثل قواعد بيانات NoSQL قوة مثيرة و جديدة في أعمال تخزين البيانات و استرجاعها ؛ بتطبيق تقنيات طالما تجاهلت بسبب أنها لم تتناسب مع كيفية التي تدار بها الأشياء بواسطة SQL ، نحن الآن ننتقل إلى وقت تختلط فيه الأشياء في عالم تخزين البيانات و استرجاعها.
هذه المقالة ترجمة لـ The H speed guide to NoSQL 
المصدر: http://itwadi.com/NoSQL

السبت، 1 سبتمبر 2012

القائد الخالد..!


القائد الخالد..!
بسم الله، والصلاة والسلام على رسول الله، وعلى آله وصحبه ومن والاه..
لو دامت لغيرك ما وصلت إليك.. أليس هذا المثل واقعاً لا يختلف عليه عاقلان، فلماذا يتعلق القادة بكراسيهم وكأنهم باقون إلى آخر الزمان؟! وكأن وجودهم لا نهاية له..! وإلى متى يستطيعون تقديم نفس الأداء الجيد مهما تقدم بهم العمر؟!
أليس من المجدي أن يعمل أولئك القادة والمدراء على تأهيل قيادات جديدة مؤهلة قادرة على إدارة دفة العمل من بعدهم، بدل تسويف الأمور حتى يأتي أمر الله، ثم نقع في حيص بيص، ولا نجد لأؤلئك المغاوير بديلاً ولا نظيراً؟!
وإذا حقق أولئك القادة نجاحات لمنظمتهم فإن من المنطقي أن يعملوا على بقاء تلك النجاحات حتى بعد رحيلهم، لأن امتداد الخير موصول لصاحبه الأول، ويخلِّد ذكره من بعده، ويذكره التاريخ بذكرى طيبة ومشرّفة، فلماذا يعمل بعض القادة على تدمير كل ما بنوه بعد ذهابهم، وكأن النجاح الذي تعبوا من أجله يجب ألا يستثمره أحد من بعدهم، ولا ينعم به الباقون بعد رحيلهم..!؟ بل إن بعضهم يعاقب من تركهم خلفه بتدمير النجاح الأول، لأنه رحل ببساطة عنهم، وهذا يضع سؤالاً مهماً أمامنا: هل كان عملهم طوال السنوات الطويلة الماضية لتحقيق نجاحهم الشخصي فقط، أم هو لنجاح المنظمة والمؤسسة التي يعملون لها؟!..
من هنا كان لابد على جميع المنظمات، الحكومية والخاصة، الكبيرة والصغيرة، أن تضع في حسبانها مشروع تطوير القادة الجدد، ويسمي بعضهم هذه المشاريع بمسميات مختلفة، كمشروع إعداد قيادات الصف الثاني، أو مشروع التعاقب القيادي، أو تأهيل القيادات الوسطى، ومهما اختلفت المسميات، إلا أنه يجب ألا تغفل أعين تلك المنظمات عن تفعيل هذه المشاريع، ووضع الخطط والاستراتيجيات لتنفيذها وإنجاحها، وتحديد الجداول الزمنية لتخريج دفعات القياديين الجدد، وإلا وقعنا مجدداً تحت معضلة القائد العظيم، الذي عزَّ نظيره، وندر مثيله، وبرحيله سوف ترحل كل المنظمة أو المؤسسة إلى المجهول..!

النجدة.. طفلي البريء تغريده بذيء! إستراتيجية معالجة فلتات لسان الطفل


النجدة.. طفلي البريء تغريده بذيء!
إستراتيجية معالجة فلتات لسان الطفل
الدكتور مصطفى أبو سعد
استشاري نفسي وتربوي
مدرّب في علوم التنمية البشرية

 
استراتيجية معالجة فلتات لسان الطفل
عندما يبدأ ابنك يتلفظ بكلمات نابية محرجة، تنم عن وقاحة وسخرية وبذاءة.. ينشأ لدى الوالدين شعور بالأسف والألم تجاه سلوك الابن غير الواعي بما يخرج من فمه من ألفاظ مزعجة. والحقيقة التي ينبغي تجاهلها أن الألفاظ اللغوية لدى الطفل يكتسبها – فقط – من خلال محاولته تقليد غيره، لذلك كان لزاماً مراقبة عملية احتكاك الطفل ابتداء بعلاقاته الإنسانية واللغة المتداولة بين من يختلطون بالأسرة عموماً وبالطفل خصوصاً، ومراقبة البرامج الإذاعية التي يستمع إليها ويتابعها، والأهم من ذلك اللغة المستعملة من طرف الوالدين تجاه أبنائهما وفيما بينهما.
الوقاية من المشكلة1- عامل الطفل كما تحب أن تُعامل، وخاطبه باللغة التي تحب أن تخاطب بها.
2- استعمل اللغة التي ترجو أن يستعملها أبناؤك.
من هنا البداية وهكذا يتعلم الطفل: قل: «شكراً» و«من فضلك» و«لو سمحت» و«أتسمح» و«أعتذر».. يتعلمها ابنك منك..
مهم أن تقولها والأهم كيف تقولها؟.. قلها وأنت مبتسم، بكل هدوء وبصوت منسجم مع دلالات الكلمة..
3- تأكد أن اللفظ – فعلاً – غير لائق: حتى لا تنجم عن ردة فعلك سلوكيات شاذة وألفاظ أشد وقاحة، تأكد فعلاً أن اللفظ غير لائق وليس مجرد أنّ طريقة التلفظ هي المرفوضة. فمثلاً لو نطق بكلام وهو يصيح، أو يبكي، أو يعبر عن رفضه ومعارضته كقوله: لا أريد!! لماذا تمنعونني؟؟»، «لماذا أنا بالذات!؟» هذه كلها كلمات تعبر عن «رأي» وليس تلفظاً غير لائق.
عملية التقويم تحتاج إلى تحديد هدف التغيير وتوضيحه للطفل، هل هو اللفظ أم الأسلوب؟
4- راقب اللغة المتداولة في محيطه الواسع.
كيف تعالج المشكلة1- لا تهتم بشكل مثير بهذه الألفاظ: حاول قدر المستطاع عدم تضخيم الأمر ولا تعطه اهتماماً أكثر من اللازم، تظاهر بعدم المبالاة حتى لا تعطي للكلمة سلطة وأهمية وسلاحاً يشهره الطفل متى أراد سواء بنية اللعب، والمرح أم بنية الرد على سلوك أبوي لا يعجبه. وبهذا تنسحب من الساحة، واللعب بالألفاظ بمفرده ليس ممتعاً إذا لم يجد من يشاركه.
2- امدح الكلام الجميلعلّم ابنك نوع الكلام الذي تحبه وتقدره ويعجبك سماعه على لسانه. أبدِ إعجابك به كلما سمعته منه. عبر عن ذلك الإعجاب بمثل: «يعجبني كلامك الهادئ»، و«هذا جميل منك». «كلام من ذهب».
3- علّمه فن الكلامعلّمه مهارات الحديث وفن الكلام من خلال الأمثلة والتدريب، وعلّمه الأسلوب اللائق في الردّ. مثلاً: «لا يهمني» تعبير مقبول لو قيل بهدوء واحترام للسامع.. وتصبح غير لائقة لو قيلت بسخرية واستهزاء بالمستمع.
4- حوّل اللفظ بتعديل بسيط: لو تدخلت بعنف لجعلت ابنك يتمسك باللفظ ويكتشف سلاحاً ضدك أو نقطة ضعف لديك. ولكن حاول بكل هدوء اللعب على الألفاظ بإضافة حرف أو حذفه، أو تغيير حرف، أو تصحيح اللفظ لدى الطفل موهماً إياه بأنه أخطأ. فلو كانت مثلاً كلمة «قلعب» غير لائقة فقل له: لا! إنما تنطق «ملعب» وهكذا..
ما لا ينبغي فعله؟! 1- الردّ بعنف وغضب.
2- تعليمه كلاماً غير لائق في الصغر. ولاسيما في مرحلة يكون الهدف لدى الوالدين هو نطق الطفل بالدرجة الأولى، وليقل أي شيء.
3- معاقبته وحرمانه. فالعقاب يعلم الخوف ولا يعلم الاحترام.
4- قبول اللفظ أحياناً ورفضه أحياناً أخرى.

الإبداع في مكان عملكم.. لماذا يندثر ولا يزدهر؟ ست ممارسات شائعة ومخرّبة تخلّصوا منها! بيل برين



 



تكاد لا تجد بيان رسالة إلاّ ويتخذه شعاراً في الصدارة، ولا تجد مديراً لا يرفع صوته على الدوام بالثناء والتشجيع عليه.. ولكن! بالرغم من كل هذا الاهتمام الذي اكتسبه الإبداع في مؤسسات الأعمال تبقى معرفة الناس وتفهمهم لما يصلح ولا يصلح في إبداعية الشؤون اليومية بمكان العمل ضئيلةً مخلّطة بشكل لا يكاد يصدق.
من أين تأتي الأفكار الاختراقية؟ ما نوع بيئة العمل التي تتيح ازدهارها؟ ماذا يمكن للقادة أن يفعلوا حتى يستديموا التحفيز على الإبداع واختراق الحواجز؟
تيريزا آمابيل باحثة أمضت أكثر من ثلاثين سنةً في معالجة هذه التساؤلات. وهي رئيسة وحدة الإدارة الريادية في كلية أعمال هارفارد، والأستاذ الجامعية الوحيدة في مستواها التي تخصص كامل الزمن في برنامج أبحاثها لدراسة الإبداع.
منذ نحو عشر سنوات، مضت أمابيل ببحثها إلى مستوى جديد جريء. عاملة مع فريق من الأساتذة والطلبة الجامعيين والمديرين من شركات مختلفة، جمعت نحو 12000 عنوان لمذكرات عمل يومية من 238 شخصاً يعملون على مشاريع إبداعية في سبع شركات متنوّعة في مجالات المنتجات الاستهلاكية، والتكنولوجيا العالية، والكيماويات.
لم تخبر المشاركين في عمل الدراسة بأنها كانت تركز على الإبداع. بل كانت ببساطة توجه لهم يومياً أسئلة عبر الإيميل عن عملهم وعن بيئة عملهم كما يرونها ويشعرون بها في ذلك اليوم. بعد ذلك قامت بتصفية وتنظيم المذكرات مستهدفةً ما يتعلق بموضوع الإبداع عن طريق التركيزعلى تلك الأوقات حيث يجابه الناس مشكلة أو يخرجون بفكرة جديدة.
"دراسة مذكرات العمل اليومية" كانت مصممة من أجل النظر إلى الإبداع في ميدان الواقع، تقول أمابايل: أردنا أن نحصل على كل ما في رؤوس الناس وننقب فيه ونتفهم خصائص وأدوار بيئات عملهم إلى جانب التجارب وعمليات التفكير التي أوصلت إلى اختراقات ابداعية.
ما يزال الباحثون يعملون على تحليل النتائج، لكنّ هذه الدراسة الاختراقية أخذت منذ بداية صدور استنتاجاتها بقلب وتصحيح كثير من التصورات الثابتة منذ زمان طويل حول الإبداع في مكان العمل.
في مقابلة مع البروفيسور أمابيل تقدّم لنا في السطور التالية ستة توهمات منتشرة راسخة، إن أردتم إبقاء بيئاتكم وأمكنة عملكم معاديةً أو معرقلةً للإبداع فابقوا مستمسكين بها:
1- لا يأتي بالإبداعات إلاّ أهل الإبداع؟
فلنتوقّف عن تقسيم الناس إلى أدمغة وعضلات!
عندما أتحدث في لقاءات التدريب والمناقشة مع المديرين كثيراً ما أفتتح بهذا السؤال: في أيّ موضع من منظمتكم تودّون أن تروا نبع الإبداع متدفقاً؟
في العادة، سيقولون في الأبحاث والتطوير، في التسويق، وفي الإعلان. وعندما أسأل وما الموضع الذي لا ترون داعياً لحضور الإبداع فيه؟ فسترى بالتأكيد من يقول: في المحاسبة. ويثير هذا على الدوام ضحك الحاضرين بسبب التصورات السلبية المرتبطة مع المحاسبة الإبداعية.
لكن لا! إنّ هذا التصور الشائع بين المديرين بأن بعض الناس إبداعيون ومعظمهم ليسوا إبداعيين، أو لا داعي لأن يكونوا كذلك ليس صحيحاً بالمرة.
كقائد، أنت لا تريد حصر الإبداع في قطاعات منعزلة، بل أنت تريد وتحتاج أن يكون كل واحد في منظمتك مولّداً لأفكار جديدة مفيدة، بما في ذلك موظفو المالية. وبالفعل رأى العالم خلال السنوات الماضية كيف كانت المحاسبة المالية تشهد ولادة إبداعات عميقة جذرية وأخلاقية تماماً في الوقت عينه مثل "محاسبة التكاليف بالفعاليات ABC".
الحقيقة هي أن كل الأبحاث في هذا الميدان تقريباً تبين أن أي شخص بمستوى ذكاء عادي يمكنه القيام بعمل إبداعي. الإبداعية تعتمد على عدد من الأمور: التجربة -متضمنة المعرفة والمهارات التقنية- والموهبة، ومقدرة التفكير بطرق جديدة، واستطاعة التخلّص وعبور فترات الجفاف وقحط الإبداع.
والدافعية الداخلية المتولّدة في الإنسان من الممارسة بذاتها Intrinsic Motivation مطلب حيوي ذو أهمية خاصة (فالناس الذين يعملون عملاً يشدّهم ويحركهم بذاته ولذاته غالباً ما يقومون به بطريقة إبداعية). لكن بالرغم مما كنت أراه في السنوات الخمس الماضية من توجيه المنظمات اهتماماً أكبر للإبداع والابتكار أكثر من أي وقت مضى خلال مسيرتي المهنية، فإنني أعتقد أنّ معظم الناس لم يحققوا اقتراباً يذكر في إدراك واستثمار كموناتهم الإبداعية، وعمل الناس في بيئات تعيق الدافعية الذاتية يشكل جزءاً من سبب هذا القصور. وأدلة الملاحظات المتفرقة تقترح أن كثيراً من الشركات ما يزال أمامها درب طويل كي تخلّص بيئات عملها من كوابح الإبداع.
2- بالدرهم والدينار يحفّز الإبداع وتولّد الأفكار؟
لا! لا تدفعهم ولا تدفع لهم.. دعهم يندفعون!
تبين دراسات الإبداع التجريبية أن المال ليس كل شيء. وإذن؟ ما الذي ينبغي التركيز عليه لتحفيز الناس على العمل والتفكير تفكيراً مبدعاً؟
في دراستنا القائمة على متابعة يوميات العمل سألنا الناس: إلى أي حد كان تحفيزكم اليوم ناجماً عن المكافأة المالية؟ وبكثرة غالبة كانوا يجيبون بأنّ هذه مسألة ما لها قيمة معتبرة لديهم، إنهم لا يفكرون بالأجر كل يوم. وحفنة الناس الذين كانوا يمضون كثيراً من الوقت في التفكير بعلاواتهم ما كانوا يقومون إلا بقليل جداً من التفكير الإبداعي. بل إن العلاوات وخطط الأجر المربوط بالأداء يمكن أن تكون مصدراً للمتاعب عندما يصير الناس يعتقدون أنّ كل حركة يقومون بها لها تأثير على تعويضهم المالي. ففي هذه الأحوال ينزع الناس إلى سلوك مركّز على تجنب المخاطر.
بالطبع يحتاج الناس إلى الشعور بأنهم ينالون تعويضاً مالياً منصفاً. لكنّ بحثنا بين أن الناس يعتبرون قيمةً أكبر بكثير لحصولهم على بيئة عمل حيث الإبداعية تدعّم، وتقيّم عالياً، وتقدّر وتُشكر. يريد الناس الفرصة كي ينغمسوا عميقاً ويرتبطوا بما يقومون به ويحرزوا تقدماً حقيقياً.
لذلك يعتبر مطلباً حيوياً لدى القادة تحقيق المواءمة بين الناس والمشاريع الموكلين بها ليس على أساس خبراتهم وحسب، لكن كذلك بناءً على توجّهاتهم واهتماماتهم. الناس أكثر إبداعاً عندما يهتمّون اهتماماً ذاتياً بعملهم ويتحدّون ويوسّعون مهاراتهم. إن كان التحدّي مفرطاً في استنفار وتجاوز مقدراتهم فإنهم يقعون في التوتر واليأس، وإن كان ضعيفاً جداً وبعيداً تحتها فإنهم يتعرضون للسآمة والضجر. يحتاج القادة إلى إقامة واستدامة التوازن الصحيح.
3- ضغط الوقت وقود للإبداع؟ ليس تماماً!في دراستنا ليوميات العمل رأينا الناس يعتبرون أنفسهم أكثر إبداعاً عندما يضطرون إلى العمل تحت ضغط جدول زمني مزدحم ملحّ وحد نهائي لا يرحم. غير أنّ بيانات الأيام الاثني عشر ألفاً التي جمعناها ودرسناها بينت العكس: كان الناس أقل إبداعاً في عملهم عندما كانوا يصارعون عقارب الساعة. في الحقيقة، وجدنا نوعاً من الاستسلام والانهيار أمام ضغط الوقت. عندما كان الناس يعملون تحت ضغط زمني شديد كانت إبداعيتهم تتراجع ليس في ذلك اليوم وحسب بل في اليومين التاليين أيضاً.
يكبح ضغط الوقت الإبداع لأن الناس لا يستطيعون الانغماس عميقاً في المشكلة. يتطلب الإبداع فترة حضانة واختمار، يحتاج الناس زمناً كي يستنقعوا في الفكرة ويدعوا الأفكار تتجمع وتتصاعد وتتبلور.
في الواقع، إنّ الحد الزمني الضاغط ليس هو المشكلة بحد ذاته، وإنما عوامل التشتيت والإلهاء التي تسلب من الناس الوقت اللازم لصنع ذلك الاختراق المبدع.
بالتأكيد، يمكن للناس أن يكونوا مبدعين وضغط الزمن مسلط فوق رؤوسهم لكن هذا لا يحدث إلاّ عندما يكونون قادرين على التركيز في عملهم. ينبغي حمياتهم من المشتتات، وينبغي أن يكونوا مدركين أن ما يقومون به مهم وأنّ الجميع يساندونه. لكن للأسف، في منظمات كثيرة جداً لا يرى الناس للاستعجال الملحّ سبباً سوى أن أحدهم في مكان ما يريد إنجاز هذا الشيء اليوم.
4- الخوف يعصر الأفكار عصراً!ينتشر في أمكنة العمل تصور أن الخوف والغمّ تحثّ الإبداع. بل حتى بعض المنشورات السيكولوجية تقترح أن حدوث الكآبة أعلى لدى المبدعين من الكتاب والفنانين. كثير هذا الكلام، لكننا لم نره في عينة دراستنا الواقعية.
قمنا بغربلة المواد الاثني عشر ألفاً غربلة انتقائية بحثاً عن مشاعر الخوف أو القلق أو الحزن أو الغضب أو الفرح أو المحبة التي كان الخاضعون للدراسة يشعرون بها في أي يوم من أيام العمل التي يغطيها البحث.
ووجدنا أنّ:
الإبداع مرتبط إيجابياً مع الفرح والمحبة ومرتبط سلبياً مع الغضب والخوف والقلق. أظهرت البيانات أنّ الناس كانوا في أسعد حالاتهم بعدما يخرجون بفكرة مبدعة. وفوق ذلك سيكونون أقرب إلى الخروج باختراق إن كانوا سعداء في اليوم السابق.
في تفاعل المشاعر الإيجابية والإبداع هناك نوع من حلقة فاضلة متكرّرة. عندما يكون الناس متحمّسين لما يقومون به، معتنقين له اعتناقاً، فهناك إمكانية أكبر بكثير لنجاحهم في إنشاء ترابط معرفيّ يحتضن الأفكار ويخمّرها لتنبق في اليوم التالي فكرة إبداعية. إنّ سعادة يوم كثيراً ما تكون تمهيداً لإبداع اليوم التالي.
5- لا! التنافس ليس أقوى من التعاون!هناك اعتقاد شائع –خصوصاً في صناعات التمويل والتكنولوجيا العالية- بأن التنافس الداخلي يصعّد الإبداع.
وماذا وجدنا في دراستنا لمذكرات العمل اليومية؟ وجدنا أن الإبداع يتدهور ويعاني عندما يتنافس الناس في مجوعة العمل بدل أن يتعاونوا.
الفرق الأكثر إبداعاً هي تلك التي تمتلك الثقة لمشاركة الأفكار ومناقشتها بين أعضائها. لكن عندما يتنافس الناس على العرفان بالفضل فإنهم يكفون عن مشاركة المعلومات. وهذا مدمّر لأن لا أحد في أي منظمة يستطيع امتلاك كل المعلومات اللازمة لوضع كل قطع الأحجية معاً في الترتيب الصحيح.
6- المنظمة المرشّقة الفعّالة منظمة مبدعةوحدها ربما أقسام العلاقات العامة هي التي تعتقد أو تصدّق أن تقليص العمالة وإعادة الهيكلة تنمي وتنشط الإبداع.
لكن لسوء الحظ، رأيت كثيراً من الأمثلة على هذا التصوّر المشوّش. ومنها مثلاً هذه الرسالة الموجهة إلى حملة الأسهم من شركة برمجيات أمريكية كبرى: "إن تقليص عمالة كهذا الذي نحن بصدده صعب على الموظفين دوماً، لكن من داخل هذه المرحلة الصعبة يمكن أن تتولد القوة والإبداع وعمل الفريق.."
بالطبع العكس هو الصحيح: الإبداع يعاني كثيراً خلال تقليص العمالة، ولكن الأمر أسوأ حتى مما يراه كثير منّا.
تابعنا بالدراسة شركة فرعية فيها ستة آلاف موظف تابعة لشركة الكترونيات عالمية كبرى خلال كامل عملية تقليص حجم قوتها البشرية بنسبة 25% تلك العملية التي استغرقت ثمانية عشر شهراً مضنية. ورأينا في النهاية كل محرّك –دون استثناء- من محركات الإبداع في بيئة العمل يهبط هبوطاً كبيراً.
وترقّب الناس تقليص العمالة كان أسوأ من التقليص نفسه. فخوف الناس من المجهول قادهم إلى الانفصال Disengage عمّا يعملون فيه. ويتفجر المرء سخطاً وحيرة حين تواجهه حقيقة أنه حتى بعد خمسة أشهر من التقليص كانت الإبداعية في ذلك المكان منحدرة انحداراً كبيراً.
لسوء الحظ، تقليص العمالة (أو الترشيق Downsizing) سيبقى من حقائق الوجود، ما يعني أن القادة يحتاجون دوماً إلى التركيز على الأشياء التي يلحق بها الضرر نتيجةً له. تنحدر مستويات التواصل والتعاون انحداراً ملحوظاً. وكذلك يهوي شعور الناس بالحرية والتصرف ذاتياً. وسيكون على القادة عندئذ العمل بجهد وبسرعة لإعادة استقرار بيئة العمل حتى تستطيع الأفكار أن تزدهر فيها.
عندما تنظرون أعزائي القراء إلى كامل هذه المرتكزات التشغيلية الستة التي أقترحها من أجل استحثاث واستدامة الإبداع في مكان العمل فقد تظنّون أنني أدعو إلى نمط الإدارة اللينة. لا! بل إنني أدعو نمط الإدارة الذكية. إن سنوات أبحاثي الثلاثين وعناوين مذكرات العمل اليومية الاثني عشر ألفاً تقترح أنه عندما يكون الناس قائمين بعملٍ يحبونه وتُهيّأ لهم شروط الانغماس فيه واعتناقه، وعندما يكون هذا العمل بذاته قيماً ومقدراً مشكوراً، فإن الإبداعية ستزدهر في مكان العمل مهما كانت مصاعب المرحلة الزمنية التي يمر بها.

السبت، 5 مايو 2012

install oracle DB in win 7

usually this error message appear

Abnormal Program Termination. An internal error has occurred. Please provide the following files to Oracle Support.
"Unknown"
"Unknown"
"Unknown"

solution:
Okay, click exit, then go to setup icon 
right click by mouse and click property, then compatibly
and  choose windows XP
then run setup as administrator
the problem will be solved

that's all

Good by

السبت، 21 أبريل 2012

Personalized Dashboards


Extend an Oracle ADF Faces dashboard application to support persistent user personalization.
Many enterprise applications being built today require flexible, dashboard-style presentation of visual data—bar charts, graphs, and the like—showing various levels of information at a glance. Flexibility these days also assumes a certain amount of personalization. Users want to be able to rearrange how the information appears in any dashboard to best suit their needs.
The panelDashboard component of the Oracle Application Development Framework (Oracle ADF) Faces feature is a JavaServer Faces (JSF) layout container that Oracle ADF developers can use to implement such information dashboards. The panelDashboard component supports various types of child components that can be arranged into columns and rows of equal sizes.
This column will teach you how to change the Oracle ADF Faces panelDashboard component default layout behavior so that users can reorganize information areas according to their needs. You’ll also learn how to persist the user’s changes to the UI beyond the current session by configuring Oracle Fusion Middleware’s Oracle Metadata Services (MDS) feature in conjunction with the Oracle ADF Security feature so that the user’s personalized UI is displayed whenever that person logs in. This column steps you through the process of making the necessary changes to a baseline application that ultimately supports personalization across application restarts.
The JSPX language was used for building the sample application’s page definitions, but the techniques detailed in this column will also work for projects that use Facelets as the view declaration language rather than JSPX. Facelets, a feature of JSF 2.0, are fully supported in Oracle JDeveloper 11g Release 2. To learn more about Facelets, see bit.ly/A0RpBT.

Sample Application Overview

The sample application workspace contains a panel dashboard page that uses graphs and gauges in the Oracle ADF Faces Data Visualization Tools feature to display salary information in a static grid.
Instances of the Oracle ADF Faces af:panelBox component are used as immediate child components of the af:panelDashboard to form a two-row, two-column grid.
To follow the instructions provided in this column, download the o32adf-1549375.zip sample zip file.
The zip file contains two folders:
  • AdfDashboardCompleted contains the Oracle JDeveloper 11g Release 2 (11.1.2.2) workspace for the completed application.
  • AdfDashboardHandsOn contains the starter workspace.

Getting Started

To step through the example, you need the studio edition of Oracle JDeveloper 11g Release 2 (11.1.2.2) or a later release, available as a free download from Oracle Technology Network. You also need an Oracle Database instance with the unlocked HR schema.
To set up and run the example application
  1. Unzip the o32adf-1549375.zip file into a directory on your local machine.
  2. Launch Oracle JDeveloper 11g Release 2. From the Oracle JDeveloper menu, select File ->Open and navigate to the directory containing the unpacked sample application.
  3. Open the AdfDashboardHandsOn folder and then the PanelDashboard folder, and select thePanelDashboard.jws file.
  4. Click Open. The workspace opens in Oracle Jdeveloper.
    Before attempting to run the application, you must change the database connection information to point to your HR database schema.
  5. From the Oracle JDeveloper menu, select View -> Database -> Database Navigator.
  6. Expand the PanelDashboard node.
  7. Right-click the hrconn node and select Properties from the context menu. Edit the database connection information to work with your setup. Apply changes, and click OK to close the connection properties.
    With a working connection to your database, you can now run the sample application.
  8. In the Application Navigator, expand the ViewController project node to display the Application Sources and Web Content folders.
  9. Expand the Web Content folder, click the DashBoardPage.jspx file within it to select it, right-click it, and select Run from the context menu.
If this is the first time you’re running an application in Oracle JDeveloper, the Create Default Domain dialog box will appear, prompting you to create a password for the default Oracle WebLogic Server domain (“weblogic”) associated with Oracle JDeveloper. Choose a password, enter it in the dialog box in the appropriate fields, and click OK. The application opens in the browser, as shown in Figure 1.
 o32adf-f1
Figure 1: Dashboard starter application
 
The dashboard application consists of the base panelDashboard component with four panelBox components. The topmost component (the “Salaries in Departments” graph) is not contained within the panelDashboard component and thus remains fixed at the top of the UI.
Explore the sample application by clicking any bars in the “Salaries in Departments” graph, and you’ll see that the two panel boxes in the middle of the page are updated to reflect the data change. Click a bar in the “Employee Salaries in selected Department” panel box to change the gauge graph data displayed in the “Employee Salary in Department Salary Range” panel box. This shows the selected employee salary in relation to the low-, medium-, and high-salary range for the selected department.
The two panel boxes at the bottom of the page both contain bar graphs that are not dynamically updated.
Select one of the four panel boxes and try to move it to another location in the dashboard, and you’ll see that it cannot be moved. However, that’s one of the first things you will enable as you step through this column.

Extending the Sample Application to Support Persistent Personalizations

The starter application is a one-size-fits-all dashboard UI. You’ll extend the base functionality to enable users to drag and drop the charts and graphs. You’ll also modify the application so that user changes are persisted, resulting in a personalized UI presented each time the application is launched. To implement drag-and-drop for the panelDashboard child components and to persist user-applied changes, application developers must make changes to the base application in several different layers, as follows:
  • Enable drag-and-drop on the Oracle ADF Faces panelBox child components in the panelDashboard.
  • Enable personalization by configuring MDS for the ViewController project and the panelDashboard component.
  • Enable detection of panelBox component reordering and notification when such changes occur.
  • Configure Security for user authentication so that any changes made to the UI are associated with the user who made them and will be presented to that user even after application restart.
Most of these tasks are accomplished with Oracle JDeveloper’s declarative and visual tools or with a few changes to configuration files, as detailed in the remainder of this column. 

Enabling Basic Drag-and-Drop Functionality

To enable panelBox components to be moved within the panelDashboard component, the panelBox must be marked as a drag source. You can do this declaratively in Oracle JDeveloper by simply adding to each panelBox the necessary tag—an af:componentDragSource tag in this case. The af:componentDragSource tag is an Oracle ADF Faces behavior tag that encapsulates the JavaScript code (which you would otherwise have to write) for implementing drag-and-drop in HTML pages. Behavior tags are just one example of how Oracle ADF Faces improves developer productivity by providing functionality that typically would require custom code.
To mark the panel boxes as drag sources, you drag the componentDragSource tag from the Component Palette and drop it onto each of the panelBox objects of the application. This gesture (dragging items from the Component Palette onto a page) is easy to do in the Structure window:
  1. From the Oracle JDeveloper menu, select View -> Structure to open the Structure window, and select View -> Component Palette to open the Component Palette.
  2. In the Application Navigator, double-click the DashBoardPage.jspx file to launch the Oracle JDeveloper visual editor.
  3. In the opened editor, click in one of the panel boxes, such as the “Employee Salaries in selected Department” box.
In the Structure window, you should see the af:panelDashboard component and its contained af:panelBox children. Now move to the Component Palette:  
  1. Select ADF Faces from the menu.
  2. In the search field above the menu, type component drag source and press Enter (or click the right-arrow search button). The search results return the Component Drag Source (ADF Faces .Operations) tag.
  3. Drag the Component Drag Source tag from the Component Palette to the af:panelDashboard, and drop it onto the first af:panelBox child component in the af:panelDashboard.
Repeat this process for the other three panel boxes in the dashboard. When you finish, every panel box will have an af:componentDragSource as a child component (see Figure 2). 
 
 o32adf-f2
Figure 2: Oracle JDeveloper Structure window, showing component tree
 
Right-click DashBoardPage.jspx, and select Run from the context menu to run the sample application again. When the application appears in the browser, select a panel box and move it within the dashboard, as shown in Figure 3. When you release the mouse button, Oracle ADF Faces will drop the panel box into position.
 
o32adf-f3
Figure 3: Dragging a panel box at runtime
 
Nice! But we’re not done yet. If the user quits the application at this point, the changes to the UI won’t be retained. To persist changes made by any user, we must configure personalization with MDS for this ViewController project.

Enabling and Configuring Personalization

MDS, the personalization and customization engine at the heart of the sample dashboard application, is a repository-based customization framework that is tightly integrated with the Oracle ADF request lifecycle. Two levels of personalization are available:
  • “Seeded” personalization, in which different UI components and data are presented to different users, according to group membership, role, location, or other information
  • Per-user personalization
For this sample application, we’ll set up MDS for per-user personalization. Incorporating MDS functionality into an Oracle ADF Faces application starts by enabling the functionality in the ViewController project layer. Follow these steps:
  1. Click the ViewController project node in the Application Navigator,
  2. Right-click ViewController and select Project Properties from the context menu,
  3. In the Project Properties dialog box click the ADF View menu item. The ADF View panel appears,
  4. Click the Enable User Customizations checkbox,
  5. Click Across Sessions using MDS,
  6. Click OK to save the settings and close the Project Properties page,
When you save these settings, the dashboard application’s web.xml deployment descriptor is (transparently) updated with the necessary context parameters for MDS. The application’s adf-config.xml is also updated with the change manager configuration. 
However, the adf-config.xml file still requires a few other changes to support the personalization mechanism on a per-user basis.
In MDS, information is saved in layers identified by a Java object, the customization class. The user layer is defined by an existing Java object, the UserCC class. Internally, the UserCC class accesses the Oracle ADF Security context for the authenticated username (you’ll configure this later). The name of the authenticated user is a unique ID that MDS uses to store and retrieve data for a particular person.
For any application for which you want changes individually saved for an application user, you can configure the UserCC class.
To select and configure the UserCC class for the sample, follow the next few steps. From the Application Navigator,
  1. Open the Application Resources accordion panel.
  2. Expand the Descriptors and ADF META-INF nodes.
  3. Click adf-config.xml to select the file, right-click, and select Open from the context menu. adf-config.xml opens in the editor; the Overview tab appears by default.
  4. In the editor, select MDS and click the green plus (+) icon above the Customization Classes entry (see Figure 4).
     
     o32adf-f4
    Figure 4: Editing the MDS customization layer for the UserCC class

  5. In the Edit Customization Class dialog box, type UserCC in the Match Class or Package Namefield.
  6. Select the UserCC class from the Matching Classes and Packages list, and click OK.
These steps add metadata for the UserCC class to the adf-config.xml file.
 For our sample dashboard application, only changes to the child component order of the af:panelDashboard component will be persisted, so let’s configure that now. Unlike other Oracle ADF Faces components, the af:panelDashboard component does not have a menu option for configuration, so you must manually modify the adf-config.xml file and add the appropriate metadata to identify allowable customization. As a convenience, the application’s adf-config.xml file already contains the required metadata, nested inside comment tags (see Figure 5), so you need only remove the tags.
 
o32adf-f5
Figure 5: MDS configuration for panelDashboard in adf-config.xml
 
To manually edit the adf-config.xml file,
  1. Click the Source tab at the bottom of the editor where the adf-config.xml file is open
  2. Remove the comments around the taglib-config element
  3. Click the save icon in the Oracle JDeveloper tool bar to save all changes, and close adf-config.xml by clicking the x icon on the tab
 

Detecting Personalizations

For many Oracle ADF Faces components, the component’s renderer notifies the framework when an end user personalizes a page, and then it uses the Oracle ADF Faces change persistence framework to render the page. However, because the panelDashboard’s drag-and-drop behavior is a feature of the af:componentDrag behavior tag rather than of the component itself, the panelDashboard component does not automatically notify the framework about user-applied changes. Thus, for this sample application, you must use Java and the change persistence API directly to create a bean that notifies the framework. That’s been done for you in the DndHandlerBean, which you can now associate with the listener on the panelDashboard.
The panelDashboard DropListener component receives an event notification about any drag-and-drop action performed on the child components. To respond to component drop events in the application, the DropListener property must be configured to point to a managed bean method:
  1. Double-click the DashBoardPage.jspx file in the Application Navigator to open and display the page in the visual editor.
  2. Click the binoculars (search) icon at the top of the Structure window to toggle open the search input field.
  3. Type panelDashboard in the input field, and press Enter. Oracle JDeveloper will find and highlight the af:panelDashboard component (its node) in the page structure tree.
  4. With the panelDashboard component selected in the Structure window, open the Property Inspector by selecting View -> Property Inspector from the Oracle JDeveloper menu.
  5. In the Panel Dashboard—Property Inspector pane, click in the Find field (next to the magnifier icon) to activate the search input field.
  6. Type DropListener in the search field. As you type, the DropListener attribute becomes highlighted (in the Behavior section of the Property Inspector pane).
  7. Select Edit from the DropListener property menu. The Edit Property:DropListener dialog box appears.
    • Select DndHandlerBean from the menu as the managed bean for the listener.
    • Select dashBoardDropHandler as the method.
  8. Click OK to save the setting.
Upon drop event notification, the managed bean identifies the change in the panelDashboard child component order and writes this change to the Oracle ADF Faces change persistence framework, which passes this information on to MDS as per the configuration in the adf-conf.xml file. 
For a better understanding of using Java to access the Oracle ADF Faces change persistence API, take a look at the code that constitutes the DndHandlerBean. From the Application Navigator, go to the ViewController -> Application Sources folder, in the oramag.sample.dashboard.view.beans.dashboard package.
At this point, you’ve implemented drag-and-drop for the panelDashboard component, so your application users can reorder child components at runtime. You’ve also set up MDS to persist changes to specific UI components. The one task remaining is to set up Oracle ADF Security to enforce user authentication so that UI changes can be saved for each user. 

Setting Up Oracle ADF Security and Testing the Completed Application

When users access the dashboard from their browser, you want them to be prompted for a username and password. Implementing this in the sample requires configuring Oracle ADF Security in a simple wizard-driven process. From the Oracle JDeveloper menu,
  1. Select Application -> Secure -> Configure ADF Security to launch the Oracle ADF Security wizard. The Enable ADF Security pane (step 1 of 4) appears, enabling you to choose the type of authentication.
  2. Click ADF Authentication (in the Security Model section), and click Next to continue. By default,ADF Authentication has Http Basic Authentication selected as its type on the next pane (step 2 of 4) of the wizard.
  3. Leave Http Basic Authentication selected, and click Finish to save the settings and complete the wizard. A “Security Infrastructure Created” message appears.
  4. Click OK to dismiss the message.
With Oracle ADF Security enabled for authentication, you can now create some test users. From the Oracle JDeveloper menu, select Application -> Secure -> Users. Click the green plus (+) icon in the Users section of the dialog box for adding users, and create the test user accounts listed in Table 1.

Name
Password
Display name
Description
Test user 1
sking welcome1
Steven King
Leave this field empty.
Test user 2
dfaviet welcome1
Daniel Faviet
Leave this field empty.

Table 1: Test data for sample application
  
When you have finished adding these test users, click the save icon in the Oracle JDeveloper tool bar to save your work.

Next Steps



 LEARN more about Oracle ADF and Facelets 
You can now run the completed dashboard application with some real-world personalization scenarios. Run the application by right-clicking theDashBoardPage.jspx file in the Application Navigator pane and selecting Run from the context menu. In the browser’s login dialog box, authenticate as test user sking (sking/welcome1).
Rearrange the panel boxes by dragging and dropping them to new locations within the dashboard. (You’ll notice that the dashboard functionality itself hasn’t changed—the graph and the gauge are updated as they should be, and the result data in the two graphs at the bottom of the UI remains static.) When you’ve sufficiently modified the order of the UI items, close the browser.
Now rerun the application. Note that you can quickly restart the application from the Oracle JDeveloper log window, which contains the runtime URL, similar to the following:
http://localhost:7101/PanelDashboard-ViewController-context-root/faces/DashBoardPage.jspx
Open the log window if necessary by selecting View -> Log Window from the menu, and click the URL to rerun the dashboard application.
When the browser login dialog box appears, authenticate as sking/welcome1. This time, the panelDashboard child component order is read from MDS and the UI is populated in the order in which test user sking left it.
Close the browser, and click the URL in the Oracle JDeveloper log window to relaunch the dashboard. When prompted for user credentials, authenticate as test user dfaviet. The application displays the dashboard components in their default positions, because test user dfaviet has not yet personalized the UI.

Conclusion

This column has stepped you through the process of using Oracle JDeveloper’s declarative and visual tools to support persistent personalization of UI elements in a dashboard application. You can see how the combination of Oracle ADF Security for user authentication, Oracle ADF Faces behavior tags for implementing drag-and-drop, and the integrated change persistence framework in Oracle ADF Faces enable application developers to build personalizable application user interfaces with almost no need to write code.