دانلود firstcup

January 27, 2008 02:39 PM

كليه مطالب ارائه شده در خصوص پياده سازي firstcup Enteprise Application را در يك �?ايل PDF آماده كرده ام كه از اينجا قابل دريا�?ت است.
در ضمن باعث خوشحالي من است كه دوستاني كه اين مطالب را مي خوانند نظرات خود را درباره آن اعلام كنند.
به نظر شما مجموعه مطالب مربوط به firstcup چطور بود؟ كم و كسري هايش چه بود؟ آيا اين رويه را ادامه دهم يا خير؟ چه پيشنهاد يا انتقادي براي بهتر شدن مطالب داريد؟
ممنون

mahyar_ev | 02:39 PM | Comment(s)(0)

جرعه آخر firstcup

January 8, 2008 11:08 AM

تعري? Navigation ص?حات JSF
اين پروژه شامل دو ص?حه jsp است كه از تكنولوژي JSF در آنها است?اده شده. يكي greeting.jsp و ديگري response.jsp است. قواعد حرکت بين ص?حات JSF بايد در ?ايل configuration تعري? شود. اين کار در مورد مثال جاري بدين صورت انجام مي شود:
1. ماژول firstcup-war را باز کنيد.
2. ?ولدر Web Pages و سپس WEB-INF را باز کنيد.
3. روي faces-config.xml دبل کليک نماييد.
4. روي اديتور کليک راست کنيد و از قسمت JavaServer Faces گزينه Add Navigation Rule را انتخاب نماييد.
5. در ?يلد Rule from view عبارت greeting.jsp/ را وارد کنيد.
6. دکمه Add را کليک کنيد.
7. مراحل 4 تا 6 را تکرار کنيد. با اين ت?اوت که اين بار عبارت response.jsp/ را بعنوان Rule From view وارد کنيد.
8. روي اديتور کليک راست کنيد و از JavaServer Faces گزينه Add Navigation Case را انتخاب کنيد.
9. ?يلد From View را greeting.jsp/ انتخاب نماييد.
10. در ?يلد From Outcome عبارت success را وارد کنيد.
11. ?يلد To View را response.jsp/ انتخاب نماييد.
12. Add را کليک کنيد.
13. مراحل 8 تا 12 را تکرار کنيد. با اين ت?اوت که اين بار response.jsp/ را در From View و greeting.jsp/ را در To View وارد کنيد.
بدين ترتيب دو Navigation Rule خواهيد داشت. يکي از greeting.jsp به response.jsp و ديگري برعکس.
در پايان ?ايل را ذخيره نماييد.


ساخت ص?حه response.jsp
1. روي ماژول firstcup-war کليک راست نماييد.
2. از قسمت New گزينه JSP را انتخاب کنيد.
3. نام ?ايل را response وارد کنيد.
4. Finish را کليک کنيد.
5. در ?ايل response.jsp تگ head را تغيير دهيد که اينگونه گردد:

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Response Page</title>
</head>

6. تگ هاي ابتدا و انتهاي body را پاک کنيد.
7. تگ <h1> را نيز به همراه تگ خاتمه و محتوياتش حذ? نماييد.
8. تگ هاي زير را پس از تگ بسته شدن head قرار دهيد.

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

9. تگ هاي زير را در ادامه تگ هاي مرحله قبل در ص?حه کپي کنيد:

<f:view>
<h:form>

 <h2><h:outputText value="#{bundle.YouAre} " />
 <h:outputText value="#{bundle.SameAge}" rendered="#{dukesBDay.ageDiff == 0}"/>
            
 <h:outputText value="#{dukesBDay.absAgeDiff}" rendered="#{dukesBDay.ageDiff < 0}"/>
 <h:outputText value=" #{bundle.Year} " rendered="#{dukesBDay.ageDiff == -1}"/>
 <h:outputText value=" #{bundle.Years} " rendered="#{dukesBDay.ageDiff < -1}"/>
 <h:outputText value="#{bundle.Younger}" rendered="#{dukesBDay.ageDiff < 0}"/>
           
 <h:outputText value="#{dukesBDay.absAgeDiff}" rendered="#{dukesBDay.ageDiff > 0}"/>
 <h:outputText value=" #{bundle.Year} " rendered="#{dukesBDay.ageDiff == 1}"/>
 <h:outputText value=" #{bundle.Years} " rendered="#{dukesBDay.ageDiff > 1}"/>
 <h:outputText value="#{bundle.Older}" rendered="#{dukesBDay.ageDiff > 0}"/>

