JavaRush /وبلاگ جاوا /Random-FA /مقدمه ای بر Java EE
zor07
مرحله
Санкт-Петербург

مقدمه ای بر Java EE

در گروه منتشر شد
امروز ما در مورد چیستی آن صحبت خواهیم کرد - Java EE: از چه چیزی تشکیل شده است، ویژگی های معماری برنامه های Java EE چیست، و توضیحاتی در مورد فناوری های مختلف این پلت فرم ارائه خواهیم داد. موضوع به خودی خود گسترده است، اما ما در اصول اولیه متوقف نمی شویم. در پایان، مقایسه کوچکی از Java EE با Spring Framework انجام می دهیم و به این سوال پاسخ می دهیم: "چه چیزی بهتر است یاد بگیریم" (اسپویلر: البته، شما باید همه چیز را یاد بگیرید =) ) مقدمه ای بر Java EE - 1بیایید با اصول اولیه شروع کنیم.

Java EE - چیست؟

Java EE پلتفرمی است که بر روی Java SE ساخته شده است که یک API و محیط زمان اجرا را برای توسعه و اجرای برنامه های شبکه در مقیاس بزرگ، چند لایه، مقیاس پذیر، قابل اعتماد و ایمن فراهم می کند. به این گونه برنامه ها، برنامه های کاربردی سازمانی می گویند زیرا آنها مشکلاتی را که کسب و کارهای بزرگ با آن مواجه هستند حل می کنند. با این حال، این فقط شرکت‌های بزرگ و سازمان‌های دولتی نیستند که می‌توانند از این نوع برنامه‌ها و مزایایی که Java EE ارائه می‌کند بهره ببرند. راه حل هایی که پلت فرم Java EE ارائه می دهد برای توسعه دهندگان فردی و سازمان های کوچک مفید و گاهی اوقات به سادگی ضروری هستند.

توسعه جاوا EE

Java EE از طریق فرآیند جامعه جاوا (JCP) که در سال 1998 تشکیل شد، توسعه یافته است. این به افراد علاقه مند اجازه می دهد تا در شکل دادن به نسخه های آینده مشخصات پلت فرم زبان جاوا شرکت کنند. اساس این فرآیند JSR (درخواست مشخصات جاوا) است، اسناد رسمی که مشخصات و فناوری‌هایی را که برای اضافه شدن به پلتفرم جاوا پیشنهاد می‌شود، توصیف می‌کند. چنین درخواست هایی توسط اعضای جامعه - توسعه دهندگان و شرکت های معمولی انجام می شود. مورد دوم شامل اوراکل، رد هت، آی‌بی‌ام، آپاچی و بسیاری دیگر می‌شود. آن ها بچه ها ویژگی ها و چیزهای جدیدی را برای در نظر گرفتن پیشنهاد می کنند که می خواهند در جاوا گنجانده شوند. و سپس رأی گیری می کنند که بر اساس آن تصمیم گیری می شود که چه چیزی در نسخه بعدی گنجانده شود. تاریخچه نسخه Java EE به شکل زیر است:
  • J2EE 1.2 (دسامبر 1999)
  • J2EE 1.3 (سپتامبر 2001)
  • J2EE 1.4 (نوامبر 2003)
  • Java EE 5 (مه 2006)
  • Java EE 6 (دسامبر 2009)
  • Java EE 7 (مه)
  • Java EE 8 (اوت 2017)
  • جاکارتا EE 8 (سپتامبر 2019)
در سال 2017، نقطه عطف جدیدی در توسعه پلتفرم رخ داد: اوراکل کنترل توسعه Java EE را به بنیاد Eclipse منتقل کرد. و در آوریل 2018، Java EE به Jakarta EE تغییر نام داد که کاملاً با Java EE 8 سازگار است.

معماری کاربردی Java EE

یک مقدمه کوتاه برای درک آسان تر، اجازه دهید در مورد ساختار برنامه های Java EE و برخی از اصطلاحاتی که در ادامه استفاده خواهیم کرد صحبت کنیم. برنامه های Java EE ساختاری دارند که دارای دو ویژگی کلیدی است:
  • اولا، چند سطحی. برنامه های Java EE چند لایه هستند و ما در این مورد با جزئیات بیشتری صحبت خواهیم کرد.
  • دوم، لانه سازی. یک سرور Java EE (یا سرور برنامه) با کانتینرهای مؤلفه در داخل آن وجود دارد. این ظروف حاوی اجزای (بینگو!) هستند.
