JavaRush /Java блогы /Random-KK /Java EE-ге кіріспе
zor07
Деңгей
Санкт-Петербург

Java EE-ге кіріспе

Топта жарияланған
Бүгін біз бұл не туралы айтатын боламыз - Java EE: ол неден тұрады, Java EE қосымшаларының архитектурасының ерекшеліктері қандай және біз осы платформаның әртүрлі технологияларының сипаттамасын береміз. Тақырыптың өзі ауқымды, бірақ біз негізге тоқталмаймыз. Соңында біз Java EE-ді Spring Framework-пен шағын салыстыруды жасаймыз және сұраққа жауап береміз: «нені үйрену жақсы» (спойлер: әрине, бәрін үйрену керек =) ) Java EE-ге кіріспе - 1Негіздерден бастайық.

Java EE - бұл не?

Java EE – кең ауқымды, көп деңгейлі, масштабталатын, сенімді және қауіпсіз желілік қосымшаларды әзірлеу және іске қосу үшін API және орындау ортасын қамтамасыз ететін Java SE үстіне құрылған платформа. Мұндай қолданбалар кәсіпорынның қосымшалары деп аталады, өйткені олар ірі кәсіпорындардың алдында тұрған мәселелерді шешеді. Дегенмен, бұл қолданбалардың түрлерінен және Java EE ұсынатын артықшылықтардан тек ірі корпорациялар мен мемлекеттік мекемелер ғана емес. Java EE платформасы ұсынатын шешімдер жеке әзірлеушілер мен шағын ұйымдар үшін пайдалы, ал кейде жай ғана қажет.

Java EE әзірлеу

Java EE 1998 жылы құрылған Java Community Process (JCP) арқылы жасалған. Ол мүдделі тұлғаларға Java тілі платформасының техникалық сипаттамаларының болашақ нұсқаларын қалыптастыруға қатысуға мүмкіндік береді. Бұл процестің негізі JSR (Java Specification Request) болып табылады, Java платформасына қосу ұсынылатын спецификациялар мен технологияларды сипаттайтын ресми құжаттар. Мұндай сұраныстарды қауымдастық мүшелері – қарапайым әзірлеушілер мен компаниялар жасайды. Соңғыларына Oracle, Red Hat, IBM, Apache және басқалары кіреді. Анау. жігіттер Java-ға қосқысы келетін жаңа мүмкіндіктер мен жақсы нәрселерді ұсынады. Содан кейін олар дауыс беруді өткізеді, соның негізінде келесі нұсқаға нені енгізу туралы шешім қабылданады. 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 жылы платформаны дамытудың жаңа кезеңі болды: Oracle Java EE әзірлеуін бақылауды Eclipse Foundation-қа берді. Ал 2018 жылдың сәуірінде Java EE атауы Java EE 8 нұсқасымен толық үйлесімді Джакарта EE болып өзгертілді.

Java EE қолданбалы архитектурасы

Қысқаша кіріспе. Түсінуді жеңілдету үшін Java EE қолданбаларының құрылымы және әрі қарай қолданатын кейбір терминдер туралы сөйлесейік. Java EE қолданбалары екі негізгі сапаға ие құрылымға ие:
  • Біріншіден, көп деңгейлі. Java EE қосымшалары көп деңгейлі, біз бұл туралы толығырақ айтатын боламыз;
  • екіншіден, ұя салу. Java EE serverі (немесе қолданбалы server) бар, оның ішінде құрамдас контейнерлері орналасқан. Бұл контейнерлерде (бинго!) құрамдас бөліктер бар.
Java EE қолданбаларының архитектурасын түсіндіру үшін алдымен қабаттар туралы сөйлесейік. Деңгейлері қандай? Қандай Java EE технологиялары әртүрлі деңгейде қолданылады? Әрі қарай, қолданба serverлері, құрамдас контейнерлер және құрамдас бөліктердің өздері өзара қалай байланысты екенін талқылаймыз. Бірақ есте сақтаңыз, бұлардың барлығы бір нәрсеге әртүрлі қырынан көзқарастар және мұнда реттілік соншалықты маңызды емес.

Қолдану деңгейлері

