EJB J 2 EE Application Server EE EJB
Контейнери EJB J 2 EE сервер (Application Server EE) EJB контейнер БД EJB J 2 EE 16
Sun Microsystems. Net. Beans IDE. Sun Java System Application Server J 2 EE 22
До історії J 2 EE (з (*) Barcia R. - Get to know Java EE 5) www. ibm. com/developerworks/ websphere/library/techarticles/ 0707_barcia/0707_barcia. html 26 (*) J 2 EE
Java Persistence Architecture API (JPA) Java EE 5. Persistence provider Провайдери персистентності (persistence provider), що можуть підключитись (plug in) в якості основи реалізації JPA : • Hibernate (JBoss); • Top. Link (Oracle); • Java Data Objects – JDO; • Kodo (BEA). Java EE 5 J 2 EE 1. 4 J 2 EE 28
Використання інтерфейсів EJB. Приклад клієнтської програми (фрагмент) Context c = new Initial. Context(); Object remote = c. lookup("java: comp/env/ejb/cnv. Bean"); cnv. Remote. Home rv = (cnv. Remote. Home) Portable. Remote. Object. narrow(remote, cnv. Remote. Home. class); cnv. Remote cnv = rv. create(); System. out. println("UAG --- "); System. out. println(cnv. USDto. UAG(3. 0)); Deployment Descriptor (фрагмент) J 2 EE JNDI RMI Home-”об'єкт” у ролі «фабрики» Бізнес-метод 37
Session Bean. EJB-реалізація (специфіка реалізації інтерфейсів EJB) public interface Calc. Home extends EJBHome { Calc create() throws Create. Exception, Remote. Exception; } Успадкований remove() public class Calc. EJB implements Session. Bean, Calc {. . . public void ejb. Create(). . . “Класика” J 2 EE 42
Session Bean. Home-, та Remote- інтерфейси. Приклад package ejb; import java. rmi. Remote. Exception; import javax. ejb. Create. Exception; import javax. ejb. EJBHome; public interface cnv. Remote. Home extends EJBHome { cnv. Remote create() throws Create. Exception, Remote. Exception; } package ejb; import javax. ejb. EJBObject; public interface cnv. Remote extends EJBObject, cnv. Remote. Business { } package ejb; public interface cnv. Remote. Business { double USDto. UAG(double USD) throws java. rmi. Remote. Exception; } J 2 EE 45
Session Bean. Клас біна. Приклад package ejb; import javax. ejb. *; public class cnv. Bean implements Session. Bean, cnv. Remote. Business { private Session. Context context; public void set. Session. Context(Session. Context a. Context) { context = a. Context; } public void ejb. Activate(){} public void ejb. Passivate(){} public void ejb. Remove() {} public void ejb. Create() {} public double USDto. UAG(double USD) { return (USD*5. 05); } } J 2 EE 46
Session Bean. Deployment Descriptor (файл ejb-jar. xml) (2/2) Транзакційний атрибут (для кожного метода) - Required J 2 EE 48
Entity Bean. Внутрішнє представлення ejb. Post. Create() ejb. Load() ejb. Store() J 2 EE 50
Entity Beans. Два механізми Persistence. Відмінності у кодуванні (“The J 2 EE™ 1. 4 Tutorial “Sun Microsystems) J 2 EE 55
Приклад (local-home interface for Player enterprise bean) package team; import java. util. Collection; import javax. ejb. *; public interface Player. Local. Home extends EJBLocal. Home { Player. Local find. By. Primary. Key(String key) throws Finder. Exception; public Player. Local create(String id, String name, String position, Double salary) throws Create. Exception; Collection find. By. Position(String position) throws Finder. Exception; Collection find. All() throws Finder. Exception; . . . } J 2 EE 59
Приклад (local interface for Player enterprise bean) package team; import javax. ejb. EJBLocal. Object; public interface Player. Local extends EJBLocal. Object, Player. Local. Business { } J 2 EE 60
Приклад (local business interface for Player enterprise bean) package team; Методи доступу (get, import java. util. Collection; set) до абстрактних import javax. ejb. Finder. Exception; персистентних полів public interface Player. Local. Business { public abstract String get. Player. Id(); public abstract void set. Player. Id(String id); public abstract String get. Position(); public abstract void set. Position(String position); Player. Id, Position, … є абстрактними персистентними полями (вони відображаються у поля таблиці). . . Collection get. Teams(); Teams – поле відношення void set. Teams(Collection teams); (CMR) з біном Team Collection get. Leagues() throws Finder. Exception; Collection get. Sports() throws Finder. Exception; } Бізнес-методи J 2 EE 61
Приклад (bean class for the Player. Bean enterprise bean) (1/4) package team; import java. util. Collection; import javax. ejb. *; public abstract class Player. Bean implements Entity. Bean, Player. Local. Business { private Entity. Context context; public void set. Entity. Context(Entity. Context a. Context) { context = a. Context; } public void ejb. Activate() {} public void ejb. Passivate() {} public void ejb. Remove() {} public void unset. Entity. Context() { context = null; } public void ejb. Load() {} J 2 EE 62 public void ejb. Store() {}
Приклад (bean class for the Player. Bean enterprise bean) (2/4) public abstract String get. Player. Id(); public abstract void set. Player. Id(String id); Методи доступу (get, set) public abstract String get. Name(); до абстрактних public abstract void set. Name(String name); персистентних полів public abstract String get. Position(); public abstract void set. Position(String position); public abstract Double get. Salary(); public abstract void set. Salary(Double salary); public abstract Collection get. Teams(); public abstract void set. Teams( Collection teams); J 2 EE Методи доступу (get, set) до поля Teams відношення (CMR) з біном Team 63
Приклад (bean class for the Player. Bean enterprise bean) (3/4) public String ejb. Create(String player. Id, String name, String position, Double salary) throws Create. Exception { if (player. Id == null) { throw new Create. Exception( "The field "id" must not be null"); } set. Player. Id(player. Id); set. Name(name); set. Position(position); ejb. Create. XXX <---> ejb. Post. Create. XXX set. Salary(salary); (ejb. Post. Create. XXX використовується при return null; потребі додаткової доінсталяції) } public void ejb. Post. Create(String player. Id, String name, String position, Double salary) { } J 2 EE 64
Приклад (bean class for the Player. Bean enterprise bean) (4/4) public Collection get. Leagues() throws Finder. Exception { Player. Local player = (Player. Local) context. get. EJBLocal. Object(); return ejb. Select. Leagues(player); Бізнес-методи } public Collection get. Sports() throws Finder. Exception { Player. Local player = (Player. Local) context. get. EJBLocal. Object(); return ejb. Select. Sports(player); } Абстрактні ejb. Select-методи. (Їх коди генеруються при розгортання на основі відповідних команд EJB QL) public abstract Collection ejb. Select. Leagues( Player. Local p 0) throws Finder. Exception; public abstract Collection ejb. Select. Sports( Player. Local p 0) throws Finder. Exception; Бізнес-методи є “обгортками” відповідних ejb. Select-методів! J 2 EE 65
Net. Beans. DD (ejb-jar. xml). “Майстри”. Абстрактні ejb. Select-методи ejb-jar. xml — 363 рядки, 13472 байти J 2 EE 66
DD (ejb-jar. xml). Фрагмент <query> <query-method> <method-name> ejb. Select. Leagues </method-name> <method-params> <method-param>team. Player. Local</method-param> </method-params> </query-method> <ejb-ql> select distinct t. league from Player p, in (p. teams) as t where p=? 1 </ejb-ql> </query> J 2 EE 67
Net. Beans. DD (ejb-jar. xml) J 2 EE 68
DD (ejb-jar. xml). Фрагмент J 2 EE 69
DD (ejb-jar. xml). Фрагмент <ejb-relationship-role> <ejb-relationship-role-name>Team. Bean </ejb-relationship-role-name> <multiplicity>Many</multiplicity> <cascade-delete/> <relationship-role-source> <ejb-name>Team. Bean</ejb-name> </relationship-role-source> league <cmr-field> <cmr-field-name> league </cmr-field-name> </cmr-field> J 2 EE </ejb-relationship-role> 70
DD (ejb-jar. xml). Фрагмент <ejb-relationship-role> <ejb-relationship-role-name>League. Id </ejb-relationship-role-name> <multiplicity>One</multiplicity> <relationship-role-source> <ejb-name>League. Bean</ejb-name> teams </relationship-role-source> <cmr-field-name> teams </cmr-field-name> <cmr-field-type>java. util. Collection</cmr-field-type> </cmr-field> J 2 EE 71 </ejb-relationship-role>
DD (ejb-jar. xml). Фрагмент J 2 EE 72
DD (ejb-jar. xml). Фрагмент <abstract-schema-name>Player</abstract-schema-name> <cmp-field> <field-name>player. Id</field-name> </cmp-field> <field-name>name</field-name> </cmp-field> <field-name>position</field-name> </cmp-field> <field-name>salary</field-name> </cmp-field> <primkey-field>player. Id</primkey-field> J 2 EE 73
DD (ejb-jar. xml). Фрагмент <query> <description>auto generated method</description> <query-method> <method-name>find. By. Position</method-name> <method-params> <method-param>java. lang. String</method-param> </method-params> </query-method> <ejb-ql> SELECT OBJECT(p) FROM Player AS p WHERE p. position = ? 1 </ejb-ql> </query> J 2 EE 74
DD (ejb-jar. xml). Фрагмент <container-transaction> <method> <ejb-name>Team. Bean</ejb-name> <method-name>*</method-name> </method> <trans-attribute>Required</trans-attribute> </container-transaction> J 2 EE 75
Net. Beans. DD (ejb-jar. xml). CMR J 2 EE 76
Net. Beans. DD (ejb-jar. xml) J 2 EE 77
Net. Beans. DD (ejb-jar. xml) J 2 EE 78
Net. Beans. DD (ejb-jar. xml) J 2 EE 79
Атрибути транзакцій · · · Required Requires. New Mandatory Not. Supported Supports Never J 2 EE 84
Транзакції, керовані біном • begin transaction • commit transaction • rollback transaction J 2 EE 85
sun-ejb-jar. xml J 2 EE 86
- Slides: 86