EJB 2 1 EJB 3 0 POJO Java
Зміст • • Недоліки EJB 2. 1. Компоненти EJB 3. 0, POJO та анотації. Технологія Java Persistence у Java EE 5. Persistence provider. Використання Persistence на платформі SE. Специфікація Java EE 5 Persistence. Entity Managers. Entities (Java EE 5) та таблиці. Відношення між Entities. Java EE 5 EJB 3. 0 2
Деякі порівняння EJB 2. 1 та EJB 3. 0 Number of Java files Number of XML files 2 Lines of code (Java language) Lines of code (XML) EJB 2. 1 EJB 3. 0 17 7 9 987 792 716 26 _______________________ www. jroller. com/comments/raghukodali/Weblog/does_ejb_3_0_really Java EE 5 EJB 3. 0 6
Компоненти EJB 3. 0 та анотації Компонент EJB 3. 0 POJO (Plain Old Java Object) = + Java EE 5 EJB 3. 0 @ 7
Session Bean. Приклад (версія конвертора валют) package ejb; import javax. ejb. Remote; /* This is the business interface for cnv 3 enterprise bean. */ POJI (Plain Old @Remote Java Interface ) public interface cnv 3 Remote { double USDto. UAG(double USD); } package ejb; POJO (Plain Old import javax. ejb. Stateless; Java Object) @Stateless public class cnv 3 Bean implements cnv 3 Remote { public cnv 3 Bean() { } public double USDto. UAG(double USD) { return (USD*5. 05); } Descriptor (файл Java EE 5 EJBDeployment 3. 0 8 } ejb-jar. xml) - відсутній
Анотації. Замовчування @Stateless @Stateful @Remote @Local @Business. Method Не обов'язково! @Stateless public class c 1 Bean { @Remote public double Method 1(double X 1) { return (X 1*5. 05); } public double Method 2(double X 1) {. . . } } Java EE 5 EJB 3. 0 11
Клієнтська програма. Dependency injection замість JNDI lookup public class Main { Спрощується тестування @EJB private static cnv 3 Remote cnv 3 Bean; public Main() { } public static void main(String[] args) { try { System. out. println("UAG --- "); System. out. println(cnv 3 Bean. USDto. UAG(3. 0)); System. exit(0); J 2 EE 1. 4 (EJB 2. 1) } catch (Exception ex) { System. err. println("Caught an unexpected exception!"); ex. print. Stack. Trace(); } } Java EE 5 EJB 3. 0 12 }
EJB 3. 0 та entity POJO (Plain Old Java Object) EJB 3. 0 = + @ EJB 3. 0 entity Java EE 5 EJB 3. 0 13
Persistence provider Java SE Java EE 5 Можливість! Java SE Java EE 5 EJB 3. 0 14
Entity Managers Container-Managed Entity Manager @Persistence. Context Entity. Manager. Factory emf; Entity. Manager em = emf. create. Entity. Manager(); . . . em. persist(player); Entity. Manager. Factory emf = Persistence. create. Entity. Manager. Factory("league"); Entity. Manager em = emf. create. Entity. Manager(); . . . em. persist(player); Application-Managed Entity Managers (2 варіанти ) @Persistence. Unit Entity. Manager. Factory emf; Entity. Manager em = emf. create. Entity. Manager(); Java EE 5 EJB 3. 0 18
Деякі методи інтерфейсу Entity Manager public void persist(Object entity) – зберігає дані об'єкта (entity) у БД. public void remove(Object entity) – вилучає об'єкт (entity). public Query create. Query(String ql. String) – створює запит у JP QL. public Query create. Named. Query(String name) – створює іменований запит до БД (name – ім'я запиту). public Query create. Native. Query(String sql. String) – створює Native-запит до БД (SQL-запит). Java EE 5 EJB 3. 0 19
Class - Entity - Table @Entity public class Customer { @Id int id; . . . } Class name Customer id - primary key Entity name Customer Java EE 5 EJB 3. 0 Table name CUSTOMER 20
Entities та таблиці @Entity @Table(name=“CUST”) public class Customer{ protected int id; @Column(name=“PIP”) protected String name; . . . Не буде зберігатись у БД @Transient protected int order. Count; public Customer(){} @Id @Generated. Value public int get. Id(){return id; } protected void set. Id(int id){this. id = id; } Java EE 5 EJB 3. 0 21
Вбудовані класи @Embeddable public class Cust. Addr{ private int street. Addr; private String city; . . . }. . . @Entity @Table(name=“CUST”) public class Customer{. . . private Cust. Addr addr; @Embedded @Attribute. Overrides({ @Attribute. Override(name="street. Addr", column=@Column("STRT")), @Attribute. Override(name="city", column=@Column("CITY")). . . }) public Customer. Address get. Customer. Address(){. . . Java EE 5 EJB 3. 0 22
Відношення @One. To. One @Entity public class Employee { private Pasport pasp; • Спрямованість @One. To. One відношення: public Pasport get. Pasp() { – односпрямоване; return pasp; – двоспрямоване. //owner }. . . } Створюється зовнішній ключ у @Entity таблиці EMPLOYEE (колонка з public class Pasport { іменем PASP_ID 2) @Id int id 2; private Employee empl; @One. To. One(mapped. By=”pasp") public Employee get. Empl () { return empl; //inverse side }. . . Java EE 5 EJB 3. 0 23 }
Відношення @Many. To. One @Entity public class Order { @Id int id; . . . @Many. To. One Customer cust; } Java EE 5 EJB 3. 0 24
Відношення @One. To. Many @Entity public class Customer { @Id int id; . . . @One. To. Many(mapped. By=“cust ”) Collection<Order>orders; } //inverse side @Entity public class Order { @Id int id; . . . @Many. To. One Customer cust; }//owner Java EE 5 EJB 3. 0 25
Відношення @Many. To. Many @Entity public class Customer { @Id @Entity public class Phone{ @Id int id; . . . @Many. To. Many Collection<Phone> phones; } } int id; . . . @ Many. To. Many(mapped. By= “phones ”) Collection< Customer > custs; } Java EE 5 EJB 3. 0 26
Відношення @Many. To. Many @Entity public class Customer { @Id int id; . . . @Many. To. Many @Join. Table(table=“CUST_PHONE ”, join. Columns=@Join. Column(name=“CUST_ID ”), inverse. Join. Columns=@Join. Column(name=“PHON_ID ”)) Collection<Phone>phones; } Java EE 5 EJB 3. 0 27
Успадкування (Inheritance) Java EE 5 EJB 3. 0 28
@Discriminator. Column (Варіант SINGLE_TABLE) Java EE 5 EJB 3. 0 30
Успадкування. (Roster Java EE 5. Class League. ) Java EE 5 EJB 3. 0 31
Успадкування (Roster Java EE 5. Class Winter. League. ) Java EE 5 EJB 3. 0 32
Успадкування (Roster Java EE 5. Class Summer. League. ) Java EE 5 EJB 3. 0 33
persistence. xml (Roster) Java EE 5 EJB 3. 0 34
Cascade. Type, Fetch. Type @One. To. Many(mapped. By="customer. Order", cascade=Cascade. Type. ALL , fetch=Fetch. Type. EAGER // or LAZY ) public Collection<Line. Item> get. Line. Items() { return line. Items; } Java EE 5 EJB 3. 0 35
Додаток Java EE 5 EJB 3. 0 36
Requirements for Entity Classes An entity class must follow these requirements: • The class must be annotated with the javax. persistence. Entity annotation. • The class must have a public or protected, no-argument constructor. The class may have other constructors. • The class must not be declared final. No methods or persistent instance variables must be declared final. • If an entity instance be passed by value as a detached object, such as through a session bean’s remote business interface, the class must implement the Serializable interface. • Entities may extend both entity and non-entity classes, and non-entity classes may extend entity classes. • Persistent instance variables must be declared private, protected, or package-private, and can only be accessed directly by the entity class’s methods. Clients must access the entity’s state through accessor or business methods. Java EE 5 EJB 3. 0 37
- Slides: 37