Кіріспе

Java API корпоративтік бағдарламалық жасақтаманы модульдік құру үшін

Jakarta Enterprise Beans (EJB; бұрын Enterprise JavaBeans) – корпоративтік бағдарламалық жасақтаманы модульдік құруға арналған бірнеше Java API-дің бірі. EJB – қолданбаның бизнес-логикасын қамтитын серверлік бағдарламалық компонент. EJB веб-контейнері компьютерлік қауіпсіздік, Java сервлеттерінің өмірлік циклын басқару, транзакцияларды өңдеу және басқа веб-қызметтерді қоса алғанда, вебке қатысты бағдарламалық компоненттер үшін орындалу ортасын қамтамасыз етеді. EJB спецификациясы Java EE спецификациясының бір бөлігі болып табылады.

Ерекшеліктер

EJB спецификациясы бастапқыда 1997 жылы IBM компаниясымен әзірленді, ал кейін 1999 жылы Sun Microsystems (EJB 1.0 және 1.1) қабылдады және Java Community Process аясында JSR 19 (EJB 2.0), JSR 153 (EJB 2.1), JSR 220 (EJB 3.0), JSR 318 (EJB 3.1) және JSR 345 (EJB 3.2) ретінде жаңартылды. EJB спецификациясы серверлік жақтағы (сонымен қатар "back end" деп аталады) "бизнес" бағдарламалық жасақтаманы жүзеге асырудың стандартты жолын ұсынады, ол көбінесе кәсіптік қолданбаларда кездеседі (пайдаланушы интерфейсі бағдарламалық жасақтамасынан – "front end" – өзгеше). Мұндай бағдарламалық қамтамасыз ету бірдей типтегі мәселелерді шешеді және бағдарламашылар осы мәселелердің шешімдерін жиі қайтадан іске асырады. Jakarta Enterprise Beans тұрақтылық, транзакциялық тұтастық және қауіпсіздік сияқты жиі кездесетін мәселелерді стандартты түрде шешуге бағытталған, бұл бағдарламашыларға қолдағы кәсіптік бағдарламалық жасақтаманың нақты бөліктеріне көңіл бөлуге мүмкіндік береді.

Тарих

Кәсіпорындар EJB-ді бизнес-логиканы енкапсуляциялау үшін пайдаланғанда өнімділікке кері әсер ететінін анықтады. Бұл себебі бастапқы спецификация тек CORBA (немесе басқа протоколдар) арқылы қашықтан әдіс шақыруға мүмкіндік берді, тіпті көптеген бизнес-қосымшаларға мұндай таратылған есептеу функционалы қажет болмаса да. EJB 2.0 спецификациясы бұл мәселені бірнеше серверге таратылмаған қосымшалар үшін өнімділік жоғалтпай тікелей шақырылатын жергілікті интерфейстер тұжырымдамасын қосу арқылы шешті. EJB 3.0 спецификациясы (JSR 220) бұрынғы нұсқаларынан өзгеше, жаңа, жеңіл салмақты парадигманы ұстанды. EJB 3.0 Spring-тен қарапайым Java объектілерін пайдалану және гетерогенді жүйелерді конфигурациялау мен интеграциялауды жеңілдету үшін тәуелділік инъекциясын қолдану арқылы әсер алды. EJB 3.0 және EJB-нің басқа нұсқаларын MuleSoft v4-ке MuleSoft сертификатталған PlektonLabs EJB Connector арқылы интеграциялауға болады. Hibernate-тің авторы Гэвин Кинг EJB 3.0 процесіне қатысып, технологияның жақтаушысы болды. Hibernate-тегі көптеген мүмкіндіктер Java Persistence API-ге енгізілді, ол EJB 3.0-дегі entity beans-тің орнына келді. EJB 3.0 спецификациясы аннотацияларды (Java тіліне 5.0 нұсқасымен қосылған мүмкіндік) және конфигурациядан гөрі конвенцияны қолдануға көп сүйенді, бұл кодтау стилін азайтуға мүмкіндік берді. Сәйкесінше, практикалық тұрғыдан алғанда, EJB 3.0 әлдеқайда жеңіл және бұрынғы EJB спецификацияларынан едәуір өзгеше, жаңа API болып табылады.

Атқару

EJB-лер әдетте қолданба серверіндегі EJB контейнерінде орналастырылады. Техникалық ереже EJB-нің контейнермен қалай өзара әрекеттесетінін және клиенттік кодтың контейнер/EJB комбинациясымен қалай өзара әрекеттесетінін сипаттайды. Қолданбалар пайдаланатын EJB сыныптары пакетке кіреді. (Бұл пакет тек EJB контейнерінің іске асылулары қолданатын қызмет провайдері интерфейсі болып табылады.) EJB клиенттері Java-ның `new` операторы арқылы тікелей бұршақтарды құрмайды, олар EJB контейнері арқылы сілтеме алуы керек. Бұл сілтеме әдетте іске асырудың өзіне емес, клиент сұраған жергілікті немесе қашықтықтан бизнес-интерфейсін немесе нақты бұршақтың кіші түрін динамикалық түрде іске асыратын проксиге сілтеме болып табылады. Проксині интерфейске немесе бұршаққа тікелей түрлендіруге болады. Клиенттің EJB-ге «көрінісі» бар делінеді, ал жергілікті интерфейс, қашықтықтан интерфейс және бұршақтың кіші түрі тиісінше жергілікті көрініс, қашықтықтан көрініс және интерфейссіз көрініске сәйкес келеді. Бұл прокси EJB контейнеріне транзакциялар, қауіпсіздік, араласулар, инъекциялар және қашықтықтан жіберу сияқты (AOP сияқты) қызметтерді түсінікті түрде ұсыну мүмкіндігін беру үшін қажет. Мысалы, клиент проксидегі әдісті шақырады, ол EJB контейнерінің көмегімен алдымен транзакцияны бастайды, содан кейін нақты бұршақ әдісін шақырады. Бұршақ әдісі қайтарылғаннан кейін прокси транзакцияны аяқтайды (яғни оны бекіту арқылы немесе кері қайтару арқылы) және басқаруды клиентке қайтарады. EJB контейнері клиенттік кодтың EJB-ге жеткілікті қол жеткізу құқықтарына ие болуын қамтамасыз етеді. Қауіпсіздік аспектілерін түсіндірмелер арқылы EJB-ге декларативті түрде қолдануға болады.

Транзакциялар

EJB контейнерлері контейнер басқаратын ACID транзакцияларын да, bean басқаратын транзакцияларды да қолдауы керек. Контейнер басқаратын транзакциялар (CMT) сеанс bean-деріне шақырулар үшін әдепкі бойынша белсенді болады. Яғни, ешқандай нақты конфигурация қажет емес. Бұл мінез-құлықты bean түсіндірмелер арқылы декларативті түрде реттеуге болады, ал қажет болған жағдайда мұндай конфигурация кейіннен орналастыру сипаттамасында (deployment descriptor) өзгертілуі мүмкін. Реттеуге бүкіл bean немесе нақты әдістер үшін транзакцияларды өшіру, немесе транзакция таратудың және транзакцияны бастаудың немесе қосылудың баламалы стратегияларын сұрау кіруі мүмкін. Мұндай стратегиялар негізінен, bean шақырылған кезде транзакция жүргізіліп жатса немесе жоқ болса, не істеу керектігімен айналысады. Келесі нұсқаулар қолдау көрсетіледі:

+ Декларативті транзакцияларды басқару түрлері
Түрі | Түсіндірме
---|---
МІНДЕТТІ (MANDATORY) | Егер клиент транзакцияны бастамаса, қателік туындайды. Әйтпесе клиенттің транзакциясы қолданылады.
ҚАЖЕТТІ (REQUIRED) | Егер клиент транзакцияны бастаса, ол қолданылады. Әйтпесе жаңа транзакция басталады. (Нақты түр көрсетілмеген жағдайда әдепкі параметр)
ЖАҢА ТАЛАП ЕТЕДІ (REQUIRES NEW) | Егер клиент транзакцияны бастаса, ол тоқтатылады. Жаңа транзакция әрқашан басталады.
ҚОЛДАУ КӨРСЕТЕДІ (SUPPORTS) | Егер клиент транзакцияны бастаса, ол қолданылады. Әйтпесе, транзакция қолданылмайды.
ҚОЛДАУ КӨРСЕТПЕЙДІ (NOT SUPPORTED) | Егер клиент транзакцияны бастаса, ол тоқтатылады. Жаңа транзакция басталмайды.
ЕШҚАШАН (NEVER) | Егер клиент транзакцияны бастаса, қателік туындайды. Жаңа транзакция басталмайды.
Сонымен қатар, bean түсіндірме арқылы транзакцияларды JTA API арқылы бағдарламалық түрде басқаруды қалайтынын жариялай алады. Бұл операция режимі Bean басқаратын транзакциялар (BMT) деп аталады, себебі транзакцияны контейнердің орнына өзі bean басқарады.

Қашықтан басқару/таратылған орындау

Java бағдарламалау тілінде жазылған клиентпен байланыс үшін сессиялық түйін @Remote белгісімен белгіленген интерфейс арқылы қашықтан көрініс ұсына алады. Бұл түйіндерді басқа жүйелерде жұмыс істейтін басқа JVM-дегі клиенттерден шақыруға мүмкіндік береді (EJB контейнерінің көзқарасынан, басқа JVM-дегі кез келген код қашықтағы болып саналады). Мемлекетсіз және Синглтон сессиялық түйіндер WSDL және SOAP немесе қарапайым XML арқылы қашықтықтан байланыс үшін «веб-қызмет клиенті көрінісін» де ашуы мүмкін. Бұл JAX RPC және JAX WS талаптарына сәйкес келеді. Дегенмен, JAX RPC қолдауын жою ұсынылып отыр. JAX WS қолдауын қамтамасыз ету үшін сессиялық түйін @WebService белгісімен, ал қашықтан ашылатын әдістер @WebMethod белгісімен таңбаланады. EJB спецификациясы RESTful веб-қызметтері арқылы экспозицияға қатысты ешқандай мәлімдеме жасамайды және осы байланыс түріне тікелей қолдау көрсетпейді, бірақ JAX RS спецификациясы EJB-ні нақты қолдайды. JAX RS спецификациясына сәйкес, мемлекетсіз және Синглтон сессиялық түйіндер @Path белгісі арқылы түбірлік ресурстар ретінде жариялануы мүмкін, ал EJB бизнес әдістері @GET, @PUT, @POST және @DELETE белгілері арқылы ресурстық әдістерге бейімделуі мүмкін. Бұл, алайда, JAX WS және JAX RPC үшін ғана қолданылатын «веб-қызмет клиенті көрінісі» ретінде қарастырылмайды. Веб-қызметтер арқылы байланыс Java бағдарламалау тілінде жазылмаған клиенттер үшін қалыпты жағдай, сонымен қатар EJB серверіне өрт қабырғасы арқылы қол жеткізуде қиындықтарға тап болған Java клиенттері үшін де ыңғайлы. Сонымен қатар, Java клиенттері веб-қызметке негізделген байланысты «клиент кітапханалары» деп аталатын, түсініксіз және дұрыс анықталмаған талаптарды орап өту үшін пайдалана алады; бұл Java клиентінің қашықтағы EJB серверімен байланыс үшін сынып жолында болуы тиіс jar файлдарының жиынтығы. Бұл клиенттік кітапханалар клиентте бар кітапханалармен (мысалы, егер клиенттің өзі толыққанды Java EE сервері болса) қақтығысқа түсуі мүмкін, және мұндай қақтығысты шешу өте қиын немесе мүмкін емес деп есептеледі.

Үй интерфейстері және қажетті бизнес интерфейсі

EJB 2.1 және одан бұрынғы нұсқаларда, әрбір EJB Java іске асыру класын және екі Java интерфейсін қамтамасыз етуі тиіс болды. EJB контейнері EJB іске асыруын қамтамасыз ету үшін Java іске асыру класының мысалдарымен жасалған. Java интерфейстерін EJB клиенттік коды пайдаланды.