De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

JProject02 Hibernate Ignace Van Tricht Bert Jacobs 2 Juni 2009.

Verwante presentaties


Presentatie over: "JProject02 Hibernate Ignace Van Tricht Bert Jacobs 2 Juni 2009."— Transcript van de presentatie:

1 JProject02 Hibernate Ignace Van Tricht Bert Jacobs 2 Juni 2009

2 Topics ► Context ► De Database  ERD  Probleemstelling ► Hibernate  Voordelen  Werking  Configuratie bestand ► Vertaling Hibernate naar OO  Primary keys  Relatie  Hibernate & Fetching Strategieën  Lazy Fetching ► Van Hibernate naar Model  Hibernate Querying  CRUD  Controller ► Debugging ► Conclusies

3 Context ► Risico in gebruik webapplicatie  Multithreading stateless environment ► Objectief  Oplossing aanbieden voor risicovermindering in gebruik webapplicatie ► Voorgestelde oplossing  Gebruik van framework Hibernate ► Demonstratie binnen voorgestelde applicatie

4 Database

5 ERD

6 Probleem: transactie inconsistenties ► Webapp: Meerdere threads/simultane transacties naar de database ► Problemen  Lost updates  Non repeatable reads  Phantom reads ► Oplossing  Isolatie op connectorniveau ► Serializabletraag - laag risico ► Repeatable read ► Read committed ► Read uncomittedsnel – hoog risico  Isolatie op persistentielaag ► Optimistic locking ► Pessimistic locking

7 Hibernate

8 Voordelen ► ORM - object relational mapping ► Gebruik van extra encapsulatielaag (sessies) ► Isolatie op persistentielaag

9 Werking: scherm af wat varieert ► Manueel  Configuratie (zie volgende slide)  Mapping ► Automatisch  Herkenning van primitieve datatypes en properties (gebruik van reflectie)

10 Configuratie XML bestand ► Database specifieke instellingen (url, gebruikte driver, username, password) com.mysql.jdbc.Driver com.mysql.jdbc.Driver babylon babylon jdbc:mysql://localhost:3306/jproject02 jdbc:mysql://localhost:3306/jproject02 jproject02 jproject02 ► Definiëren van specifieke query dialect ► Context van sessie bepalen. Per thread org.hibernate.dialect.MySQLInnoDBDialect org.hibernate.dialect.MySQLInnoDBDialect thread thread

11 Configuratie XML bestand ► Ipv standaard connectie pool wordt c3P0 gebruikt ► Meerwaarde: instellingen kunnen worden aangepast met de properties ► Hybernate gebruikt JCL (Java Common Logging), welke hierarchisch zal aftasten startend van de root van het classpath, om logger te detecteren true true ► In configuratie wordt het path naar mapping bestand meegegeven

12 Vertaling Hibernate naar OO

13 Vertaling van de DB naar OO Primary keys ► Kritische issues  Primary key van DB niet bruikbaar vanwege meerdere instanties in sessies ► Oplossing  Primary keys worden vervangen door HASH codes per instantiëring van een DAO

14 Vertaling van de DB naar OO Relaties ► Vertaling relatie  Relatie in DB wordt referentie in OO ► Type relaties in OO  One to one ► Een referentie naar andere DAO  One to many ► List in klasse ► Set: Voorbeeld volgt later ► Bag  Many to many ► Ter vervanging van transitie tabel in DB de DAO houden elk set van referenties bii van elkaar => voorbeeld volgt later

15 Vertaling van de DB naar OO Relaties ► Kritische issues  Relaties in DB zijn bi-directioneel en moeilijk te implementeren in OO  Bi directionele relaties in OO blijven kritisch en moeten vermeden worden waar mogelijk ► Relaties in onze applicatie  Bi-directioneel: Read  Uni-directioneel: Up-date

16 Vertaling van de DB naar OO Relaties (voorbeeld 1) ► Mapping one-to-many ► Declaratie in DAO category private Set employees = new HashSet (0);

17 Vertaling van de DB naar OO Relaties (voorbeeld 2) ► Mapping many to many Project: Attachment:

18 Hibernate & Fetching strategieën ► Hibernate ondersteunt volgende fetching strategieën  Join fetching  Select fetching  Subselect fetching  Batch fetching  Immediate fetching  Proxy fetching  Lazy attribute fetching  Lazy collection fetching

19 Lazy fetching ► Waar mogelijk gekozen voor lazy fetching  Values in een collectie blijven null tot informatie wordt opgevraagd  Optimaliseert de query  Vb  Vb

20 Van Hibernate naar Model

21 Hibernate & Querying ► 3 opties  Methods  Criteria  Plain SQL (Te vermijden, hiermee gaat kracht Hibernate verloren) ► Querying in onze applicatie  Criteria werd gebruikt als querying mechanisme => Informatie toegankelijker in API

22 Hibernate & Querying Voorbeeld Criteria ► Criteria: DAO selecteren ► Restrictions: informatie filteren vgl. where clausule public List getAllProjects() { log.debug("getting projects"); try { Criteria crit = sessionFactory.getCurrentSession().createCriteria(Projects.class); crit.add(Restrictions.not(Restrictions.like("state", ProjectStates.CLOSED, MatchMode.ANYWHERE))); crit.addOrder(Order.desc("startdate")); return crit.list();

23 CRUD – Create Read Update Delete ► Create  Om DAO objecten aan te maken wordt gebruik gemaakt van DAO factory  Voorbeeld implementatie Create in onze applicatie ► public class DAO_Factory { public static Object getDAO(Tables table) throws InstantiationException, IllegalAccessException, ClassNotFoundException { returnClass.forName(table.getPersistentClass()).newInstance(); }} ► Read  Om DAO objecten te lezen wordt gebruik gemaakt van methodes van de CRUD klasse ► public List getAllCategories() { log.debug("getting categories"); try { Criteria crit = sessionFactory.getCurrentSession().createCriteria(Category.class); return crit.list();

24 CRUD – Create Read Update Delete ► Update Property wordt gewijzigd in persistent object, zodra deze wordt gecommit, wordt de record in de database ge- update ► Delete “delete” van een persistent object wordt rechtstreeks aangeroepen op de sessie; sessionFactory.getCurrentSession().delete(persistentObject);

25 Controller ► Elke DAO gaat een interface implementeren. Deze is beschikbaar gesteld aan het model (contract) ► Voorbeeld Controller geimplementeerd in onze applicatie

26 Debugging

27 Loggen ► Log4J  Configuratie log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} ?%5p %c{1}:%L - %m%n # Root logger option log4j.rootLogger=INFO, stdout # Hibernate logging options (INFO only shows startup messages) log4j.logger.org.hibernate=INFO # Log JDBC bind parameter runtime arguments log4j.logger.org.hibernate.type=INFO  Libraries ► Jcl ► Log4J  Sample output Hibernate: select select this_.id as id18_0_, this_.id as id18_0_, this_.type as type18_0_, this_.type as type18_0_, this_.classification as classifi3_18_0_, this_.classification as classifi3_18_0_, this_.wage as wage18_0_ this_.wage as wage18_0_ from from jproject02.skills this_ jproject02.skills this_

28 Conclusies ► Hibernate voldoet aan de vooropgestelde doeleinden ► Reference Guide en Community zijn dermate uitgebreid dat men soms lang kan zoeken naar een specifiek weinig voorkomend probleem, doch leert de ervaring dat Community documentatie fundamenteel zal worden in efficiënt implementeren van nieuwe frameworks. ► Na de initiële leercurve komt Hibernate goed tot zijn recht en wordt zijn nut en zijn aandeel in de vereenvoudiging van het geheel duidelijk


Download ppt "JProject02 Hibernate Ignace Van Tricht Bert Jacobs 2 Juni 2009."

Verwante presentaties


Ads door Google