Көп деңгейлі қосымшалар – функционалдық принциптері бойынша оқшауланған модульдерге (деңгейлер, қабаттар) бөлінген қолданбалы қолданбалар. Әдетте (соның ішінде Java EE әзірлеу контекстінде) кәсіпорын қолданбалары үш деңгейге бөлінеді:
  • клиент;
  • орташа деңгей;
  • деректерге қол жеткізу деңгейі.
  1. Клиенттік деңгей Java EE serverінен деректерді сұрайтын қолданба (ортаңғы деңгей). Сервер өз кезегінде клиенттің сұранысын өңдейді және оған жауап қайтарады. Клиент қосымшасы браузер, дербес қолданба (мобильді немесе жұмыс үстелі) немесе графикалық интерфейсі жоқ басқа serverлік қолданбалар болуы мүмкін.

  2. Орта деңгей, өз кезегінде, веб-деңгейге және бизнес-логикалық деңгейге бөлінеді.

    1. Веб-деңгей клиенттер мен бизнес-логикалық деңгей арасындағы өзара әрекеттесуді қамтамасыз ететін кейбір құрамдас бөліктерден тұрады.

      Веб деңгейінде келесі Java EE технологиялары қолданылады:

      • JavaServer Faces технологиясы (JSF);
      • Java server беттері (JSP);
      • Экспрессия тілі (EL);
      • Сервлеттер;
      • Java EE (CDI) үшін мәтінмәндер және тәуелділік инъекциясы.

    2. Іскерлік логикалық деңгей қолданбаның барлық бизнес логикасын жүзеге асыратын компоненттерден тұрады. Бизнес логикасы – бұл белгілі бір бизнес саласының (қаржы индустриясы, банк ісі, электрондық коммерция) қажеттіліктерін қамтитын функционалдылықты қамтамасыз ететін code. Бұл деңгейді бүкіл жүйенің өзегі деп санауға болады.

      Осы деңгейде қолданылатын технологиялар:

      • Enterprise JavaBeans (EJB);
      • JAX-RS RESTful веб-қызметтері;
      • Java Persistence API нысандары;
      • Java хабарлама қызметі.

  3. Деректерге қол жеткізу деңгейі. Бұл деңгей кейде кәсіпорынның ақпараттық жүйелерінің деңгейі (EIS) деп аталады. EIS әр түрлі дерекқор serverлерінен, ERP (Enterprise Resource Planning) кәсіпорын ресурстарын жоспарлау жүйелерінен және басқа деректер көздерінен тұрады. Бизнес логикалық деңгей деректер үшін осы деңгейге қатынасады.

    Бұл деңгейде сіз келесідей технологияларды таба аласыз:

    • Java Database Connectivity API (JDBC);
    • Java Persistence API;
    • Java EE қосқышының архитектурасы;
    • Java Transaction API (JTA).

Қолданбалы serverлер, контейнерлер, компоненттер

Уикипедиядан Java EE анықтамасын қарастырайық. Java EE – орта және ірі кәсіпорындардың тапсырмалары үшін serverлік платформаның архитектурасын сипаттайтын Java тіліне арналған спецификациялар мен сәйкес құжаттамалар жиынтығы. Осы контексте «спецификациялар жинағы» нені білдіретінін жақсырақ түсіну үшін Java интерфейсімен ұқсастықты салайық. Java интерфейсінің өзі функционалдылыққа ие емес. Ол жай ғана кейбір функционалдылық жүзеге асырылатын кейбір келісімшартты анықтайды. Бірақ басқа сыныптар интерфейсті жүзеге асырады. Сонымен қатар, бір интерфейсте бірнеше іске асыру болуы мүмкін, олардың әрқайсысы бір-бірінен кейбір бөлшектермен ерекшеленуі мүмкін. Спецификациямен бәрі бірдей. Naked Java EE - бұл жай ғана техникалық сипаттамалар жиынтығы. Бұл сипаттамалар әртүрлі Java EE serverлері арқылы жүзеге асырылады. Java EE serverі Java EE платформасының API интерфейстерін жүзеге асыратын және стандартты Java EE қызметтерін ұсынатын serverлік қолданба болып табылады. Java EE serverлерін кейде қолданбалы serverлер деп те атайды. Сервер деректері көп деңгейлі иерархияда әрқайсысы өз деңгейіне сәйкес келетін қолданба компоненттерін қамтуы мүмкін. Java EE serverі бұл компоненттерге контейнер түрінде әртүрлі қызметтерді ұсынады. Контейнерлер олар орналастыратын құрамдас бөліктер мен құрамдасқа қолдау көрсететін төмен деңгейлі платформаға тәуелсіз функционалдық арасындағы интерфейс болып табылады. Контейнерлер орналасатын құрамдастарға арнайы қызметтерді ұсынады. Мысалы, әзірлеудің өмірлік циклін басқару, тәуелділікті енгізу, параллельдік және т.б.. Контейнерлер техникалық күрделілікті жасырады және тасымалдануды арттырады. Java EE-де контейнерлердің төрт түрі бар:
  1. Апплет контейнерлерін браузерлердің көпшілігі жүзеге асырады. Апплеттерді әзірлеу кезінде сіз қолданбаның көрнекі жағына назар аудара аласыз, ал контейнер қауіпсіз ортаны қамтамасыз етеді.

  2. Application Client Container (ACC) Java SE қолданбаларында енгізу, қауіпсіздікті басқару және атау қызметтері сияқты мүмкіндіктерді іске асыру үшін қажетті Java сыныптарының, кітапханалардың және басқа файлдардың жинағын қамтиды.

  3. Веб-контейнер веб-құрамдастарды (сервлеттер, EJB Lite құрамдастары, JSP беттері, сүзгілер, тыңдаушылар, JSF беттері және веб қызметтері) басқару және орындау үшін негізгі қызметтерді ұсынады. Ол сервлеттерді құруға, инициализациялауға және шақыруға және HTTP және HTTPS протоколдарын қолдауға жауап береді. Бұл контейнер клиент браузерлеріне веб-беттерге қызмет көрсету үшін пайдаланылады.

  4. EJB (Enterprise Java Bean) контейнері қолданбаның іскери логикалық деңгейін қамтитын EJB үлгі құрамдастарын басқаруға және орындауға жауапты. Ол жаңа EJB бұршақ нысандарын жасайды, олардың өмірлік циклін басқарады және транзакция, қауіпсіздік, параллельдік, тарату, атау немесе асинхронды шақыру мүмкіндіктері сияқты қызметтерді ұсынады.

Сондай-ақ Java EE-де Java EE спецификациясын іске асыру қолдауы қажет құрамдастардың төрт түрі бар :
  1. Апплеттер – браузерде жұмыс істейтін графикалық пайдаланушы интерфейсі (GUI) қолданбалары. Олар қуатты пайдаланушы интерфейстерін жасау үшін бай Swing API пайдаланады.

  2. Қолданбалар - бұл клиент жағында жұмыс істейтін бағдарламалар. Әдетте олар графикалық пайдаланушы интерфейсі (GUI) және пакеттік өңдеу үшін пайдаланылады.

  3. Веб-қосымшалар (сервлеттерден және олардың сүзгілерінен, веб-оқиға тыңдаушыларынан, JSP және JSF беттерінен тұрады) - веб-контейнерде іске қосылады және веб-клиенттерден HTTP сұрауларына жауап береді. Сервлеттер сонымен қатар SOAP және RESTful веб-қызметінің соңғы нүктелерін қолдайды.

  4. Кәсіпорын қолданбалары (Enterprise Java Beans, Java Message Service, Java Transaction API, асинхронды қоңыраулар, уақыт қызметтерімен құрастырылған) EJB контейнерінде жұмыс істейді. Контейнермен басқарылатын EJB транзакциялық бизнес логикасын өңдейді. Оларға RMI (немесе SOAP және RESTful веб қызметтері үшін HTTP) арқылы жергілікті немесе қашықтан қол жеткізуге болады.

Төмендегі диаграмма Java EE қолданбасының әдеттегі архитектурасын көрсетеді: Java EE-ге кіріспе - 2

Технологиялар

Сонымен, біз архитектураны сұрыптадық. Жалпы құрылым анық болуы керек. Архитектуралық компоненттерді сипаттау барысында біз EJB, JSP және т.б. сияқты кейбір Java EE технологияларына тоқталдық. Оларды толығырақ қарастырайық. Төмендегі кестеде негізінен клиент деңгейінде қолданылатын технологиялар көрсетілген:
Технология Мақсат
Сервлеттер Клиент сұрауларын динамикалық өңдейтін және жауаптарды генерациялайтын Java сыныптары (әдетте HTML беттері).
Java server беттері (JSF) Пайдаланушы интерфейсі бар веб-қосымшаларды құруға арналған құрылым. Бетке пайдаланушы интерфейсінің құрамдастарын (мысалы, өрістер мен түймелер) қосуға, осы құрамдастарды түрлендіруге және тексеруге және бұл деректерді serverлік жадта сақтауға мүмкіндік береді.
Java Server Faces Facelet технологиясы Бұл JSP беттерінің орнына XHTML беттерін пайдаланатын JSF қолданбасының ішкі түрі
Java server беттері (JSP) Сервлеттерге жинақталған мәтіндік құжаттар. Тұрақты беттерге (HTML беттері сияқты) динамикалық мазмұн қосуға мүмкіндік береді.
Java server беттерінің стандартты тегтер кітапханасы (JSTL) JSP беттерінің контекстіндегі негізгі функцияларды инкапсуляциялайтын тегтер кітапханасы.
Экспрессия тілі Java EE құрамдастарына қол жеткізу үшін JSP және Facelets беттерінде қолданылатын стандартты тегтер жинағы.
Java EE (CDI) үшін мәтінмәндер және тәуелділік инъекциясы Компоненттердің өмірлік циклін басқаруға, сондай-ақ құрамдастарды клиенттік нысандарға қауіпсіз жолмен енгізуге арналған Java EE контейнерлері ұсынатын қызметтер жиынтығын білдіреді.
Java Beans компоненттері Қолданба беттері үшін деректерді уақытша сақтау орны ретінде әрекет ететін нысандар.
Төмендегі кесте бизнес-логикалық деңгейде қолданылатын технологияларды көрсетеді:
Технология Мақсат
Enterprise Java Beans (кәсіпорындық бұршақ) құрамдастары EJB - қолданбаның негізгі функцияларын қамтитын басқарылатын бұршақтар.
JAX-RS RESTful веб-қызметтері Бұл REST архитектуралық стиліне сәйкес веб-қызметтерді әзірлеуге арналған API.
JAX-WS веб-қызметінің соңғы нүктелері SOAP веб-қызметтерін жасауға және тұтынуға арналған API.
Java Persistence API (JPA) нысандары Деректер қоймаларындағы деректерге қол жеткізуге және сол деректерді Java бағдарламалау тілінің нысандарына және керісінше түрлендіруге арналған API.
Java EE басқарылатын бұршақтар Қолданбаның бизнес логикасын қамтамасыз ететін, бірақ EJB транзакциялық немесе қауіпсіздік мүмкіндіктерін талап етпейтін басқарылатын бұршақтар.
Java хабарлама қызметі Java Message Service (JMS) API Java EE қолданбасының құрамдастарына хабарларды жасауға, жіберуге, қабылдауға және оқуға мүмкіндік беретін хабар алмасу стандарты болып табылады. Бұл компоненттер арасындағы бөлінген, сенімді және асинхронды байланысты қамтамасыз етеді.
Төмендегі кесте деректерге қол жеткізу деңгейінде қолданылатын технологияларды көрсетеді:
Технология Мақсат
Java Database Connectivity API (JDBC) Деректер қоймаларынан деректерге қол жеткізуге және алуға арналған төменгі деңгейлі API. JDBC-ті әдеттегі пайдалану белгілі бір дерекқорға қарсы SQL сұрауларын жазу болып табылады.
Java Persistence API Деректер қоймаларындағы деректерге қол жеткізуге және сол деректерді Java бағдарламалау тілінің нысандарына және керісінше түрлендіруге арналған API. JDBC-пен салыстырғанда әлдеқайда жоғары деңгейлі API. JDBC-тің барлық күрделілігін сорғыштың астындағы әзірлеушіден жасырады.
Java EE қосқышының архитектурасы Басқа корпоративтік ресурстарды қосуға арналған API, мысалы:
  • ERP (Кәсіпорын ресурстарын жоспарлау, кәсіпорын ресурстарын жоспарлау жүйесі),
  • CRM (ағылшынша: Customer Relationship Management, тұтынушымен қарым-қатынасты басқару жүйесі).
