Laste ned presentasjonen
Presentasjon lastes. Vennligst vent
PublisertFrida Ervik Endret for 9 år siden
1
Side 1 Hibernate utvikling i praksis JavaZone 2004 Eivind Waaler, Bekk – 15.09.2004 Versjon 1.0
2
Hibernate utvikling i praksisJavaZone 2004 Side 2 Agenda Introduksjon til Hibernate Utviklingsteknikker Deployment Noen erfaringer Fremtidsutsikter
3
Hibernate utvikling i praksisJavaZone 2004 Side 3 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 DB XML POJO Hibernate
4
Hibernate utvikling i praksisJavaZone 2004 Side 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
Hibernate utvikling i praksisJavaZone 2004 Side 5 Utviklingsteknikker/Verktøy Skrive alt selv middle-out – XML top-down – Javakode bottom-up – Database Verktøy hbm2java SchemaExport SchemaUpdate XDoclet Middlegen POJO XML DDL XML POJO
6
Hibernate utvikling i praksisJavaZone 2004 Side 6 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 POJO XML DDL
7
Hibernate utvikling i praksisJavaZone 2004 Side 7 Utviklingsteknikker – middle-out <property name="name" type="java.lang.String" column="NAME"... <set name="documents" lazy="false" inverse="true" cascade="all-delete-orphan" sort="unsorted" >...
8
Hibernate utvikling i praksisJavaZone 2004 Side 8 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! POJO XML DDL
9
Hibernate utvikling i praksisJavaZone 2004 Side 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
Hibernate utvikling i praksisJavaZone 2004 Side 10 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 POJO XML DB
11
Hibernate utvikling i praksisJavaZone 2004 Side 11 Utviklingsteknikker – bottom-up
12
Hibernate utvikling i praksisJavaZone 2004 Side 12 Deployment Standard JBoss SAR/JMX MBean Spring (NASA Art)
13
Hibernate utvikling i praksisJavaZone 2004 Side 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
Hibernate utvikling i praksisJavaZone 2004 Side 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
Hibernate utvikling i praksisJavaZone 2004 Side 15 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(); SAR DB EJB facade J2SE client WebApp JBoss
16
Hibernate utvikling i praksisJavaZone 2004 Side 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
Hibernate utvikling i praksisJavaZone 2004 Side 17 Deployment – Spring Konfigurasjon SessionFactory DataSource + mapping filer DAO refererer til mySessionFactory product.hbm.xml net.sf.hibernate.dialect.MySQLDialect
18
Hibernate utvikling i praksisJavaZone 2004 Side 18 Deployment – Spring Transaksjoner i Spring AOP Transaction Interceptor Proxy for façade Konfigurasjon per metode sessionFactory dataSource DB txManager txInterceptor productDAO serviceFacadeTarget serviceFacadeProxy ”serviceFacade” client bekk.serviceFacade.getFoo=PROPAGATION_REQUIRED,readOnly bekk.serviceFacade.*=PROPAGATION_REQUIRED
19
Hibernate utvikling i praksisJavaZone 2004 Side 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.) AppserverDBConfigTeknikk WebSphereDB2 – OS390Standard”Skrive alt” JBossOracleSAR/MBeanbottom-up TomcatOracleStandardmiddle-out TomcatMySQL + OracleSpringtop-down
20
Hibernate utvikling i praksisJavaZone 2004 Side 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
Hibernate utvikling i praksisJavaZone 2004 Side 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
Hibernate utvikling i praksisJavaZone 2004 Side 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
Hibernate utvikling i praksisJavaZone 2004 Side 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
Hibernate utvikling i praksisJavaZone 2004 Side 24 Fremtidsutsikter – EJB 3.0 Eksempel POJO Metadata @Entity public class Customer implements Serializable { private Long id; private String name; private Set 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
Hibernate utvikling i praksisJavaZone 2004 Side 25 Fremtidsutsikter – EJB 3.0 @Stateless public class OrderEntryBean { EntityManager em; @Inject public 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); } 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); } /** * @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); }
26
Hibernate utvikling i praksisJavaZone 2004 Side 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.nethttp://nhibernate.sourceforge.net
27
Hibernate utvikling i praksisJavaZone 2004 Side 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
Hibernate utvikling i praksisJavaZone 2004 Side 28 Q & A Spørsmål? Ta gjerne kontakt: eivind.waaler@bekk.noeivind.waaler@bekk.no Eller besøk BEKK stand for demoer/spørsmål Takk for meg!
29
Hibernate utvikling i praksisJavaZone 2004 Side 29 Demonstrasjon – XDoclet/SchemaExport Skisse/eksempel – Vise Java klasse fil (IDEA) ‘maven xdoclet:hibernatedoclet’ – vise XML mapping (IDEA) ‘maven schemaexport’ – vise Database (MySQL CC) Demonstrasjon
Liknende presentasjoner
© 2024 SlidePlayer.no Inc.
All rights reserved.