Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ejb java

Enterprise JavaBeans

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ EJB (Enterprise JavaBeans) ΠΈ для Ρ‡Π΅Π³ΠΎ ΠΎΠ½Π° Π½ΡƒΠΆΠ½Π°? МоТно Π»ΠΈ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· EJB ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ WEB-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ? Π§Ρ‚ΠΎ Π΄Π°Ρ‘Ρ‚ EJB программистам?

Π’ java WEB-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ JSP (JavaServer Pages), JavaServer Faces (JSF), Struts, GWT. Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ JDBC (Java Database Connectivity) ΠΈΠ»ΠΈ JPA (JBoss Hibernate). ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² WEB-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ servlet’a позволяСт ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ сСрвСру ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ дСйствия, Ρ‚.Π΅. Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡŽ сообщСний. Π“Π΄Π΅ ΠΈ ΠΊΠ°ΠΊ Π² WEB-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ EJB?

ΠžΠΏΡ‹Ρ‚ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. Π­Ρ‚ΠΎ ΠΈ обСспСчиваСт EJB, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт Π½Π°Π±ΠΎΡ€ «фиксированных» Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ сСрвСрных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π° Ρ‚Π°ΠΊΠΆΠ΅ провСрСнная Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ схСма Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ сСрвСрных ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Π­Ρ‚ΠΈ фиксированныС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΈΠ»ΠΈ слуТбы, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Β«ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ EJBΒ». Для доступа ΠΊ этим слуТбам Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ спСциализированныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ EJB API, ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΈΡ… Π½Π° сСрвСрС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Π‘Π΅Ρ€Π²Π΅Ρ€ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Java EE (Enterprise Edition) Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π΄Π²Π° основных ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° : WEB-container (для использования JSP, JSF, Struts ΠΈ Ρ‚.Π΄.) ΠΈ EJB-container. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса ΠΈ слабо ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для описания бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ WEB-прилоТСния. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ EJB-container.

Enterprise JavaBeans ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ написания ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ сСрвСрных ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², содСрТащих бизнСс-Π»ΠΎΠ³ΠΈΠΊΡƒ. Данная тСхнология примСняСтся, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π² Ρ‚ΠΎΠΌ случаС, Ссли бизнСс-Π»ΠΎΠ³ΠΈΠΊΠ° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… сСрвисов :

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² EJB

Π’ языкС EJB ΠΏΠΎΠ΄ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ подразумСваСтся Π·Π΅Ρ€Π½ΠΎ (Bean), Π° ΠΏΠΎΠ΄ Enterprise ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‚ Β«ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉΒ». EJB Π΄Π΅Π»ΠΈΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ (Π·Π΅Ρ€Π½Π°) Π½Π° нСсколько Ρ‚ΠΈΠΏΠΎΠ², исходя ΠΈΠ· ΠΈΡ… прСдназначСния :

БСссионный ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Session Beans, ΠΈΠ½Π°Ρ‡Π΅ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ сСансовый, вызываСтся ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ (Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠΌ) для выполнСния Π²ΠΏΠΎΠ»Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΊΡ€Π΅Π΄ΠΈΡ‚Π½ΠΎΠΉ истории ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π‘Π»ΠΎΠ²ΠΎ «сСссионный» ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ экзСмпляр ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° доступСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° врСмя выполнСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ сСрвСром, ΠΈ Π±Π΅Π·Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π½ΠΎ уничтоТаСтся Π² случаС Π°Π²Π°Ρ€ΠΈΠΈ ΠΈΠ»ΠΈ остановки сСрвСра. Для доступа ΠΊ сСрвСрной части прилоТСния, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ сСссионного ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅Π³ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ бизнСс-Π·Π°Π΄Π°Ρ‡ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ сСрвСра.

БСансовый ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ с сохранСниСм состояния EJB stateful автоматичСски сохраняСт своС состояниС ΠΌΠ΅ΠΆΠ΄Ρƒ обращСниями ΠΊ Π½Π΅ΠΌΡƒ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ своС сущСствованиС Π»ΠΈΠ±ΠΎ ΠΏΠΎ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚Ρƒ, Π»ΠΈΠ±ΠΎ ΠΏΠΎ явному запросу ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° с сохранСниСм состояния являСтся ΠΊΠΎΡ€Π·ΠΈΠ½Π° с ΠΏΠΎΠΊΡƒΠΏΠΊΠ°ΠΌΠΈ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-ΠΌΠ°Π³Π°Π·ΠΈΠ½Π΅.

БСансовыС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π±Π΅Π· сохранСния состояния EJB stateless Π½Π΅ хранят Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ своСм состоянии ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹ΠΌΠΈ слуТбами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ дСйствия Π² Ρ€Π°ΠΌΠΊΠ°Ρ… запроса. EJB stateless ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ срСдств Π½Π° ΠΊΡ€Π΅Π΄ΠΈΡ‚Π½ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚Ρƒ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΊΡ€Π΅Π΄ΠΈΡ‚Π½ΠΎΠΉ истории ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. На основС stateless-Π±ΠΈΠ½ΠΎΠ² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ WEB-сСрвисы.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹-ΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΠΈ EJB singleton ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ совмСстно всСми ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌΠΈ ΠΊ Π½ΠΈΠΌ доступ, ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ своС сущСствованиС Π½Π° протяТСнии всСго Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ своСм состоянии EJB singleton сохраняСт. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚-ΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-ΠΌΠ°Π³Π°Π·ΠΈΠ½Π΅ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ скидки, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€Π°Π²ΠΈΠ»Π° прСдоставлСния скидки фиксированы ΠΈ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π½Π° всСх ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ².

БСансовыС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ локально ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎ, посрСдством Java RMI. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹-ΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΠΈ ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π±Π΅Π· сохранСния состояния ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π²ΠΈΠ΄Π΅ Π²Π΅Π±-слуТб SOAP (Simple Object Access Protocol) ΠΈΠ»ΠΈ REST (Representational State Transfer).

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ управляСмыС сообщСниями MDB (Message-Driven Bean) ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ сСансовым ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄Π½ΠΎ Π²Π°ΠΆΠ½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅: ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ MDB Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. ВмСсто этого ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ MDB Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… Π½Π° сСрвСр сообщСний, Ρ‡Ρ‚ΠΎ позволяСт ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ асинхронный ΠΎΠ±ΠΌΠ΅Π½ сообщСниями ΠΌΠ΅ΠΆΠ΄Ρƒ частями систСмы. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… сСрвСров сообщСний ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ IBM WebSphere MQ, Oracle Advanced Queueing ΠΈ TIBCO. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ MDB, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ надСТности ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ систСм ΠΈ асинхронной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ MDB сообщСния ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ запрос Π½Π° доставку Ρ‚ΠΎΠ²Π°Ρ€Π½Ρ‹Ρ… запасов ΠΎΡ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ систСмы Ρ€ΠΎΠ·Π½ΠΈΡ‡Π½ΠΎΠΉ Ρ‚ΠΎΡ€Π³ΠΎΠ²Π»ΠΈ ΠΊ систСмС управлСния поставками.

Entity Bean ΠΈ Java Persistence API

EJB тСсно связан с двумя спСцификациями : с JPA, которая являСтся стандартом хранСния Π΄Π°Π½Π½Ρ‹Ρ… для Java EE ΠΈ с CDI (Contexts and Dependency Injection) которая обСспСчиваСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ внСдрСния зависимостСй ΠΈ прСдоставляСт слуТбы управлСния контСкстом для всСх ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Java EE, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ EJB.

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ EJB-container

Java-прилоТСниям для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½ΡƒΠΆΠ½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина JVM (Java Virtual Machine). БСансовым ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ MDB для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ EJB. МоТно ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ EJB-container Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΈΠ΄Π΅ΠΈ JVM. Π’Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ JVM ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ управляСт ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, EJB-container обСспСчиваСт ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ EJB Ρ‚Π°ΠΊΠΈΠΌΠΈ слуТбами, ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° бСзопасности, ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Π΅ взаимодСйствия ΠΈ Π²Π΅Π±-слуТбы.

Богласно спСцификации EJB3 ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ прСдоставляСт слуТбы, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ сСансовым ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ ΠΈ MDB. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ добавлСния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° EJB3 Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ называСтся Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ΠΌ (deployment). ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ EJB-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π±Π»Π°Π³ΠΎΠΏΠΎΠ»ΡƒΡ‡Π½ΠΎ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅, ΠΎΠ½ Π³ΠΎΡ‚ΠΎΠ² ΠΊ использованию прилоТСниями.

Π’ Java тСхнологиях ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ EJB3. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Java EE – это сСрвСр ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ EJB3, Π²Π΅Π±-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² (сСрвлСты, JSP, JSF, Struts, GWT) ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Java EE API ΠΈ слуТб. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Java EE ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ сСрвСры ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ : Oracle WebLogic, GlassFish, IBM WebSphere, JBoss ΠΈ Caucho Resin.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ наимСнования ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² EJB

Π€ΠΎΡ€ΠΌΠ°Ρ‚ имСнования ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² EJB ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄ :

Π’ прСдставлСнном Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ имСнования ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² EJB ряд элСмСнтов (workspace, module-name, ejb-name) ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² ΠΈΠΌΠ΅Π½ΠΈ всСгда ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ. А элСмСнты [app-name] ΠΈ [!object-name] ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ.

workspace

Π‘Π΅Ρ€Π²Π΅Ρ€ Java EE ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ пространства ΠΈΠΌΠ΅Π½ workspace, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… прСдставляСт свою ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости.

java:compΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. ВсС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ EJB ΠΈΠ· WAR-Ρ„Π°ΠΉΠ»Π° ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² ΠΎΠ΄Π½ΠΎ ΠΎΠ±Ρ‰Π΅Π΅ пространство ΠΈΠΌΠ΅Π½ java:comp. Π‘ΠΊΠΎΡ€Π΅Π΅ всСго Π’Π°ΠΌ Ρ€Π΅Π΄ΠΊΠΎ придСтся ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ этим пространством ΠΈΠΌΠ΅Π½, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ основноС Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ – сохранСниС ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости с вСрсиями Java EE 6 ΠΈ Π½ΠΈΠΆΠ΅, Π³Π΄Π΅ java:comp Π±Ρ‹Π»ΠΎ СдинствСнным стандартным пространством ΠΈΠΌΠ΅Π½.
java:moduleΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости модуля. ВсС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ модуля ΠΏΠΎΠΏΠ°Π΄ΡƒΡ‚ Π² ΠΎΠ΄Π½ΠΎ пространство ΠΈΠΌΠ΅Π½ java:module. Для ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости java:comp ΠΈ java:module ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² Π²Π΅Π±-модулях ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎ пространство ΠΈΠΌΠ΅Π½. Когда это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, вмСсто java:comp слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ java:module.
java:appΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости прилоТСния. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈΠ· всСх ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ прилоТСния Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ±Ρ‰Π΅ΠΌ пространствС ΠΈΠΌΠ΅Π½ java:app. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ прилоТСния ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ Π°Ρ€Ρ…ΠΈΠ² EAR. ВсС WAR- ΠΈ EJB-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΈΠ· EAR-Π°Ρ€Ρ…ΠΈΠ²Π° ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² это пространство ΠΈΠΌΠ΅Π½.
java:globalΠ“Π»ΠΎΠ±Π°Π»ΡŒΠ½ΠΎΠ΅ пространство ΠΈΠΌΠ΅Π½. Π’ java:global Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ всС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈΠ· всСх ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΈ всСх ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

app-name

module-name

ejb-name

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ наимСнования ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ejb-name являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ всСгда присутствуСт Π² Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ рСсурса. Для ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² EJB, ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Ρ… аннотациями @Stateless, @Stateful ΠΈΠ»ΠΈ @Singleton, Π² качСствС значСния ejb-name ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ выбираСтся имя класса ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° name() Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ. Для ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² EJB, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Ρ… Π² Ρ„Π°ΠΉΠ»Π΅ ejb-jar.xml, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ejb-name опрСдСляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ элСмСнта bean-name.

object-name

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ наимСнования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° [!object-name] являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, ΠΈ пСрСносимыС ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² EJB с этим элСмСнтом всСгда Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² JNDI. Но сСрвСр EE Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² JNDI присутствовало имя Π±Π΅Π· этого значСния. Π’Π°ΠΊΠΎΠ΅ «усСчСнноС» Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ, ΠΊΠΎΠ³Π΄Π° доступ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ осущСствляСтся Ρ‡Π΅Ρ€Π΅Π· СдинствСнный интСрфСйс (ΠΈΠ»ΠΈ Ссли ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ интСрфСйса).

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² основы EJB3

Π’Π°ΠΊ ΠΊΠ°ΠΊ я ΡƒΠΆΠ΅ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π» Ρ‚Π΅ΠΌΡƒ EJB3 Π² ΡƒΡ€ΠΎΠΊΠ°Ρ…, Ρ‚ΠΎ Ρ€Π΅ΡˆΠΈΠ» Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Π΅ΠΉ.

НСмного о EJB

EJB (Enterprise Java Beans) – это Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ для построСниС бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ прилоТСния.

Π‘Π΅Ρ€Π²Π΅Ρ€ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ J2EE состоит ΠΈΠ· Π΄Π²ΡƒΡ… основных элСмСнтов:

WEB-Container – (JSP, JSF ΠΈ Ρ‚.Π΄.) всС Ρ‡Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π²ΠΈΠ΄ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ, Π° Ρ‚ΠΎΡ‡Π½Π΅ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс.

EJB-Container – ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для написания бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ.

Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния EJB – это тСхнология, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ мноТСство Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ (ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ транзакциями, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ, Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ Ρ‚.ΠΏ.) для вашСго прилоТСния.

EJB дСлится Π½Π° Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²

1. Session beans – ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для построСния бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ Ρ‡Π΅Ρ€Π΅Π· Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ, ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ ΠΈΠ»ΠΈ Π²Π΅Π±-интСрфСйс обслуТивания ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ².

Для доступа ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ, Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΠΎΠ³ΠΎ Π½Π° сСрвСрС, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ сСссионного ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. БСссионный ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ выполняСт Ρ€Π°Π±ΠΎΡ‚Ρƒ для своСго ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, защищая Π΅Π³ΠΎ ΠΎΡ‚ слоТности, выполняя бизнСс-Π·Π°Π΄Π°Ρ‡ Π²Π½ΡƒΡ‚Ρ€ΠΈ сСрвСра.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ejb java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ejb java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ejb java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ejb java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ejb java

БущСствуСт 2 Ρ‚ΠΈΠΏΠ° session-beans: stateless ΠΈ stateful.

Stateful – автоматичСски ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ своС состояниС ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ клиСнтскими Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ.

Stateless – ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ бизнСсс-процСссов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Ρ‹ Π·Π° ΠΎΠ΄Π½Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ.

2. Message-Driven beans – ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ являСтся ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Java EE прилоТСниям ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ сообщСния асинхронно.

Π­Ρ‚ΠΎΡ‚ Ρ‚ΠΈΠΏ Π±ΠΈΠ½ΠΎΠ² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ дСйствуСт Π² качСствС ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»Ρ JMS-сообщСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»Ρ событий, Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ JMS-сообщСний вмСсто событий. БообщСния ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ Π½Π° любой ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Java EE (клиСнтскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΈΠ»ΠΈ Π²Π΅Π±-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚) ΠΈΠ»ΠΈ JMS ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ систСму, которая Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Java EE Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ.

Message-Driven beans ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ JMS сообщСния Π½ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²ΠΈΠ΄ΠΎΠ² сообщСний.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ejb java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ejb java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ejb java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ejb java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ejb java

На схСмС Π²Ρ‹ΡˆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ сСрвСром с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΊΡƒΠ΄Π° ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ сообщСния.

3. Entities – это сущности ΠΊΠ°ΠΊΠΈΡ… Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ Π² EJB ΠΎΠ½ΠΎ являСтся Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° Entity.

Entities являСтся своС-Ρ€ΠΎΠ΄Π½Ρ‹ΠΌ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Ρ‚Π°Π±Π»ΠΈΡ† Π² Π‘Π”.

Одним ΠΈΠ· Π³Π»Π°Π²Π½Ρ‹ΠΌ достоинством EJB3 стал Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с persistence, ΠΎΠ½ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ автоматичСски ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² рСляционной Π‘Π” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ ORM.

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с entity Π±Ρ‹Π» создан JPA (Java Persistence API).

JPA опрСдСляСт стандарт для:

1) ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π° сущностСй прилоТСния ΠΈ ΠΈΡ… отобраТСния Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… Π‘Π”;

2) EntityManager API – позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ CRUD (create, read, update, delete) ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ сущностями;

3) Java Persistence Query Language (JPQL) – для поиска ΠΈ получСния Π΄Π°Π½Π½Ρ‹Ρ… прилоТСния;

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ EJB3

@EJB – помСчаСтся bean, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ собираСмся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

@Stateless – Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ, Ρ‡Ρ‚ΠΎ класс Π±ΡƒΠ΄Π΅Ρ‚ stateless session bean. Для Π½Π΅Π³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ обСспСчит Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠΌΠ΅Π½Ρ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ.

@Local – относится ΠΊ интСрфСйсу ΠΈ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ bean Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ интСрфСйс доступСн локально.

@Remote – относится ΠΊ интСрфСйсу ΠΈ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ bean доступСн Ρ‡Π΅Ρ€Π΅Π· RMI (Remote Method Invocation).

@Stateful – Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ, Ρ‡Ρ‚ΠΎ класс Π±ΡƒΠ΄Π΅Ρ‚ stateful session bean.

@Remove – ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΉ ΠΊΠ°ΠΊ Remove Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ, Ρ‡Ρ‚ΠΎ послС Π΅Π³ΠΎ исполнСния Π½Π΅Ρ‚ большС смысла Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ bean, Ρ‚.Π΅. Π΅Π³ΠΎ состояниС сбрасываСтся. Π­Ρ‚ΠΎ Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

@Entity – Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ, Ρ‡Ρ‚ΠΎ класс Π±ΡƒΠ΄Π΅Ρ‚ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒΡŽ Π‘Π”.

@Table(name=” ”) – ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ для ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π° Π‘Π”.

@Id – ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ сущности ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ Π² Π‘Π”.

@Column – ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ Π² Π‘Π” Π²ΠΊΠ»ΡŽΡ‡Π°Ρ имя ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ Π² Π‘Π”.

@WebService – Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ интСрфСйс ΠΈΠ»ΠΈ класс Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ web-сСрвис.

ΠŸΡ€Π°Π²ΠΈΠ»Π° создания session bean

Π’ качСствС session bean ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ класс Java, Π½ΠΎ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ условиям:

1. Он Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄;

2. Он Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ абстрактным;

3. Он Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ конструктор ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ;

4. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с β€œejb” (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ejbBean, ejbGoAtHome)

5. Бвойства класса Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π°ΠΌΠΈ ΠΈΠ»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ интСрфСйс Serializable.

Π–ΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» EJB3

Π£ stateless ΠΈ MDB Π±ΠΈΠ½ΠΎΠ² сущСствуСт 2 события ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ. Π­Ρ‚ΠΎ созданиС ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π±ΠΈΠ½Π°.

ΠœΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ сразу послС создании Π±ΠΈΠ½Π° помСчаСтся Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ @PostConstruct, Π° ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π³ΠΎ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ – @PreDestroy.

Stateful Π±ΠΈΠ½Ρ‹ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ ΠΏΠΎΠΌΠΈΠΌΠΎ рассмотрСных Π²Ρ‹ΡˆΠ΅ Π΅Ρ‰Π΅ 2 событиями:

1) ΠŸΡ€ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ @PostActivate;

2) ΠŸΡ€ΠΈ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ @PrePassivate.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ejb java