برای توضیح معماری برنامه های Java EE ابتدا اجازه دهید در مورد لایه ها صحبت کنیم. سطوح چیست؟ چه فناوری های جاوا EE در سطوح مختلف استفاده می شود؟ در مرحله بعد، نحوه اتصال سرورهای برنامه، کانتینرهای مؤلفه و خود مؤلفه ها را مورد بحث قرار خواهیم داد. اما به خاطر داشته باشید که همه اینها نماهایی از زوایای مختلف در یک چیز هستند و ترتیب در اینجا چندان مهم نیست.

سطوح برنامه

برنامه های چند لایه برنامه هایی هستند که بر اساس اصول عملکردی به ماژول های ایزوله (سطوح، لایه ها) تقسیم می شوند. به طور معمول (از جمله در زمینه توسعه Java EE)، برنامه های کاربردی سازمانی به سه سطح تقسیم می شوند:
  • مشتری؛
  • سطح متوسط؛
  • سطح دسترسی به داده ها
  1. لایه مشتری برنامه ای است که داده ها را از سرور Java EE (لایه میانی) درخواست می کند. سرور نیز به نوبه خود درخواست مشتری را پردازش می کند و به آن پاسخ می دهد. برنامه مشتری می تواند یک مرورگر، یک برنامه مستقل (موبایل یا دسکتاپ) یا سایر برنامه های سرور بدون رابط گرافیکی باشد.

  2. سطح میانی به نوبه خود به سطح وب و سطح منطق تجاری تقسیم می شود.

    1. لایه وب شامل اجزایی است که تعامل بین مشتریان و لایه منطق تجاری را فراهم می کند.

      فناوری‌های Java EE زیر در سطح وب استفاده می‌شوند:

      • فناوری چهره های JavaServer (JSF)؛
      • صفحات سرور جاوا (JSP)؛
      • زبان بیان (EL)؛
      • سرولت ها
      • زمینه ها و تزریق وابستگی برای جاوا EE (CDI).

    2. لایه منطق تجاری شامل اجزایی است که تمام منطق تجاری برنامه را پیاده سازی می کند. منطق کسب و کار کدی است که عملکردی را ارائه می دهد که نیازهای برخی از حوزه های تجاری خاص (صنعت مالی، بانکداری، تجارت الکترونیک) را پوشش می دهد. این سطح را می توان هسته کل سیستم در نظر گرفت.

      فناوری هایی که در این سطح درگیر هستند:

      • Enterprise JavaBeans (EJB)؛
      • خدمات وب JAX-RS RESTful;
      • نهادهای Java Persistence API.
      • سرویس پیام جاوا.

  3. سطح دسترسی به داده ها این سطح گاهی اوقات سطح سیستم های اطلاعات سازمانی (EIS) نامیده می شود. EIS از سرورهای مختلف پایگاه داده، سیستم های برنامه ریزی منابع سازمانی ERP (برنامه ریزی منابع سازمانی) و سایر منابع داده تشکیل شده است. لایه منطق تجاری به این لایه برای داده دسترسی دارد.

    در این سطح می توانید فناوری هایی مانند:

    • Java Database Connectivity API (JDBC);
    • Java Persistence API;
    • معماری اتصال دهنده جاوا EE;
    • Java Transaction API (JTA).

سرورهای برنامه، کانتینرها، اجزای سازنده

