تمرین آشنایی با فناوری‌های Java Enterprise Edition

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

این تمرین آموزشی در شرکت مشاوران نرم‌افزاری اعوان طراحی شده است. افرادی که در حوزه برنامه‌نویسی سمت سرور وب (server side) وارد این شرکت می‌شوند، در ابتدا این تمرین را انجام می‌دهند. در این تمرین، مفاهیم و فناوری‌هایی مانند JPA و Spring و JAX-RS و JUnit مرور می‌شود.

لازم به ذکر است با توجه به استفاده از خط تولید نرم افزارهای سازمانی شرکت اعوان (موسوم به WISE Solution) توسط سایر سازمانها و شرکتها، طی این مسیر آموزشی می تواند به حضور شما در آن سازمانها و شرکتها نیز کمک کند.

 مقدمه

در این تمرین یک دفترچه تماس (Contact List) کوچک و ساده تولید می شود. در این تمرین از فناوری های زیر استفاده می شود:

  • Spring Framework
  • JPA برای کار با پایگاه داده (با کمک فناوری Hibernate)
  • JAX-RS برای تولید سرویسهای REST
  • AngularJS و Bootstrap‌ برای تولید واسط کاربر
  • LogBack‌ و SLF4J برای درج لاگ
  • JUnit برای تست واحد

برای مرور این مفاهیم، می‌توانید مسیر مطالعاتی پیشنهادی شرکت اعوان را ملاحظه فرمایید.

در ابتدا به معرفی کلی سیستم دفترچه تماس خواهیم پرداخت. سپس در چند گام این سیستم را پیاده سازی خواهیم کرد.

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

معرفی سیستم

سیستم دفترچه تلفن باید قابلیت های زیر را داشته باشید.

  • ثبت اطلاعات تماس یک شخص جدید شامل نام، آدرس، تلفن منزل، تلفن همراه، آدرس ایمیل و …
  • مشاهده لیست اطلاعات تماس موجود
  • ویرایش اطلاعات تماس
  • حذف اطلاعات تماس

فرمها باید به گونه ای طراحی شوند که روی اسکرینهای کوچک مثل صفحات گوشی های هوشمند به خوبی دیده شوند.

پیش نیازها

قبل از شروع این دستورالعمل با راهنمایی معین خود موارد زیر را آماده کنید.

  • پکیج نصب JDK نسخه 1.8.x (لینک دانلود)
  • پکیج Eclipse. توجه کنید که eclipse و jdk باید هر دو 64 بیتی یا هر دو 32 بیتی باشند. (لینک دانلود). لازم به توضیح است امکان استفاده از Intellij Idea یا Netbeans به جای Eclipse وجود دارد ولی این مستند مبتنی بر Eclipse توضیح داده شده است.
  • پکیج apache-tomcat-8.x (لینک دانلود)
  • maven برای دریافت کتایخانه های مورد نیاز (لینک دانلود)
  • Postman روی مرورگر chrome برای تست سرویسهای REST

آماده سازی محیط

آماده سازی jdk
  • JDK (دقت داشته باشید JDK و نه JRE) را روی دستگاه خود نصب نمایید.
  • متغیر محیطی JAVA_HOME در سیستم عامل خود تنظیم نمایید به شکلی که به مسیر JDK اشاره کند. روش تنظیم متغیر محیطی در ویندوز. مثال:
JAVA_HOME="C:\Program Files\Java\jdk8"
آماده سازی maven
  • پکیج maven را در مسیر دلخواه باز کنید.
  • متغیر محیطی M2_HOME رادر سیستم عامل خود تنظیم نمایید به شکلی که به مسیر فوق اشاره کند. مثلاً
M2_HOME=C:\wise\apache-maven
آماده سازی tomcat
  • پکیج tomcat در مسیر دلخواهی که فاقد کارکترهای خاص باشد باز کنید.
  • متغیر محیطی CATALINA_HOME در سیستم عامل خود تنظیم نمایید به شکلی که به مسیر فوق اشاره کند. مثلا :
CATALINA_HOME=C:\wise\apache-tomcat
آماده سازی Eclipse
  • پکیج Eclipse را در مسیر دلخواه خود مثلاً c:\wise\wiclipse باز کنید.
  • با اجرای Eclipse.exe وارد محیط برنامه نویسی Eclipse بشوید.
  • برای تنظیم jdk در eclipse‌ اقدامات زیر را انجام دهید:
    • در Eclipse به منوی «Window > Preferences» را اجرا نمایید.
    • در درخت تنظیمات به قسمت «Java/Installed JREs» بروید.
    • با زدن دکمه Add مسیر JDK ای که نصب کرده اید را وارد کنید و یک JDK جدید تعریف نمایید. (مجددا تأکید می شود JDK‌ و نه JRE)
    • این JDK جدید را با زدن تیک کنار نام آن به عنوان پیش فرض انتخاب کنید.
    • سایر JRE هایی که از قبل در فرم تعریف شده اند را پاک کنید.

دریافت پروژه از Git

برای آنکه در شروع کار درگیر پیکربندی کتابخانه ها نشوید اسکلت بندی پروژه دفترچه تماس قبلا آماده شده است. برای دریافت آن از Git به این آدرس مراجعه نمایید.

پس از دریافت پروژه فایلهای زیر را یک بار مرور کنید:

  • pom.xml
  • web.xml
  • applicationContext-base.xml
  • Contact.hbm.xml
  • ContactEntity.java
  • ContactDao.java
  • ContactManager.java
  • ContactService.java
  • ContactServiceImpl.java

غیر از کلاسها و فایل Contact.hbm.xml لازم نیست در این مرحله از سایر فایلها به طور کامل سر در بیاورید.

اتصال تامکت به پایگاه داده

  • ابتدا فایل jar مربوط به درایور پایگاه داده h2 را از شاخه lib در پروژه ir.asta.wise.contacts ‌در شاخه lib تامکت کپی کنید.
  • اتصال به پایگاه داده h2 را در فایل context.xml در شاخه conf تامکت به شکل زیر تعریف کنید:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
 
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
 
	<Resource name="jdbc/contactdb" auth="Container"
		type="javax.sql.DataSource" driverClassName="org.h2.Driver"
		url="jdbc:h2:~/.h2db"
		username="wise" password="wise" 
		maxActive="50" maxIdle="10"  maxWait="-1"
		poolPreparedStatements="true"/>
</Context>

اجرای برنامه

  • برای نصب برنامه در تامکت اقدامات زیر را انجام بدهید:
    • در Eclipse با مراجعه به منوی «Window/Show View»، پنجره Ant View را اضافه کنید.
    • فایل Build.xml را از پروژه ir.asta.training.contacts به Ant View خود در Eclipse اضافه کنید.
    • از درخت دستوراتی که در Ant View مشاهده می کنید دستور contacts/tomcat-deploy را اجرا کنید.
    • به شاخه webapps در تامکت خود مراجعه کنید. باید یک شاخه به نام contacts در آن به وجود آمده باشد.
  • برای اجرای برنامه در eclipse روی فایل ir.asta.training.contacts/WISE-Tomcat-8.launch کلیک راست کنید و از منو Run as/WISE-Tomcat-8 را انتخاب نمایید.
  • در مرورگر آدرس http://localhost:8080/contacts/index.jsp‌ را بزنید.

نکته: در صورتی که پرت 8080 یا 8009 سیستم شما قبلا به وسیله یک پردازه دیگر اشغال شده باشد با خطای JVM Bind مواجه خواهید شد. در این صورت می توانید شماره پرتهای تامکت را در فایل conf/server.xml در تامکت تغییر بدهید.

تست سرویس آزمایشی

دو سرویس REST آزمایشی در آدرس زیر قرار دارند. پس از اجرای برنامه آنها را با استفاده از یک کلاینت REST، مانند Postman، اجرا و خروجی آنها را مشاهده نمایید. لازم به توضیح است پیاده سازی سرویس load واقعی نیست و یک خروجی فرضی بر می گردانند.

سرویس ذخیره سازی آدرس تماس
با فراخوانی این سرویس یک رکورد در جدول WISE_CONTACT درج می شود. این جدول فعلا فقط دو ستون contact_id و name دارد. این سرویس پس از ذخیره سازی یک پیغام موفقیت و شناسه رکورد ذخیره شده با بر می گرداند.

سرویس load آدرس تماس

پیاده سازی چند سرویس REST ساده

در این مرحله می خواهیم سرویسهای REST برای قابلیتهای زیر بنویسیم:

  • save‌ کردن contact
  • load کردن contact
  • لیست کردن تمام contact های موجود
  • ویرایش یک contact
مراحل انجام کار
  • کلاس ContactEntity را در پروژه ir.asta.training.contacts‌ تکمیل کنید به گونه ای که فیلدهای ذکر شده در قسمت معرفی سیستم را پوشش دهد.
  • در کلاس ContactDao‌ پیاده سازی متدهای load و findAll و update را با الهام از پیاده سازی متد save کامل کنید.
  • در کلاس ContactManager پیاده سازی متدهای جدید را با الهام از پیاده سازی متد save و با کمک فیلد dao (از نوع ContactDao) تکمیل نمایید.
  • با اتکا به دانش JAX-RS خود در کلاس ContactServiceImpl پیاده سازی متد load را با الهام از پیاده سازی متد save و با کمک فیلد manager (از نوع ContactManager) تکمیل نمایید.
  • سرویس findAll و update را به واسط ContactService اضافه نمایید. این سرویسهای REST را در کلاس ContactServiceImpl پیاده سازی نمایید.
  • برنامه را مثل قبل اجرا کنید و با کمک Postman سرویسهایی که ایجاد کرده اید را تست کنید.

پیاده سازی سرویس جستجو

به سرویس Contact یک متد جدید با نام search اضافه کنید که در query string پارامترهای جستجو را بگیرید و فقط contact هایی را برگرداند که با آن تطابق دارد. مثلا url زیر contact هایی را برگرداند که نام آنها با ali شروع می شود و تلفنشان با ۰۹۱۲ آغاز می گردد.

  • http://localhost:8080/contacts/rest/contact/search?name=ali&phoneNumber=0912

برای پیاده سازی این سرویس ابتدا باید متد جستجو با کمک QueryDSL  و یا JPQL و یا Criteria API در کلاس Contact DAO پیاده شود و سپس متد جستجو به کلاسهای Manager و Service اضافه گردد.

پیاده سازی موجودیت رویداد

یک موجودیت جدید به نام «رویداد (Event)» ایجاد کنید. این رویداد باید یک نام، توضیح تاریخ و ساعت شروع و ساعت پایان داشته باشد. برای این موجودیت سرویسهای زیر را ایجاد کنید:

  • save
  • update
  • findAll
  • load
راهنمایی
  • برای این موجودیت فایلها و کلاسهایی مشابه موجودیت Contact ایجاد نمایید و طبق همان لایه بندی عمل کنید.

پیاده سازی چند فرم ساده

برای دو موجودیت Event و Contact فرمهای زیر را بسازید:

  • فرم جستجو: بالای این فرم یک پنل جستجو قرار دارد. کاربر پس از پر کردن فیلدهای جستجو با زدن دکمه جستجو لیستی از رکوردهای حاصل مشاهده خواهد کرد. از این فرم کاربر می تواند به صفحات مشاهده یا ایجاد یا ویرایش برود.
  • فرم مشاهده: در فرم مشاهده تمام فیلدهای یک رکورد نمایش داده می شود. در این فرم یک دکمه حذف وجود دارد که کاربر با زدن آن می تواند رکورد جاری را حذف کند.
  • فرم ایجاد/ویرایش: در این فرم کاربر می تواند یک رکورد جدید بسازید. اگر شناسه رکورد برای این فرم فرستاده شده باشد این فرم قابلیت ویرایش رکورد مربوطه را ایجاد می کند.

‫11 دیدگاه ها

  1. با سلام
    بنده طبق مراحل گفته شده اقدام به راه اندازی پروژه کردم، اما متاسفانه افزونه ی wise-maven-plugin:7.9.0.WS در maven repository یافت نمی شود، و دستور contacts/tomcat-deploy در Ant Build با موفقیت اجرا نمی شود.
    لطفا راهنمایی کنید.

    پیام خطا:
    Reason: POM ‘ir.asta.wise:wise-maven-plugin’ not found in repository: Unable to download the artifact from any repository

    1. سلام
      با تشکر از شما بابت مطرح کردن این موضوع.

      این مشکل در برخی تنظیمات دیده می‌شود و در برخی دیگر حالتها دیده نمی‌شود. برای رفع این مشکل، wise-maven-plugin را کلاً از فایل pom.xml حذف کردیم.
      لطفاً پروژه را دوباره از git بگیرید. مشکل فوق قاعدتاً حل می‌شود.

  2. با سلام تشکر فراوان از آموزشی که گذاشتید. میخوام پروژه رو از گیت بگیرم یوزرنیم و پسورد میخواد. میشه راهنمایی کنید. در ضمن من تو گیت لب عضو هستم.با تشکر

  3. سلام – میخواستم بدونم برای قسمت UI آیا یادگیری وادین و JWT رو هم پیشنهاد میکنید و این دو فریم ورک چقدر در بازار کار کاربرد دارند ؟

    1. سلام
      من پیشنهاد نمی کنم. در شرکت اعوان از سال 87 تا 92 به صورت جدی از GWT استفاده می شد. هنوز هم در خط تولید نرم افزار اعوان (موسوم به وایز) از آن پشتیبانی می کنیم. ولی با توجه به ترندهای جدید بهتر است سراغ گزینه های مطرحتر بروید. تکنولوژی رادار پاسخهای قابل اتکایی به چنین سوالاتی می دهد.
      https://www.thoughtworks.com/radar/platforms/gwt

  4. سلام ممنون از این اموزش
    چرا این اموزش قدم به قدم نیست . مثلا نگفته کی اکلیپس را باز کنه و غیره…

    1. سلام
      این آموزش نیست بلکه یک تمرین گام به گام است که در آن فرض شده پیش نیازها قبلا آموخته شده اند.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا