1 / 29

Hibernate utvikling i praksis

Hibernate utvikling i praksis. JavaZone 2004 Eivind Waaler, Bekk – 15.09.2004. Versjon 1.0. Agenda. Introduksjon til Hibernate Utviklingsteknikker Deployment Noen erfaringer Fremtidsutsikter. Hibernate. XML. XML. DB. POJO. POJO. Introduksjon. ORM rammeverk

dino
Download Presentation

Hibernate utvikling i praksis

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Hibernate utvikling i praksis JavaZone 2004 Eivind Waaler, Bekk – 15.09.2004 Versjon 1.0

  2. Agenda • Introduksjon til Hibernate • Utviklingsteknikker • Deployment • Noen erfaringer • Fremtidsutsikter

  3. Hibernate XML XML DB POJO POJO Introduksjon • ORM rammeverk • Javaobjekter (POJO)  Databasetabeller • VO/DTO ut – Domenemodellen returnerer! • Svært populært – ”standard” i OS miljøer • Versjon 1.0 – september 2002 • Versjon 2.0 – juli 2003 • Versjon 2.1 – desember 2003 • Versjon 2.1.6 – august 2004 • Versjon 3.0 – 2004/2005 • XML mappingfiler • Klasse mot tabell • Felter mot kolonner • Relasjoner mot fremmednøkler • ++ all mapping informasjon

  4. Introduksjon • Sesjoner • CRUD operasjoner • Spørringer • Objekter – transient/persistent • Ikke trådsikker! • SessionFactory • Spørringer • HQL – Hibernate Query Language • Criteria API • Native SQL • Transaksjoner – TransactionFactory

  5. XML POJO XML POJO XML POJO XML POJO XML POJO DDL Utviklingsteknikker/Verktøy • Skrive alt selv • middle-out – XML • top-down – Javakode • bottom-up – Database • Verktøy • hbm2java • SchemaExport • SchemaUpdate • XDoclet • Middlegen

  6. DDL XML POJO Utviklingsteknikker – middle-out • ”Vanligste” teknikken • XML mapping • Verktøy • hbm2java – Java filer (POJO) • SchemaExport/SchemaUpdate – SQL DDL (fil eller db oppdatering) • Fordeler • Kun Hibernate verktøy • DTD • Ulemper • Skrive XML • Utvide klasser

  7. Utviklingsteknikker – middle-out <hibernate-mapping> <class name="domain.Report"table="REPORTS"dynamic-update="false"> <id name="id"column="ID"type="int"> <generator class="identity"/> </id> <property name="name" type="java.lang.String" column="NAME" ... <set name="documents" lazy="false" inverse="true" cascade="all-delete-orphan" sort="unsorted" > ...

  8. POJO XML DDL Utviklingsteknikker – top-down • Arbeide med kode • Java klassefiler • Verktøy • XDoclet – XML mappingfiler • SchemaExport/SchemaUpdate – SQL DDL • Fordeler • Skrive Javakode! • Utvide klasser • Ulemper • XDoclet – ekstra verktøy • Min favoritt!

  9. Utviklingsteknikker – top-down /** * @hibernate.class table="REPORTS" * @hibernate.query * name="ReportByPerson" * query="select report from Report report where report.person.id = ?" */ public class Report extends HibernateDomainObject { /** * Get the documents for this report. * @return Returns the documents. * @hibernate.set lazy="false" inverse="true" cascade="all-delete-orphan" * @hibernate.collection-key column="REPORT_ID_FK" * @hibernate.collection-one-to-many class="domain.Document" */ public Set getDocuments() { return_documents; } ...

  10. DB XML POJO Utviklingsteknikker – bottom-up • Databasemodell m/relasjoner • Verktøy • Middlegen – XML mapping filer • hbm2java – Java filer • Fordeler • Eksisterende database • Lite feil! • Mye bra DB-verktøy • Ulemper • Middlegen – ekstra verktøy • Erfaringer prosjekt • Kompleks dbmodell m. >100 tabeller • ~ halv dag  komplett Hibernate lag

  11. Utviklingsteknikker – bottom-up

  12. Deployment • Standard • JBoss SAR/JMX MBean • Spring (NASA Art)

  13. Deployment – Standard config • Standard • hibernate.properties • Config i kode: • Alternativt – XML config • hibernate.cfg.xml • Databaseinnstillinger • Liste mappingfiler Configuration cfg = new Configuration(); cfg.addClass(airline.hibernate.Person.class); cfg.addClass(airline.hibernate.Flight.class); cfg.addClass(airline.hibernate.Reservation.class); SessionFactory factory = cfg.buildSessionFactory(); SessionFactory sf = new Configuration().configure().buildSessionFactory();

  14. Deployment – MBean/JBoss SAR • Hibernate  JBoss • MBean – SessionFactory oppretting • Alt pakkes i en SAR fil (Service Archive) • Hibernate mappings • POJO klasser • DD – jboss-service.xml • jboss-service.xml • DataSource JNDI navn • Factory JNDI navn • Dialect settings • Liste av mappings • XDoclet støtte • JMX • Runtime config

  15. J2SE client WebApp JBoss EJB facade SAR DB Deployment – MBean/JBoss SAR • SessionFactory tilgjengelig via JNDI: • Fordeler med MBean • Støtter CMT (Stateless Session Bean – façade) • Appserver styrer Connection Pooling • Runtime config • Middlegen/XDoclet • Eksisterende database  komplett SAR fil • JBoss 3.2.6  HAR (Hibernate Archive) • HAR Deployer – multiple MBean • hibernate-service.xml • Sesjonshåndtering – SessionContext.getSession(…) InitialContext ctx = new InitialContext(); SessionFactory factory = (SessionFactory)ctx.lookup("java:/hibernate/SessionFactory"); Session session = factory.getSession();

  16. Deployment – Spring • Springframework • Lettvektsrammeverk • Dependency Injection – Avhengighetsinnsprøytning • AOP • Fordeler • Unchecked exceptions • Declarative transactions • Logisk lagdeling • Enhetstesting • HibernateTemplate/HibernateDAOSupport • Forhold til MBean/SAR • Ingen container påkrevd • Kan benyttes fra alle Java applikasjoner • Trond Arve Wasskog – Open Source Agile Architecture

  17. Deployment – Spring • Konfigurasjon SessionFactory • DataSource + mapping filer • DAO  refererer til mySessionFactory <bean id="mySessionFactory"class="org.springframework.orm.hibernate.LocalSessionFactoryBean"> <property name="mappingResources"> <list> <value>product.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">net.sf.hibernate.dialect.MySQLDialect</prop> </props> </property> <property name="dataSource"> <ref bean="myDataSource"/> </property> </bean>

  18. client serviceFacadeProxy ”serviceFacade” txInterceptor serviceFacadeTarget txManager productDAO sessionFactory dataSource DB Deployment – Spring • Transaksjoner i Spring • AOP • Transaction Interceptor • Proxy for façade • Konfigurasjon per metode <property name="transactionAttributeSource"> <value> bekk.serviceFacade.getFoo=PROPAGATION_REQUIRED,readOnly bekk.serviceFacade.*=PROPAGATION_REQUIRED </value> </property>

  19. Erfaringer • Utvalgte prosjekter • SQL kode • Sjekk generert SQL! • Criteria API  HQL • Muligheter for egen SQL • Connection Pooling • Hibernate innebygd – ikke prod. klar! • Bruk container evt. ekstern (C3PO e.l.)

  20. Erfaringer • DB Støtte • Enkelt å skrive egen Dialect • DB2390Dialect  Hibernate  • Lær O/R modellering • Generelle prinsipper • Generert kode/SQL – lær å finn feil • Lazy loading • Bra (selvfølge?) for ytelse • ObjectNotFoundException v/multiple sesjoner • Applikasjonstransaksjoner • persistent/transient objekt • Optimistisk låsing default • saveOrUpdateCopy() • Sesjonshåndtering • ThreadLocal • Spring

  21. Fremtidsutsikter – Hibernate 3 • net.sf.hibernate  org.hibernate • Checked exceptions  Runtime exceptions • Filter API • Full Event Driven Design • Statistics API + JMX Mbean • lazy=”true” for properties • Fikset ytelses problem m/one-to-one properties • Støtte lagrede prosedyrer • SchemaUpdate fikset • HQL forbedringer  bedre syntakssjekking mm. • +++

  22. Fremtidsutsikter – JDO 2.0 • Tidligere  skal støtte JDO 2.0 spec. • Sentrale hendelser • Hibernate  JBoss • Gavin King  JBoss group + EJB 3.0 spec. team • Stor diskusjon/uenighet JDO/EJB spec. teams • Nå • Ingen interesse i JDO 2.0 • Mer relevant med EJB 3.0

  23. Fremtidsutsikter – EJB 3.0 • Gavin King  EJB 3.0 spec. team • Entity beans • POJO • Slutt på CMR • Slutt på home interface • Veldig likt Hibernate • EntityManager  Hibernate Session • Lignende Query grensesnitt • EJB QL forbedringer, inspirert av HQL • create() + merge()/saveOrUpdateCopy() • Stor bruk av Metadata

  24. Fremtidsutsikter – EJB 3.0 • Eksempel • POJO • Metadata @Entitypublic class Customer implements Serializable { private Long id; private String name; private Set<PhoneNumber> phones = new HashSet(); public void setId(Long id) { this.id = id; } ... public void addPhoneNumber(PhoneNumber number) { this.phones.add(number); number.setCustomer(this); // ? INGEN CMR! } }

  25. Fremtidsutsikter – EJB 3.0 • EntityManager vs. Hibernate m/Spring /** * @spring.bean id=“orderEntryDAO" * @spring.property name="sessionFactory" ref="sessionFactory“ */ public class OrderEntryDAO extends HibernateDAOSupport { public void enterOrder(Long custId, Order newOrder) { Customer cust = (Customer)getHibernateTemplate().load(Customer.class, custId); cust.getOrders().add(newOrder); newOrder.setCustomer(cust); } } @Statelesspublic class OrderEntryBean { EntityManager em; @Injectpublic void setEntityManager(EntityManager em) { this.em = em; } public void enterOrder(Long custId, Order newOrder) { Customer cust = (Customer)em.find(”Customer”, custId); cust.getOrders().add(newOrder); newOrder.setCustomer(cust); } }

  26. Fremtidsutsikter – Videre... • J2SE 5.0 • Metadata erstatter XDoclet o.l. • Generics – angi type i relasjoner • Enumerated Types • EJB 3.0 – Hibernate implementasjon? • Støtte for @Entity etc. • Kjøre EJB’er uten container? • NHibernate – http://nhibernate.sourceforge.net

  27. Konklusjon • Hibernate suksess! • Domenemodellen er tilbake! • Sterk driver bak EJB 3.0 • God verktøystøtte • Skriv Javakode! • J2EE eller alene • Spring • JBoss støtte

  28. Q & A Takk for meg! Spørsmål? Ta gjerne kontakt: eivind.waaler@bekk.no Eller besøk BEKK stand for demoer/spørsmål 

  29. Demonstrasjon – XDoclet/SchemaExport • Skisse/eksempel – <alt-tab> • Vise Java klasse fil (IDEA) • ‘maven xdoclet:hibernatedoclet’ – vise XML mapping (IDEA) • ‘maven schemaexport’ – vise Database (MySQL CC) Demonstrasjon

More Related