</h:form>
</f:view>

10. قبل از بسته شدن تگ h:form تگ زير را قرار دهيد:

<p><h:commandButton id="back" value="#{bundle.Back}" action="success"/>

11. ?ايل را ذخيره نماييد.

Building, Packaging, Deploying & Running
در اين مرحله شما DukesBirthdayBean و firstcup web client راا Build خواهيد نمود، آنها را در ?ايل هاي EAR بصورت package درخواهيد آورد. ?ايل هاي EAR را در سرور deploy خوهيد نمود و سرانجام App را اجرا خواهيد کرد.
آماده سازي Deployment Descriptor
در اين مرحله برخي پارامترها که خود NetBeans در ?ايل Deployment Descriptor ايجاد کرده، اما ما به آنها نياز نداريم را پاک خواهيم کرد. بدين ترتيب:
1. ماژول firstcup-war را باز کنيد.
2. ?ولدر Configuration Files را باز کنيد.
3. روي web.xml دبل کليک نماييد.
4. در بالاي پنجره اديتور، روي تب General کليک نماييد.
5. علامت + کنار Context Parameters را انتخاب کنيد. با اين کار يک جدول باز مي شود.
6. از جدول مذکور تک تک پارامترها را انتخاب کنيد و با دکمه remove همه آنها را يکي يکي پاک نماييد.
7. در بالاي اديتور روي تب XML کليک کنيد.
8. عنصر welcome-file-list و همه اجزاي آن را حذ? نماييد.
9. ?ايل را ذخيره نماييد.
Building و Packaging
دراين مرحله در مورد firstcup Enterprise Application عمل Building و packaging را انجام مي دهيم. بدين ترتيب:
1. firstcup را در قسمت پروژه ها انتخاب نماييد.
2. کليک راست کنيد و گزينه Build Project را انتخاب کنيد.
Deploying
در مرحله قبل شما DukesBirthdayBean enterprise bean و firstcup web client را بصورت ?ايل firstcup.ear پکيج نموديم. حالا آن را روي سرور deploy مي کنيم. بدين صورت:
1. firstcup را در قسمت پروژه ها انتخاب کنيد.
2. کليک راست کرده و گزينه Deploy Project را انتخاب کنيد.
Running
1. Browser را اجرا نماييد و در قسمت آدرس آن URL زير را وارد کنيد.

http://localhost:8080/firstcup

mahyar_ev | 11:08 AM | Comment(s)(1)

ساخت firstcup Web Client

January 1, 2008 11:18 AM

براي ساخت Web Client کارهاي زير را بايد انجام دهيد:
• تنظيم firstcup-war به اين منظور که JSF را پشتيباني نمايد.
• ساخت يک Web service client
• ساخت يک resource bundle براي نگهداري پيغام هايي که توسط ص?حات JSP است?اده مي شوند.
• تنظيم resource bundle در ?ايل configuration
• ساخت کلاس مديريت DukesBDay
• تنظيم DukesBDay در ?ايل configuration
• ساخت ص?حه greeting.jsp
• تنظيم قواعد navigation
• ساخت ص?حه response.jsp
در ادامه، مراحل بالا يک به يک توضيح داده خواهند شد.

تنظيم firstcup-war جهت پشتيبالي JSF
همه Application هاي JSF بايد شامل يک map به نمونه FacesServlet در ?ايل deployment descriptor باشند. نمونه FacesServlet درخواست ها را دريا?ت مي کند و براي پردازش به life cycle مي ?رستد. همچنين مقداردهي اوليه منابع را انجام مي دهد.

اين mapping بدين صورت انجام مي شود:
1. روي ماژول firstcup-war کليک راست کنيد و properties را انتخاب نماييد.
2. از category ها framework را انتخاب نماييد.
3. روي Add کليک کنيد.
4. از ليست انتخاب ها، JavaServer Faces را انتخاب نماييد و OK را کليک کنيد.
5. Servlet URL mapping را به */firstcupWeb/ تغيير دهيد. اين مسير نمونه FacesServlet است.
6. تيک Validate XML را برداريد.
7. OK را کليک کنيد.

?وروارد ص?حه index.jsp به greeting.jsp
مي خواهيم بلا?اصله پس از اجراي اين Web Application به ص?حه greeting.jsp برويم. لذا بايد index.jsp را به greeting.jsp ?وروارد نماييم. بدين صورت:
1. ماژول firstcup-war را باز کنيد و روي Web Pages دبل کليک نماييد.
2. روي welcomeJSF.jsp کليک راست کرده بوسيله Delete آن را حذ? نماييد.
3. روي index.jsp دبل کليک کنيد.
4. هر چيزي که داخل اين ص?حه نوشته شده است را پاک کنيد.
5. اين عبارت را در ص?حه index.jsp وارد کنيد:
6. ?ايل را ذخيره کنيد.

توضيح اينكه ص?حه greeting.jsp را بعدا خواهيم ساخت.

ساخت Web Service Client براي وب ماژول firstcup-war
اين ماژول از وب سرويس firstcup-dukes-age است?اده مي نمايد. به اين منظور لازم است يک Web Service Client در آن ايجاد نماييد. بدين صورت:
1. ماژول firstcup-war را انتخاب کنيد.
2. از منوي File گزينه New File را انتخاب کنيد.
3. از category ها گزينه Web Services را انتخاب کنيد.
4. از انواع ?ايل، Web Service Client را ايجاد نماييد.
5. Next را کليک کنيد.
6. WSDL URL را انتخاب کنيد.
7. در قسمت WSDL URL مقدار زير را وارد کنيد:
http://localhost:8080/DukesAgeService/DukesAgeService?WSDL
8. در ?يلد package نيز اين مقدار را وارد نماييد:
com.sun.firstcup.webservice
9. Finish را کليک کنيد.

ساخت Resource Bundle
منظور از Resource Bundle ?ايلي است از نوع properties كه در آن كليه متون ثابت، شامل پيغام هاي خطا و عباراتي كه در ص?حه jsp به كار مي روند، تعري? مي شود. نحوه ساخت آن بدين ترتيب است:
1. ماژول firstcup-war را انتخاب نماييد.
2. از منوي ?ايل گزينه New File را انتخاب کنيد.
3. category را other و نوع ?ايل را Properties File انتخاب کنيد و Next را کليک کنيد.
4.نام ?ايل را WebMessages وارد نماييد.
5. ?ولدر را نيز اين مسير وارد کنيد:
src/java/com/sun/firstcup/web
6. Finish را کليک نماييد.
7. پس از اينکه NetBeans ?ايل را ايجاد نمود متن زير را در آن کپي نماييد:
Welcome=Hi. My name is Duke. Let us find out who is older -- You or me
DukeIs=Duke is
YearsOldToday=years old today.
Instructions=Enter Your birthday and click submit.
YourBD=Your birthday
Pattern=MM/dd/yyyy
DateError=Please enter the date in the form MM/dd/yyyy.
YouAre=You are
Year=year
Years=years
Older=older than Duke!
Younger=younger than Duke!
SameAge= the same age as Duke!
Submit=Submit
Back=Back
8. ?ايل را ذخيره کنيد.
9. در صورت نياز مي توانيد براي هر زباني مانند زبان ?ارسي يک Properties File مشابه بالا تهيه نماييد.
10. توسط گزينه Refresh All Files از منوي File همه ?ايل ها را Refresh نماييد.

تنظيم و پيکر بندي Resource Bundle
1. ماژول firstcup-war را باز کنيد. از ?ولدر Web Pages ?ولدر WEB-INF را باز کنيد.
2. روي faces-config.xml دبل کليک نماييد.
3. قبل از تگ پاياني عنصر faces-config عناصر زير را اضا?ه نماييد:
<application>
    <resource-bundle>          
            <base-name>com.sun.firstcup.web.WebMessages</base-name>
        <var>bundle</var> 
    </resource-bundle>
    <locale-config>
        <default-locale>en</default-locale>
        <supported-locale>es</supported-locale>
    </locale-config>
</application>
4. ?ايل را ذخيره نماييد.

در مطلب بعد ساخت كلاس DukesBDay از اجزاي web client را خواهيم ديد. براي يادآوري اين تصوير را ببينيد.

mahyar_ev | 11:18 AM | Comment(s)(0)

ساخت firstcup Enterprise Application

December 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. در درون بدنه کلاس، کدهاي زير را کپي نماييد.

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;
}

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 خواهيم پرداخت.

mahyar_ev | 02:17 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 در شكل زير ملاحظه مي كنيد.

firstcupArchitecture_small.JPG
تصوير بزرگتر

در مطلب بعد پروژه را با پياده سازي وب سرويس 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

mahyar_ev | 03:36 PM | Comment(s)(2)

JavaEE Web Application

December 16, 2007 03:30 PM

صحبت را با نگاهي به م?هوم 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

mahyar_ev | 03:30 PM | Comment(s)(0)

دانلود جاوا

September 4, 2007 01:31 PM

JavaEE 5 به همراه NetBeans IDE 5.5 و ساير ابزار مربوطه براي ويندوز را مي توانيد از بخش ابزارهاي پلت?رم جاوا از p30download دانلود كنيد.

mahyar_ev | 01:31 PM | Comment(s)(9)

ساختار JavaEE

June 16, 2007 03:03 PM

Web Server & Application Server

Web Server وظي�?ه دريا�?ت درخواست و پاسخگويي به درخواست client را به عهده دارد. Web Server درصورت نياز و جهت تهيه پاسخ dynamic ، درخواست را به برنامه هاي ديگري از جمله Servlet و JSP كه در Application Server قرار دارند، ارسال مي نمايد. Web Server الزما بايد از پروتوكل HTTP حمايت نمايد.
اما در Application Server، نحوه توليد محتواي Dynamic و Business Logic پياده مي شود. همچنين Web Container, Servlet container و EJB container در Application Server قرار مي گيرند.

جزييات ساختار و لايه هاي �?يزيكي JavaEE را در تصوير زير مي توانيد مشاهده نماييد:

JavaEE_Structure_small.JPG

تصوير بزرگ تر

mahyar_ev | 03:03 PM | Comment(s)(0)

JavaEE

June 11, 2007 12:14 PM

JavaEE يا Java Enterprise Edition كه قبلا J2EE ناميده مي شد، پلت?رم ارائه شده توسط Sun براي ايجاد Enterprise Application ها است. JavaEE شامل مجموعه اي از Component ها، Service ها، API ها، پروتوكل ها و استانداردهايي است كه امكان ايجاد application هاي تحت وب توزيع شده و multi-tiered را ?راهم مي كند. JavaEE نسبت به JavaSE ياJave Standard Edition ،چند چيز اضا?ه دارد كه مهمترين آنها عبارتند از:
1- Enterprise JavaBeans Components
2-Servlet API
3- JSP
4- XML

لايه هاي ?يزيكي JavaEE يا JavaEE Physical Tiers شامل
1- لايه كاربر - Client Tier
2- لايه مياني - Application Tier يا Middle Tier
3- لايه داده ها – Data (EIS) Tier

PhysicalTieres.JPG

mahyar_ev | 12:14 PM | Comment(s)(0)

گستردگي جاوا

June 11, 2007 11:35 AM

شايد شما هم جزو كساني باشيد كه از گستردگي و پراكندگي ‌اصطلاحات و تكنولوژي هايي كه در رابطه با جاوا به گوش مي رسد گيج شده باشيد.

J2EE, J2ME, JSP, JAVASCRIPT, SERVLET, JDBC, JNDI, STRUTS, JMS, HIBERNATE, EJB

نظر من اين است كه اين اسامي و اصطلاحات آنقدر كه به نظر مي رسند ترسناك و پيچيده نيستند. برخي از موارد بالا از جمله J2EE كه البته نام آن به JAVA EE تغيير كرده است تنها مجموعه اي از قواعد و استاندارد ها و البته ابزار است. برخي ديگر نيز مانند SERVLET تنها يك يا چند كلاس جاوا هستند. اين موارد را مي توان شناخت و در موارد لزوم به كارشان گر?ت. به نظر من همين كه سينتكس جاوا را خوب بدانيد و نظم حاكم بر آن را بشناسيد مي توانيد ادعا كنيد كه جاوا بلديد. باقي آن مي شود شناخت كلاس ها و API هاي گوناگون جاوا .
در ادامه بحث، JAVA EE به عنوان يكي از مهمترين و پركاربردترين موضوعات جاوا معر?ي مي شود و استانداردها و ابزار مورد است?اده آن تا حد ممكن مورد بررسي قرار مي گيرند.

mahyar_ev | 11:35 AM | Comment(s)(0)

اجراي يك برنامه ساده

June 6, 2007 11:56 AM

کد زیر را در یک ?ایل به نام HelloWorld.java بنویسید و مثلا در ?ولدری به نام "c:\test" ذخیره نمایید.


   public class HelloWorld {
     public static void main(String args[]) {
       System.out.println("Hello World!");
     }
   }


این یک برنامه ساده قابل اجرا در جاوا است. روش اجرای این برنامه در جاوا بصورت کلاسیک بدین صورت است که ابتدا توسط دستور javac که در ?ولدر bin از ?ولدر اصلی جاوا واقع شده، با دستور زیر، Class مربوطه را create می کنیم.


javac c:\test\HelloWindows.java


با اجرای این دستور مشاهده می کنیم که ?ایلی با نان HelloWorld.class در ?ولدر مربوطه ایجاد می شود.
سپس با است?اده از دستور java از همان ?ولدر bin می توان برنامه را اجرا نمود. نتیجه اجرای برنامه نمایش عبارت "!Hello World" روی ص?حه است.


java -classpath c:\test HelloWorld


دستورات ?وق در command prompt اجرا می شوند.

تست برنامه های جاوا در IDE ها ساده تر است، زیرا خود آنها ابزار لازم را برای اجرا و تست در اختیار می گذارند. بدون آنکه لازم باشد درگیر جزئیات دستورات اجرایی جاوا شوید.
البته نباید ?راموش کرد که بطور کلی deploy کردن برنامه های جاوا در عمل کاری پیچیده است و نیازمند دقت است.
برای کسب اطلاعات بیشتر بهترین منبع help جاوا است که احتمالا آن را در ?ولدر Doc موجود در ?ولدر اصلی برنامه جاوا خواهید یا?ت.

mahyar_ev | 11:56 AM | Comment(s)(1)

Class Loading

June 3, 2007 11:44 AM

درجاوا اولين class با متد ()static main ?راخواني مي شود. بقيه class ها توسط class هايي كه هم اكنون load شده و در حال اجرا هستند، ?راخواني مي شوند.
ت?اوت Static Class Loading و Dynamic Class Loading:
Static Class Loading با دستور new انجام مي شود

Car C = new Car();

اگر class پيدا نشود، خطاي NoClassDefFoundException رخ مي دهد.

Dynamic Class Loading با دستور forName انجام مي شود

Class.forName(String className);

دستور ?وق، يك class بر مي گرداند و اگر يا?ت نشود خطاي ClassNotFoundException مي دهد.

mahyar_ev | 11:44 AM | Comment(s)(0)

ت?اوت abstract class و interface

June 2, 2007 10:43 AM

public abstract class Account{
public interface Account{


هنگامي كه كلاسي بعنوان abstract class تعري? مي شود،‌ اين امكان كه مستقيما نمونه اي از آن كلاس ايجاد شود، گر?ته مي شود. از اين جهت شبيه interface است اما اين دو ت?اوت هاي مهمي دارند:
1-abstract class هم داراي متدهاي قابل اجرا است (امكان پياده سازي بدنه متد وجود دارد) و هم متدهاي abstract، درحاليكه در interface امكان تعري? بدنه متد وجود ندارد.
2-هر subclass تنها از يك abstract class مي تواند گر?ته شود. اما يك كلاس مي تواند چندين interface را implement نمايد.
3-abstract class مي تواند شامل متغير، متد، construction و انواع modifier هاي public,private, proected و none باشد. در حاليكه interface نمي تواند شامل موارد ذكر شده باشد.

mahyar_ev | 10:43 AM | Comment(s)(0)

Is a & Has a

May 29, 2007 04:16 PM

IsA_HasA.JPG


Is a (inheritance):
class Building{
…….
}
class House extends Building{
 …….
 }


Has a (Composition):
Class House{
   Bathroom room = new Bathroom();
   …….
   public void getTotMirrors(){
      room.getNoMirrors();
      …….
   }
}

mahyar_ev | 04:16 PM | Comment(s)(2)

Encapsulation

May 28, 2007 03:04 PM

Encapsulation اشاره دارد به نگهداري همه اجزاء مرتبط (اعم از متغيرها و متدها) در يك object. Object ها بايد ساختار و كاركرد داخلي خود را از اشياء ديگر، مخ?ي نگه دارند. در عين حال راه هاي ارتباط يك object با object هاي ديگر بايد كاملا تعري? شود. يك Encapsulation خوب بايد از ارتباط object ها از طريق غيرقابل انتظار جلوگيري نمايد.
مثال:

class MyMarks{
     private int vmarks = 0;
     private String name;

     public void setMarks(int mark) throws MarkException {
       if(mark > 0)
         this.vmarks = mark;
       else {
         throw new MarkException("No negative Values");
       }
     }

     public int getMarks(){
       return vmarks;
     }
}


ارتباط اشياي ديگر با كلاس MyMarks از طريق دو متد setMarks و getMarks برقرار مي شود.

mahyar_ev | 03:04 PM | Comment(s)(0)

Inheritance

May 28, 2007 02:35 PM

Inheritance به معني ارث بري ويژگي هاي يك class از class ديگر است.
در جاوا دو گونه inheritance وجود دارد :

1- Implementation inheritance (Class Inheritance)

اين، ارث بري از يك class است و با عبارت extends انجام مي شود. در اينجا مي توان همه يا برخي از ويژگي ها و متدهاي يك class را به ارث برد. هر class تنها مي تواند ?قط يك superclass داشته باشد.
مثال:

public abstract class Account{
   Public void deposit(double amount){
    ……..
  }

   public void withdraw(double amount){
    ……..
   }
}

public class SavingsAccount extends Account{
   Public double calculateInterest(double amount){
    ……..
   }
}

2- Interface inheritance (Type Inheritance) يا SubTyping

اين، يك مكانيزم برقراري ارتباط است بين class هايي كه حتي با هم ارتباط ندارند. همچنين يك class مي تواند چندين interface را implement نمايد. كلا است?اده از اين روش بيشتر توصيه شده است.
مثال:

public interface Account{
   public abstract void deposit(double amount);
   public abstract void withdraw(double amount);
}

public interface SavingAccount extends Account {
   Public abstract double calculateInterest(double amount);
}

public class SavingAccountImpl implements SavingAccount{
   AccountHelper helper = new AccountHelper();

   public void deposit(double amount){
    ………
   }
   public void withdraw(double amount){
    ………
   }

}


همانطور كه مي بينيد در interface تعري? متغير وجود ندارد. همچنين بدنه و پياده سازي متدها، در interface قابل تعري? نيست. تنها declaration متدها در interface مي آيد.

mahyar_ev | 02:35 PM | Comment(s)(0)

PIE

May 27, 2007 11:28 AM

PIE معر? سه وي?ژگي اصلي Object Oriented است كه جاوا بر آن استوار است: Polymorphism، Inheritance و Encapsulation
Polymorphism يعني است?اده از يك متغير براي ارجاع به Object هايي با type هاي مت?اوت. ?ايده اصلي Polymorphism امكان ا?زودن class هاي جديد است، بدون اينكه نياز به اصلاح كدهاي قبلي باشد. مثال:
List listShapes = new ArrayList(20);

Shape s = new Circle(); // دايره
listShapes.add(s);

s = new Square(); // مربع
listShapes.add(s);

s = new HalfCircle(); //نيم دايره
listShapes.add(s);

getTotArea(listShapes); // اين متد مجموع مساحت دايره،مربع و نيم دايره را برميگرداند

public double getTotArea(List listShapes){
Iterator it = listShapes.iterator();
double totalArea = 0.0;
while (it.hasNext()){
Shape s = (Shape) it.next();
totalArea += s.area(); // Polymorphic method call
}
Return totalArea;
}
در صورتي كه شكل هندسي ديگري، مثلا مثلث به عنوان subclass اي از Shape تعري? شود، نيازي به تغيير متد getTotArea نيست. بلكه تنها بايد تابع area بطور مناسب در class جديد پياده شود.
دو جزء ديگر PIE يعني Inheritance و Encapsulation در مطالب بعدي ارائه خواهند شد.

mahyar_ev | 11:28 AM | Comment(s)(2)

تفاوت هاي جاوا و ++C

May 23, 2007 04:09 PM

1- جاوا از pointer پشتيباني نمي كند.
2- جاوا از multiple inheritance حمايت نمي كند. به جاي آن از multiple interface inheritance حمايت مي كند كه به object ها امكان مي دهد كه از interface هاي مختل�? متدهاي گوناگوني را به ارث ببرند.
3- جاوا destructor ندارد. به جاي آن متد finalize() دارد كه توسط garbage collector �?راخواني مي شود.
4- جاوا structure و union ندارد.
5- در جاوا همه چيز در داخل class است. لذا متغير و تابع global ندارد.
6- مديريت حا�?ظه و garbage collection در جاوا، اتوماتيك است.

mahyar_ev | 04:09 PM | Comment(s)(0)

مقدمات

May 23, 2007 03:48 PM

براي برنامه نويسي جاوا لازم است كه از سايت Sun ، يكي از نسخه هاي جاوا را download و نصب نماييد. البته اين را هم بايد بگويم كه مدتي است به نظر مي رسد سايت Sun امكان download را براي IP هاي ايراني بسته باشد. در اين صورت بايد آن را از بازار رضا يا مجتمع پايتخت و جاهايي از اين قبيل تهيه كنيد.
براي نوشتن برنامه هاي جاوا نيز از هر اديتوري حتي notepad مي توانيد است?اده نماييد. اما است?اده از IDE ها پيشنهاد مي شوند. IDE هاي گوناگوني براي نوشتن برنامه هاي جاوا وجود دارند كه معرو? ترين آنها عبارتند از Borland JBuilder، Eclypse و Netbeans.
من تست برنامه هاي اين وبلاگ را اغلب با نسخه j2sdk1.4.2_06   جاوا و NetBeans IDE 5 انجام داده ام كه آن هم از سايت NetBeans قابل download است.
نكته ديگر اينكه در اين وبلاگ قصد ندارم سينتكس جاوا را آموزش دهم. در صورتي كه با ++C آشنايي داشته باشيد، قالب اصلي دستورات جاوا را مشابه آن خواهيد يا?ت و مشكلي با آن نخواهيد داشت. اما به همراه مثال ها ، سعي مي كنم  در مورد توابع و كلاس هاي خاصي كه است?اده مي شوند توضيح مناسبي بدهم.

mahyar_ev | 03:48 PM | Comment(s)(2)