Java Transaction API (JTA) Бірнеше деректер қоймаларында таратылған транзакциялар мен транзакцияларды қоса, транзакцияларды анықтауға және басқаруға арналған API.

Java EE көктемге қарсы

Spring Framework Java EE-ге бәсекелес болып саналады. Егер сіз осы екі платформаның дамуына қарасаңыз, қызықты көрініс пайда болады. Java EE бірінші нұсқалары IBM компаниясының қатысуымен жасалды. Олар салқын, бірақ ебедейсіз, ауыр және қолдануға ыңғайсыз болып шықты. Әзірлеушілер конфигурация файлдарының көп санын сақтау қажеттілігіне және дамуды қиындататын басқа себептерге байланысты күресті. Дәл осы уақытта Spring IoC дүниеге келді. Бұл шағын, әдемі және пайдалану оңай кітапхана болды. Ол сондай-ақ конфигурация файлын пайдаланды, бірақ Java EE-ден айырмашылығы, тек біреуі ғана болды. Көктемнің қарапайымдылығы барлығы дерлік бұл шеңберді өз жобаларында қолдана бастады. Содан кейін Spring және Java EE бір нәрсеге жол бастады, бірақ әртүрлі ұштардан. Spring әзірлеушісі Pivotal Software Java әзірлеушілерінің барлық мүмкін және мүмкін емес қажеттіліктерін қанағаттандыру үшін жобадан кейін жобаны шығара бастады. Бірте-бірте бұрын көктем деп аталатын жоба алдымен жобалардың біріне айналды, содан кейін Spring Core-дағы бірнеше басқа жобалармен толығымен біріктірілді. Мұның бәрі көктемнің бастапқымен салыстырғанда сөзсіз асқынуына әкелді. Уақыт өте келе, көктемгі тәуелділіктердің барлық шиеленістерін қадағалау өте қиын болды және бәрін өзі жүктеп, іске қосатын жеке кітапхана қажеттілігі туындады (қазір сүйікті Spring Boot бір жерде тығылып қалды). Осы уақыт бойы JCP бір нәрсемен жұмыс істеді - Java EE ішінде мүмкін болатын барлық нәрсені барынша жеңілдетуге қол жеткізу. Нәтижесінде, заманауи EJB-де бұршақты сипаттау үшін әзірлеушіге Enterprise Java Beans технологиясының толық қуатына қол жеткізуге мүмкіндік беретін сыныптың үстінде бір annotationны көрсету жеткілікті. Және ұқсас жеңілдету Java EE ішіндегі әрбір спецификацияға әсер етті. Нәтижесінде Spring және Java EE функционалдылық тұрғысынан шамамен паритет болып табылады. Кейбір нәрселер жақсырақ, кейбір нәрселер нашар, бірақ жаһандық тұрғыдан қарасаңыз, үлкен айырмашылықтар жоқ. Бұл жұмыстың күрделілігіне де қатысты. Spring және Java EE екеуі де тамаша құрал. Қазіргі уақытта Java-да корпоративтік желілік қосымшаларды құруға арналған ең жақсысы болуы мүмкін. Дегенмен, Java EE әдетте Enterprise Application Server ішінде ғана жұмыс істей алады (Tomcat біреу емес) және Spring стекіндегі қолданба кез келген нәрседе (сол Tomcat-та) және тіпті serverсіз де (өйткені ол жұмыс істейді) жұмыс істей алады. ол өз ішінде тәуелсіз). Бұл Spring кішігірім GUI қолданбаларын немесе микросервис архитектурасын әзірлеу үшін тамаша құрал етеді. Бірақ қолданбалы serverлерге тәуелділікті жою Spring қосымшаларының ауқымдылығына теріс әсер етті. Ал Java EE масштабталатын монолитті кластер қосымшасын іске асыру үшін өте қолайлы. Spring Framework-пен таныс әзірлеушілер қазіргі уақытта еңбек нарығында үлкен сұранысқа ие. Бұл тарихи түрде осылай болды: 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