Π­Ρ‚ΠΎ сСрвСрныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π² распрСдСлСнной срСдС ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ Π² ΠΊΠΎΡ€ΠΏΠ°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… распрСдСлСнных прилоТСниях Π½Π° языкС java.

ВсС Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, рассмотрСнныС Π΄ΠΎ этого Π½Π΅ позволяли Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ бизнСс-Π»ΠΎΠ³ΠΈΠΊΡƒ (ΠΊΡ€ΠΎΠΌΠ΅ вСбсСрвисов). EJB ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ для Java ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ распрСдСлСниС бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ Π»Π΅Π³Ρ‡Π΅.

EJB прСдоставляСт Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ, ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ распрСдСлСнных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

БпСцификация EJB опрСдСляСт Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ° распрСдСлСнных ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

sessions beans

sessions beans ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ 3 Π²ΠΈΠ΄ΠΎΠ²:

stateless

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ stateless ΠΏΠΎ настоящСму ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π² своих полях, Π½ΠΎ ΠΎΠ½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ для взаимодСйствия с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ. Π‘ΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ stateless ΠΌΠΎΠ³ΡƒΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ Π‘Π”. Но слСдуСт ΠΈΠΌΠ΅Ρ‚ΡŒ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ сохранСнныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ нСльзя ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ Π² качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° выполнСния ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ-Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ всС эти ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² обращСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ ΠΈΠ· ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ экзСмпляров ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ stateless. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ опрСдСляСм ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ Π½Π° основании Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ являСтся Π½Π°ΠΈΠΌΠ΅Π½Π΅Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΌ.

Π’Π°ΠΆΠ½ΠΎ, Π΅Ρ‰Π΅ Ρ€Π°Π·, всС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ stateless Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ ΠΈΠ· этих ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚.

Π’ΠΎΠΎΠ±Ρ‰Π΅, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ управляСт всСми Π²ΠΈΠ΄Π°ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² EJB.

Если ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² нСдостаточно для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ всСх запросов, Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ сам ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ количСство ΠΈΠ»ΠΈ, Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅.

Stateless ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ мСньшС рСсурсов ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, ΠΊΠΎΠ³Π΄Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΡ…. Но Π΅ΡΡ‚ΡŒ ΠΈ другая сторона: Ссли ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π½Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π² сСбС, Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΈΡ… Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈ ΠΊΠΎΠ΄ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° услоТняСтся.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ stateless Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ javax.ejb.SessionSynchronization. Π’Π°ΠΊΠΆΠ΅ Π½Π° основС stateless ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Π±-сСрвис.

stateful

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΈΠ· Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ процСсса Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ passication (instance passivation), Π° ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ называСтся Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠ΅ΠΉ (activation).

Π§Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ рСсурсы, ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠΌ Π² пассивноС состояниС, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΉ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ @PrePassivate ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» Π΄ΠΎΠ»ΠΆΠ΅Π½ программист.

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π΅ ΠΈΠ· пассивного состояния Π² Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅, ΠΊΠΎΠ½Π΅ΠΉΡ‚Π΅Π½Ρ€ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ @PostActivate, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚.

На ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π² пассивноС состояниС Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ ограничСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π’ этих случаях ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ просто Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ пСрСвСсти Π² пассивноС состояниС. БСансовыС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π±Π΅Π· сохранСния состояния Π½Π΅ пСрСводятся, Π° просто ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°ΡŽΡ‚ΡΡ.

singleton

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Singleton создаСтся Π² СдинствСнном экзСмплярС Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΆΠΈΠ²Π΅Ρ‚ Π½Π° протяТСнии всСй ΠΆΠΈΠ·Π½ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Он, ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ Π±Π΅Π· сохранСния состояния Π² своих полях ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Π½ΠΎ, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° сущности, ΠΏΡ€ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, эта информация Π½ΠΈΠ³Π΄Π΅ Π½Π΅ сохраняСтся.

ЭкзСмпляр singleton раздСляСтся ΠΌΠ΅ΠΆΠ΄Ρƒ всСми ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ Π΄Π²ΡƒΡ… ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² сСансовых ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ управляСмыми сообщСниями Π±Ρ‹Π»ΠΈ Π²Π²Π΅Π΄Π΅Π½Π΅Ρ‹ Π² ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ EJB2. Они ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ jms-сообщСния (Java Messaging Services). JMS, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ сокСтов, обСспСчиваСт Π½Π°Π΄Π΅ΠΆΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ сообщСния. НапримСр, Ссли ΠΊΠ»ΠΈΠ΅Π½Ρ‚, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ сообщСниС, Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Ρ‚ΠΎ сообщСниС Π±ΡƒΠ΄Π΅Ρ‚ сохранСно Π½Π° сСрвСрС ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. JMS ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° сообщСний:

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π½Π° сообщСния, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² асинхронном Ρ€Π΅ΠΆΠΈΠΌΠ΅, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ дСйствия ΠΏΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡŽ сообщСния, ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΠΌΠΈ (Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ entity-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚), Ρ‚.Π΅. ΠΏΡ€ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΏΡ€ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, ΠΎΠ½ тСряСт своС состояниС (ΠΊΠ°ΠΊ ΠΈ Ρ€Π°Π½Π΅Π΅ рассмотрСнныС).

Π’Π°ΠΊΠΆΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ ΠΈ Π½Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Π‘Π” (Ρ€Π°Π±ΠΎΡ‚Π° с Π‘Π” осущСствляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ entity-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚).

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡƒΠ» MDB-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

Π›ΡŽΠ±ΠΎΠΉ MJB-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌ ΠΈΠ»ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ. Π£Π΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ располоТСн Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ EJB-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° (Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ машинС). Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ располоТСн Π² Ρ‚ΠΎΠΌ-ΠΆΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅, Π³Π΄Π΅ ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉΡΡ ΠΊ Π½Π΅ΠΌΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚. Π’Π°ΠΊΠΎΠ΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ сдСлано, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ рСсурсы ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ 2 способами.

Бпособ 1: ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Java-интСрфСйс ΠΈ ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ @Remote ΠΈΠ· javax.ejb.Remote

Класс, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ этот интСрфСйс Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ.

Бпособ 2: ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ сам класс Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ @Remote ΠΈ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ интСрфСйса

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ часто Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Π΅Ρ‰Π΅ бизнСс-интСрфСйсами, Ρ‚.ΠΊ. ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ.

ОбъявлСниС локального интСрфСйса осущСствляСтся Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ аннотация @Local, Π° Π½Π΅ @Remote.

Надо ΠΈΠΌΠ΅Ρ‚ΡŒ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ хотя ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ, ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ всС Ρ€Π°Π²Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. Π•Π³ΠΎ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ позволят Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ сСти.

Один ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌ ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ, для этого Π½Π°Π΄ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π²Π° интСрфСйса, Ρ‚.ΠΊ. ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ интСрфСйс Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌ ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ. (ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Ρ‚Π°ΠΊ Π½Π΅ Π΄Π΅Π»Π°ΡŽΡ‚).

Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, ejb-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π±Π΅Π· сохранСния состояния ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ Π²Π΅Π±-сСрвисом, ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π½Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ°ΠΊ ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌΡƒ Π²Π΅Π±-сСрвису, Π½ΠΎ для этого ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½ javax.jws.WebService.

БСансовыС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Ρ€Π΅Ρ… Ρ€Π°Π·Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΏΠΎΠΌΠ΅Ρ‡Π°ΡŽΡ‚ΡΡ аннотациями ΠΈΠ· javax.ejb.Stateless javax.ejb.Statefull, javax.ejb.Singleton

Π’ случаС с ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ управляСмыми сообщСниями, Π½ΠΎΠ²Ρ‹ΠΉ интСрфСйс Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. Π‘Π°ΠΌ класс Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ javax.ejb.MessageDriven, Π½ΠΎ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ интСрфСйс javax.jms.MessageListener (это интСрфСйс Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ события, Ρ‡Π°Ρ‰Π΅ всСго это onMessage).

ВрСбования, ΠΏΡ€Π΅Π΄ΡŠΡΠ²Π»ΡΠ΅ΠΌΡ‹Π΅ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ

Класс, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ сСансовый ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚:

ΠŸΡ€ΠΈ этом Π½Π°Π΄ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ появилась Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с EJB 3 вСрсии. Π’ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΡ… вСрсиях Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ наслСдовался ΠΎΡ‚ EJBObject ΠΈΠ»ΠΈ EJBLocalObject.

ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρ‹

ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρ‹, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ с EJB-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ, Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с этими ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. Они Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Π·Π°Π³Π»ΡƒΡˆΠΊΠΎΠΉ. Π—Π°Π³Π»ΡƒΡˆΠΊΠ° ΡƒΠΆΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ обращСния Π² соотвСтствии с ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ распрСдСлСнных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎ сСти, Ρ‚Π°ΠΌ запросы Π΄Π΅ΠΌΠ°Ρ€ΡˆΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ производится ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Π½ΡƒΠΆΠ½Ρ‹ΠΌ EJB-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ.

ΠšΠ»ΠΈΠ΅Π½Ρ‚ Π½Π΅ Π·Π½Π°Π΅Ρ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ EJB ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°ΠΆΠ΅ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° с stateless Π½Π° stateful Π±Π΅Π· измСнСния ΠΊΠΎΠ΄Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

Как ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ? (Π² качСствС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ сСрвлСты, ΠΈ jsp-страницы ΠΈ javaSE ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ EJB-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚).

Π’ случаС с stateless ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ: ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ прСдставлСн ΠΊΠ°ΠΊ Π²Π΅Π±-сСрвис ΠΈ, Ρ‚ΠΎΠ³Π΄Π°, Ρ€Π°Π±ΠΎΡ‚Π° с Π½ΠΈΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ вСбсСрвисам:

Π‘ΠΎ всСми ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π΄Π²Π° способа для Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² с этими ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ (Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ссылку Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚).

ВпрыскиваниС рСсурсов (DI):

ΠŸΡ€ΠΈ этом ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ имя ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, Π½ΠΎ, Ссли имя Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ, Ρ‚ΠΎ ΠΊΠΎΠ½Π΅ΠΉΠ½Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ поиск EJB-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ Ρ‚ΠΈΠΏΠ°, ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ стоит аннтация (Ρƒ нас Cart) ΠΈ ссылка Π±ΡƒΠ΄Π΅Ρ‚ присвоСна ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π° ссылка, с Π½Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ с POJO-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ссылку Π½Π΅ Π½Π° интСрфСйс EJB-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π° Π½Π° класс EJB-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. (Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Cart опрСдСляло интСрфСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΏΡƒΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ CartBean).

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Π­Ρ‚ΠΎ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ бСзинтСрфСйсным прСдставлСниСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

К бизнСс-ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠΆΠ΅ ограничСния

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ссылки Π½Π° EJB-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

НС рСкомСндуСтся Π² ΠΎΠ΄Π½ΠΎΠΌ Π°Ρ€Ρ…ΠΈΠ²Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΈ Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ Π΅Π΅ Π½Π° сСрвСрС. Π’.Π΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ клиСнтской части ΠΈ класса main ΠΎΡ‚ JavaSE.

Π’ случаС использования JNDI Ρ‚ΠΎΠΆΠ΅ Π½Π΅ всС Ρ‚Π°ΠΊ просто. Если ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² ΠΊΠΎΠ½Π΅ΠΉΠ½Π΅Ρ€Π΅, Ρ‚ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

Но Ссли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π²Π½Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ JNDI-контСкст. НуТно ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ получСния контСкста, Π½ΠΎ ΠΎΠ½ΠΈ зависят ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ JNDI.

Об ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ EJB-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²:

К ΠΊΠ°Π΄ΠΆΠΎΠΌΡƒ EJB-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ссылку ΠΏΠΎ нСскольким ΠΈΠΌΠ΅Π½Π°ΠΌ. (Ρ‡Π΅Ρ€Π΅Π· интСрфСйс ΠΈ Ρ‡Π΅Ρ€Π΅Π· Π½Π°Π·Π²Π°Π½ΠΈΠ΅ класса, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ интСрфСйс). Но Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ способы:

1) Π§Π΅Ρ€Π΅Π· Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ контСкст

поиск ΠΏΡ€ΠΈ этом проводится Π² контСкстС Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ прилоТСния

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Enterprise JavaBeans

Π˜Ρ‚Π°ΠΊ, Π½Π°Ρ‡Π½Π΅ΠΌ наш Ρ‚ΡƒΡ€ ΠΏΠΎ Enterprise JavaBeans ΠΏΡƒΡ‚Π΅ΠΌ исслСдования значСния этих слов.

«Π‘Ρ‚ΠΎΡ€ΠΎΠ½Π° сСрвСра» ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ EJB размСщаСтся Π² процСссС Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ сСрвСрС, Π° Π½Π΅ Π½Π° клиСнтской машинС. EBJ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ просмотр, Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ просмотр ΠΈΠ»ΠΈ ΠΎΠ±Π°. Π’Π΅Ρ€ΠΌΠΈΠ½ «ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€» Π½Π΅ относится ΠΊ графичСскому просмотру; здСсь ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ способС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ EJB прСдоставляСт свой интСрфСйс. Если EJB прСдставляСт ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ просмотр, всС Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ клиСнтским ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌ экзСмпляром происходят Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€, Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊ RMI-IIOP. Если EJB прСдставляСт Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ просмотр, клиСнтский ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ процСссС, Ρ‡Ρ‚ΠΎ ΠΈ EJB ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π° всС Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ прямыми Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

И послСднСС, ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎΠ΅, EJB ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ EJB Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ Π² памяти, Π²Π΅Π΄ΡƒΡ‰ΠΈΠΉ Π΅Π³ΠΎ процСсс Π΄Π΅Π»Π°Π΅Ρ‚ с Π½ΠΈΠΌ Π½Π΅ΠΌΠΎΠ³ΠΎ большС, Ρ‡Π΅ΠΌ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ JVM. ΠŸΡ€ΠΎΡ†Π΅ΡΡ, ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ EJB, вызываСтся EJB ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ ΠΈ являСтся стандартизированной срСдой Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния, которая прСдоставляСт ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π’Π°ΠΊ ΠΊΠ°ΠΊ спСцификация EJB стандартизируСт слуТбы, прСдоставляСмыС EJB ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ, ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ поставщика, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π² коммСрчСских ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°Ρ…, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ WebSphere ΠΈ WebLogic, Π΄Π²Π° Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ извСстных коммСрчСских EJB ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΎΡ‚ IBM ΠΈ BEA Systems, соотвСтствСнно. Π’ EJB ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ слуТбы, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ Π½Π΅ΠΉΡ‚Ρ€Π°Π»ΠΈΡ‚Π΅Ρ‚ клиСнтского ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, нСявно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ JAVA RMI; Π΄Ρ€ΡƒΠ³ΠΈΠ΅ слуТбы (пСрСчислСнныС Π½ΠΈΠΆΠ΅) ΡΠ²Π»ΡΡŽΡ‚ΡΡ стандартными. Π’Π°ΠΊΠΈΠ΅ слуТбы, ΠΊΠ°ΠΊ кластСризация ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΠΎΠΌΠΊΠ°Ρ…, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ΡΡ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ поставщиками.

Π’ΠΎΡ‚ слуТбы, прСдоставляСмыС всСми ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ EJB:

Π”Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ это Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ: Π²Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ сдСлал Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ для вашСй ΠΏΠΎΠ»ΡŒΠ·Ρ‹, Π½ΠΎ Π²Ρ‹ прСдоставляСтС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… разграничСния Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΠ³Π΄Π° вызываСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄. НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π½Π°Ρ‡Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΈΠ»ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ ΠΈ ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΠΈΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Ссли ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π΅Ρ‰Π΅ Π½Π΅ Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ (транзакция ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²). ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°Ρ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° ΠΌΠ΅Ρ‚ΠΎΠ΄, Π²Ρ‹Π·Π²Π°Π²ΡˆΠΈΠΉ запуск Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ, ΠΈΠ»ΠΈ ΠΎΠ½ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ, Ссли Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‡Π΅Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π²Ρ‹Π±Ρ€ΠΎΡˆΠ΅Π½Π½ΠΎΠ΅ Π² Ρ‚ΠΎ врСмя, ΠΊΠΎΠ³Π΄Π° транзакция Π±Ρ‹Π»Π° Π°ΠΊΡ‚ΠΈΠ²Π½Π°. ΠžΠΏΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈ, польза ΠΎΡ‚ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ управлСния транзакциями Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ Π»ΠΎΠ³ΠΈΠΊΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π² исходном ΠΊΠΎΠ΄Π΅ вашСго EJB, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ это Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Тизнь Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ, Π½ΠΎ это Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ повСдСния Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ вашСго EJB Π±Π΅Π· пСрСкомпиляции.

Если Π²Ρ‹ вспомнитС, Ρ‡Ρ‚ΠΎ EJB ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ, Π²Ρ‹ ΠΏΠΎΠΉΠΌΠ΅Ρ‚Π΅, ΠΏΠΎΡ‡Π΅ΠΌΡƒ эти Π΄Π²Π΅ особСнности Ρ‚Π°ΠΊ Π²Π°ΠΆΠ½Ρ‹. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ бСзопасности ΠΈ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ являСтся Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это позволяСт людям, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌ исходного ΠΊΠΎΠ΄Π°, ΠΈΠ»ΠΈ Π½Π΅ ΠΆΠ΅Π»Π°ΡŽΡ‰ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° Ρ‚Π°ΠΊΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅, Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ строится с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этих ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ синхронизируСт ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², приходящиС ΠΎΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², ΠΈ направляСт ΠΈΡ… ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ EJB ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, это Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ бСзопасно использован Π² наслСдуСмой ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ срСдС сСрвСра ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (довольно ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ свойство).

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒΡŽ адрСсуСтся ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° увСличСния выдСляСмых рСсурсов, которая Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠΈ количСства ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². РСсурсы Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡ для ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Π° Π½Π΅ для EJB ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ рСсурсы, ΠΊΠ°ΠΊ соСдинСния с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΈΡ‚ΠΈ (threads), сокСты, ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ сообщСний ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. НапримСр, Ссли число ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² увСличиваСтся ΠΎΡ‚ 100 Π΄ΠΎ 1000, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ 1000 EJB ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² памяти, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ 1000 соСдинСния с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…; это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ слишком ΠΌΠ½ΠΎΠ³ΠΎ для количСства ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉΡΡ Ρƒ вас памяти, ΠΈ это ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ слишком тяТСлая Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π½Π° ваш сСрвСр Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. EJB ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π·Π°Π½ΡΡ‚ΡŒΡΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, прСдоставив ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹Π΅ (pooling) экзСмпляры EJB ΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹Π΅ (pooling) соСдинСния с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ количСство экзСмпляров ΠΈΠ»ΠΈ соСдинСний, ΠΆΠΈΠ²ΡƒΡ‰ΠΈΡ… Π² памяти, ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠΌ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎ врСмя, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½ΡƒΠΆΠ΄Π°Ρ‚ΡŒΡΡ Π² этом.

ΠšΡ€Π°ΡΠΎΡ‚Π° Enterprise JavaBean

ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° J2EE, с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, прСдоставляСт Π²Π°ΠΌ Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΡƒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ срСды, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ создаСтС ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹. Π­Ρ‚ΠΎ особСнно Π²Π΅Ρ€Π½ΠΎ для EJB, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… спСцификация опрСдСляСт Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… EJB Ρ‚ΠΈΠΏΠ°, с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ характСристиками ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ° ΠΈ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ областями примСнСния. Π’ΠΎΡ‚ эти Ρ‚Ρ€ΠΈ EJB Ρ‚ΠΈΠΏΠ°:

Entity beans прСдставляСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Ρ‚ΠΎΠΌ смыслС, Ρ‡Ρ‚ΠΎ ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΈΡ… состояния синхронно с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠΌ постоянном Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ это рСляционная Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ entity beans ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для прСдставлСния бизнСс-сущностСй, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚, ΠΊΠΎΡ€Π·ΠΈΠ½Π° ΠΏΠΎΠΊΡƒΠΏΠΎΠΊ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Entity beans Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ бизнСс-Π»ΠΎΠ³ΠΈΠΊΡƒ, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ самосодСрТащСйся Π»ΠΎΠ³ΠΈΠΊΠΈ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ связанной с Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Π₯отя всС entity beans ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ для клиСнтского ΠΊΠΎΠ΄Π° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΏΡ€ΠΈ использовании Π΄Π²ΡƒΡ… Ρ€Π°Π·Π½Ρ‹Ρ… ΠΆΠΈΠ²ΡƒΡ‡ΠΈΡ… стратСгий. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹: 1) ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ состояний ΠΌΠ΅ΠΆΠ΄Ρƒ EJB ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΈ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΠ»ΠΈ 2) ΠΏΠΎΠ·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎΠ± этом ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ΅ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ состояниС EJB ΠΎΡ‚ ΠΈ ΠΊ постоянному Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Ρƒ. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ примСняСм Π–ΠΈΠ²ΡƒΡ‡Π΅ΡΡ‚ΡŒ УправляСмая ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ [Container Managed Persistence] (CMP), Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ entity beans являСтся CMP bean; Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ случаС ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π–ΠΈΠ²ΡƒΡ‡Π΅ΡΡ‚ΡŒ УправляСмая ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ [Bean Managed Persistence] (BMP), ΠΈ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ BMP bean. ΠžΠΏΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈ, хотя Π΅ΡΡ‚ΡŒ сущСствСнноС практичСскоС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ CMP ΠΈ BMP Π² стратСгиях Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, это Π½Π΅ влияСт Π½Π° способ использования ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ entity bean.

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΡ всСх хитросплСтСний ΠΏΡ€ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠΈ CMP ΠΏΠ΅Ρ€Π΅Π΄ BMP Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ этой Π³Π»Π°Π²Ρ‹. Однако Π²Π°ΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… свойств CMP Π½Π΅ Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ΅Π½ ΠΊΠΎΠ΄ Π»ΠΎΠ³ΠΈΠΊΠΈ самосохранСния. РСальная Π²Ρ‹Π³ΠΎΠ΄Π° ΠΎΡ‚ CMP состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ΄ Π»ΡŽΠ±ΡƒΡŽ систСму постоянного хранСния. Если Π²Ρ‹ Π΄ΡƒΠΌΠ°Π»ΠΈ ΠΎΠ± этом, CMP Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ вСсь ΠΊΠΎΠ΄, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для пСрСноса состояния ΠΌΠ΅ΠΆΠ΄Ρƒ EJB ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΈ постоянным Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с Ρ‚Π°ΠΊΠΈΠΌ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ. РСализация EJB ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ всС основныС RDBMS, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Oracle, DB2, MySQL ΠΈ Ρ‚.ΠΏ. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π»ΠΎΠ³ΠΈΠΊΠ° сохранСния Π½Π΅ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π° ТСстко Π² CMP entity bean, Π° ΠΎΠ½Π° прСдоставляСтся ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ самый Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π² Ρ€Π°Π·Π½Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… срСдах ΠΈ всС Π΅Ρ‰Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ хранСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, прСдоставляСмой ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ BMP, Π»ΠΎΠ³ΠΈΠΊΠ° хранСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ SQL выраТСния, Ссли Π²Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅Ρ‚Π΅ для спСцифичСской RDBMS) Π±ΡƒΠ΄Π΅Ρ‚ встроСна Π² ваш ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, Ρ‡Ρ‚ΠΎ Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‚ использования Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ CMP для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ портируСмости; ΠΈ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ BMP, Ссли ваш entity bean связан с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ систСмой, Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ J2EE (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, это CICS ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² IBM ΠΌΠ°ΠΉΠ½Ρ„Ρ€Π΅ΠΉΠΌΠ΅) ΠΈΠ»ΠΈ ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌ особым ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ здСсь.

НапримСр, Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ session beans, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ Π»ΠΎΠ³ΠΈΠΊΡƒ рСзСрвирования ΠΈ ΠΏΠΎΠΊΡƒΠΏΠΊΠΈ Π±ΠΈΠ»Π΅Ρ‚ΠΎΠ² Π² ΠΊΠΈΠ½ΠΎ ΠΏΠΎ сСти. ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· экзСмпляров Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°; экзСмпляр Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, reserveSeats(& ) ΠΈ purchase(& ). ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ количСство мСст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½Ρ‹ ΠΏΠΎΠΊΡƒΠΏΠ°Ρ‚Π΅Π»ΡŽ для ΠΏΠΎΠΊΡƒΠΏΠΊΠΈ, ΠΈ Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡ… Π² систСмС; Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΡ€Π΅Π΄ΠΈΡ‚Π½ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚Π΅ покупатСля, провСряСт сумму Π½Π° Π½Π΅ΠΉ ΠΈ выполняСт процСсс ΠΏΠΎΠΊΡƒΠΏΠΊΠΈ. Если ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ являСтся session beans с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ состояний, Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ reserveSeats(& ), экзСмпляр session bean «Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚» количСство мСст, ΠΈ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° purchase(& ). Если session beans Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ состояния, ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² памяти ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΡƒΡŽ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΅Π΅ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. БущСствуСт нСсколько стратСгий для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ состояний, Π½ΠΎ состояния всС Ρ€Π°Π²Π½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° сущСствования этих Π΄Π²ΡƒΡ… Ρ‚ΠΈΠΏΠΎΠ² session beans достаточно проста: Π½Π΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… бизнСс-процСссов являСтся отсутствиС состояний (особСнно это относится ΠΊ Ρ‚Π΅ΠΌ процСссам, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΏΠ»ΠΎΡ‚Π½ΡƒΡŽ привязаны ΠΊ HTTP), Π° для Π΄Ρ€ΡƒΠ³ΠΈΡ… процСссов Π½Π΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»Π΅ΠΌΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ состояний; Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ΠΏΡ€ΠΈΠ·Π²Π°Π½Π° ΠΎΡ‚Ρ€Π°Π·ΠΈΡ‚ΡŒ это Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅.

Π•ΡΡ‚ΡŒ тСхничСский подтСкст Π² использовании ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° session bean ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ, Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² случаС сравнСния CMP ΠΈ BMP, Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ обсуТдСниС Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ этой Π³Π»Π°Π²Ρ‹. Одна Π²Π΅Ρ‰ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ session bean Π±Π΅Π· состояний Π²Π΅Π΄ΡƒΡ‚ сСбя Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с экзСмпляром ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΠΏΡƒΠ»ΠΈΠ½Π³Π° (объСдинСния) ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΏΠΎ сравнСния с session bean с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ состояний. Π’Π°ΠΊ ΠΊΠ°ΠΊ экзСмпляр session bean Π±Π΅Π· ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ состояний Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для запоминания любой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ состоянии, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ, ΠΏΡ€ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, этот ΠΆΠ΅ самый экзСмпляр ΠΌΠΎΠΆΠ΅Ρ‚ Π»Π΅Π³ΠΊΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ для Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Если экзСмпляр session bean ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ состояния, ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ½ Π½Π΅ пСрСмСстит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ состояниях Π² ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ использования (Π² EJB этот процСсс называСтся активация ΠΈ пассивация). Π’ этом Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ ΠΎΠ±Ρ‰Π΅Π΅ Π½Π΅ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ объСдинСнии (pooling) экзСмпляров, session beans Π±Π΅Π· состояний ΡƒΠ»ΡƒΡ‡ΡˆΠ°ΡŽΡ‚ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ, Π½ΠΎ это Π½Π΅ ΠΏΡ€ΠΈ Π»ΡŽΠ±Ρ‹Ρ… условиях. Π’Π°Ρˆ ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ пассивации, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ состояния session bean с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ состояний Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· Π½Π΅Π³ΠΎ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π»ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ°Π»ΠΎΠ΅ воздСйствиС Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ session bean Π±Π΅Π· ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ состояний, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ состояниС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π² session bean ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅, ΠΈ Ссли ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈ session bean находятся Π½Π° Π΄Π²ΡƒΡ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… распрСдСлСнных уровнях, Ρ‚ΠΎ процСсс постоянной ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ состояния, Π° Ρ‚Π°ΠΊΠΆΠ΅ сСриализация ΠΈ дСсСриализация ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΊΠ°ΠΊ этого Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ RMI, ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ критичСским мСстом.

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ объСдинСния (pools) экзСмпляров. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ваш ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡ… Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ. Если ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ нСдавнюю ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ, Π²Π²Π΅Π΄Π΅Π½Π½ΡƒΡŽ Π² компиляторы Java ΠΈ JVM, соврСмСнныС ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠ° памяти ΠΈ сборка мусора Π±ΠΎΠ»Π΅Π΅ эффСктивноС занятиС, Ρ‡Π΅ΠΌ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ объСдинСниСм.

И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Ρ‚ΠΈΠΏ Enterprise JavaBean: Message-Driven Beans (MDB). MDB Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² ΠΊΠΎΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с систСмой сообщСний JAVA [Java Messaging System](JMS), которая являСтся абстрактным API для систСмы Message-Oriented Middleware (MOM), Π±ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ ΠΏΠΎΡ…ΠΎΠΆΡƒΡŽ Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊ JDBC являСтся абстрактным API ΠΏΠΎΠ²Π΅Ρ€Ρ… SQL Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

MBD ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ°ΠΌΠΈ MOM сообщСний, приходящих Ρ‡Π΅Ρ€Π΅Π· JMS API. MDB ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ для выполнСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… дСйствий ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ сообщСний ΠΈ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Π² Ρ€ΠΎΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΎΡ‡Π΅ΠΊ соСдинСния ΠΌΠ΅ΠΆΠ΄Ρƒ подсистСмами, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… посрСдством JMS. НапримСр, MDB ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ посылку элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹ администратору (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ JavaMail API), ΠΊΠΎΠ³Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ сообщСниС ΠΎΠ± ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ событии.

ΠžΡ‚Π»ΠΈΡ‡ΠΈΠ΅ MDB ΠΎΡ‚ session beans ΠΈ entity beans состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… прСдставлСний. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, клиСнтский ΠΊΠΎΠ΄ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ MDB, Π½ΠΎ MDB ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ EJB ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ слуТбы.

EJB Π ΠΎΠ»ΠΈ

Π’ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ EJB являСтся ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹, нСявно ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ EJB ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°: Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, установка, конфигурация ΠΈ использованиС. EJB спСцификация Π΄ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ опрСдСлСния ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ Π²ΠΎΠ²Π»Π΅ΠΊΠ°ΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ€ΠΎΠ»ΠΈ Π²ΠΎ врСмя ΠΆΠΈΠ·Π½ΠΈ EJB ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. БпСцификация Ρ€Π°Π·Π»ΠΈΡ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€ΠΎΠ»ΠΈ:

Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ это Ρ€ΠΎΠ»ΠΈ, Π° Π½Π΅ пСрсоны. Для нСбольшого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΎΠ΄Π½Π° ΠΈ Ρ‚Π° ΠΆΠ΅ пСрсона ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Π² любой ΠΈΠ»ΠΈ Π²ΠΎ всСх ролях сразу. Для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ отдСлСниями ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΡ‚ Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΡ… сторон, Ρ€Π°Π·Π½Ρ‹Π΅ пСрсоны ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Π² Ρ€Π°Π·Π½Ρ‹Ρ… ролях.

Другая интСрСсная Π²Π΅Ρ‰ΡŒ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ спСцификация Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ опрСдСляСт ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΈ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ знания для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ€ΠΎΠ»ΠΈ, Π½ΠΎ Π΄Π°ΠΆΠ΅ опрСдСляСт, ΠΊΠ°ΠΊΠΈΠ΅ исходныС Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для ΠΊΠ°ΠΊΠΎΠΉ Ρ€ΠΎΠ»ΠΈ.

Аналогично, EJB спСцификация ΠΏΡ€ΠΈΠ½ΡƒΠΆΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ кусок Π½Π΅ стандартной ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π±Ρ‹Π» ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ исходном Ρ„Π°ΠΉΠ»Π΅. Π­Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ EJB ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ возмоТности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ посрСдством XML Ρ„Π°ΠΉΠ»ΠΎΠ². Если опрСдСлСнная ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ спСцифична для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π² Ρ„Π°ΠΉΠ»Π°Ρ…, спСцифичных для ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.

ОсновноС API

ВсС слуТбы имСнования ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Π°ΠΌ Π·Π°ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΈ ΠΈΡΠΊΠ°Ρ‚ΡŒ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π°. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ, ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Π°ΠΌ Π°ΡΡΠΎΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ (ΠΈΠ»ΠΈ связываСт, Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅) имя с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΊΠ°Ρ‚ΡŒ этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (ΠΈΠ»ΠΈ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ это имя. По Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ Π±Π΅Π»Ρ‹Ρ… страниц, ΠΊΠΎΠ³Π΄Π° физичСский Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ пСрСвСсти Π·Π²ΠΎΠ½ΠΊΠΈ (ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ), ассоциируСтся с ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π’ качСствС Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊ Java ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ привСсти RMI: Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΈΠΌΠ΅Π½Π΅ΠΌ (строка) Π² RMI Naming Service, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ прилоТСния ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ поиск этого ΠΈΠΌΠ΅Π½ΠΈ Π² слуТбС. Π­Ρ‚ΠΎ Π² точности совпадаСт с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ с COS Naming Service. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ JNDI являСтся достаточно ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ абстракциСй: ΠΎΠ½ прСдоставляСт Π²Π°ΠΌ ΠΎΠ΄Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹ΠΉ интСрфСйс ΠΊ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ слуТбам имСнования ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ, Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ JDBC для доступа ΠΊ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ….

JDK1.4 поставляСтся с Ρ‡Π΅Ρ‚Ρ‹Ρ€ΡŒΠΌΡ стандартными ΠŸΠΎΡΡ‚Π°Π²Ρ‰ΠΈΠΊΠ°ΠΌΠΈ Π‘Π»ΡƒΠΆΠ± JNDI, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ доступ ΠΊ RMI, DNS, COS Naming Service ΠΈ LDAP. БущСствуСт Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠŸΠΎΡΡ‚Π°Π²Ρ‰ΠΈΠΊ Π‘Π»ΡƒΠΆΠ±Ρ‹ JNDI, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ с вСбсайта Sun, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт JNDI просмотр вашСй локальной Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы (Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΊΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ JNDI).

Π’ JNDI пространство ΠΈΠΌΠ΅Π½ прСдставлСно интСрфСйсом Context, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ элСмСнтом API. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ классы, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ интСрфСйс Context, Π² зависимости ΠΎΡ‚ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ слуТбы, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ ΠΎΠ±Ρ€Π°Ρ‰Π°Π΅Ρ‚Π΅ΡΡŒ посрСдством JNDI. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Context ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для связывания ΠΈΠΌΠ΅Π½ΠΈ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, для удалСния связывания, для пСрСимСнования, для создания ΠΈ удалСния подконтСкста, для поиска ΠΈΠΌΠ΅Π½, для получСния списка ΠΈΠΌΠ΅Π½ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ контСкст Π² Java являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ зарСгистрирован Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ контСкстС ΠΏΠΎΠ΄ своим собствСнным ΠΈΠΌΠ΅Π½Π΅ΠΌ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ субконтСкст, Π½Π°Ρ‡Π°Π² с Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ контСкста, ΠΈ создав связываниС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠΌΠ΅Π½Π΅ΠΌ субконтСкста ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Context.

Π₯отя ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² JNDI ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ ΠŸΠΎΡΡ‚Π°Π²Ρ‰ΠΈΠΊΡƒ Π‘Π»ΡƒΠΆΠ±Ρ‹, концСпция распространяСтся Ρ‚Π°ΠΊ Π΄Π°Π»Π΅ΠΊΠΎ, Ρ‡Ρ‚ΠΎ становится ΠΎΠ±Ρ‰Π΅ΠΉ ΠΈ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΠΉ. Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список всСх ΠΈΠΌΠ΅Π½, зарСгистрированных Π² ΠΊΠΎΡ€Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π²Π°ΠΌΠΈ слуТбы. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ конструктор InitialContext ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ‚ΠΈΠΏ Property. Π― объясню это Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ·ΠΆΠ΅. БСйчас ΠΆΠ΅ просто взглянСм Π½Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄.

Π’Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ это достаточно просто. ΠœΡ‹ создаСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Context, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт ΠΊΠΎΡ€Π΅Π½ΡŒ вашСй слуТбы имСнования ΠΈΠ»ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ пСрСчислСниС всСх элСмСнтов этого контСкста (пустая строка Π² Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° list( ) ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ ΠΈΡ‰Π΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ имя), Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚Π΅ ΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚Π΅ всС элСмСнты ΠΈΠ· пСрСчислСния.

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ JNDI для просмотра содСрТимого корня контСкста Π² DNS сСрвСрС (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ IP адрСса для вашСго DNS, Π² зависимости ΠΎΡ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ вашСй сСти).

//: c18:jndi:SimpleJNDI.java
import javax.naming.*;

public class SimpleJNDI <
public static void main ( String [] args ) throws Exception <
Properties props = new Properties () ;
props.put ( Context.INITIAL_CONTEXT_FACTORY,
«com.sun.jndi.dns.DnsContextFactory» ) ;
props.put ( Context.PROVIDER_URL, «dns://207.155.183.72» ) ;
Context context = new InitialContext ( props ) ;
Enumeration names = context.list ( «» ) ;
while ( names.hasMoreElements ())
System.out.println ( names.nextElement ()) ;
>
>
// /:

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ DNS ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ слуТбы, Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ просто ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΎΡ‚Π»ΠΈΡ‡Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π° ΠΎΡΡ‚Π°Π²ΡˆΠΈΠΉΡΡ ΠΊΠΎΠ΄ останСтся Π±Π΅Π· измСнСния.

БущСствуСт Π΄Ρ€ΡƒΠ³ΠΎΠΉ способ прСдоставлСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² JNDI. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ внСшний Ρ„Π°ΠΉΠ» ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся тСкстовым Ρ„Π°ΠΉΠ»ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ассоциируСт названия ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² с ΠΈΡ… значСниями. Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ jndi.properties, ΠΈ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ располоТСн Π² CLASSPATH вашСго JNDI прилоТСния. ΠžΡ‚Π»ΠΈΡ‡ΠΈΠ΅ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ константы названия ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² интСрфСйсС Context, Π° вмСсто этого Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… «ΡΡ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹Π΅» значСния (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ Π² стандартной Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎ JDK). Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ нашСго Ρ„Π°ΠΉΠ»Π° jndi.properties Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ:

Если Π²Ρ‹ Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚Π΅ этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, Π²Π°ΠΌ большС Π½Π΅Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² конструктор InitialContext. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ помСститС Π² Ρ„Π°ΠΉΠ» jndi.properties, Ρ‚ΠΎ Π²Ρ‹ ΠΈ установитС для JNDI Π² качСствС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

ПослСднСС, ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎΠ΅, Ρ‡Ρ‚ΠΎ я Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ JNDI, это ΠΊΠ°ΠΊ ищутся ΠΈΠΌΠ΅Π½Π°. Как я ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π», сущСствуСт ΠΌΠ΅Ρ‚ΠΎΠ΄ lookup( ) Π² интСрфСйсС Context. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ сущСствуСт внСшний Ρ„Π°ΠΉΠ» jndi.properties, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ, ΠΊΠ°ΠΊΡƒΡŽ слуТбу ΠΌΡ‹ просматриваСм.

//: c18:jndi:SimpleJNDI2.java
import javax.naming.*;

ΠœΡ‹ создали Π½ΠΎΠ²Ρ‹ΠΉ InitialContext ΠΈ Π²Ρ‹Π·Π²Π°Π»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ lookup( ) для Π½Π΅Π³ΠΎ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π² Π‘Ρ‚Ρ€ΠΎΠΊΡƒ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈΠΌΠ΅Π½ΠΈ. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄ lookup( ) ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ слуТбами, ΠΎΠ½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±Ρ‰ΠΈΠΉ класс Object. Однако, Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ ΠΈΠ· lookup( ) опрСдСляСтся спСцифичной слуТбой, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅. Π Π°Π΄ΠΈ этого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΌΡ‹ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅ΠΌ Ρ‚ΠΈΠΏ ΠΈ просто ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ EJB ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ JNDI для нахоТдСния всСх Π²ΠΈΠ΄ΠΎΠ² рСсурсов, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ EJB, ΠΏΡƒΠ» соСдинСний с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΈΠ· ΠΎΠΊΠ½Π° EJB ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠΈΡ€ посрСдством JNDI. ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΎΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ JNDI для получСния соСдинСния с Ρ„Π°Π±Ρ€ΠΈΠΊΠΎΠΉ EJB (ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± этом ΠΏΠΎΠ·ΠΆΠ΅).

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ JNDI с EJB, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠŸΠΎΡΡ‚Π°Π²Ρ‰ΠΈΠΊ Услуг JNDI? ΠžΡ‚Π²Π΅Ρ‚ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ EJB ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ выставляСт свою ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ слуТбу JNDI, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с рСсурсами, управляСмыми ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, эта слуТба EJB JNDI ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ ΠΈ Enterprise JavaBean’Π°ΠΌ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ рСсурсы ΠΏΠΎ JNDI ΠΈΠΌΠ΅Π½Π°ΠΌ. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ запускаСтС ваш EJB ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ нСявно запускаСтС EJB JNDI слуТбу, которая доступна Π²Π°ΠΌ Ρ‡Π΅Ρ€Π΅Π· стандартный JNDI API.

Π”Ρ€ΡƒΠ³ΠΎΠΉ API, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ, это сам EJB API. Он ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ javax.ejb, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, Ρ‡Ρ‚ΠΎ само ΠΏΠΎ сСбС интСрСсно, состоит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· интСрфСйсов ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… классов ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ejb java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ejb java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ejb java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ejb java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ejb java

Π”Ρ€ΡƒΠ³ΠΎΠΉ Π½Π°Π±ΠΎΡ€ элСмСнтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ΅Π½ Π½Π°ΠΌ для ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ³ΠΎ ΠΎΠ±Π·ΠΎΡ€Π°, это классы ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π½Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π½ΠΈΠΆΠ΅ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ (ΠΈΡ… сущСствуСт Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ большС Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅, поТалуйста, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎ JDK Π·Π° Π±ΠΎΠ»Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ).

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ejb java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ejb java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ejb java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ejb java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ejb java

Как Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ Π³Π»Π°Π²Π½Ρ‹Ρ… ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ: ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, наслСдуСмыС ΠΎΡ‚ java.lang.Exception Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, наслСдуСмыС ΠΎΡ‚ java.lang.RuntimeException. Или, Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… Java, провСряСмыС ΠΈ Π½Π΅ провСряСмыС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, соотвСтствСнно.

Π’ EJB всС провСряСмыС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ относятся ΠΊ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌ уровня прилоТСния. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠ½ΠΈ разбросаны ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ уровням распрСдСлСнного прилоТСния, ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ гСнСрятся EJB, ΠΎΠ½ΠΈ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‚ ΡΠ΅Ρ‚ΡŒ распрСдСлСнных ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌΡƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ.

ЀактичСски, использованиС провСряСмых ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ EJB ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² опрСдСлСниях EJB интСрфСйсов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ прСдопрСдСляСтся спСцификациСй. НапримСр, CreateException Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² спСцификации ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для создания экзСмпляра EJB. Аналогично, FinderException Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² спСцификации ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для нахоТдСния ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ, постоянного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° EJB. А RemoveException Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² спСцификации ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ удаляСт EJB ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

НС провСряСмыС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ EJB. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Ссли какая-Ρ‚ΠΎ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° вашСго EJB ΠΏΡ€ΠΎΠ²Π°Π»ΠΈΠ»Π°ΡΡŒ, Π²Ρ‹ выбрасываСтС EJBException ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ наслСдуСмоС ΠΎΡ‚ Π½Π΅Π³ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ EJBException Π½Π΅ провСряСтся состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ошибки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ приходят ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ подсистСмы Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π²Π½ΡƒΡ‚Ρ€ΠΈ EJB ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π”Π°ΠΆΠ΅ Ссли Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ эти ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π²Ρ‹ Π½Π΅ смоТСтС ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ EJB сущСствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ EJB ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ управляСт экзСмплярами ΠΈ заботится ΠΎΠ±ΠΎ всСм, Ρ‡Ρ‚ΠΎ с Π½ΠΈΠΌΠΈ происходит. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€: Ρƒ вас Π΅ΡΡ‚ΡŒ рСализация EJB, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обращаСтся ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ SQLException. БСссмыслСнно Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ это ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌΡƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с Π½ΠΈΠΌ. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΈ ΠΈΠ·Π²Π΅ΡΡ‚ΠΈΡ‚ΡŒ ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Ρ‡Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ дСйствиС, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΠΎΡ‚ΠΊΠ°Ρ‚Ρƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.

ВсС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Π½Π°Ρ€ΡƒΠΆΡƒ ΠΈΠ· вашСго EJB ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ. ДСйствия, ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡ‹Π΅ Π² этом случаС ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ, ΠΌΠΎΠ³ΡƒΡ‚ сильно Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ условий, Π½ΠΎ Π² ΠΎΠ±Ρ‰Π΅ΠΌ ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ автоматичСски ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ (Ссли ΠΎΠ½Π° Π΅ΡΡ‚ΡŒ) ΠΈ пСрСдаст ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ. Если ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, сгСнСрированоС Π²Π½ΡƒΡ‚Ρ€ΠΈ вашСго EJB, Π±Ρ‹Π»ΠΎ Ρ‚ΠΈΠΏΠ° EJBException, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ ΠΎΠ±Ρ‰Π΅Π΅ RMI RemoteException, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ окончился Π½Π΅ΡƒΠ΄Π°Ρ‡Π΅ΠΉ. Если ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, сгСнСрированоС Π² EJB, Π±Ρ‹Π»ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ уровня прилоТСния, Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ FinderException, ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ пСрСдаст это ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ.

EJB ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈ

Основная идСя достаточно проста. Когда Π±Ρ‹ клиСнтскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½ΠΈ запросило ссылку Π½Π° EJB ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ссылку Π½Π° сгСнСрированный ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ прокси, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ всС клиСнтскиС запросы, выполняСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ дСйствия ΠΈ, Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅, Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ BeanProvider’ΠΎΠΌ. ΠœΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ EJB ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π° Π·Π°Ρ‚Π΅ΠΌ EJB ЭкзСмпляра. ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, Π½Π΅ ΠΏΡƒΡ‚Π°ΠΉΡ‚Π΅ ΠΈΡ…: EJB ΠžΠ±ΡŠΠ΅ΠΊΡ‚ гСнСрируСтся ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ EJB экзСмпляр рСализуСтся Bean Provider’ΠΎΠΌ.

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΈ Ρ€ΠΎΠ»ΠΈ EJB ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ стандартом EJB спСцификации. Π’Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ стратСгия Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ способ взаимодСйствия с экзСмпляром EJB спСцифичны для ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.

И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, сгСнСрированный ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ прокси (EJB ΠžΠ±ΡŠΠ΅ΠΊΡ‚) Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡƒΡ‚Π°Ρ‚ΡŒ с RMI прокси, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ прСдставлСн. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ Π½ΠΈΠΆΠ΅ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π·ΡŠΡΡΠ½ΡΠ΅Ρ‚ эту Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ejb java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ejb java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ejb java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ejb java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ejb java

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½ΠΎΠ΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ EJB ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π³Π»Π°Π²Π½Ρ‹Ρ… составных частСй. На Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ я ΠΏΠΎΠΊΠ°Π·Π°Π» случай ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ клиСнтского прилоТСния, Π½ΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π² ΡƒΠΌΠ΅, Ρ‡Ρ‚ΠΎ всСгда сущСствуСт ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ EJB ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π΄Π°ΠΆΠ΅ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ ΠΈΠ· ΠΊΠΎΠ΄Π° Π² этом ΠΆΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ EJB).

RMI прокси ΠΈ Π·Π°Π³Π»ΡƒΡˆΠΊΠ° (stub), с ΠΎΠ΄Π½ΠΎΠΉ стороны, ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ обращаСтся ΠΊ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌΡƒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ EJB ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ RMI прокси ΠΈ Π·Π°Π³Π»ΡƒΡˆΠΊΠ° автоматичСски Π³Π΅Ρ€Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ, хотя Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ это дСйствиС, примСняя Ρ€Π°Π·Π½Ρ‹Π΅ стратСгии.

ΠŸΡƒΠ½ΠΊΡ‚ΠΈΡ€Π½Π°Ρ стрСлка прСдставляСт зависимости, ΠΈ ΠΎΠ½Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, рСализация ЭкзСмпляра EJB измСнится, EJB ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ полагаСтся Π½Π° ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° для этого ЭкзСмпляра EJB.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ вСсь Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹ΠΉ Ρ„ΠΎΠ½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ для Π½Π°Ρ‡Π°Π»Π° рассмотрСния Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Enterprise JavaBean. Π― Π΄Π°ΠΌ Π²Π°ΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± EJB ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… способах Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π°.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС

ΠŸΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ ΠΌΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΏΠΎΠ·Π²ΠΎΠ»ΡŒΡ‚Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΌ для запуска ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ².

Π’Π΅ΡΡŒ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² прилагаСтся ΠΊ этой ΠΊΠ½ΠΈΠ³Π΅. Π― Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Π²Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΊΠΎΠ΄ ΠΈ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»Π°Π³Π°ΡŽΡ‰ΠΈΠ΅ΡΡ скрипты, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ процСсс сборки Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя нСсколько шагов ΠΈ мноТСство исходных Ρ„Π°ΠΉΠ»ΠΎΠ².

Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π°ΠΌ понадобятся: Java SDK1.4 ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ позднюю Π²Π΅Ρ€ΡΠΈΡŽ; Ant ΠΈ JUnit (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ вСроятно ΡƒΠΆΠ΅ установлСны Ρƒ вас, Ссли Π²Ρ‹ запускали Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΠ· этой ΠΊΠ½ΠΈΠ³ΠΈ); ΠΈ XDoclet, другая ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ исходниками, которая ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΌ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π²Π°ΡˆΠΈΡ… EJB.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ ΠΏΠΎ установкС, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ΠΊΠΎΠ΄Π° c18, прСдоставит Π²Π°ΠΌ всС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Π΅Ρ‚Π°Π»ΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ прилоТСния

ВсС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ этой Π³Π»Π°Π²Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ ΠΎΠ±Ρ‰Π΅ΠΉ Ρ‚Π΅ΠΌΠ΅, ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ. ΠœΡ‹ построим простоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽΡΡ JavaTheater, для ΠΏΡ€ΠΎΠ΄Π°ΠΆΠΈ ΠΈ ΠΏΠΎΠΊΡƒΠΏΠΊΠΈ Π±ΠΈΠ»Π΅Ρ‚ΠΎΠ² Π² ΠΊΠΈΠ½ΠΎ. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ строится ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎ, ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ, ΠΈ ΠΌΡ‹ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»ΠΎ с адрСсами ΠΊΠΈΠ½ΠΎΡ‚Π΅Π°Ρ‚Ρ€ΠΎΠ², ΡˆΠΎΡƒ, Π±ΠΈΠ»Π΅Ρ‚Π°ΠΌΠΈ, покупатСлями, ΠΊΡ€Π΅Π΄ΠΈΡ‚Π½Ρ‹ΠΌΠΈ ΠΊΠ°Ρ€Ρ‚Π°ΠΌΠΈ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π£ мСня Π½Π΅Ρ‚ мСста, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π²Π°ΠΌ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ полновСсноС Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ я ΡΡ„ΠΎΠΊΡƒΡΠΈΡ€ΡƒΡŽΡΡŒ Π½Π° ядрС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Π—Π΄Π΅ΡΡŒ Π±ΡƒΠ΄ΡƒΡ‚ классы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ постоянныС сущности, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Ρ„ΠΈΠ»ΡŒΠΌΡ‹ ΠΈ ΡˆΠΎΡƒ, ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ классы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΠΈ прилоТСния. НапримСр, шаги, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠΊΡƒΠΏΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π±ΠΈΠ»Π΅Ρ‚ΠΎΠ² Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΡˆΠΎΡƒ.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ посмотрим Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, я Ρ…ΠΎΡ‡Ρƒ ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ структуры исходных тСкстов. ВсС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ находятся Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ c18 исходного ΠΊΠΎΠ΄Π° для этой ΠΊΠ½ΠΈΠ³ΠΈ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΠ΄Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ являСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ, самодостаточным ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ собираСтся Π² ΠΊΠΎΡ€Π½Π΅ поддирСктория. На Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π΅ΡΡ‚ΡŒ Ant скрипт для сборки. На этом ΠΆΠ΅ ΡƒΡ€ΠΎΠ²Π½Π΅ Π΅ΡΡ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ src, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит всС Ρ„Π°ΠΉΠ»Ρ‹ исходного ΠΊΠΎΠ΄Π° для этого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°. Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ src содСрТит ΠΏΠΎΠ΄Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ejb-tier ΠΈ rmiclient, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… содСрТится ΠΊΠΎΠ΄ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ EJB ΠΈ для клиСнтского прилоТСния (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ JUnit тСст), соотвСтствСнно. Π’Π°ΠΊΠΆΠ΅, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎ Ant скрипт Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ для компиляции ΠΈ сборки (смотритС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π² скриптС Ant Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ), Π½ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ создаСт ΠΈ Π½Π΅ измСняСт Π² src Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ. И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, всС наши классы ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ javatheater, содСрТащСм Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚ΠΎΠΆΠ΅ стоит ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ: javatheater.client содСрТит клиСнтскоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅; javatheater.test содСрТит классы JUnit тСст; javatheater.ejb содСрТит наши EJB интСрфСйсы ΠΈ связанныС классы, Π° javatheater.ejb.implementation содСрТит классы Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ EJB.

//: c18:example01:src:javatheater:Movie.java
//
package javatheater;

public class Movie <
int id;
String title;

public int getId () <
return id;
>

public String getTitle () <
return title;
>

public String toString () <
return «[» + id + «] » + title;
>
>
// /:

Π—Π΄Π΅ΡΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ класс Movie, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит Π΄Π²Π° поля: id (Ρ‚ΠΈΠΏΠ° int) ΠΈ title (Ρ‚ΠΈΠΏΠ° String). Класс Ρ‚Π°ΠΊΠΆΠ΅ опрСдСляСт конструктор плюс сСттСры ΠΈ Π³Π΅Ρ‚Ρ‚Π΅Ρ€Ρ‹ (setters ΠΈ getters) для доступа ΠΊ значСниям ΠΏΠΎΠ»Π΅ΠΉ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π±ΠΎΠ»Π΅Π΅ рСалистичный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ„ΠΈΠ»ΡŒΠΌΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ большС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ Π°ΠΊΡ‚Π΅Ρ€Ρ‹, Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€, Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³, ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€; Π½ΠΎ рСализация всСго этого Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ Π½Π΅Π½ΡƒΠΆΠ½ΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

//: c18:example01:src:javatheater:Show.java
//
package javatheater;

public class Show <
int id;
Movie movie;
String showtime;
int availableSeats;

public int getId () <
return id;
>

public Movie getMovie () <
return movie;
>

public String getShowtime () <
return showtime;
>

public int getAvailableSeats () <
return availableSeats;
>

public String toString () <
return «[» + id + «] » + movie + «, » + showtime + «, »
+ availableSeats;
>
>
// /:

Π’Π°ΠΊ ΠΊΠ°ΠΊ example01 это ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π΅ Java ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΎΠ½ΠΎ Π½Π΅ употрСбляСт ΠΌΠ½ΠΎΠ³ΠΈΠ΅ слуТбы, прСдоставляСмыС Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ EJB. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ, ΠΌΡ‹ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ постоянства. Π― Π½Π΅ использовал JDBC для хранСния ΠΈ получСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ· Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… (Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ отобраТСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚/ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ, Π½Π΅Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ слоТноС для нашСго ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°), Ρ‚Π°ΠΊΠΆΠ΅ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π΅ΡΡ‚ΡŒ класс, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Storage, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ эмулируСт Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ постоянного Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π΄Π°Π½Π½Ρ‹Ρ….

//: c18:example01:src:javatheater:Storage.java
//
package javatheater;

public class Storage <
private static Storage ourInstance;
private Movie [] movies;
private Show [] shows;

public synchronized static Storage getInstance () <
if ( ourInstance == null ) <
ourInstance = new Storage () ;
>
return ourInstance;
>

public synchronized Movie findMovieById ( int id ) <
for ( int i = 0 ; i ) <
Movie movie = movies [ i ] ;
if ( movie.id == id )
return movie;
>
return null ;
>

public synchronized Movie findMovieByTitle ( String title ) <
for ( int i = 0 ; i ) <
Movie movie = movies [ i ] ;
if ( movie.title == title )
return movie;
>
return null ;
>

public synchronized Movie [] findAllMovies () <
return movies;
>

public synchronized Show findShowById ( int id ) <
for ( int i = 0 ; i ) <
Show show = shows [ i ] ;
if ( show.id == id )
return show;
>
return null ;
>

public synchronized Show findShowByMovie ( Movie movie ) <
for ( int i = 0 ; i ) <
Show show = shows [ i ] ;
if ( show.movie.id == movie.id )
return show;
>
return null ;
>

public synchronized Show [] findAllShows () <
return shows;
>
>
// /:

Π­Ρ‚ΠΎΡ‚ класс Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ дизайнСрский шаблон Π‘ΠΈΠ½Π³Π»Π΅Ρ‚ΠΎΠ½Π° (ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ сущСствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² вашСй систСмС). Π•Π³ΠΎ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΉ конструктор заполняСт Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… с Ρ„ΠΈΠ»ΡŒΠΌΠ°ΠΌΠΈ ΠΏΠΎ Java Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ ΠΈ ΠΏΠΎΠΊΠ°Π·Π°ΠΌΠΈ. Он Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ для получСния Ρ„ΠΈΠ»ΡŒΠΌΠΎΠ² ΠΈ ΠΏΠΎΠΊΠ°Π·ΠΎΠ² ΠΈΠ· Ρ„ΠΈΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ критСриям. Π’ Π½Π΅ΠΌ Π½Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для обновлСния нашСй Ρ„Π°Π»ΡŒΡˆΠΈΠ²ΠΎΠΉ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ Π²Ρ‹ Π²ΠΎΠ»ΡŒΠ½Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… Π² качСствС упраТнСния, Ссли чувствуСтС Π² этом Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ.

//: c18:example01:src:javatheater:ShowListing.java
//
package javatheater;

public class ShowListing <
static Storage storage = Storage.getInstance () ;

public static void main ( String [] args ) <
Show [] shows = storage.findAllShows () ;
for ( int i = 0 ; i ) <
Show show = shows [ i ] ;
System.out.println ( show ) ;
>
>
>
// /:

ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΡŽΡΡŒ, этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½, Π½ΠΎ ΠΎΠ½ Π²Π²ΠΎΠ΄ΠΈΡ‚ нСсколько Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΏΡ€ΠΈ использовании EJB Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹: постоянство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ сущностных классов ΠΎΠ½ Π»ΠΎΠ³ΠΈΠΊΠΈ бизнСс классов ΠΈ связи ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ. Плюс ΠΊ этому, ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ΄Π°Π» Π½Π°ΠΌ идСю Ρ‚ΠΎΠ³ΠΎ, Ρ‡Π΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ всС вопросы.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *