آموزش

All posts tagged آموزش

ارسال پارامتر به TaskFlow

در فریم‌ورک توسعه برنامه‌های کاربردی تحت وب شرکت اوراکل(ADF) به صورت بسیار مطلوبی از TaskFlow پشتیبانی می‌گردد. استفاده از TaskFlow در برنامه باعث می‌گردد تا برنامه شما دارای یک سری از ویژگی‌های منحصر به فردی گردد که سایر برنامه‌ها دارای چنین قابلیت‌هایی نباشند. TaskFlow این قابلیت را خواهد داد تا برنامه را به واحدهای کوچکتر تقسیم کرد. این تقسیم‌بندی امکان استفاده مجدد را بالا می‌برد و همچنین تغییرات آینده را بسیار سهل و آسان می‌نمایند. در ضمن در ارتباط با کنترل دسترسی کاربران نیز کمک بسزایی می‌نماید زیرا قابلیت‌های امنیتی ADF بر روی TaskFlow ها اعمال می‌گردد.

*برای کسب اطلاعات بیشتر در ارتباط با امنیت در ADF به پست نحوه فعال‌سازی ADF Security مراجعه نمایید.

استفاده از TaskFlow در برنامه گاهی نیازی برای شما ایجاد می‌نماید که بین دو TaskFlow مقداری را به عنوان پارامتر ورودی از یک TaskFlow به TaskFlow دیگر ارسال نماید. به تجربه برای من ثابت شده که با استفاده از قابلیت ارسال پارامتر بین TaskFlowها می‌توان برنامه‌های به مراتب موثرتر با ساختار بهتری طراحی و پیاده‌سازی نمود.

در این مقاله سعی بر آن دارم تا این قابلیت را با استفاده از یک مثال شرح داده تا بیشتر با این موضوع آشنا گردید. مثال مورد استفاده به این صورت بوده که یک TaskFlow برای انجام عملیات ایجاد، ویرایش و حذف کارمند در نظر گرفته شده و با توجه به پارامتر ارسالی به آن عملیات مناسب را انجام می‌دهد. نتیجه‌ای نیز با توجه به کلیک کاربر بر روی دکمه ثبت و یا انصراف باز می‌گردد تا عملیات Commit و یا Rollback انجام گیرد. در این مثال هم نحوه ارسال پارامتر به TaskFlow و هم دریافت مقدار از TaskFlow را خواهید دید. دقت بفرمایید که برای دریافت پارامتر از کامپوننت Task Flow Return استفاده نخواهد شد بلکه برای آشنایی از مقادیر بازگشتی استفاده می‌گردد.

در این مثال یک TaskFlow با عنوان empManagement ایجاد می‌گردد و یک TaskFlow با عنوان empCUD که سه عملیات ایجاد، ویرایش و حذف را انجام می‌دهد empCUD یک پارامتر ورودی با عنوان operation دارد که عملیاتی را که باید انجام دهد مشخص می‌نماید. empCUD یک نتیجه بر می‌گرداند که بر اساس آن یا Commit و یا Rollback انجام می‌گیرد.

شرح

یک TaskFlow ایجاد کنید و در قسمت Overview یک پارامتر ورودی با عنوان operation و یک مقدار خروجی با عنوان result همانند تصویر زیر ایجاد کنید.

یک Router در TaskFlow قرار دهید و آن‌را همانند تصویر زیر تنظیم کنید.

این Router به این صورت تنظیم شده که اگر operation برابر create باشد خروجی آن create، اگر برابر Delete باشد خروجی آن Delete و در غیر این‌صورت خروجی آن edit می‌باشد تا با توجه به این خروجی‌ها عملیات مناسب انجام گردد.

صفحه‌ای با عنوان empForm ایجاد کنید. View کارمند را بر روی آن کشیده و به صورت فرم رها کنید. در صفحه دو دکمه قرار دهید. برای دکمه ثبت یک کامپوننت setActionListener قرار دهید تا مقدار ok را درون result قرار دهد. برای دکمه انصراف نیز تکرار کنید اما مقدار cancel را درون result قرار دهد.

در صورتی که خروجیRouter برابر با create باشد باید ابتدا عملیات CreateInsert انجام گردد. سپس به صفحه فرم کارمند ارسال گردد تا اطلاعات آن توسط کاربر تکمیل گردد و اگر برابر با edit باشد باید مستقیما به صفحه هدایت گردد.

در صورتی که خروجی Router برابر با delete باشد باید ابتدا کاربر را به صفحه‌ای هدایت کنیم که حذف را تایید نماید و در صورت تایید عملیات حذف را انجام دهیم . این صفحه نیز همانند صفحه empForm می‌باشد با این تفاوت که دکمه ok دارای action برابر با delete می‌باشد تا بر اساس آن delete صورت گیرد.

تا اینجا TaskFlow انجام عملیات آماده شده است و حال نوبت به TaskFlow مدیریت کارمندان رسیده است.

ساخت empManagement
یک صفحه که شامل لیست کارمندان است قرار می‌دهیم. سه دکمه نیز در این صفحه برای انجام سه عملیات ایجاد، ویرایش و حذف قرار می‌دهیم.
یک پارامتر همانند تصویر زیر با عنوان operationResult ایجاد می‌کنیم تا نتیجه بازگشتی از empCUD را درون آن قرار دهیم و با توجه به مقدار آن Commit یا Rollback را اجرا نماییم.

از مرحله قبل empCUD ساخته شده را بر روی empManagement قرار میدهیم و همانند زیر آنرا را برای فشرده شدن دکمه ایجاد تنظیم می‌نمایم تا با زدن این دکمه empCUD برای عملیات ایجاد فراخوانی گردد و نتیجه عملیات خود را نیز در operationResult قرار دهد.

همین مرحله را دوبار دیگر انجام دهید با این تفاوت که مقدار پارامتر ورودی empCUD را تغییر دهید تا عملیات edit و delete نیز انجام گیرد.

یک Router در empManagment قرار دهید و با توجه به مقدار operationResult عملیات Commit یا Rollback را انجام دهید.

تبریک می‌گویم شما تمام مراحل را با موفقیت پشت سر گذاشتید. حال برنامه را تست نمایید و نتیجه تلاش خود را ملاحظه فرمایید.

جمع‌بندی
در این مثال ما با استفاده از قابلیت ارسال و دریافت پارامتر بین TaskFlowها در ADF توانستیم یک TaskFlow بنویسیم که سه عملیات را با توجه به مقدار پارامتر operation که در زمان فراخوانی TaskFlow آنرا مقداردهی کردیم، انجام دهد. همچنین توانستیم با توجه به قابلیت بازگشت مقدار از TaskFlow(همانند return متدها) به TaskFlow ای که آنرا فراخوانی کرده نتیجه عملیات را گزارش دهیم تا بر اساس آن تصمیم‌گیری نماید. در این مثال ما با مقداردهی result در empCUD و بازگشت آن به empManagement و سپس ذخیره آن در resultOperation توانستیم با توجه به مقدار ok یا cancel بودن عملیات، Commit و Rollback را در empManagement انجام دهیم.

فایل PDF

فایل مثال

امیدوارم که مطلب مفیدی برایتان بوده باشد
با تشکر

فایل پیوست:
خواندن بیشتر
royal visionارسال پارامتر به TaskFlow

اعتبارسنجی کاربر با استفاده از جدول پایگاه داده

0
همانطور که در پست نحوه فعال‌سازی ADF Security تشریح شد شما قادر شدید تا برنامه‌های خود را امن نمایید و برای دسترسی به محتوای آن مکانیزم ورود را فعال نمایید. در پست مذکور شما یک کاربر را در زمان نوشتن برنامه ایجاد کردید و کاربر با استفاده از آن توانست وارد برنامه شود. در محیط واقعی این حالت کاربردی ندارد به این خاطر که کاربران باید قابل تغییر باشند و حذف و اضافه گردند. در روش قبل شما برای ایجاد یک کاربر جدید باید برنامه را مجدد کامپایل و در سرور قرار می‌دادید که این موضوع اصلا قابل تحمل و اجرایی نمی‌باشد. برای رفع این معضل شما باید ADF Security را به گونه‌ای تنظیم نمایید تا بتواند کاربران خود را از محل دیگری اعتبارسنجی نماید. روش‌‌های بسیاری وجود دارد که برای مثال می‌توان به استفاده از LDAP و پایگاه داده اشاره کرد. قصد من توضیح روش استفاده از پایگاه داده می‌باشد.
در بحث ADF Security دو جنبه وجود دارد. جنبه اول صحت اطلاعات کاربر یعنی تطبیق نام کاربری و رمز عبور و جنبه دوم سطح دسترسی (Role) کاربر می‌باشد. به همین خاطر در این روش باید پایگاه داده شامل اطلاعات مورد نیاز باشد که برای این موضوع من سه جدول به شرح زیر فراهم نموده ام .
۱. UserTbl که شامل اطلاعات نام کاربری و رمز عبور می‌باشد.
۲. RoleTbl که شامل لیست دسترسی‌ها می‌باشد. که فقط دارای فیلد عنوان سطح دسترسی می‌باشد.
۳. UserRoleTbl که مشخص می‌نماید کاربر چه دسترسی‌هایی دارد و شامل فیلد نام کاربری و عنوان سطح دسترسی می‌باشد.
اسکریپت مربوط به ایجاد این جداول در پیوست آمده است. در این اسکریپت یک کاربر با نام admin و رمزعبور admin با تمام دسترسی‌ها نیز وجود دارد.برای این که این مقاله طولانی نشود و شما نیز با برخی از مطالب مورد نیاز در این مقاله آشنایی دارد از تشرح برخی موارد خودداری می‌نمایم. برای مثال مربوط به این قسمت من یک صفحه از لیست دپارتمان‌ها و مکانهای پایگاه داده HR ایجاد کرده ام تا کنترل دسترسی را بر روی آنها قرار دهم. سپس یک صفحه با نام User که بتوانم عملیات CRUD را برای جدول‌ USERTBL و USERROLETBL انجام دهم ایجاد نموده‌ام. این صفحه را ایجاد کرده ام که نشان دهم می‌توانید کاربر جدید ایجاد نموده و به آن دسترسی داده تا بتواند وارد برنامه گردد. چون دسترسی‌ها را در زمان برنامه نویسی باید مشخص نمایید و قسمت‌های مختلف برنامه باید دسترسی‌هایش را تعیین نمایید پس لیست دسترسی‌ها یک لیست ثابت بوده و نیاز به عملیات CRUD بر روی آن نمی‌باشد و لذا در مدل فقط یک View فقط خواندنی از‌ آن می‌سازیم.
سیاست اعمال شده من در این مثال به این صورت است که سه سطح دسترسی به نام‌های Department و Location و manager دارم که کاربرانی که دسترسی Department را داشته باشند می‌توانند لیست دپارتمان‌ها و آنهایی که سطح دسترسی Location را دارند می‌توانند لیست مکان‌ها را مشاهده نمایند و افرادی که دسترسی manager را داشته باشند می‌توانند بر روی کاربران و سطوح دسترسی آن‌ها مدیریت نمایند.
نکته : دقت نمایید که سیاست امنیتی مورد استفاده در برنامه‌ها کاملا به نیاز و طراحی شما در برنامه‌هایتان بر می‌گردد و یک کار کاملا سلیقه‌ای می‌باشد. ممکن است شما از این الگو استفاده ننمایید و الگوی ویژه‌ی خودتان را طراحی نمایید. دستتان کاملا برای این موضوع باز می‌باشد. برای مثال من عموما از گروه‌های کاربری استفاده می‌نمایم و برای آنها سطح دسترسی تعیین می‌نمایم و سپس کاربر را به یک یا چند گروه اضافه می‌نمایم تا آن کاربران نیز سطح دسترسی همان گروه را داشته باشند.حال که صفحات مورد نیاز خودتان را ایجاد کردید نوبت به انجام تنظیمات ADF Security میرسد. همانطور که می‌دانید کنترل امنیت برنامه ها توسط weblogic انجام می‌گیرد یعنی تشخیص کاربر و جلوگیری از دسترسی‌های غیرمجاز توسط weblogic صورت می‌گیرد. پس برای تنظیمات باید در دو قسمت کارهایی انجام دهیم. قسمت اول این است که weblogic باید چگونه نام کاربری و رمزعبور را چک نماید و سطح دسترسی آن کاربر چیست و قسمت دوم اینکه صفحات برنامه توسط چه دسترسی‌هایی قابل مشاهده می‌باشد.
در مرحله اول تنظیمات مربوط به weblogic را انجام می‌دهیم.
ابتدا وارد کنسول weblogic شوید و یک Data Source به پایگاه داده مورد نظرتان برای گرفتن اطلاعات کاربر ایجاد نمایید. در این مثال ما برای پایگاه داده HR یک Data Source به نام HRDS می‌سازیم.
برای ایجاد Data Source مسیر زیر را در منوی سمت چپ کنسول پیگری نمایید
Services → JDBC → Data Sources
دکمه new را زده تا یک Data Source جدید ایجاد گردد و اطلاعات را همانند تصویر زیر تکمیل و دکمه Next را کلیک کنید.در صفحه بعد نیز دکمه Next را کلیک نمایید و در صفحه بعد اطلاعات را همانند تصویر تکمیل نمایید. دقت نمایید که این اطلاعات مختص سیستم من می‌باشد و در صورت تفاوت این اطلاعات مقدار صحیح و مربوط به خودتان را در آن قرار دهید.پس از کلیک دکمه Next در صفحه‌ بعد اطلاعات وارد شده مجددا نمایش داده می‌شود. دکمه Test Configuration را کلیک نمایید تا تنظیمات را تست نمایید. در صورت صحت اطلاعات پیام موفقیت را مشاهده خواهید نمود.

پس از اطمینان از صحت تنظیمات دکمه Finish را کلیک نمایید تا تنظیمات را ذخیره نمایید. سپس از منوی سمت چپ بر روی گزینه Security Realms کلیک نماید. بر روی myrealm کلیک نمایید تا وارد تنظیمات آن گردیم. به بخش Provider مراجعه نمایید و بر روی DefaultAuthenticator کلیک نمایید و مقدار Control Flag را برابر Sufficient قرار دهید

مجددا به قسمت Provider بازگردید و دکمه New را کلیک نمایید تا یک Authentication provider جدید ایجاد نمایید. در صفحه اول یک نام وارد نمایید و نوع آن را برابر SQLAuthenticator قرار دهید و دکمه Ok را کلیک نمایید. بر روی مورد جدید ساخته شده خودتان کلیک نمایید تا وارد آن گردیید. Control Flag آن را برابر Sufficient قرار دهید و سپس به تب Provider Specific بروید و همانند تصویر زیر مقادیر را وارد نمایید.

در ادامه این قسمت یک سری دستورات SQL وجود دارد که weblogic از‌ آن‌ها برای استخراج اطلاعات مورد نیاز خود از پایگاه‌داده استفاده می‌کند که در زیر من لیست مقادیر و فیلدهایی که باید تغییر کنند را برای شما آورده ام. این Queryها در صورت تغییر ساختار جداول باید تغییر نمایند و Queryهای درست در آن‌ها قرار گیرد.

sql get users password:<br />
SELECT PASSWORD FROM USERTBL WHERE USERNAME = ?</p>
<p>sql user exists:<br />
SELECT USERNAME FROM USERTBL WHERE USERNAME = ?</p>
<p>sql list member groups:<br />
SELECT ROLETITLE FROM USERROLETBL WHERE USERNAME = ?</p>
<p>sql list users:<br />
SELECT USERNAME FROM USERTBL WHERE USERNAME LIKE ?</p>
<p>sql list groups:<br />
SELECT ROLETITLE FROM ROLETBL WHERE ROLETITLE LIKE ?</p>
<p>sql group exists:<br />
SELECT ROLETITLE FROM ROLETBL WHERE ROLETITLE = ?</p>
<p>sql is member:<br />
SELECT USERNAME FROM USERROLETBL WHERE ROLETITLE = ? AND USERNAME = ?</p>
<p>sql list group members :<br />
SELECT USERNAME FROM USERROLETBL WHERE ROLETITLE = ? AND USERNAME LIKE ?<br />

پس از اعمال این تغییرات در فیلدهای مربوطه دکمه Save را کلیک نمایید تا تغییرات ذخیره گردد. پس از انجام این تغییرات شما باید weblogic را restart نمایید تا تغییرات اعمال گردد.

حال تغییرات سمت weblogic کامل شده و باید تنظیمات درون برنامه را انجام دهیم. برای انجام این تغییرات ابتدا ADF Security را فعال نمایید. سپس تنها کافیست که در قسمت Application Role بخش Security ارتباط بین Role های درون پایگاه داده و Roleهای درون برنامه را ایجاد نماید و سپس در قسمت ADF Policies نیز مشخص نمایید چه دسترسی‌هایی مجاز به دیدن چه قسمت‌هایی از برنامه هستند. این دفعه دیگر نیازی به ایجاد کاربر نمی‌باشد و کاربران درون پایگاه داده استفاده می‌گردند. در این قسمت تنها کافیست که معین نماییم دسترسی‌های موجود در پایگاه‌داده(Enterprise Role) معادل کدام دسترسی‌ها در سطح برنامه(Application Role) هستند. چون سیاست ما در این مثال به این‌گونه است که عینا سطح دسترسی در پایگاه‌داده برابر با سطح دسترسی در سطح برنامه است پس سه سطح دسترسی موجود در پایگاه داده manager, Location و Department را درون Application Role و Enterprise Role ایجاد کرده و آنها را در تب Enterprise Role به معادل یکدیگر assign می‌نمایم.

در واقع سه سطح دسترسی Department و Location و manager را هم در قسمت Application Role و هم در قسمت Enterprise Role ایجاد کرده‌ام و سپس در قسمت Enterprise Role در بخش Assigned Role معادل هر کدام را از Application Role انتخاب کرده و به آن متصل نموده‌ام. در نهایت سطح دسترسی صفحات را مشخص می‌نمایم.
صفحه main دارای سه دکمه برای پیمایش بین صفحات می‌باشد که این دکمه‌ها با توجه به سطح دسترسی کاربر وارد شده به نمایش گذاشته می‌شوند. به عنوان مثال کسی که دسترسی Location را نداشته باشد دکمه پیمایش به صفحه Location را مشاهده نخواهد کرد. برای انجام این موضوع از expression زیر در فیلد Rendered دکمه Location استفاده شده است.

#{securityContext.userInRole['Location']}

نکته: صفحه main نیز باید تحت ADF Security باشد برای اینکه بتوانید برای آن سطح دسترسی تعیین نمایید باید pageDef آن‌را ایجاد نمایید. برای این‌کار بر روی آن کلیک راست نمایید و Go to Page Definition را کلیک نمایید تا دیالوگ ایجاد page Def باز شود و کافیست Yes را کلیک نمایید. حال به ADF Policies بروید و برای آن دسترسی authentication Role را مشخص نمایید.

تبریک می‌گویم شما تمام مراحل را با موفقیت به اتمام رساندید و حال برنامه خود را تست نمایید.

امیدوارم این مطلب برایتان مفید باشد
با تشکر

فایل PDF

فایل مثال

اسکریپت ایجاد جداول مورد نیاز

خواندن بیشتر
royal visionاعتبارسنجی کاربر با استفاده از جدول پایگاه داده

اضافه نمودن رکورد در آخر جدول

زمان اضافه شدن رکورد رکورد جدید در ابتدا ی رکوردها قرار میگیرد با کد زیر که در حقیقت Override شده متد InsertRow در داخل ViewObjectImpl میباشد رکورد جدید در آخر قرار میگیرد

/**<br />
* Insert new Rows at the end of RowSet.<br />
* @param row<br />
*/<br />
@Override<br />
public void insertRow(Row row) {<br />
//go to the end of Rowset if it has rows<br />
Row lastRow = this.last();<br />
if (lastRow != null) {<br />
//insert new row at the end and make it current<br />
int indx = this.getRangeIndexOf(lastRow) + 1;<br />
this.insertRowAtRangeIndex(indx, row);<br />
this.setCurrentRow(row);<br />
} else { // empty Rowset<br />
super.insertRow(row);<br />
}<br />
}<br />
خواندن بیشتر
royal visionاضافه نمودن رکورد در آخر جدول

نحوه ساخت و استفاده از ADF Library

فریم‌ورک ADF به منظور بالا بردن قابلیت استفاده مجدد (Reuseability ) امکاناتی را فراهم کرده است. استفاده مجدد از صفات یک فیلد در viewObject گرفته تا کل یک پروژه قابل گسترش می‌باشد. من در این مقاله سعی دارم تا نحوه استفاده از یک BC Model را به صورت یک library در برنامه‌های ADF نشان دهم تا شما یاد بگیرید که چگونه می‌توانید مدل آماده نمایید و آن‌را در برنامه‌های مختلف مورد استفاده قراردهید. برای نشان دادن این موضوع از مثال لیست دپارتمان‌ها در HR استفاده می‌کنم. برای این مثال دو برنامه کاملا جدا ایجاد می‌نمایم. در یکی از آن‌ها پروژه مدل را ایجاد می‌کنم و دریکی دیگر viewController را ایجاد می‌نمایم. در نهایت پس از آماده کردن مدل، آن را به صورت یک library در‌ آورده و به viewOntroller اضافه می‌نمایم و با استفاده از آن صفحه لیست دپارتمان‌ها را ایجاد می‌نمایم. در این مثال مشاهده خواهید کرد که یک مدل را کاملا جدا ایجاد خواهیم کرد و سپس می‌توانیم آن را در هر برنامه‌ای که نیازمان بود استفاده نماییم.

شرح:
ابتدا یک برنامه با نام GeneralModel ایجاد نمایید. دقت کنید نوع برنامه را برابر Generic Application قرار دهید. همانند تصویر زیر

سپس دکمه Next راکلیک نموده و اسم پروژه را برابر myModel قرار دهید و از قسمت Project Technologies تکنولوژی ADF Business Components را انتخاب و به سمت راست انتقال دهید(همانند تصویر زیر). دقت نمایید که با انتقال آن جاوا نیز به صورت خودکار انتقال می‌یابد. تغییری ایجاد نکنید و آن را به همین صورت رها نمایید.

در پایان دکمه Next را کلیک کرده و در صفحه بعد فقط Default Package را تعیین و دکمه Finish را کلیک نمایید. تا اینجا برنامه مربوط به مدل را ایجاد کردیم همین فرایند را برای ساخت برنامه مربوط به viewController تکرار می‌نماییم با این تفاوت که برای Project Technologies باید تکنولوژی‌های ADF Faces, ADF Page Flow, HTML, Java , JSF, JSP and Servlet و XML را انتخاب نمایید. همانند تصویر

به منظور جلوگیری از طولانی شدن این مقاله نحوه آماده سازی مدل دپارتمان از قبیل Entity Object , View Object و Application Module تشریح نخواهد شد و فرض بر این است که این مراحل را خودتان انجام خواهید داد.

پس از آماده‌سازی مدل حال نوبت به این میرسد که این مدل را به صورت یک ADF Library آماده نماییم تا بتوانیم از آن در ViewCOntroller استفاده نماییم. برای این کار بر روی پروژه myModel راست کلیک نموده و Project Properties را انتخاب نمایید. از لیست سمت چپ Deployment را انتخاب نمایید و سپس دکمه New را از سمت راست کلیک نمایید. در کادر به نمایش در‌ آمده از لیست انتخابی ADF Library JAR File را انتخاب کنید و نام آن را نیز به myModelLib تغییر دهید(همانند تصویر زیر). سپس تمام مراحل را Ok نمایید و تغییری ایجاد نکنید.

حال تنظیمات مربوط به ایجادADF Library شما آماده شده است. JAR فایل مربوط به مدل در پوشه‌ای به نام Deploy در درون پروژه قرار می‌گیزد. می‌توانید در سیستم فایل به آن دسترسی داشته باشید البته پس از اینکه پروژه را Deploy کردید.
برای Deploy پروژه بر روی myModel در پلت Projects راست کلیک نمایید در منوی Deploy بر روی myModelLib کلیک نمایید. سپس دکمه Next و پس از آن Finish را کلیک نمایید.
حال JAR فایل در سیستم فایل شما ایجاد شده است و شما می‌توانید در خارج از JDeveloper به آن دسترسی داشته باشید.

خوب تا اینجا با موفقیت تمام، ADF Library را ایجاد کردیم . نوبت به آن رسیده تا آن را در ViewController که در ابتدای مقاله ایجاد کرده ایم وارد نماییم و صفحه لیست دپارتمان‌ها را بسازیم. در پلت Resources همانند تصویر زیر عمل نمایید. اگر پلت Resources را ملاحظه نمی‌نمایید از منوی View به آن دسترسی خواهید داشت.

در دیالوگ باز شده نامی دلخواه وارد نمایید و در قسمت Directory Path آدرس مربوط به پوشه Deploy مربوط به پروژه myModel را مشخص نمایید و Ok کنید.

حال مدل ما به عنوان یک Resource جدید به JDeveloper اضافه گردیده است و ما می‌توانیم در هر پروژه ای نیاز داشتیم از آن استفاده نماییم.
پروژه ViewController را باز نمایید در JDeveloper و سپس در پلت Resources فایل myModelLib.jar را انتخاب نمایید و بر روی آن راست کلیک نموده و add to project را انتخاب نمایید و دردیالوگ باز شده add Library را کلیک نمایید تا به پروژه مذکور اضافه گردد.

پس از اتمام مراحل بالا شما دیگر به مدل در قسمت Data Controles دسترسی دارید و می‌توانید صفحه لیست دپارتمان‌ها را ایجاد کنید.
نکته: قبل از اجرا برنامه باید رمز عبور Database Connection را در پلت application Resources وارد نمایید. چرا که این Connection از مدل وارد برنامه شده و رمزعبور آن خالی می‌باشد و باید مجددا وارد گردد.

تبریک می‌گویم شما تمام مراحل را با موفقیت پست سر گذاشتید. برنامه را تست کنید.

امیدوارم این مطلب براتون مفید باشه

فایل PDF

فایل مثال

فایل پیوست:
config maven 06 - نحوه ساخت و استفاده از ADF Library
bd9e5db58c7f88cb6cef5685c35d2e42f6336b58 702x336 - نحوه ساخت و استفاده از ADF Library
122359 - نحوه ساخت و استفاده از ADF Library
GUID 05E7CE77 EAEB 4562 950C DB123C8C4416 default - نحوه ساخت و استفاده از ADF Library
GUID 3EDB7803 64B6 4F75 B04C F41F416E40B2 default - نحوه ساخت و استفاده از ADF Library
gs install modellibs - نحوه ساخت و استفاده از ADF Library
خواندن بیشتر
royal visionنحوه ساخت و استفاده از ADF Library

نحوه ایجادEntity بر پایه وب سرویس

در این مقاله قصد توضیح این مورد را دارم که چگونه Entityهایی از وب سرویس بسازیم که بتوانیم به راحتی از آنها در مدل خود استفاده نماییم. در این مقاله مراحل کامل ایجاد یک وب سرویس و یک مدل مبتنی بر وب سرویس را آموزش خواهم داد.

شرح
در این آموزش ما نیاز به ایجاد دو Application داریم. یک Application که همان وب سرویس ما می باشد وظیفه ارايه عملیات‌های CRUD کارمندان را بر عهده دارد. Application دوم در واقع مصرف کننده وب سرویس می باشد که Entityهای مبتنی بر وب سرویس ما درون آن قرار دارد. ما برای این مثال از پایگاه داده HR موجود در Oracle XE استفاده می نمایم و در برنامه مصرف کننده وب سرویس ترکیبی از مدل مبتنی بر جداول پایگاه داده و وب سرویس استفاده می نماییم و صفحه ای طراحی می نماییم که لیست دپارتمان‌ها و کارمندان هر دپارتمان را نمایش می دهد که لیست کارمندان از طریق وب سرویس دریافت شده است.

برنامه اول: ایجاد وب سرویس با استفاده از ADF BC
ابتدا یک برنامه که شامل یک پروژه مدل می باشد ایجاد میکنیم. سپس به صورت معمول Entity و View جدول کارمندان را ایجاد می نماییم و آنرا به Application Module اضافه می نماییم و آنرا تست می نماییم تا از صحت کارکرد آن مطمئن شویم. ( به منظور جلوگیری از طولانی شدن این مقاله از توضیح این مراحل خودداری شده است)
حال باید آن را به صورت یک وب سرویس آماده نماییم تا در سرور Deploy نماییم. برای این کار بر روی Application Module کلیک نمایید و آنرا باز نمایید. سپس به بخش مربوط به Service Interface رفته و بر روی دکمه بعلاوه سبز رنگ کلیک نمایید تا ویزارد مربوط به ایجاد وب سرویس آغاز گردد.

برای نام Web Service مقدار EmployeeWS را وارد نمایید و دکمه Next را کلیک نمایید. در مرحله بعد نیز دکمه Next را کلیک نمایید. در مرحله سوم View کارمندان که ساخته شده است را ملاحظه خواهید نمود آنرا انتخاب نمایید و آن را با استفاده از دکمه ای که در کنار آن ملاحظه می نمایید به سمت راست منتقل نمایید. پس از این کار در زیر آن لیستی از عملیات هایی که می توان بر روی کارمندان انجام داد را مشاهده می نمایید که همه آنها را انتخاب نمایید.

پس از انجام مراحل بالا دکمه Next را کلیک نماید. آخرین مرحله به شما خلاصه ای از مراحل گذشته نمایش داده می شود و با کلیک بر روی دکمه Finish تنظیمات و فایل های مربوط به وب سرویس ایجاد می شود.
پس از ایجاد در زیر Application Module پوشه ای با نام service Interface ایجاد می شود که درون آن فایل‌های مربوط به وب سرویس قرار دارد. بر روی فایل EmployeeWSImpl.java کلیک نمایید و Run را انتخاب نمایید تا وب سرویس بر روی weblogic قرار گیرد و آماده اجرا گردد. در صورتی که مشکلی پیش نیاید و وب سرویس به درستی اجرا گردد در کنسول لاگ یک لینک در اختیار شما قرار خواهد گرفت که با کلیک بر روی آن صفحه ای برای شما باز می شود که این امکان را به شما خواهد داد تا سرویس خود را تست نمایید و از صحت کارکرد آن خیالتان آسوده گردد. (همانند تصویر زیر)

آدرس دسترسی به فایل WSDL سرویس شما برابر خواهد بود

[left]http://localhost:7101/webservice-employeeasws-context-root/employeews?wsdl[/left]

می توانید برای اطمینان از صحت آدرس خود آنرا در browser تست نمایید.
تا اینجا برنامه ای که قرار است لیست کارمندان را به صورت وب سرویس در اختیارتان قرار دهد آماده شده است و نوبت آن رسیده است تا برنامه ی اصلی که قرار است وب سرویس را مصرف نماید آماده نمایید.

برنامه دوم: ایجاد یک مصرف کننده وب سرویس 
همانند تمام برنامه های Fusion Web Application که تا به امروز ایجاد کردیده اید یک برنامه جدید در Jdeveloper ایجاد نمایید. پس از آن Entity و view مربوط به دپارتمان‌ها را از روی جدول Department بسازید. سپس مجدد بر روی پروژه مدل خود راست کلیک نمایید و گزینه New Entity Object را انتخاب نمایید. در ویزاردی که برای ایجاد Entity باز میشود در پایین آن گزینه Service Interface را انتخاب نمایید و آدرس زیر را که مربوط به وب سرویس کارمندان می باشد درون آن قرار دهید.

[left]http://localhost:7101/webservice-employeeasws-context-root/employeews?wsdl[/left]
* دقت نمایید که آدرس را با توجه به سیستم خود تغییر دهید.

همانطور که در تصویر بالا ملاحظه می نمایید در صورت درست بودن آدرس و صحت اجرای وب سرویس نام EmployeeVO1 از وب سرویس استخراج شده و در قسمت Service View Instance نمایش داده می شود.
تا رسیدن به مرحله ۵ ویزارد، دکمه Next را کلیک نمایید و همه چیز را به صورت پیش فرض رها کنید. در مرحله ۵ گزینه Generate Default View Object را انتخاب نمایید تا View Object آن نیز ساخته شود. سپس دکمه Next را تا پایان ویزارد کلیک نمایید و در نهایت نیز Finish را کلیک کرده و منتظر باشید تا Jdeveloper بقیه کارها را برای شما انجام دهد.
حال یک View Link بین دپارتمان و کارمندان به صورت کاملا معمولی که تا به حال در سایر مدل ها می ساختید، ایجاد نمایید تا بتوانید حالت Master-Detail را برای دپارتمان و کارمندان داشته باشید. سپس یک Application Module با نام ConsumerModel ایجاد نماید و View Objectهای خود را به آن اضافه نمایید.
در ViewController یک صفحه ایجاد نمایید و دپارتمان و کارمندان مربوط به آن را به صفحه اضافه نمایید. به دلیل آن که این مراحل همانند همه برنامه های عادی که تا به حال ساخته اید، می باشد از توضیح آنها خودداری می نمایم.

در پایان قبل از اینکه بخواهید برنامه را اجرا نمایید باید تنظیمات زیر را در فایل connection.xml پروژه اضافه نمایید. این فایل در قسمت Application Resources در زیر Descriptors و ADF META-INF قابل دسترسی می باشد.

EmployeeWSBean#com.my.common.serviceinterface.EmployeeWS</p>
<p>weblogic.jndi.WLInitialContextFactory</p>
<p>t3://localhost:7101</p>
<p>admin</p>
<p>admin123</p>
<p>EmployeeWS.xsd</p>
<p>com/my/common/serviceinterface/</p>

فقط اطلاعات مربوط به قسمتهای jndiProviderURL ، jndiSecurityPrincipal و jndiSecurityCredentials اطلاعات مربوط به سیستم خودتان را وارد نماید. JndiSecurityPrincipal و jndiSecurityCredentials منظور همان username و password مربوط به weblogic می باشد. در ضمن اگر شما از packaging خود را نیز تغییر داده اید و همانند com.my که من استفاده کرده ام نمی باشد باید تغییرات لازم را در کدهای بالا بدهید تا با خطا روبرو نگردید.

سپس به پروژه وب سرویس خود بروید و بر روی مدل آن راست کلیک نمایید و Project Properties را انتخاب نمایید. در منوی سمت چپ به قسمت Deployment بروید و از قسمت سمت راست این منو گزینه New را انتخاب نمایید. در پنجره باز شده Archive Type را برابر با Business Components Service Interface انتخاب نمایید و مقدار bcEmployeeWI را برای نام آن وارد نمایید و در نهایت همه پنجره ها را ok نمایید. مجدد بر روی مدل راست کلیک نمایید و در منوی Deploy بر روی bcEmployeeWI کلیک نمایید تا فایل‌های مربوط ایجاد گردد. این عمل شما باعث شد تا دو Jar فایل با نام های bcEmployeeWI_Common.jar و bcEmployeeWI_MiddleTier.jar در پوشهDeploy در مسیر مدل پروژه WebService ایجاد گردد.

حال شما بایدapplication مربوط به مصرف کننده وب سرویس (WSConsumer)را مجددا باز نمایید و فایل bcEmployeeWI_Common.jar را که در مرحله قبل در پروژه WebService ساخته اید را به عنوان یک library به آن اضافه نماید. برای این کار بر روی پروژه مدل برنامه WSConsumer راست کلیک نمایید منوی project properties را انتخاب نمایید. در منوی سمت چپ Libraries and Classpath را انتخاب نمایید و دکمه Add jar/Directory را کلیک نمایید سپس در مسیر پروژه WebService وارد پوشه پروژه مدل و سپس Deploy شوید و فایل bcEmployeeWI_Common.jar را انتخاب نمایید و همه پنجره ها را OK نمایید.

نکته آخر اینکه این پروژه ها را باید در سرور SOA-Enabled اجرا نمایید تا با خطایی روبرو نگردید. برای نحوه راه اندازی اینگونه سرورها می توانید به مستندات مربوط به Oracle SOA Suite 11g مراجعه نمایید.

تبریک می گویم شما تمام مراحل مورد نیاز را با موفقیت پشت سر گذاشتید و کافیست برنامه خود را تست نمایید

این مثال با استفاده از JDeveloper 11.1.1.5 و SOA Suite 11.1.1.5 نوشته و تست شده است.

امیدوارم که این مطلب برایتان مفید بوده باشد.

فایل PDF

فایل مثال

فایل پیوست:
13 1 - نحوه ایجادEntity بر پایه وب سرویس
t020104 - نحوه ایجادEntity بر پایه وب سرویس
webservices calling db - نحوه ایجادEntity بر پایه وب سرویس
ws editservinterface - نحوه ایجادEntity بر پایه وب سرویس
1 - نحوه ایجادEntity بر پایه وب سرویس
2e126 adfentityobject - نحوه ایجادEntity بر پایه وب سرویس
خواندن بیشتر
royal visionنحوه ایجادEntity بر پایه وب سرویس