hibernate utvikling i praksis n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Hibernate utvikling i praksis PowerPoint Presentation
Download Presentation
Hibernate utvikling i praksis

Loading in 2 Seconds...

play fullscreen
1 / 29

Hibernate utvikling i praksis - PowerPoint PPT Presentation


  • 110 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
hibernate utvikling i praksis

Hibernate utvikling i praksis

JavaZone 2004

Eivind Waaler, Bekk – 15.09.2004

Versjon 1.0

agenda
Agenda
  • Introduksjon til Hibernate
  • Utviklingsteknikker
  • Deployment
  • Noen erfaringer
  • Fremtidsutsikter
introduksjon

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
introduksjon1
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
utviklingsteknikker verkt y

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
utviklingsteknikker middle out

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
utviklingsteknikker middle out1
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"

>

...

utviklingsteknikker top down

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!
utviklingsteknikker top down1
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;

}

...

utviklingsteknikker bottom up

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
deployment
Deployment
  • Standard
  • JBoss SAR/JMX MBean
  • Spring

(NASA Art)

deployment standard config
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();

deployment mbean jboss sar
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
deployment mbean jboss sar1

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();

deployment spring
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
deployment spring1
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>

deployment spring2

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>

erfaringer
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.)
erfaringer1
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
fremtidsutsikter hibernate 3
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.
  • +++
fremtidsutsikter jdo 2 0
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
    • Ingen interesse i JDO 2.0
    • Mer relevant med EJB 3.0
fremtidsutsikter ejb 3 0
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
fremtidsutsikter ejb 3 01
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!

}

}

fremtidsutsikter ejb 3 02
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);

}

}

fremtidsutsikter videre
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
konklusjon
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
slide28
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 

demonstrasjon xdoclet schemaexport
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