« November 2007 | صفحه اصلی | January 2008 »
ساخت firstcup Enterprise ApplicationDecember 31, 2007 02:17 PM
بحث را با ساخت firstcup Enterprise Application پي مي گيريم. اين Enterprise Application همانگونه كه در تصوير نيز مشخص است شامل يك Web Application و يك EJB است.
ساخت پروژه
1. از منوي فايل New Project را انتخاب كنيد.
2. از Category ها گزينه Enterprise را انتخاب كنيد.
3. از پروژه ها Enterprise Application را انتخاب نماييد.
4. Next را كليك كنيد.
5. نام پروژه را firstcup قرار دهيد.
6. Location پروژه را مسير فولدر myexample كه قبلا ساخته ايد قرار دهيد.
7. بقيه تنظيمات موجود را تغيير ندهيد و روي Finish كليك كنيد.
تنظيم Context Root
اين مرحله براي فراهم نمودن امكان شناسايي WebApp در J2EE server است.
1. از قسمت پروژه ها firstcup را بازكنيد
2. روي گزينه application.xml از Configuration Files دبل كليك نماييد.
3. در اين فايل عنصر context-root را بيابيد.
4. مقدار موجود را از firstcup_war به firstcup تغيير دهيد و فايل را ذخيره كنيد.
5. در قسمت قسمت پروژه ها، روي firstcup-war كليك راست كنيد و properties را انتخاب نماييد.
6. از category ها، Run را انتخاب كنيد.
7. مسير Context را به firstcup/ تغيير دهيد و OK را كليك كنيد.
ساخت Enterprise Bean
اين Enterprise Bean يك Stateless session bean است. منظور اين است كه نيازي به تعامل با client و نگهداري state جاري ندارد. به عبارت ديگر درخواست هاي ارسالي به اين Bean هيچ وابستگي به حالت قبلي و بعدي client ندارد.
اين Enterprise Bean شامل دو كلاس است : يكي DukesBirthdayBean و ديگري DukesBirthdayRemote .
ساخت كلاس DukesBirthdayBean
1. از قسمت پروژه ها firstcup-ejb را انتخاب كنيد.
2. از منوي فايل گزينه New File را انتخاب نماييد.
3. از category ها Enterprise را انتخاب نماييد.
4. از قسمت File Types گزينه Session Bean را انتخاب نماييد.
5. Next را کليک کنيد.
6. نام EJB را DukesBirthdayBean قرار دهيد.
7. نام Package را com.sun.firstcup.ejb وارد نماييد.
8. Session Type را مساوي stateless قرار دهيد.
9. تيک فيلد Local را برداريد و Remote را تيک بزنيد.
10. Finish را کليک کنيد.
اصلاح کدهاي DukesBirthdayBean.java
اين کلاس حاوي کدهايي است که تفاوت سال سن Duke و کاربر را محاسبه مي نمايد.
1. ابتدا Constructor پيش فرض را که NetBeans ايجاد کرده، حذف کنيد.
2. در درون بدنه کلاس، کدهاي زير را کپي نماييد.
ساخت پروژه
1. از منوي فايل New Project را انتخاب كنيد.
2. از Category ها گزينه Enterprise را انتخاب كنيد.
3. از پروژه ها Enterprise Application را انتخاب نماييد.
4. Next را كليك كنيد.
5. نام پروژه را firstcup قرار دهيد.
6. Location پروژه را مسير فولدر myexample كه قبلا ساخته ايد قرار دهيد.
7. بقيه تنظيمات موجود را تغيير ندهيد و روي Finish كليك كنيد.
تنظيم Context Root
اين مرحله براي فراهم نمودن امكان شناسايي WebApp در J2EE server است.
1. از قسمت پروژه ها firstcup را بازكنيد
2. روي گزينه application.xml از Configuration Files دبل كليك نماييد.
3. در اين فايل عنصر context-root را بيابيد.
4. مقدار موجود را از firstcup_war به firstcup تغيير دهيد و فايل را ذخيره كنيد.
5. در قسمت قسمت پروژه ها، روي firstcup-war كليك راست كنيد و properties را انتخاب نماييد.
6. از category ها، Run را انتخاب كنيد.
7. مسير Context را به firstcup/ تغيير دهيد و OK را كليك كنيد.
ساخت Enterprise Bean
اين Enterprise Bean يك Stateless session bean است. منظور اين است كه نيازي به تعامل با client و نگهداري state جاري ندارد. به عبارت ديگر درخواست هاي ارسالي به اين Bean هيچ وابستگي به حالت قبلي و بعدي client ندارد.
اين Enterprise Bean شامل دو كلاس است : يكي DukesBirthdayBean و ديگري DukesBirthdayRemote .
ساخت كلاس DukesBirthdayBean
1. از قسمت پروژه ها firstcup-ejb را انتخاب كنيد.
2. از منوي فايل گزينه New File را انتخاب نماييد.
3. از category ها Enterprise را انتخاب نماييد.
4. از قسمت File Types گزينه Session Bean را انتخاب نماييد.
5. Next را کليک کنيد.
6. نام EJB را DukesBirthdayBean قرار دهيد.
7. نام Package را com.sun.firstcup.ejb وارد نماييد.
8. Session Type را مساوي stateless قرار دهيد.
9. تيک فيلد Local را برداريد و Remote را تيک بزنيد.
10. Finish را کليک کنيد.
اصلاح کدهاي DukesBirthdayBean.java
اين کلاس حاوي کدهايي است که تفاوت سال سن Duke و کاربر را محاسبه مي نمايد.
1. ابتدا Constructor پيش فرض را که NetBeans ايجاد کرده، حذف کنيد.
2. در درون بدنه کلاس، کدهاي زير را کپي نماييد.
private static Logger logger = Logger.getLogger("com.sun.firstcup.ejb.DukesBirthdayBean");
public int getAgeDifference(Date date){
int ageDifference;
Calendar theirBirthday = new GregorianCalendar();
Calendar dukesBirthdaye = new GregorianCalendar(1995,Calendar.MAY,23);
// Set the Calendar object to the passed in Date
theirBirthday.setTime(date);
// Subtract the user's age from Duke's age
ageDifference = dukesBirthdaye.get(Calendar.YEAR) - theirBirthday.get(Calendar.YEAR);
logger.info("Raw ageDifference is: "+ageDifference);
// Check to see if Duke's birthday occurs before the user's. If so,
// subtract one from the age difference
if (dukesBirthdaye.before(theirBirthday) && (ageDifference > 0)){
ageDifference--;
}
logger.info("Final ageDifference is: "+ageDifference);
return ageDifference;
}
public int getAgeDifference(Date date){
int ageDifference;
Calendar theirBirthday = new GregorianCalendar();
Calendar dukesBirthdaye = new GregorianCalendar(1995,Calendar.MAY,23);
// Set the Calendar object to the passed in Date
theirBirthday.setTime(date);
// Subtract the user's age from Duke's age
ageDifference = dukesBirthdaye.get(Calendar.YEAR) - theirBirthday.get(Calendar.YEAR);
logger.info("Raw ageDifference is: "+ageDifference);
// Check to see if Duke's birthday occurs before the user's. If so,
// subtract one from the age difference
if (dukesBirthdaye.before(theirBirthday) && (ageDifference > 0)){
ageDifference--;
}
logger.info("Final ageDifference is: "+ageDifference);
return ageDifference;
}
3. روي اديتور کليک راست کنيد و Fix Imports را انتخاب نماييد.
4. java.util.date را براي کلاس date و java.util.logging.logger را براي کلاسlogger انتخاب نماييد و OK را کليک کنيد.
5. روي بدنه متد getAgeDifference کليک راست کنيد و از منوي EJB Methods گزينه Add to Remote Interface را انتخاب کنيد.
6. فايل را ذخيره کنيد.
اصلاح کد DukesBirthdayRemote.java
اين كلاس بعنوان رابط كلاس DukesBirthdayBean عمل مي كند و اجزاي Web Tier براي دسترسي به DukesBirthdayBean از DukesBirthdayRemote استفاده خواهند كرد.
اين كلاس توسط NetBeans ايجاد مي شود. شما فقط بايد تغييرات لازم را در آن اعمال كنيد. بدين ترتيب:
1. ماژول firstcup-ejb را از قسمت پروژه ها باز کنيد.
2. روي DukesBirthdayRemote.java در پکيچ com.sun.firstcup.ejb دبل کليک کنيد.
3. پس از باز شدن فايل ، روي اديتور کليک راست کرده و گزينه Fix Imports را انتخاب کنيد.
4. براي کلاس Date گزينه java.util.Date را انتخاب کنيد.
5. در صورتي که دستور throws در تعريف متد وجود داشت، آن را حذف نماييد.
6. فايل را ذخيره کنيد.
با ساخت EJB پياده سازي Business Tier از معماري پايان يافت.
در ادامه به پياده سازي ماژول هاي Web Tier خواهيم پرداخت.
4. java.util.date را براي کلاس date و java.util.logging.logger را براي کلاسlogger انتخاب نماييد و OK را کليک کنيد.
5. روي بدنه متد getAgeDifference کليک راست کنيد و از منوي EJB Methods گزينه Add to Remote Interface را انتخاب کنيد.
6. فايل را ذخيره کنيد.
اصلاح کد DukesBirthdayRemote.java
اين كلاس بعنوان رابط كلاس DukesBirthdayBean عمل مي كند و اجزاي Web Tier براي دسترسي به DukesBirthdayBean از DukesBirthdayRemote استفاده خواهند كرد.
اين كلاس توسط NetBeans ايجاد مي شود. شما فقط بايد تغييرات لازم را در آن اعمال كنيد. بدين ترتيب:
1. ماژول firstcup-ejb را از قسمت پروژه ها باز کنيد.
2. روي DukesBirthdayRemote.java در پکيچ com.sun.firstcup.ejb دبل کليک کنيد.
3. پس از باز شدن فايل ، روي اديتور کليک راست کرده و گزينه Fix Imports را انتخاب کنيد.
4. براي کلاس Date گزينه java.util.Date را انتخاب کنيد.
5. در صورتي که دستور throws در تعريف متد وجود داشت، آن را حذف نماييد.
6. فايل را ذخيره کنيد.
با ساخت EJB پياده سازي Business Tier از معماري پايان يافت.
در ادامه به پياده سازي ماژول هاي Web Tier خواهيم پرداخت.
mahyar_ev | 02:17 PM | Comment(s)(0)
ساخت وب سرويس DukesAgeDecember 30, 2007 03:23 PM
پياده سازي Application معرفي شده در مطلب قبل را آغاز مي كنيم.
ايجاد يک فولدر براي پروژه
ابتدا براي قرار دادن كليه فايل هاي مربوط به پروژه يك فولدر خاص ايجاد مي نماييم. نام اين فولدر را myexample بگذاريد.
ايجاد وب سرويس
خروجي اين وب سرويس، برگرداندن سال سن Duke ، است. اين وب سرويس هيچ پارامتر ورودي ندارد.
در اين مرحله يك پروژه براي اين وب سرويس ايجاد مي كنيم. سپس يك كلاس جاوا ساده مي سازيم و تغييرات لازم را براي تبديل آن به يك وب سرويس اعمال مي كنيم و كدهاي لازم را مي نويسيم.
مراحل گام به گام ساخت آن بدين شرح است:
تعريف پروژه
1. در NetBeans از منوي File منوي New Project را انتخاب نماييد.
2. در category هاي موجود web را انتخاب کنيد.
3. از انواع پروژه ها Web Application را انتخاب نماييد.
4. Next را کليک کنيد.
5. نام پروژه را firstcup-dukes-age قرار دهيد.
6. Location پروژه را همان فولدر myexample که ساخته ايد قرار دهيد.
7. App Server را Java System Application Server انتخاب کنيد.
8. Java EE version را Java EE 5 قرار دهيد.
9. Finish را کليک کنيد. اکنون بايد پروژه شما ساخته شده باشد و در پنل Projects در سمت چپ NetBeans قابل رويت باشد.
10. در قسمت web pages از منوي درختي پروژه فايل index.jsp را بيابيد. روي آن کليک راست کنيد و سپس با استفاده از گزينه delete آن را حذف کنيد.
ساخت کلاس DukesAge
1. پروژه firstcup-dukes-age را در NetBeans انتخاب کنيد.
2. از منوي File گزينه New File را انتخاب کنيد.
3. از category ها Java Classes را انتخاب کنيد.
4. از انواع فايل نيز Java Class را انتخاب کنيد.
5. Next را کليک کنيد.
6. نام کلاس را DukesAge قرار دهيد.
7. در قسمت Package عبارت com.sun.firstcup.webservice را تايپ کنيد.
8. Finish را کليک کنيد. با اين کار فايل DukesAge.java در همان Package مشخص شده ايجاد مي شود و براي ويرايش، در صفحه باز مي شود.
تعريف کلاس DukesAge بعنوان يک وب سرويس
براي اين کار عبارت WebService@ را درست قبل از جايي که کلاس، تعريف شده قرار دهيد. بدين صورت:
ايجاد يک فولدر براي پروژه
ابتدا براي قرار دادن كليه فايل هاي مربوط به پروژه يك فولدر خاص ايجاد مي نماييم. نام اين فولدر را myexample بگذاريد.
ايجاد وب سرويس
خروجي اين وب سرويس، برگرداندن سال سن Duke ، است. اين وب سرويس هيچ پارامتر ورودي ندارد.
در اين مرحله يك پروژه براي اين وب سرويس ايجاد مي كنيم. سپس يك كلاس جاوا ساده مي سازيم و تغييرات لازم را براي تبديل آن به يك وب سرويس اعمال مي كنيم و كدهاي لازم را مي نويسيم.
مراحل گام به گام ساخت آن بدين شرح است:
تعريف پروژه
1. در NetBeans از منوي File منوي New Project را انتخاب نماييد.
2. در category هاي موجود web را انتخاب کنيد.
3. از انواع پروژه ها Web Application را انتخاب نماييد.
4. Next را کليک کنيد.
5. نام پروژه را firstcup-dukes-age قرار دهيد.
6. Location پروژه را همان فولدر myexample که ساخته ايد قرار دهيد.
7. App Server را Java System Application Server انتخاب کنيد.
8. Java EE version را Java EE 5 قرار دهيد.
9. Finish را کليک کنيد. اکنون بايد پروژه شما ساخته شده باشد و در پنل Projects در سمت چپ NetBeans قابل رويت باشد.
10. در قسمت web pages از منوي درختي پروژه فايل index.jsp را بيابيد. روي آن کليک راست کنيد و سپس با استفاده از گزينه delete آن را حذف کنيد.
ساخت کلاس DukesAge
1. پروژه firstcup-dukes-age را در NetBeans انتخاب کنيد.
2. از منوي File گزينه New File را انتخاب کنيد.
3. از category ها Java Classes را انتخاب کنيد.
4. از انواع فايل نيز Java Class را انتخاب کنيد.
5. Next را کليک کنيد.
6. نام کلاس را DukesAge قرار دهيد.
7. در قسمت Package عبارت com.sun.firstcup.webservice را تايپ کنيد.
8. Finish را کليک کنيد. با اين کار فايل DukesAge.java در همان Package مشخص شده ايجاد مي شود و براي ويرايش، در صفحه باز مي شود.
تعريف کلاس DukesAge بعنوان يک وب سرويس
براي اين کار عبارت WebService@ را درست قبل از جايي که کلاس، تعريف شده قرار دهيد. بدين صورت:
@WebService
public class DukesAge {
…
}
public class DukesAge {
…
}
حذف Constructor پيش ساخته
از آنجا که وب سرويس نياز به constructor ندارد. آن را از کلاس DukesAge حذف کنيد.
افزودن متد getDukesAge
متدي به نام getDukesAge با خروجي int در داخل کلاس، ايجاد کنيد و قبل از آن نيز عبارت WebMethod@ را قرار دهيد. بدين صورت:
از آنجا که وب سرويس نياز به constructor ندارد. آن را از کلاس DukesAge حذف کنيد.
افزودن متد getDukesAge
متدي به نام getDukesAge با خروجي int در داخل کلاس، ايجاد کنيد و قبل از آن نيز عبارت WebMethod@ را قرار دهيد. بدين صورت:
@WebMethod
public int getDukesAge() {
}
public int getDukesAge() {
}
سپس دستورات زير را در بدنه متد کپي کنيد.
Calendar dukesBirthday = new GregorianCalendar(1995,Calendar.MAY,23);
Calendar now = Calendar.getInstance();
int dukesAge = now.get(Calendar.YEAR) - dukesBirthday.get(Calendar.YEAR);
dukesBirthday.add(Calendar.YEAR,dukesAge);
if (now.before(dukesBirthday)){
dukesAge--;
}
return dukesAge;
Calendar now = Calendar.getInstance();
int dukesAge = now.get(Calendar.YEAR) - dukesBirthday.get(Calendar.YEAR);
dukesBirthday.add(Calendar.YEAR,dukesAge);
if (now.before(dukesBirthday)){
dukesAge--;
}
return dukesAge;
رفع مشكل Import
1. روي اديتور كليك راست نماييد .
2. گزينه Fix Imports را انتخاب نماييد.
3. پكيج javax.jws.WebService را براي کلاس WebService انتخاب نماييد.
Build و Deploy نمودن وب سرويس
از پنل پروژه ها firstcup-dukes-age را انتخاب نموده و کليک راست کنيد. سپس گزينه Build Project را انتخاب نماييد. با اين کار پروژه در firstcup-dukes-age.war پکيج مي شود.
پس از پايان build مجددا كليك راست نماييد و اين بار گزينه Deploy Project را انتخاب كنيد.
1. روي اديتور كليك راست نماييد .
2. گزينه Fix Imports را انتخاب نماييد.
3. پكيج javax.jws.WebService را براي کلاس WebService انتخاب نماييد.
Build و Deploy نمودن وب سرويس
از پنل پروژه ها firstcup-dukes-age را انتخاب نموده و کليک راست کنيد. سپس گزينه Build Project را انتخاب نماييد. با اين کار پروژه در firstcup-dukes-age.war پکيج مي شود.
پس از پايان build مجددا كليك راست نماييد و اين بار گزينه Deploy Project را انتخاب كنيد.
mahyar_ev | 03:23 PM | Comment(s)(0)
اولين فنجانDecember 26, 2007 01:07 PM
همانگونه كه در مطالب قبلي نوشتم، قصد دارم كه يك Web Application را شروع كنم و روي جزئيات طراحي و پياده سازي اش متمركز شوم. بعنوان اولين پروژه، بهتر آن ديدم كه firstcup خود جاوا را براي اين كار انتخاب كنم كه خود sun آن را بعنوان اولين گام در نظر گرفته. در مطالب آتي طراحي و پياده سازي كليه ماژول ها را آنطور كه در مستندات firstcup ارائه شده در اينجا خواهم آورد. درخاتمه بحث هم به اميد خدا كل مطالب را يك جا بصورت يك فايل براي دانلود در اين وبلاگ خواهم گذاشت. پس علاقمندان جاوا با من همراه شويد. ضرر نمي كنيد.
نرم افزارهای مورد نیاز
براي پياده سازي و اجراي اين Application به نرم افزارهاي زير نياز خواهيد داشت.
• Java EE 5 SDK
• NetBeans IDE 5.5
دوستان خارج از ايران مي توانند آنها را از سايت sun دانلود نمايند. اما در مورد دوستان داخل ايران لينك هاي دانلود اين نرم افزارها را مي توانيد اينجا بيابيد البته متاسفانه لينك ارائه شده در اين آدرس هم توسط بعضي ISP ها فيلتر شده. درصورت فيلتر بودن ISP هاي ديگر را امتحان كنيد.
نكته: استفاده از هر IDE دیگری نیز که با Java EE 5 سازگار باشد امکان پذیر است. اما شرح مراحل کاری که در اینجا ارائه شده با توجه به امكانات NetBeans 5.5 است.
شرح كاركرد Application
نحوه كاركرد Application بدين صورت است كه وقتي شما آن را توسط Browser اجرا مي كنيد، در صفحه اي تاريخ ميلادي تولد شما دريافت مي شود. سپس Application تاريخ تولد شما را با تاريخ تولد Duke كه يك تاريخ مشخص ( 23 ماه مي 1995 ، تاريخي كه اولين نسخه دمو زبان جاوا عرضه عمومي شد) است مقايسه مي نمايد. درنهايت Application وضعيت سن شما را نسبت به Duke به عنوان پاسخ برمي گرداند. اينكه آيا شما بزرگتر، كوچكتر يا هم سن Duke هستيد.
معماری
این App شامل سه کامپوننت اصلی است:
• DukesAgeService : یک Web Service است و با JAX-WS پیاده می شود و سن Duke را محاسبه می نماید.
• DukesBirthdayBean : یک Enterprise bean است که تفاوت سن وارد شده توسط کاربر را از سن Duke محاسبه می کند.
• firstcup : یک WebApp که با JSF ساخته می شود. firstcup از DukeAgeService برای نمایش سن Duke استفاده می کند. همچنین تاریخ وارد شده توسط کاربر را می خواند. با استفاده از DukesBirthdayBean تعیین می کند که سن کدام بیشتر است. سپس تفاضل دو سن را برای کاربر نمایش می دهد.
این WebApp شامل فایل های زیر است:
• فایل greeting.jsp یک صفحه jsp است که کاربر می توان درآن تاریخ تولد خود را وارد کند.
• فایل response.jsp یک صفحه jsp است که پاسخ را به کاربر نشان مي دهد و اعلام مي كند که آیا سن او از Duke بیشتر است یا کمتر يا هم سن هستند.
• فایل DukesBDay.java که یک managed Bean است و مشخصه ها را تعریف می کند، سن جاری Duke را از Web Service می گیرد. همچنین تفاضل دو سن را از enterprise Bean دریافت میکند.
• فایل faces-config.xml برای configure نمودن بخش های مرتبط با JSF به کار می رود.
• فایل web.xml که Deployment Descriptor برنامه است و تنظیمات App برای نصب در آن ثبت می گردد.
Tier ها در این مثال
این مثال دارای
یک کامپوننت Web Tierيعني firstcup
دو کامپوننت Business Tier يعني DukeAgeService و DukesBirthdayBean
است.
Browser کاربر client Tier است. ضمنا این مثال EIS Tier ندارد.
Tier هاي اين Application را به همراه كليه فايل ها و كلاس هاي اصلي Application در شكل زير ملاحظه مي كنيد.
تصوير بزرگتر
در مطلب بعد پروژه را با پياده سازي وب سرويس DukesAge ادامه خواهم داد.
mahyar_ev | 01:07 PM | Comment(s)(0)
مشخصات Tier هاDecember 16, 2007 03:36 PM
Tired Applications:
WebApp معمولا شامل Client Tier و Middle Tier و Data Tier است. توجه JavaEE بر لايه مياني است.
از نظر منطقي نيز مي توان لايه هاي App را بدين صورت درنظر گرفت:
Client Tier: عبارت است از کاربري که به WebApp دسترسي مي يابد. تعريف مشخصات اين بخش از دسترس برنامه ساز خارج است.
Web Tier: عبارت است از کامپوننت هايي که ارتباط بين client را با Business tier برقرار مي کنند. وظايف اصلي آن عبارت است از:
• ايجاد محتواي ديناميک به فرمت هاي گوناگون (براي client هاي گوناگون)
• دريافت اطلاعات وارد شده توسط کاربر و برگرداندن نتايج توليد شده توسط Business Tier
• کنترل گشت و گذار client در صفحات
• مديريت وضعيت داده هاي session کاربر
• انجام برخي کارهاي پايه اي و نگهداري موقت برخي داده ها در JavaBean ها
تکنولوژي هايي که در لايه Web tier استفاده مي شوند عبارتند از
• Servlet
• JSP
• JSF يا JavaServer Faces
• JavaServer Pages Standard Tag Library
• JavaBeans Component
Business Tier: اين لايه شامل کامپوننت هايي است که Business logic را پياده مي کنند. منظور از Business logic کدهايي است که امکان استفاده از توابع و کارهاي خاص حوزه کاري مربوطه را فراهم مي کنند. در يک App که از طراحي خوبي برخوردار است، بايد توابع و کارکردهاي اصلي در اين لايه پياده شوند.
تکنولوژي هايي که در اين لايه استفاده مي شوند:
• Enterprise JavaBeans components
• JAX-WS web service endpoints
• Java Persistence API entities
Enterprise Information Systems Tier يا EIS:
اين لايه شامل database server ها، سيستم هاي resource planning و کليه منابع داده اي است. معمولا اين منابع روي کامپيوترهايي غير از سرور JavaEE نصب هستند. اتصال به آنها توسط کامپوننت هاي Business tier انجام مي شود.
در اين لايه از تکنولوژي هاي زير استفاده مي شود:
• JDBC يا Java Database Connectivity API
• Java Persistence API
• J2EE Connector Architecture
• Java Transaction API يا JTA
منبع: FirstCup
WebApp معمولا شامل Client Tier و Middle Tier و Data Tier است. توجه JavaEE بر لايه مياني است.
از نظر منطقي نيز مي توان لايه هاي App را بدين صورت درنظر گرفت:
Client Tier: عبارت است از کاربري که به WebApp دسترسي مي يابد. تعريف مشخصات اين بخش از دسترس برنامه ساز خارج است.
Web Tier: عبارت است از کامپوننت هايي که ارتباط بين client را با Business tier برقرار مي کنند. وظايف اصلي آن عبارت است از:
• ايجاد محتواي ديناميک به فرمت هاي گوناگون (براي client هاي گوناگون)
• دريافت اطلاعات وارد شده توسط کاربر و برگرداندن نتايج توليد شده توسط Business Tier
• کنترل گشت و گذار client در صفحات
• مديريت وضعيت داده هاي session کاربر
• انجام برخي کارهاي پايه اي و نگهداري موقت برخي داده ها در JavaBean ها
تکنولوژي هايي که در لايه Web tier استفاده مي شوند عبارتند از
• Servlet
• JSP
• JSF يا JavaServer Faces
• JavaServer Pages Standard Tag Library
• JavaBeans Component
Business Tier: اين لايه شامل کامپوننت هايي است که Business logic را پياده مي کنند. منظور از Business logic کدهايي است که امکان استفاده از توابع و کارهاي خاص حوزه کاري مربوطه را فراهم مي کنند. در يک App که از طراحي خوبي برخوردار است، بايد توابع و کارکردهاي اصلي در اين لايه پياده شوند.
تکنولوژي هايي که در اين لايه استفاده مي شوند:
• Enterprise JavaBeans components
• JAX-WS web service endpoints
• Java Persistence API entities
Enterprise Information Systems Tier يا EIS:
اين لايه شامل database server ها، سيستم هاي resource planning و کليه منابع داده اي است. معمولا اين منابع روي کامپيوترهايي غير از سرور JavaEE نصب هستند. اتصال به آنها توسط کامپوننت هاي Business tier انجام مي شود.
در اين لايه از تکنولوژي هاي زير استفاده مي شود:
• JDBC يا Java Database Connectivity API
• Java Persistence API
• J2EE Connector Architecture
• Java Transaction API يا JTA
منبع: FirstCup
mahyar_ev | 03:36 PM | Comment(s)(2)
JavaEE Web Applicationصحبت را با نگاهي به مفهوم Web Application در JavaEE ادامه مي دهم.
Web Application چيست؟
يکي از تعاريف Web Application مي گويد که Web Application نرم افزاري است که تحت وب مورد دستيابي قرار مي گيرد. يکي از دلايل عموميت يافتن Web Application ها اين است که از همه جا قابل دسترسي است و دسترسي به آن نياز به نصب نرم افزارخاصي روي client ندارد.
اما Sun، يک Web Application را بعنوان يک Web Server يا Application Server پيشرفته تعريف مي کند و به دو گونه، تقسيم مي کند.:
• Presentation-oriented: اين نوع WebApp صفحات وبي ايجاد مي کند که امکان تعامل با کاربر را فراهم مي سازند. اين صفحات مي تواند انواع markup language ها همچون HTML و XML را دربر مي گيرد. همچنين محتواي آنها بصورت ديناميک، با توجه به درخواست کاربر توليد مي شوند.
• Service-oriented: اين نوع WebApp امکان استفاده از Web Service را فراهم مي کنند. اغلب Presentation-oriented App ها بعنوان client براي Service-oriented App ها هستند.
در Java 2 platform توليد محتواي ديناميک با صفحات jsp يا Servlet ها انجام مي شود که به Web Component معروفند.
Servlet ها کلاس هاي ايجاد شده به زبان جاوا هستند که بصورت ديناميک درخواست ها را پردازش و پاسخ ها را توليد مي کنند. صفحات jsp فايل هاي متني هستند که بعنوان servlet عمل مي کنند اما رفتار آنها در توليد محتواي ديناميک قابل درک تر است. اگرچه jsp و servlet به جاي يکديگر قابل استفاده هستند ، اما هر کدام نقطه قوت و ضعف خاص خود را دارند. Servlet ها بيشتر براي ايجاد Service-oriented App ها ، همچنين توابع کنترلي Presentation-oriented App مناسب هستند. اما jsp ها بيشتر براي توليد متن هاي markup مثل HTML، WML، XML و SVG (Scalable Vector Graphics) مناسب هستند.
پس از معرفي Servlet و jsp، تکنولوژي ها و framework هاي جديدي براي توليد WebApp ها ايجاد شد. از جمله JSF. با اين حال Servlet زيربناي همه تکنولوژي هاي مذکور است.
هريک از تکنولوژي هاي بعد از Servlet لايه اي بر abstraction افزودند و باعث افزايش سرعت و ارتقاء کيفيت توليد WebApp ها شدند.
Web Component ها روي پلتفرمي به نام Web Container اجرا مي شوند. Web Container انواع سرويس ها و امکانات لازم براي استفاده Web Component ها، همچنين امکان دسترسي به ساير API ها را فراهم مي سازد.
رفتار WebApp هنگامي که روي Web Containerنصب (deploy) مي شود قابل تنظيم (configuration) است. اين تنظيمات در فايل هايي به فرمت XML به نام Deployment descriptor يا DD درج مي شوند.
مراحل توليد يک WebApp :
1. ايجاد کدهاي برنامه
2. ايجاد DD برنامه
3. کامپايل برنامه با همه کلاس هاي کمکي استفاده شده توسط Web Componnet ها
4. فرايند اختياري Package کردن App به يک Deployment unit
5. Deploy کردن App روي Web Container
6. انتساب WebApp به يک URL
منبع: Java EE Tutorial
Web Application چيست؟
يکي از تعاريف Web Application مي گويد که Web Application نرم افزاري است که تحت وب مورد دستيابي قرار مي گيرد. يکي از دلايل عموميت يافتن Web Application ها اين است که از همه جا قابل دسترسي است و دسترسي به آن نياز به نصب نرم افزارخاصي روي client ندارد.
اما Sun، يک Web Application را بعنوان يک Web Server يا Application Server پيشرفته تعريف مي کند و به دو گونه، تقسيم مي کند.:
• Presentation-oriented: اين نوع WebApp صفحات وبي ايجاد مي کند که امکان تعامل با کاربر را فراهم مي سازند. اين صفحات مي تواند انواع markup language ها همچون HTML و XML را دربر مي گيرد. همچنين محتواي آنها بصورت ديناميک، با توجه به درخواست کاربر توليد مي شوند.
• Service-oriented: اين نوع WebApp امکان استفاده از Web Service را فراهم مي کنند. اغلب Presentation-oriented App ها بعنوان client براي Service-oriented App ها هستند.
در Java 2 platform توليد محتواي ديناميک با صفحات jsp يا Servlet ها انجام مي شود که به Web Component معروفند.
Servlet ها کلاس هاي ايجاد شده به زبان جاوا هستند که بصورت ديناميک درخواست ها را پردازش و پاسخ ها را توليد مي کنند. صفحات jsp فايل هاي متني هستند که بعنوان servlet عمل مي کنند اما رفتار آنها در توليد محتواي ديناميک قابل درک تر است. اگرچه jsp و servlet به جاي يکديگر قابل استفاده هستند ، اما هر کدام نقطه قوت و ضعف خاص خود را دارند. Servlet ها بيشتر براي ايجاد Service-oriented App ها ، همچنين توابع کنترلي Presentation-oriented App مناسب هستند. اما jsp ها بيشتر براي توليد متن هاي markup مثل HTML، WML، XML و SVG (Scalable Vector Graphics) مناسب هستند.
پس از معرفي Servlet و jsp، تکنولوژي ها و framework هاي جديدي براي توليد WebApp ها ايجاد شد. از جمله JSF. با اين حال Servlet زيربناي همه تکنولوژي هاي مذکور است.
هريک از تکنولوژي هاي بعد از Servlet لايه اي بر abstraction افزودند و باعث افزايش سرعت و ارتقاء کيفيت توليد WebApp ها شدند.
Web Component ها روي پلتفرمي به نام Web Container اجرا مي شوند. Web Container انواع سرويس ها و امکانات لازم براي استفاده Web Component ها، همچنين امکان دسترسي به ساير API ها را فراهم مي سازد.
رفتار WebApp هنگامي که روي Web Containerنصب (deploy) مي شود قابل تنظيم (configuration) است. اين تنظيمات در فايل هايي به فرمت XML به نام Deployment descriptor يا DD درج مي شوند.
مراحل توليد يک WebApp :
1. ايجاد کدهاي برنامه
2. ايجاد DD برنامه
3. کامپايل برنامه با همه کلاس هاي کمکي استفاده شده توسط Web Componnet ها
4. فرايند اختياري Package کردن App به يک Deployment unit
5. Deploy کردن App روي Web Container
6. انتساب WebApp به يک URL
منبع: Java EE Tutorial
mahyar_ev | 03:30 PM | Comment(s)(0)
جاوا آسان نمود اول، ولي افتاد مشكل ها !December 15, 2007 01:43 PM
مطالبي كه تا به حال در اين وبلاگ نوشته ام، تقريبا همه اش چيزهايي بوده كه در همان زمان نوشتن تجربه اش كردم و درگيرش بوده ام. در واقع بهتر است بگويم در همان زمان،خودم هم آنها را ياد گرفته ام. در واقع اين وبلاگ نمايانگر سير آموخته هاي من در مورد جاوا است. اينكه در هر زمان روي چه بخشي از جاوا دست گذاشته ام و بعدش سراغ چه رفته ام. قبلا هم گفته ام كه از نوشتن در اين وبلاگ دو هدف را دنبال كرده ام. اول اينكه برايم انگيزه اي شود براي بيشتر مطالعه كردن. دوم اينكه جوابي به سوالات خودم در مورد جاوا بدهم. سوالاتي كه ممكن است سوال ديگران هم باشد.
اصولا جاوا زبان خاصي است و با ساير زبان هاي برنامه نويسي تفاوت دارد. جاوا حد و مرز ندارد. شايد اين، بخاطر open source بودن آن باشد كه امكان چنين رشد و گسترش عجيب و غريبي را به آن داده است. جاوا نه فقط يك سينتكس كه مجموعه از استانداردها، pattern ها، كتابخانه و Framework هايي است كه روز به روز نيز در حال گسترش اند. هر از گاهي Framework هاي قبلي، جاي خود را به نسخه هاي پيشرفته تر و جديد تر مي دهند. موارد كاربرد جاوا نيز فراوان است و تقريبا همه بخش هاي نرم افزاري را دربر مي گيرد. از نرم افزار هاي دسكتاپ گرفته تا تحت وب و موبايل و غيره.
تا به حال در اين وبلاگ در هر برهه، موضوعي را بعنوان محور بحث، انتخاب كرده ام و تا حدي كه در توانم بوده به آن پرداخته ام و سعي كرده ام كه به نتيجه اي برسانمش. مثلا jsp يا XML يا jsf. اما هنوز شايد خواننده نوشته هاي من با ذات و جوهره جاوا آشنا نشده باشد (چون خودم هم هنوز آشنا نيستم). در واقع آنچه تا به حال ارائه كرده ام، معرفي تكنولوژي ها و framework هاي مطرح و آشنا در جاوا بوده.
شايد الان وقتش باشد كه كمي تغيير رويه دهم و از معرفي framework صرف فاصله بگيرم و نگاهي كاربردي تر، عملي تر و عميق تر به جاوا بيندازم و در اين رهگذار به اصول طراحي و ساير مباحثي كه تا به حال فرصتش پيش نيامده، بپردازم. از اين رو تصميم دارم از انواع application هاي جاوا نمونه هايي را انتخاب كنم و آرام آرام پيش ببرم و اين اصول را در آنها پياده كنم.
مي دانم كاري كه مي خواهم انجام دهم كار سختي است (حداقل براي من). چون دانش و تجربه لازم را ندارم. مخصوصا اينكه غير از پروژه هايي كه خودم تعريف كرده ام، هيچ پروژه واقعي، در اين زمينه انجام نداده ام. اين نكته هم مي تواند عيب تلقي شود و هم حسن. عيبش كه معلوم است. تجربه چيزي است كه آدم با خواندن هزار كتاب هم به دست نمي آورد. مخصوصا در نرم افزار، هميشه قواعد تئوري نوشته شده در كتابها جواب نمي دهد و بعضا بايد با توجه به مشكلات عملي پيش آمده حين كار، رويه خاصي برگزيد. اين قابليت و توانايي بدست نمي آيد مگر با تجربه و لمس عملي مشكلات. اما حسن اين كار چيست. حسنش اين است كه مبناي كار من اصول تئوري و آموزشي جاوا است و از اين نظر خودم و خواننده را با مفاهيم نظري اين زبان بطور عملي آشنا مي سازد و در جاوا راهش مي اندازد.
براي شروع كار تصميم دارم يك Web Application نمونه اي را با جاوا شروع كنم و قدم به قدم پيش ببرم. روي لايه ها تمركز كنم. در هر لايه Framework هاي مورد استفاده را نام ببرم و الگوهاي طراحي هر لايه را ذكر كنم و انواع روش هاي ممكن را معرفي كنم.
كار سختي است، براي من راه نابلد. به كمك و راهنمايي دوستان بسيار نياز خواهم داشت. چون قطعا نوشته هايم خالي از غلط نخواهند بود. از همه دوستاني كه جاوا كاركرده اند و با مفاهيم آشنا هستند، خواهشمندم كه اشتباهاتم را تذكر دهند و نوشته هايم را تصحيح نمايند. همچنين راه حل هاي ديگر را در مورد مساله مورد بحث ارائه نمايند. احتمالا آرام آرام پيش خواهم رفت و گاهي هم راهي را خواهم رفت كه مجبور به برگشت از آن و انتخاب راهي ديگر خواهم شد. سردر گمي هايم را ببخشيد و مرا از راهنمايي هاتان بي نصيب نگذاريد.
اميدوارم با كمك يكديگر مطالب اين وبلاگ مفيد تر و بهتر شود و بتوانيم جاي خالي يك منبع جامع عملي فارسي را در مورد application هاي جاوا، تا حدودي پر نماييم.
اگر خدا بخواهد. در مطلب بعدي يك Web Application را با جاوا شروع خواهم كرد.
اصولا جاوا زبان خاصي است و با ساير زبان هاي برنامه نويسي تفاوت دارد. جاوا حد و مرز ندارد. شايد اين، بخاطر open source بودن آن باشد كه امكان چنين رشد و گسترش عجيب و غريبي را به آن داده است. جاوا نه فقط يك سينتكس كه مجموعه از استانداردها، pattern ها، كتابخانه و Framework هايي است كه روز به روز نيز در حال گسترش اند. هر از گاهي Framework هاي قبلي، جاي خود را به نسخه هاي پيشرفته تر و جديد تر مي دهند. موارد كاربرد جاوا نيز فراوان است و تقريبا همه بخش هاي نرم افزاري را دربر مي گيرد. از نرم افزار هاي دسكتاپ گرفته تا تحت وب و موبايل و غيره.
تا به حال در اين وبلاگ در هر برهه، موضوعي را بعنوان محور بحث، انتخاب كرده ام و تا حدي كه در توانم بوده به آن پرداخته ام و سعي كرده ام كه به نتيجه اي برسانمش. مثلا jsp يا XML يا jsf. اما هنوز شايد خواننده نوشته هاي من با ذات و جوهره جاوا آشنا نشده باشد (چون خودم هم هنوز آشنا نيستم). در واقع آنچه تا به حال ارائه كرده ام، معرفي تكنولوژي ها و framework هاي مطرح و آشنا در جاوا بوده.
شايد الان وقتش باشد كه كمي تغيير رويه دهم و از معرفي framework صرف فاصله بگيرم و نگاهي كاربردي تر، عملي تر و عميق تر به جاوا بيندازم و در اين رهگذار به اصول طراحي و ساير مباحثي كه تا به حال فرصتش پيش نيامده، بپردازم. از اين رو تصميم دارم از انواع application هاي جاوا نمونه هايي را انتخاب كنم و آرام آرام پيش ببرم و اين اصول را در آنها پياده كنم.
مي دانم كاري كه مي خواهم انجام دهم كار سختي است (حداقل براي من). چون دانش و تجربه لازم را ندارم. مخصوصا اينكه غير از پروژه هايي كه خودم تعريف كرده ام، هيچ پروژه واقعي، در اين زمينه انجام نداده ام. اين نكته هم مي تواند عيب تلقي شود و هم حسن. عيبش كه معلوم است. تجربه چيزي است كه آدم با خواندن هزار كتاب هم به دست نمي آورد. مخصوصا در نرم افزار، هميشه قواعد تئوري نوشته شده در كتابها جواب نمي دهد و بعضا بايد با توجه به مشكلات عملي پيش آمده حين كار، رويه خاصي برگزيد. اين قابليت و توانايي بدست نمي آيد مگر با تجربه و لمس عملي مشكلات. اما حسن اين كار چيست. حسنش اين است كه مبناي كار من اصول تئوري و آموزشي جاوا است و از اين نظر خودم و خواننده را با مفاهيم نظري اين زبان بطور عملي آشنا مي سازد و در جاوا راهش مي اندازد.
براي شروع كار تصميم دارم يك Web Application نمونه اي را با جاوا شروع كنم و قدم به قدم پيش ببرم. روي لايه ها تمركز كنم. در هر لايه Framework هاي مورد استفاده را نام ببرم و الگوهاي طراحي هر لايه را ذكر كنم و انواع روش هاي ممكن را معرفي كنم.
كار سختي است، براي من راه نابلد. به كمك و راهنمايي دوستان بسيار نياز خواهم داشت. چون قطعا نوشته هايم خالي از غلط نخواهند بود. از همه دوستاني كه جاوا كاركرده اند و با مفاهيم آشنا هستند، خواهشمندم كه اشتباهاتم را تذكر دهند و نوشته هايم را تصحيح نمايند. همچنين راه حل هاي ديگر را در مورد مساله مورد بحث ارائه نمايند. احتمالا آرام آرام پيش خواهم رفت و گاهي هم راهي را خواهم رفت كه مجبور به برگشت از آن و انتخاب راهي ديگر خواهم شد. سردر گمي هايم را ببخشيد و مرا از راهنمايي هاتان بي نصيب نگذاريد.
اميدوارم با كمك يكديگر مطالب اين وبلاگ مفيد تر و بهتر شود و بتوانيم جاي خالي يك منبع جامع عملي فارسي را در مورد application هاي جاوا، تا حدودي پر نماييم.
اگر خدا بخواهد. در مطلب بعدي يك Web Application را با جاوا شروع خواهم كرد.