Бұл мақалада біз EJB - Enterprise JavaBeans қарастырамыз. Бұл технология Java EE спецификациясының бөлігі болып табылады. сияқты мәселелерге тоқталамыз:
- EJB дегеніміз не;
- EJB тарихы қандай;
- EJB қандай түрлері бар?
EJB қысқаша тарихы
1996 жылы, осы мақаланың авторы 5 жаста болғанда, Java әзірлеушілер арасында танымал болды. Бұған ыңғайлы API, қоқыстарды автоматты түрде жинау және т.б. Java serverге жауапты жүйелерде кеңінен қолданылды. Дегенмен, тілдің барлық ләззаттарына қарамастан, сол кездегі бағдарламашыларға JDK-де әлі енгізілмеген белгілі бір функционалдық қажет болды. Бұл қажеттіліктер болды:- деректердің тұрақтылығын қамтамасыз ету;
- транзакцияның тұтастығы
- деректерге бәсекелестік қолжетімділік (көп ағынды басқару);
- және, ең алдымен, басқа нәрсе.
EJB дегеніміз не
EJB белгілі бір мағынада контекстке байланысты жалпы Enterprise JavaBeans технологиясының өзін немесе EJB технологиясының бөлігі болып табылатын кейбір нақты Enterprise JavaBean бағдарламалық құралының құрамдас бөлігін (бұршақ) білдіруі мүмкін ұжымдық термин. Технология ретінде EJB анықтамасы Уикипедияда берілген: Enterprise JavaBeans (сонымен қатар EJB аббревиатурасы ретінде жиі пайдаланылады) – бизнес логикасы бар server құрамдастарын жазу және қолдау технологиясының спецификациясы. Ол Java EE бөлігі болып табылады. Бұл технология әдетте бизнес логикасы келесі қызметтердің кем дегенде біреуін және көбінесе олардың барлығын қажет еткенде қолданылады:- деректер тұрақтылығын қолдау: деректер бағдарламаны тоқтатқаннан кейін де қауіпсіз болуы керек. Көбінесе деректер базасын пайдалану арқылы қол жеткізіледі;
- бөлінген транзакцияларды қолдау;
- деректерді параллельді модификациялау және көп ағынды қолдау;
- іс-шараларды қолдау;
- атауды және каталогты қолдау (JNDI);
- қауіпсіздік және деректерге қол жеткізуді шектеу;
- қолданбалы serverде автоматтандырылған орнатуды қолдау;
- қашықтан қол жеткізу.
EJB түрлері
Қорытындылайық. EJB - арнайы annotationлардың бірімен белгіленген кәдімгі Java класы. Мұндай сыныптар бұршақ деп аталады. Класс қандай annotationмен белгіленгеніне байланысты, ол EJB (бұршақ) бір немесе басқа түрінің өкілі болады. Бұршақтардың үш негізгі түрі бар:- Message Driven Beans (хабарламаға негізделген бұршақ);
- Entity Beans - JPA (Java Persistence API) спецификациясында анықталған және деректерді сақтау үшін пайдаланылады;
- Сеанс бұршақтары.
- азаматтығы жоқ (мемлекетсіз);
- күй (ағымдағы сеанс күйін қолдау арқылы);
- singleton (барлық қолданба үшін бір нысан; EJB 3.1 бастап).
Сеанс бұршақтары
Сеанс бұршақтары немесе сеанс бұршақтары бұршақтың белгілі бір түрі болып табылады. Олар клиент бұршақтың әдістерін шақыру арқылы бағдарламалы түрде шақыра алатын бизнес логикасын инкапсуляциялайды. Әдіс шақыруы орындай алады:- жергілікті түрде, сеанс бұршағы сияқты JVM ішіндегі басқа сынып бойынша;
- қашықтан, желі арқылы, басқа JVM жүйесінен, Java RMI (Remote Method Invocation) технологиясын пайдалана отырып.
@Stateless
. Төменде мысал келтірейік:
import javax.ejb.Stateless;
@Stateless
public class StatelessEjbExample {
public String sayHi() {
return "Hi, I'm Stateless EJB!";
}
}
Ағымдағы сеанс күйін (күйін көрсететін) қолдайтын сеанс бөліктері бір клиенттен оған қоңыраулар арасындағы күйі туралы ақпаратты сақтайды және клиенттің нақты сұрауы бойынша олардың болуын тоқтатады. Бұған мемлекеттік бұршақтар әрбір клиент үшін бірегей болғандықтан қол жеткізілді. Бұршақтың бұл түрі жауап беретін тапсырманың мысалы ретінде интернет-дүкенде әр пайдаланушы үшін жаңарған қоржынды сақтау болып табылады. Бұл бұршақтардың өмірлік циклі EJB контейнерімен басқарылады. Бұл бұршақтар да клиент шыққан кезде жойылады. Мұндай бұршақтарды жасау өте оңай. Бұл annotationмен белгіленген Java класы Stateful
. Төмендегі мысал:
import javax.ejb.Stateful;
@Stateful
public class StatefulEjbExample {
public String sayHi() {
return "Hi, I,m Stateful EJB";
}
}
Жалғыз сеанс бұршақтары қолданбаның қызмет ету мерзімі ішінде бір рет іске қосылады және қолданбаның бүкіл қызмет ету мерзімінде болады. Мұндай бұршақтар бір күйді барлық клиенттер арасында бөлісу керек жағдайларға арналған. Азаматтығы жоқ бұршақтар сияқты, жеке бұршақтарда әзірлеуші бұршақтың ішіндегі ортаның жіпке қауіпсіз түрде ұйымдастырылғанын қамтамасыз етуі керек. Жоғарыда талқыланған аналогтары сияқты жасау оңай Singleton бұршағына мысал келтірейік. Бұл annotationсы бар Java класы екенін болжау оңай @Singleton
. Дегенмен, бұл жағдайда абай болу керек. Синтаксис бойынша бірдей, бірақ мақсаты әр түрлі және әртүрлі пакеттерде орналасқан екі annotation бар:
- javax.ejb.Singleton
- javax.inject.Singleton
javax.ejb
. Төмендегі мысал:
import javax.ejb.Singleton;
@Singleton
public class SingletonEjbExample {
public String sayHi() {
return "Hi, I'm Singleton EJB!";
}
}
Message Driven Beans
Message Driven Beans немесе MDBs немесе хабарға негізделген бұршақтар, мысалы, сеанс бұршақтары кейбір бизнес логикасын жүзеге асырады. Бірақ оның туыстарынан айырмашылығы, МДБ бір маңызды айырмашылығы бар. Клиенттер ешқашан MDB әдістерін тікелей шақырмайды. Мұндай бұршақтар көбінесе JMS (Java Message Service) хабарламаларының тыңдаушылары ретінде әрекет етеді және жүйе бөліктері арасында асинхронды хабарлама алмасуды ұйымдастыруға қызмет етеді. Мұндай хабарламаның мысалы ретінде автоматтандырылған бөлшек сауда жүйесінен жабдықтауды басқару жүйесіне тауарлық-материалдық қорларды жеткізу туралы сұранысты келтіруге болады. Төменде MDB бұршағының мысалы берілген. Сеанс бұршақтарынан айырмашылығы, оны құру біршама қызықты:import javax.annotation.Resource;
import javax.ejb.MessageDriven;
import javax.ejb.MessageDrivenContext;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
@MessageDriven(mappedName = "jms/TestQueue")
public class MessageDrivenEjbExample implements MessageListener {
@Resource
private MessageDrivenContext messageDrivenContext;
public void onMessage(Message message) {
try {
if (message instanceof TextMessage) {
TextMessage msg = (TextMessage) message;
msg.getText();
}
} catch (JMSException e) {
messageDrivenContext.setRollbackOnly();
}
}
}
Аннотация MessageDriven
біздің MDB сыныбын бұршақ етеді. Аннотацияның ішінде JNDI көмегімен (JNDI туралы осы жерден оқыңыз ), біздің сынып тыңдаушы болатын JMS дистрибутивінің атауы анықталады. Сонымен қатар, біздің сынып интерфейсті MessageListener
және оның әдісін жүзеге асырады onMessage
. Бұл әдіс annotation ішінде анықталған атаумен кезектен/таратудан кейбір хабарлама келгенде шақырылады MessageDriven
.
Entity бұршақтары
EJB технологиясының бір бөлігі JPA спецификациясы болып табылады. JPA немесе Java Persistence API — Java нысандарының (Entity бұршақтары) Объектілермен қатынасты салыстыруды (ORM) қамтамасыз ететін және осындай нысандарды сақтауға, шығарып алуға және басқаруға арналған API қамтамасыз ететін спецификация. JPA дерекқордағы деректерді Java нысандары ретінде көрсетуге, сонымен қатар Java нысандарын дерекқордағы жазбалар ретінде сақтауға мүмкіндік береді. Әрбір класс мұндай нысан ретінде әрекет ете алмайды, бірақ Entity beans. Entity Bean — дерекқордағы кестені көрсететін Java класы. Бейнелеу (карталау) арнайы annotationларды қолдану арқылы жүзеге асырылады. Олардың көмегімен Java класы деректер қорындағы кестемен салыстырылады, сонымен қатар Java класының өрістері мәліметтер қоры кестесінің өрістерімен салыстырылады. Мұнда codeта түсініктемелері бар Entity бұршақтың мысалы берілген:@Entity // Делает данный класс Entity бином
@Table(name = "employee") // "Связывает" данный класс с таблицей employee в БД
public class Employee implements Serializable {
@Id // Говорит о том, что поле ниже является первичным ключом
@GeneratedValue(strategy = GenerationType.AUTO) // Определяет тип генерации значений первичного ключа
private int id;
@Column(name="name") // "Связывает" поле ниже с полем name в таблице employee в БД
private String name;
@Column (name="age") // "Связывает" поле ниже с полем age в таблице employee в БД
private int age;
// getters and setters...
}
Айта кету керек, бұршақтың бұл түрі тек JPA спецификациясын зерттеу контекстінде зерттеудің мағынасы бар.
Өтініш жазу: EJB HelloWorld
Бұл бөлімде біз GlassFish serverінде орналастыратын шағын Java EE HelloWorld қосымшасын жазамыз. Осы мақаланы оқымас бұрын, жергілікті ортаны орнату туралы мақаланы оқып шығу ұсынылады .-
IntelliJ IDEA жүйесінде жаңа Maven жобасын жасаңыз.
Файл -> Жаңа -> Жоба...
-
Келесі түймесін басыңыз .
-
Maven жобасының параметрлерін толтырыңыз:
-
Аяқтау түймесін басыңыз
-
Жоба құрылды және келесі құрылымға ие:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.javarush.lectures</groupId>
<artifactId>ejb_demo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
</dependency>
</dependencies>
</project>
Әрі қарай Java codeына көшуге болады. Біздің қосымшамыз ең қарапайым болады. Бізде 1 сервлет және 1 EJB болады. Бұл азаматтығы жоқ сеанс бұршағы болады. EJB ішінде біз «Hello World» жолын қайтаратын тек 1 әдісті анықтаймыз. Ең алдымен пакетті жасайық com.javarush.lectures
. Содан кейін пакеттің ішінде com.javarush.lectures
біз бұршақты - DemoEJB жасаймыз. Бұршақ codeы төменде берілген:
import javax.ejb.Stateless;
@Stateless
public class DemoEJB {
public String helloWorld() {
return "Hello world!";
}
}
Жоғарыда айтылғандай, бәрі өте қарапайым. Біздің келесі қадамымыз HTTP сұрауына жауап ретінде EJB мәнін беретін сервлетті жасау болып табылады. Айта кетейік, сервлеттер бұл мақаланың тақырыбы емес, бірақ EJB көрсету үшін оларды әлі де пайдалану қажет болады. DemoServlet
Ол үшін EJB сияқты пакетте жаңа сервлет жасайық . Оның codeы төменде:
@WebServlet("/helloWorld")
public class DemoServlet extends HttpServlet {
@EJB
private DemoEJB ejb;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write(ejb.helloWorld());
}
}
Мұнда code туралы қысқаша түсініктемелер берілген. Аннотация @WebServlet("/helloWorld")
- біздің сыныпты соңғы нүктеге HTTP сұрауларын өңдейтін сервлет ретінде анықтайды /helloWorld
. Біздің сыныптың бір саласы бар - DemoEJB ejb
. Бұл бұрын анықталған біздің бұршақ. Класс өрісіндегі annotation — @EJB
тәуелділік инъекциясын (DI) орындайды. Анау. ejb айнымалысы қажет болғанда жаңа данаға автоматты түрде инициализацияланады. Біздің сынып HttpServlet ұрпағы болып табылады және суперкласс әдістерінің бірін ауыстырады - doGet
. Бұл әдіс HTTP GET сұрауларын өңдейді және екі параметрді қабылдайды - HttpServletRequest
және HttpServletResponse
. HttpServletRequest
кіріс HTTP сұрауы туралы ақпаратты алу үшін қызмет етеді. HttpServletResponse
сұрауға жауап жасау үшін қажет. Әдістің ішінде біз an objectіні PrintWriter
жауап an objectісінен ( HttpServletResponse
), көмегімен аламыз getWriter()
. Әрі қарай, нәтижені пайдаланып, алынған нысанға белгілі бір мән жаза аламыз write
. Бұл, шын мәнінде, біз анықтаған EJB-дан алынған мәнді -a нысанына жазу арқылы қолданатын нәрсе PrintWriter
(мән «Сәлем әлем!» жолы). HTTP сұрауын жіберген клиент бұл мәнді сұрауына жауап ретінде алады. Келесі қадам - қолданбаны GlassFish Java EE serverінде іске қосу. Мұны істеу үшін біз жергілікті ортаны орнату туралы мақалада сипатталғандай жаңа конфигурация жасаймыз . Төменде ағымдағы жоба үшін дайын конфигурацияның скриншоты берілген. Бастамас бұрын GlassFish serverі орнатылғанына көз жеткізіңіз: Іске қосу конфигурациясын жасағаннан кейін, Run -> Run 'ejb_demo' мәзірін немесе Shift+F10 жылдам пернесін пайдаланып қолданбаны іске қосыңыз . Іске қосылғаннан кейін сіз оның журналдарын көре аласыз: Сондай-ақ ашылатын шолғыш: Мұның бәрі қолданбаның жоспарланғандай жұмыс істейтінін көрсетеді.
Қорытынды
Бұл мақалада біз EJB – Enterprise JavaBeans бағдарламасымен таныстық. сияқты сұрақтарды қарастырдық:- EJB дегеніміз не?
- EJB тарихы
- Әртүрлі EJB түрлері
- Message Driven Beans (хабарламаға негізделген бұршақ);
- Entity Beans - JPA (Java Persistence API) нысандар спецификациясында анықталған және деректерді сақтау үшін пайдаланылады;
- Сеанс бұршақтары:
- азаматтығы жоқ (мемлекетсіз)
- күй (ағымдағы сеанс күйін қолдау арқылы)
- singleton (барлық қолданба үшін бір нысан; EJB 3.1 бастап)
GO TO FULL VERSION