بیایید نگاهی به تعریف Java EE از ویکی پدیا بیاندازیم. Java EE مجموعه ای از مشخصات و مستندات مربوط به زبان جاوا است که معماری پلتفرم سرور را برای وظایف شرکت های متوسط ​​و بزرگ توصیف می کند. برای درک بهتر معنای "مجموعه مشخصات" در این زمینه، بیایید یک قیاس با رابط جاوا ترسیم کنیم. رابط جاوا خود فاقد عملکرد است. این به سادگی قراردادی را تعریف می کند که بر اساس آن برخی از عملکردها اجرا می شود. اما کلاس های دیگر اینترفیس را پیاده سازی می کنند. علاوه بر این، یک رابط می تواند چندین پیاده سازی داشته باشد که هر کدام ممکن است در برخی جزئیات با یکدیگر متفاوت باشند. با مشخصات همه چیز دقیقاً یکسان است. Naked Java EE فقط مجموعه ای از مشخصات است. این مشخصات توسط سرورهای مختلف جاوا EE پیاده سازی شده است. سرور Java EE یک برنامه کاربردی سرور است که APIهای پلتفرم Java EE را پیاده سازی می کند و خدمات استاندارد Java EE را ارائه می دهد. سرورهای جاوا EE گاهی اوقات سرورهای کاربردی نامیده می شوند. داده های سرور می تواند شامل اجزای برنامه باشد که هر کدام با سطح خود در یک سلسله مراتب چند سطحی مطابقت دارد. سرور Java EE خدمات مختلفی را در قالب یک کانتینر به این قطعات ارائه می کند. کانتینرها رابط بین مؤلفه هایی هستند که میزبانی می کنند و عملکرد سطح پایین مستقل از پلت فرم که از مؤلفه پشتیبانی می کند. کانتینرها خدمات خاصی را به اجزایی که میزبانی می کنند ارائه می دهند. به عنوان مثال، مدیریت چرخه عمر توسعه، تزریق وابستگی، همزمانی و غیره. کانتینرها پیچیدگی فنی را پنهان می کنند و قابلیت حمل را افزایش می دهند. چهار نوع مختلف کانتینر در Java EE وجود دارد:
  1. کانتینرهای اپلت توسط اکثر مرورگرها پیاده سازی می شوند. هنگام توسعه اپلت ها، می توانید روی جنبه بصری برنامه تمرکز کنید، در حالی که کانتینر یک محیط امن را فراهم می کند.

  2. Application Client Container (ACC) شامل مجموعه‌ای از کلاس‌های جاوا، کتابخانه‌ها و سایر فایل‌های مورد نیاز برای پیاده‌سازی ویژگی‌هایی مانند تزریق، مدیریت امنیت و خدمات نام‌گذاری در برنامه‌های Java SE است.

  3. کانتینر وب خدمات اصلی را برای مدیریت و اجرای اجزای وب (سرورلت ها، اجزای EJB Lite، صفحات JSP، فیلترها، شنوندگان، صفحات JSF و خدمات وب) ارائه می دهد. این مسئول نمونه سازی، مقداردهی اولیه و فراخوانی سرولت ها و پشتیبانی از پروتکل های HTTP و HTTPS است. این کانتینر برای ارائه صفحات وب به مرورگرهای مشتری استفاده می شود.

  4. کانتینر EJB (Enterprise Java Bean) مسئول مدیریت و اجرای اجزای مدل EJB است که حاوی لایه منطق تجاری برنامه است. موجودیت‌های جدید EJB bean را ایجاد می‌کند، چرخه حیات آنها را مدیریت می‌کند و خدماتی مانند تراکنش، امنیت، همزمانی، توزیع، نام‌گذاری یا قابلیت‌های فراخوانی ناهمزمان را ارائه می‌کند.

همچنین در Java EE چهار نوع مؤلفه وجود دارد که اجرای مشخصات Java EE باید از آنها پشتیبانی کند:
  1. اپلت ها برنامه های رابط کاربری گرافیکی (GUI) هستند که در مرورگر اجرا می شوند. آنها از API غنی Swing برای تولید رابط های کاربری قدرتمند استفاده می کنند.

  2. برنامه ها برنامه هایی هستند که در سمت کلاینت اجرا می شوند. به طور معمول آنها رابط کاربری گرافیکی (GUI) هستند و برای پردازش دسته ای استفاده می شوند.

  3. برنامه های کاربردی وب (شامل سرورها و فیلترهای آنها، شنوندگان رویدادهای وب، صفحات JSP و JSF) - در یک کانتینر وب اجرا می شوند و به درخواست های HTTP از مشتریان وب پاسخ می دهند. Servlets همچنین از SOAP و RESTful web service endpoints پشتیبانی می کند.

  4. برنامه های کاربردی (ساخته شده با Enterprise Java Beans، Java Message Service، Java Transaction API، تماس های ناهمزمان، Time Services) در یک کانتینر EJB اجرا می شوند. EJB های مدیریت کانتینر، منطق تجاری تراکنشی را مدیریت می کنند. آنها را می توان به صورت محلی یا از راه دور از طریق RMI (یا HTTP برای خدمات وب SOAP و RESTful) در دسترس قرار داد.

نمودار زیر یک معماری برنامه کاربردی Java EE معمولی را نشان می دهد: مقدمه ای بر Java EE - 2

فن آوری ها

بنابراین، ما معماری را مرتب کرده ایم. ساختار کلی باید واضح باشد. در فرآیند تشریح اجزای معماری، به برخی از فناوری‌های Java EE مانند EJB، JSP و غیره پرداختیم. اجازه دهید نگاهی دقیق‌تر به آن‌ها بیندازیم. جدول زیر فناوری هایی را نشان می دهد که عمدتاً در سطح مشتری استفاده می شوند:
فن آوری هدف
سرولت ها کلاس های جاوا که به صورت پویا درخواست های مشتری را پردازش می کنند و پاسخ ها را تولید می کنند (معمولاً صفحات HTML).
چهره های سرور جاوا (JSF) چارچوبی برای ساخت برنامه های کاربردی وب با رابط کاربری. به شما امکان می‌دهد اجزای رابط کاربری (مثلاً فیلدها و دکمه‌ها) را در یک صفحه قرار دهید، این مؤلفه‌ها را تبدیل و تأیید کنید، و این داده‌ها را در فضای ذخیره‌سازی سمت سرور ذخیره کنید.
فن آوری Faces Faces Server Java این یک زیرنوع از برنامه JSF است که از صفحات XHTML به جای صفحات JSP استفاده می کند
صفحات سرور جاوا (JSP) اسناد متنی که در سرورلت ها کامپایل می شوند. به شما امکان می دهد محتوای پویا را به صفحات ثابت (مانند صفحات HTML) اضافه کنید.
کتابخانه برچسب استاندارد صفحات سرور جاوا (JSTL) یک کتابخانه برچسب که عملکرد اصلی را در زمینه صفحات JSP کپسوله می کند.
زبان بیان مجموعه ای از تگ های استاندارد که در صفحات JSP و Facelet برای دسترسی به اجزای Java EE استفاده می شود.
زمینه ها و تزریق وابستگی برای Java EE (CDI) نشان دهنده مجموعه ای از خدمات ارائه شده توسط کانتینرهای Java EE برای مدیریت چرخه عمر اجزا و همچنین تزریق اجزا به اشیاء مشتری به روشی امن است.
اجزای لوبیا جاوا اشیایی که به عنوان ذخیره موقت داده برای صفحات برنامه عمل می کنند.
جدول زیر فناوری های مورد استفاده در سطح منطق تجاری را نشان می دهد:
فن آوری هدف
اجزای Enterprise Java Beans (Enterprise Bean). EJB ها لوبیاهای مدیریت شده ای هستند که دارای عملکرد اصلی یک برنامه کاربردی هستند.
خدمات وب JAX-RS RESTful این یک API برای توسعه خدمات وب است که با سبک معماری REST مطابقت دارد.
نقاط پایانی سرویس وب JAX-WS API برای ایجاد و مصرف خدمات وب SOAP.
موجودیت های Java Persistence API (JPA). یک API برای دسترسی به داده ها در ذخیره سازی داده ها و تبدیل آن داده ها به اشیاء زبان برنامه نویسی جاوا و بالعکس.
لوبیاهای مدیریت شده جاوا EE لوبیاهای مدیریت شده که منطق تجاری برنامه را ارائه می‌کنند اما به ویژگی‌های تراکنشی یا امنیتی EJB نیاز ندارند.
سرویس پیام جاوا Java Message Service (JMS) API یک استاندارد پیام رسانی است که به اجزای برنامه Java EE امکان ایجاد، ارسال، دریافت و خواندن پیام ها را می دهد. این امر ارتباط توزیع شده، قابل اعتماد و ناهمزمان بین اجزا را تضمین می کند.
جدول زیر فناوری های مورد استفاده در لایه دسترسی به داده را نشان می دهد:
فن آوری هدف
Java Database Connectivity API (JDBC) API سطح پایین برای دسترسی و بازیابی داده ها از فروشگاه های داده. یک استفاده معمولی از JDBC نوشتن پرس و جوهای SQL در برابر یک پایگاه داده خاص است.
Java Persistence API یک API برای دسترسی به داده ها در ذخیره سازی داده ها و تبدیل آن داده ها به اشیاء زبان برنامه نویسی جاوا و بالعکس. API سطح بسیار بالاتر در مقایسه با JDBC. تمام پیچیدگی های JDBC را از توسعه دهنده در زیر کاپوت پنهان می کند.
معماری اتصال دهنده جاوا EE API برای اتصال سایر منابع شرکتی مانند:
  • ERP (برنامه ریزی منابع سازمانی، سیستم برنامه ریزی منابع سازمانی)،
  • CRM (به انگلیسی: Customer Relationship Management, Customer Relationship Management System).
Java Transaction API (JTA) یک API برای تعریف و مدیریت تراکنش ها، از جمله تراکنش های توزیع شده و تراکنش ها در چندین فروشگاه داده.

جاوا EE در مقابل اسپرینگ

Spring Framework یک رقیب برای Java EE در نظر گرفته می شود. اگر به توسعه این دو پلتفرم نگاه کنید، تصویر جالبی نمایان می شود. اولین نسخه های Java EE با مشارکت IBM ایجاد شد. معلوم شد که آنها سرد، اما دست و پا چلفتی، سنگین و برای استفاده ناخوشایند هستند. توسعه دهندگان به دلیل نیاز به نگهداری تعداد زیادی فایل پیکربندی و دلایل دیگری که توسعه را پیچیده می کند، با مشکل مواجه شدند. در همان زمان Spring IoC متولد شد. این یک کتابخانه کوچک، زیبا و آسان برای استفاده بود. همچنین از یک فایل پیکربندی استفاده می کرد، اما بر خلاف Java EE، تنها یک فایل وجود داشت. سادگی Spring منجر به این واقعیت شده است که تقریباً همه شروع به استفاده از این چارچوب در پروژه های خود کردند. و سپس Spring و Java EE مسیر خود را به سمت یک چیز آغاز کردند، اما از انتهای متفاوت. Pivotal Software، توسعه دهنده Spring، شروع به انتشار پروژه به پروژه کرد تا تمام نیازهای ممکن و غیرممکن توسعه دهندگان جاوا را پوشش دهد. به تدریج آنچه قبلاً بهار نامیده می شد ابتدا به یکی از پروژه ها تبدیل شد و سپس به طور کامل با چندین پروژه دیگر در Spring Core ادغام شد. همه اینها به پیچیدگی اجتناب ناپذیر بهار در مقایسه با آنچه در ابتدا بود منجر شد. با گذشت زمان، پیگیری کل وابستگی‌های بهار بسیار دشوار شد و نیاز به یک کتابخانه جداگانه وجود داشت که همه چیز را خودش بارگیری و اجرا می‌کرد (اکنون Spring Boot محبوب در جایی سکسکه شده است). در تمام این مدت، JCP روی یک چیز کار کرده است - دستیابی به حداکثر ساده سازی هر چیزی که در Java EE ممکن است. در نتیجه، در یک EJB مدرن، برای توصیف یک لوبیا، کافی است یک حاشیه‌نویسی بالای کلاس مشخص شود، که به توسعه‌دهنده امکان دسترسی کامل به فناوری Enterprise Java Beans را می‌دهد. و ساده‌سازی‌های مشابه بر تمامی مشخصات در Java EE تأثیر گذاشته است. در نتیجه، Spring و Java EE از نظر عملکرد تقریباً برابر هستند. بعضی چیزها بهتر هستند، بعضی چیزها بدتر، اما اگر به صورت جهانی نگاه کنید، تفاوت زیادی وجود ندارد. همین امر در مورد پیچیدگی کار نیز صدق می کند. هر دو Spring و Java EE ابزارهای عالی هستند. شاید بهترین چیزی که در حال حاضر برای ساخت برنامه های شبکه سازمانی در جاوا وجود دارد. با این حال، Java EE معمولاً فقط می‌تواند در سرور برنامه‌های Enterprise کار کند (Tomcat یکی نیست)، و یک برنامه در پشته Spring می‌تواند روی هر چیزی (در همان Tomcat) و حتی بدون سرور (زیرا اجرا شود) اجرا شود. به طور مستقل در درون خود). این امر Spring را به ابزاری ایده‌آل برای توسعه برنامه‌های رابط کاربری گرافیکی جلویی کوچک یا معماری‌های میکروسرویس تبدیل می‌کند. اما حذف وابستگی به سرورهای اپلیکیشن تاثیر منفی بر مقیاس پذیری اپلیکیشن های Spring داشت. و Java EE برای اجرای یک برنامه کلاستر یکپارچه مقیاس پذیر مناسب است. توسعه دهندگان آشنا با چارچوب Spring در حال حاضر تقاضای بیشتری در بازار کار دارند. از نظر تاریخی اینگونه اتفاق افتاد: در زمانی که Java EE بیش از حد پیچیده بود، Spring "پایه مشتری به دست آورد." و با این حال، هیچ پاسخ روشنی برای این سوال وجود ندارد که Spring یا Java EE چه چیزی را یاد بگیریم. به یک مبتدی می توان توصیه های زیر را ارائه داد. با هر دو پلتفرم (حداقل به صورت سطحی) آشنا شوید. یک پروژه خانه کوچک را در Java EE و Spring بنویسید. و سپس در چارچوبی که در کار مورد نیاز است، عمیق‌تر شوید. در نتیجه جابجایی بین Spring و Java EE دشوار نخواهد بود.

نتایج

یک موضوع گسترده را البته نمی توان در یک مقاله پوشش داد! پس از انبوهی از اصطلاحات جدید، احتمالاً می خواهید این دانش را در یک مثال واقعی "به کار ببرید". بنابراین، ما به مطالعه Java EE ادامه خواهیم داد: در مقاله بعدی درس های عملی در مورد راه اندازی یک محیط محلی برای توسعه Java EE را خواهید یافت.
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION