Java EE 5 EJB 3.0: відомості
Завантажити презентаціюПрезентація по слайдам:
Зміст Недоліки 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
Деякі недоліки EJB 2.X (J2EE 1.4) “Важковаговість”. Дуже складна специфікація, потреба враховувати велику кількість обмежень. Навіть "майстри" не набагато покращували ситуацію. Особливо складною виглядає технологія Persistence та, зокрема, застосування ORM. Специфікація Persistence-моделі виявилась із суттєвими прогалинами, що призвело до появи альтернативних та досить “віддалених” один від одного варіантів каркасів (framework) ORM. До того ж контрастувала “легковаговість” таких каркасів, як JBoss Hibernate, Oracle TopLink тощо. Втрата основних переваг об'єктно-орієнтованого підходу (успадкування, поліморфізм). Java EE 5 EJB 3.0
“Важковаговість” EJB 2.X (J2EE 1.4). До того ж треба враховувати вимоги щодо успадкованості класів та інтерфейсів, щодо використання виключень, щодо параметрів тощо. Екстремально складне та не інтуітивне програмування Java EE 5 EJB 3.0
Java EE 5 EJB 3.0 Серед усіх технологічних рішень Java EE 5 найважливішою є специфікація EJB 3.0, значні синтаксичні зміни якої набагато спрощують розробку проектів з EJB: Значне спрощення (на рівні синтаксису) компонентів EJB; Значно спрощена об'єктно-реляційна модель персистентності. Plain Old Java Object (POJO) Java EE 5 EJB 3.0
Деякі порівняння EJB 2.1 та EJB 3.0 EJB 2.1 EJB 3.0 Number of Java files 17 7 Number of XML files 9 2 Lines of code (Java language) 987 716 Lines of code (XML) 792 26 ______________________________________________ www.jroller.com/comments/raghukodali/Weblog/does_ejb_3_0_really Java EE 5 EJB 3.0
Компоненти EJB 3.0 та анотації = + @ POJO (Plain Old Java Object) Компонент EJB 3.0 Java EE 5 EJB 3.0
Session Bean. Приклад (версія конвертора валют) package ejb; import javax.ejb.Remote; /* This is the business interface for cnv3 enterprise bean. */ @Remote public interface cnv3Remote { double USDtoUAG(double USD); } package ejb; import javax.ejb.Stateless; @Stateless public class cnv3Bean implements cnv3Remote { public cnv3Bean() { } public double USDtoUAG(double USD) { return (USD*5.05); } } POJO (Plain Old Java Object) POJI (Plain Old Java Interface ) Deployment Descriptor (файл ejb-jar.xml) - відсутній Java EE 5 EJB 3.0
Компоненти EJB 3.0 . Перші враження та висновки “Повернення” на платформу ООП (звичайно, бажано ще переконатись у можливості використання принципів ООП) Анотації замість Deployment Descriptor. (Це особливо важливий фактор для Persistence, конфігурування якої в EJB 2.1 було пов'язане у значній мірі з DD та вражало розміром XML-коду). Замовчування, які є чутливими до контексту. . . . вимоги щодо успадкованості класів та інтерфейсів, щодо використання виключень ... Home-інтерфейс відсутній Java EE 5 EJB 3.0
Session Bean. Приклад (ще одна версія конвертора валют) Замовчування, які є чутливими до контексту. @Stateless public class cnv3Bean { public cnv3Bean() { } @Remote public double USDtoUAG(double USD) { return (USD*5.05); } } Опис інтерфейсів відсутній! Java EE 5 EJB 3.0
Анотації. Замовчування @Stateless public class c1Bean { @Remote public double Method1(double X1) { return (X1*5.05); } public double Method2(double X1) { ... } } @Stateless @Stateful @Remote @Local @BusinessMethod Не обов'язково! Java EE 5 EJB 3.0
Клієнтська програма. Dependency injection замість JNDI lookup public class Main { @EJB private static cnv3Remote cnv3Bean; public Main() { } public static void main(String[] args) { try { System.out.println("UAG --- "); System.out.println(cnv3Bean.USDtoUAG(3.0)); System.exit(0); } catch (Exception ex) { System.err.println("Caught an unexpected exception!"); ex.printStackTrace(); } } } J2EE 1.4 (EJB 2.1) Спрощується тестування Java EE 5 EJB 3.0
EJB 3.0 та entity = + @ entity POJO (Plain Old Java Object) EJB 3.0 EJB 3.0 Java EE 5 EJB 3.0
Специфікація Persistence EJB 3.0 Основні напрямки: ORM – більш проста та строга специфікація (з використанням анотацій в якості метаданих ORM ). Entity Manager (EM) API— стандартний API для виконання CRUD (create, read, update, delete) та persistence-операцій для entities (persist, різні операції пов'язані з пошуком). Java Persistence Query Language (JP QL) – SQL-подібна мова. Може розглядатись як стандарт OR- query технологій. Є розвитком (та істотним розширенням) EJB QL (перехід від імен, що визначаються абстрактними схемами до імен entity). Java EE 5 EJB 3.0
ORM . (Специфікація Persistence EJB 3.0) ORM – більш проста та строга специфікація (з використанням анотацій в якості метаданих ORM ). Магія Persistence закладена в анотаціях POJO. У EJB 2.1 окрім стандартного Deployment Descriptor – файлу ejb-jar.xml – з даними ORM -специфікації для конфігурування Persistence необхідно також залучати ще й “Deployment Descriptor від вендорів” (саме там специфікується прив'язка до конкретних баз даних, таблиць, полів таблиці). (Прикладом “Deployment Descriptor від вендорів” є файли sun-ejb-jar.xml ). Головна мета EJB 3.0 – автоматична персистенція (persistence), яка конфігурується повністю (на 100%) за анотаціями Persistence POJO. Java EE 5 EJB 3.0
Entity Manager. (Специфікація Persistence EJB 3.0) Entity Manager (EM) API— стандартний API для виконання CRUD (create, read, update, delete) та persistence-операцій для entities (persist, різні операції пов'язані з пошуком). Entity Manager ”знає”, як додавати entity до БД, вилучати, оновлювати entity). Entity Manager пов'язується з persistence контекстом (persistence context). Persistence context – це сукупність елементів entity, керованих Entity Manager. Зокрема, persistence context та відповідний менеджер (Entity Manager) може надаватись контейнером EE. Java EE 5 EJB 3.0
Entity Managers @PersistenceUnit EntityManagerFactory emf; EntityManager em = emf.createEntityManager(); EntityManagerFactory emf = Persistence.createEntityManagerFactory("league"); EntityManager em = emf.createEntityManager(); . . . em.persist(player); Application-Managed Entity Managers (2 варіанти ) @PersistenceContext EntityManagerFactory emf; EntityManager em = emf.createEntityManager(); . . . em.persist(player); Container-Managed Entity Manager Java EE 5 EJB 3.0
Деякі методи інтерфейсу Entity Manager public void persist(Object entity) – зберігає дані об'єкта (entity) у БД. public void remove(Object entity) – вилучає об'єкт (entity). public Query createQuery(String qlString) – створює запит у JP QL. public Query createNamedQuery(String name) – створює іменований запит до БД (name – ім'я запиту). public Query createNativeQuery(String sqlString) – створює Native-запит до БД (SQL-запит). Java EE 5 EJB 3.0
Class name Entity name Table name Customer Customer CUSTOMER Class - Entity - Table @Entity public class Customer { @Id int id; ... } id - primary key Java EE 5 EJB 3.0
Entities та таблиці @Entity @Table(name=“CUST”) public class Customer{ protected int id; @Column(name=“PIP”) protected String name; . . . @Transient protected int orderCount; public Customer(){} @Id @GeneratedValue public int getId(){return id;} protected void setId(int id){this.id = id;} Не буде зберігатись у БД Java EE 5 EJB 3.0
Вбудовані класи @Embeddable public class CustAddr{ private int streetAddr; private String city; ... } ... @Entity @Table(name=“CUST”) public class Customer{ ... private CustAddr addr; @Embedded @AttributeOverrides({ @AttributeOverride(name="streetAddr", column=@Column("STRT")), @AttributeOverride(name="city", column=@Column("CITY")) ... }) public CustomerAddress getCustomerAddress(){ ... Java EE 5 EJB 3.0
Спрямованість відношення: односпрямоване; двоспрямоване. Відношення @OneToOne @Entity public class Employee { private Pasport pasp; @OneToOne public Pasport getPasp() { return pasp; } ... } @Entity public class Pasport { @Id int id2; private Employee empl; @OneToOne(mappedBy=”pasp") public Employee getEmpl () { return empl; } ... } Створюється зовнішній ключ у таблиці EMPLOYEE (колонка з іменем PASP_ID2) //inverse side //owner Java EE 5 EJB 3.0
Відношення @ManyToOne @Entity public class Order { @Id int id; ... @ManyToOne Customer cust; } Java EE 5 EJB 3.0
Відношення @OneToMany @Entity public class Customer { @Id int id; ... @OneToMany(mappedBy=“cust ”) Collectionorders; } //inverse side @Entity public class Order { @Id int id; ... @ManyToOne Customer cust; }//owner Java EE 5 EJB 3.0
Відношення @ManyToMany @Entity public class Customer { @Id int id; ... @ManyToMany Collection phones; } } @Entity public class Phone{ @Id int id; ... @ ManyToMany(mappedBy= “phones ”) Collection< Customer > custs; } Java EE 5 EJB 3.0
Відношення @ManyToMany @Entity public class Customer { @Id int id; ... @ManyToMany @JoinTable(table=“CUST_PHONE ”, joinColumns=@JoinColumn(name=“CUST_ID ”), inverseJoinColumns=@JoinColumn(name=“PHON_ID ”)) Collectionphones; } Java EE 5 EJB 3.0
Успадкування. Стратегії відображення Додатково містяться зовнішні ключі у “дочірніх” таблицях За замовчуванням public enum InheritanceType { SINGLE_TABLE, JOINED, TABLE_PER_CLASS }; Java EE 5 EJB 3.0
CascadeType, FetchType @OneToMany(mappedBy="customerOrder", cascade=CascadeType.ALL , fetch=FetchType.EAGER // or LAZY ) public Collection getLineItems() { return lineItems; } Java EE 5 EJB 3.0
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
Схожі презентації
Категорії