Hibernate Ignace Van Tricht Bert Jacobs 2 Juni 2009

Slides:



Advertisements
Verwante presentaties
Zelf objecten maken in VBA Ynte Jan Kuindersma, BIRD Automation Nationale Officedag 2009 EDE, 14 Oktober 2009.
Advertisements

HM-ES-th1 Les 9 Hardware/Software Codesign with SystemC.
Semantiek en Geo-Informatie Oracle SIM workshop 16 Juni 2010,
Kennissessie instrumentatie-packages dbms_application_info logger Rob van Wijk•26 mei 2011.
Waitstats 2005/ april Wat gaan we doen? • Even voorstellen • Performance problemen • Een veel gebruikte aanvliegroute • Wat zijn waitstats.
Hoe SQL injection werkt
SAP ABAP A short introduction. SAP ABAP • Selectie: – IF …… ENDIF. – IF …. ELSE … ENDIF. – IF …. ELSEIF …. ELSEIF …. ELSE …. ENDIF. – IF condition_1.
Deltion College Engels C1 Gesprekken voeren [Edu/002]/ subvaardigheid lezen thema: Order, order…. can-do : kan een bijeenkomst voorzitten © Anne Beeker.
Stateful web, developments, trends 1 Webtechnologie Lennart Herlaar.
JQuery en ASP.NET Bart De Meyer.
Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 1 Internetapplicaties Deel 14: Eerste echte e-commerce applicatie: Implementatie (vervolg)
Access en MySql Ynte Jan Kuindersma, BIRD Automation Nationale Officedag 2009 EDE, 14 Oktober 2009.
Project Combat Casper Bommelé Marc Eekhout Michel van der Hut
Programmeren in Java met BlueJ
GUI Router en Switch Afstudeerproject Maarten Diels & Geypens Björn.
Lucene/SOLR 1: inleiding + indexering
Frédérique Harmsze - Macaw 22 juni Wie ben ik?  Frédérique Harmsze  Information Worker Consultant bij Macaw sinds 2004  Intranet-projecten met.
COSTA Common Set of Tools for Assimilation of Data OpenDA/COSTA voor operationele modellen en kalibratie rivier toepassingen Nils van Velzen Simona gebruikersdag.
SQL VOOR BIOLOGEN © 2011 M.L. Hekkelman CMBI Radboud UMC.
Biml en Data Vault.
Voor VBA programmeurs Maurice de Beijer.  Maurice de Beijer.  The Problem Solver.  Visual Basic MVP.  Blog: theproblemsolver/default.aspxhttp://msmvps.com/blogs/
Voor VBA programmeurs Maurice de Beijer.  Maurice de Beijer.  The Problem Solver.  Visual Basic MVP.  Blog: theproblemsolver/default.aspxhttp://msmvps.com/blogs/
Speaking OData to SharePoint 2010 in a RESTful manner Michaël Hompus | Principal Developer | Winvision.
OOS Object geOrienteerd Software-ontwerp - 4 Codeerperikelen Singleton Specificeren Scheiding GUI en Domein Facade.
Faculteit Ingenieurswetenschappen & Wetenschappen Software Engineering Publicatie Management Systeem Groep se1 Software Engineering Thierry Coppens.
Omgevingen zijn dan geïmplementeerd als Symbol Tables. Symbol Table mapt een symbool met een Binding Meerdere noties van binding –Meerdere manieren te.
SQL injections en meer... PERU. web application vulnerabilities Cross Site Scripting (21.5%) SQL Injection (14%) PHP includes (9.5%) Buffer overflows.
Inleiding Databanken: oefeningen
Modula vs Java MODULE Show; CONST PI = ; TYPE PointRc = RECORD x,y : INTEGER; speed : REAL; angle : REAL; END; VAR a,b : PointRc; BEGIN.
Server side scripting 1 Webtechnologie Lennart Herlaar.
Network Address Translation
Algoritmiek Arrays: wat zijn dat en wat kun je ermee? Loops: hoe hou je ze in bedwang? Hoorcollege 6 - Ma. 9 okt L.M. Bosveld-de Smet.
WinFX Overview Martin Tirion Senior Consultant Microsoft Services.
Client Management met ConfigMgr Jannes Alink – Management.
Vorige week: Referentiele integriteit
Spatial classificatie
Algorithms and Application for spatial data mining Ronnie Bathoorn.
Hoorcollege 8 Game object structuren. Arrays in games Grid-gebaseerd speelveld (zoals Tetris) Lijst van spelers Lijst van inventory items Lijst van alle.
Hoorcollege 7 Collections, arrays. Programma ‘Snowflakes’ Sneeuwvlok object.
Methods of Development. Never Google Shitpipe * with safe-search off.
Hibernate Object relational mapping
Subversion Version control
Wolter Kaper - Ruby on Rails Webtoepassing ontwerpen Webprogrammeren, week 1.
Workshop PHP Een productencatalogus Met database.
Bert Jacobs Ignace Van Tricht 4 juni 2009
JProject02 Bert Jacobs Ignace Van Tricht 4 juni 2009.
Algoritmiek Java GUIs, AWT en Swing API Overzicht te bestuderen stof, voorbeeldtentamen Hoorcollege 15 - Ma. 11 dec L.M. Bosveld-de Smet.
DB&SQL8- 1 VBA Visual Basics for Applications: eigen Office versie vanaf Office2000 gelijk voor alle applicaties Programmeren onder meer nodig voor Het.
Tussentoets Digitale Techniek. 1 november 2001, 11:00 tot 13:00 uur. Opmerkingen: 1. Als u een gemiddeld huiswerkcijfer hebt gehaald van zes (6) of hoger,
JAVA1 H 22. COLLECTIONS FRAMEWORK. 1. INLEIDING. Collections framework Is een verzameling van data structuren, interfaces en algoritmen Meest voorkomende.
Hoofdstuk 5 – Object Based Programmeren
Visual Basic.Net - Overzicht
Hoorcollege 9 Jewel Jam The revenge. Hierarchie van game objecten Game object (lijst) Game object (grid) Game object (lijst) Game object.
Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 1 Internetapplicaties Deel 13: Eerste echte e-commerce applicatie: Enkele iteraties met.
Internetapplicaties - IV Collecties 1 Internetapplicaties Deel 4: Java hulpklassen: Collecties.
Deltion College Engels C1 Gesprekken voeren [Edu/006] thema: ‘I was wondering what you think of…’ can-do : kan deelnemen aan de conversatie bij zeer formele.
Web Applicaties Bouwen met Visual Studio .NET
1 december KC Development Tools Hands-on Oracle HTML DB v2.0.
1 december KC Development Tools Oracle HTML DB 2.0.
We zijn toch allemaal zoekende?
Hoofdstuk 5 Interactie. Controls Form Label Button Label TextBox.
In samenwerking met HowITsDone Spring as legacy Hoe innovatie legacy kan worden.
C++ C++ als een verbetering van C Abstracte datatypen met classes Constructoren en destructoren Subklassen binding van functies 1.
The beast has been released! 4 arcade-style games Interviews with famous people in the game industry Develop browsers games for any device (phone, tablet,
NHibernate in DeltaShell
Computervaardigheden Hoofdstuk 4 — Databank (Basis)
ANALYSE 3 INFANL01-3 WEEK CMI Informatica.
Java & het Web Programma: Databases (jdbc, JNDI, ORM, JPA)
SQL Les 9 12 May 2019.
SQL Les May 2019.
Transcript van de presentatie:

Hibernate Ignace Van Tricht Bert Jacobs 2 Juni 2009 JProject02 Hibernate Ignace Van Tricht Bert Jacobs 2 Juni 2009

Topics Context De Database Hibernate Vertaling Hibernate naar OO 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

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

Database

ERD

Probleem: transactie inconsistenties Webapp: Meerdere threads/simultane transacties naar de database Problemen Lost updates Non repeatable reads Phantom reads Oplossing Isolatie op connectorniveau Serializable traag - laag risico Repeatable read Read committed Read uncomitted snel – hoog risico Isolatie op persistentielaag Optimistic locking Pessimistic locking Optimistic locking: versioning (extra kolom)

Hibernate

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

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

Configuratie XML bestand Database specifieke instellingen (url, gebruikte driver, username, password) <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.password">babylon</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/jproject02</property> <property name="hibernate.connection.username">jproject02</property> Definiëren van specifieke query dialect Context van sessie bepalen. Per thread <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property> <property name="hibernate.current_session_context_class">thread</property>

Configuratie XML bestand Ipv standaard connectie pool wordt c3P0 gebruikt Meerwaarde: instellingen kunnen worden aangepast met de properties <property name="hibernate.c3p0.min_size">5</property> <property name="hibernate.c3p0.max_size">20</property> <property name="hibernate.c3p0.timeout">300</property> <property name="hibernate.c3p0.max_statements">50</property> <property name="hibernate.c3p0.idle_test_period">3000</property> Hybernate gebruikt JCL (Java Common Logging), welke hierarchisch zal aftasten startend van de root van het classpath, om logger te detecteren <property name="show_sql">true</property> <property name="format_sql">true</property> In configuratie wordt het path naar mapping bestand meegegeven <mapping resource="jproject02/database/hibernate/Customer.hbm.xml" />

Vertaling Hibernate naar OO

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

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

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

Vertaling van de DB naar OO Relaties (voorbeeld 1) Mapping one-to-many <set name="employees" inverse="true" cascade="all" lazy="true" <key> <column name="Categoryid" /> </key> <one-to-many class="jproject02.database.hibernate.Employees" /> </set> Declaratie in DAO category private Set<IDB_Employee> employees = new HashSet<IDB_Employee>(0);

Vertaling van de DB naar OO Relaties (voorbeeld 2) Mapping many to many Project: <set name="attachments" table="ProjectAttachment" cascade="all" lazy="true"> <key column="Projectsid" /> <many-to-many column="Attachmentsid" class="jproject02.database.hibernate.Attachments" /> </set> Attachment: <set name="projects" table="projectattachment" inverse="true" cascade="all" lazy="true"> <key column="Attachmentsid" /> <many-to-many column="Projectsid" class="jproject02.database.hibernate.Projects" />

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

Lazy fetching Waar mogelijk gekozen voor lazy fetching Values in een collectie blijven null tot informatie wordt opgevraagd Optimaliseert de query Vb <set name="modules" lazy="true" cascade="all"> <key column="Projectsid" /> <one-to-many class="jproject02.database.hibernate.Modules"/> </set>

Van Hibernate naar Model

Hibernate & Querying 3 opties Querying in onze applicatie 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

Hibernate & Querying Voorbeeld Criteria Criteria: DAO selecteren Restrictions: informatie filteren vgl. where clausule public List<IDB_Project> 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();

CRUD – Create Read Update Delete 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<IDB_Category> getAllCategories() { log.debug("getting categories"); try { Criteria crit = sessionFactory.getCurrentSession().createCriteria(Category.class); return crit.list();

CRUD – Create Read Update Delete 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);

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

Debugging

Loggen Log4J Configuratie Libraries Sample output 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 Sample output Hibernate: select this_.id as id18_0_, this_.type as type18_0_, this_.classification as classifi3_18_0_, this_.wage as wage18_0_ from jproject02.skills this_

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