De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Bert Jacobs Ignace Van Tricht 4 juni 2009

Verwante presentaties


Presentatie over: "Bert Jacobs Ignace Van Tricht 4 juni 2009"— Transcript van de presentatie:

1 Bert Jacobs Ignace Van Tricht 4 juni 2009
JProject02 Bert Jacobs Ignace Van Tricht 4 juni 2009

2 Agenda Inleiding Afbakenen van project
Opdrachtgever Project management Afbakenen van project Requirements Context- en Functional decomposition diagram Event-response list Ontwerp van de database & Hibernate Context De Database Hibernate Vertaling Hibernate naar OO Van Hibernate naar Model Debugging Oo analyse en ontwerp Use-cases Struts2 Bouwen van applicatie Structuur (packages) Technologieën Bouwen met Struts2 Voorstelling & vragen

3 Inleiding Webdesign studio Desk02 heeft als onderneming de core activiteiten productontwikkeling, webdesign, hosting, implementatie, applicatiebeheer, support en 'product als service aanbieden. Webdesign studio Desk02 werd in 2003 opgericht als een éénmanszaak. In 2005 besloten om de BVBA Desk02 op te richten. Door de toenemende groei heeft Desk02 dan ook meer en meer projecten voor hun klanten. Hierdoor is er bij Desk02 nood aan een systeem dat zorgt voor het beheer van hun projecten.

4 Projectmanagement Plan van aanpak

5 Projectmanagement Gantt chart Show excel file

6 Afbakenen van project Requirements Project module
Gemakkelijk beheer van de lopende projecten in het bedrijf. Welke werknemer is in welk project aan welke taak bezig. Een project moet over een klant referentie beschikken. Een start en/of einddatum, een totale kost kunnen ingegeven worden. De mogelijkheid om comments te plaatsen en attachments te uploaden. Een project heeft een status.

7 Requirements Module Modules kunnen aangemaakt worden vanuit een project. Een start en/of einddatum, een totale kost kunnen ingegeven worden. De mogelijkheid om resources (vaste kosten) te linken aan een module. Een module heeft een status.

8 Requirements Task Vanuit een module kunnen tasks aangemaakt worden.
Een task wordt bezien als taak die aan één medewerker kan gekoppeld worden. Een start en/of einddatum, een totale kost kunnen ingegeven worden. Ook kan de tijdsduur van een task meegegeven worden, en een type medewerker. Een gekende medewerker kan aan task gekoppeld worden. Een module heeft een status. De mogelijkheid om comments te plaatsen en attachments te uploaden.

9 Requirements Klant module
De klantgegevens worden ook in het systeem bijgehouden. Er kunnen ook contact aangemaakt worden. Deze contacts (personen) zijn de referentie punten naar de klanten toe. Een klant kan over meerdere contacts beschikken.

10 Requirements Werknemer module
elke werknemer die deze applicatie wil gebruiken zal er een user account met bijhorende persoonlijke fiche moeten aangemaakt worden met de nodige rechten. Er kunnen skills toegewezen worden aan de werknemers. Elke werknemer moet zich authentiseren voor het gebruik van de applicatie.

11 Requirements Systeem Gebruik moeten maken van free open-source materiaal. Moet op linux server werken. De applicatie zou naar de werknemers toe gemakkelijk ter beschikking moeten zijn, zoals web-based (met standaard web browser). Alle data moet centraal beheert worden.

12 Functional decompostion diagram (systeem)

13 Contextdiagram De entiteit ‘Medewerker’ onderverdelen in drie niveaus; Admin, Manager en Medewerker. De mogelijkheid om onze nieuwe functies op te delen per niveau van medewerker.

14 Event-response lijst

15 Event-response lijst

16 Analyse en ontwerp van de database
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

17 Database

18 ERD

19 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)

20 Hibernate

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

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

23 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>

24 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" />

25 Vertaling Hibernate naar OO

26 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

27 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

28 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

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

30 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" />

31 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

32 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>

33 Van Hibernate naar Model

34 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

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

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

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

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

39 Debugging

40 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_

41 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

42 Oo analyse en ontwerp Use-case diagram

43 Use cases

44 Use cases

45 Use cases

46 Use cases

47 Use cases

48 Use cases de event flow weer bij het aanmaken van een project

49 Use cases

50 Use cases De activiteitsdiagram geeft de globale activiteiten weer bij het aanmaken van een nieuwe medewerker, klant, skill, resource enz.

51 Components Voorbeeld: Skill klasse

52 Klasse diagram Voorbeeld: Skill klasse, van database tot view

53 Klasse diagram IDateable interface

54 Struts2 Apache Struts2 is een nieuw web applicatie framework. Wat wel duidelijk moet zijn is dat Struts2 geen nieuwe release is van het oudere Struts 1 framework. Het is een compleet nieuw framework, gebaseerd op OpenSymphony WebWork framework. Struts2 maakt gebruik van het Model-View-Controller (MVC) design pattern.

55 Struts2 Het MVC pattern dat door Struts gebruikt wordt, noemen ze ook wel ‘Front Controller MVC’. Dit betekent dat de controller het eerste component is dat in werking treed bij de processen. Controller: In Struts2 wordt de rol van de controller door de FilterDispatcher uitgevoerd. Het moet elke request verwerken. Het regelt de verwijzingen van de request URLs naar de acties. Model: Hier kan je processen laten uitvoeren van je web applicatie. View: De view is het presentatie component van het MVC pattern. Met gebruik van JSP.

56 Struts2 Op deze figuur zie je het proces van een request nadat deze door de FilterDispatcher verwerkt is en doorgestuurd wordt naar een actie (model). De request zal gebruik maken van de interceptors, voor en na de ‘action – result’. De ValueStack wordt gebruikt als opslagplaats voor applicatie gerelateerde data die nodig is tijdens een request. En OGNL is een krachtige expressie taal die wordt gebruikt om properties van de ValueStack te manipuleren.

57 Struts2 Intelligent default
Nieuwere frameworks streven naar een zero-configuration framework. Het Struts2 framework heeft als ware een ‘Intelligent defaults’ zodat de meeste componenten kunnen gebruikt worden zonder enige instellingen van de ontwikkelaar. Dit is de struts-default package dat in een xml bestand wordt bijgehouden.

58 Struts2 ModelDriven actions
Het klassendiagram is een voorbeeld van hoe je een actie in struts moet aanmaken. Onze Login actie maakt gebruik van een User object, dat via de methode getModel() bereikbaar is, zodat deze op een gemakkelijke manier bereikbaar is voor een jsp pagina.

59 Struts2 Struts2 Tags Van versie Struts2.1, twee bibliotheken data tags
control-flow tags UI tags miscellaneous tags Van versie Struts2.1, twee bibliotheken de struts-tags de struts-dojo-tags

60 Struts2 Validatie Struts2 beschikt over een validatie framework.
De regels moet beschreven worden in een xml bestand dat moet genoemd worden volgens het formaat: ‘Klasse’-validation.xml. Voorbeelden van struts built-in validators: requiredstring stringlength int double date

61 Struts2 Sequence diagram van request workflow in Struts2

62 Bouwen van applicatie Structuur applicatie
de 3 componenten zijn ‘loosely coupled’.

63 Structuur

64 Gebruikte technologieën
J2EE Java 2 Enterprise Edition (J2EE) is een ontwikkelplatform van het softwarebedrijf Sun Microsystems. Het biedt een componentgebaseerde aanpak voor het ontwerpen, ontwikkelen, samenstellen en gebruiken van bedrijfsapplicaties. Bij het gebruik van Javaprogramma's op (web)servers, wordt vaak J2EE gebruikt. JSP Java Server Pages (JSP) is een onderdeel van de J2EE-standaard. JSP is een manier om dynamisch HTML te genereren op basis van statische en dynamische elementen. Dit wordt gedaan door Java-code. MySQL MySQL is een open source relationele databasemanagementsysteem (RDBMS), dat gebruikmaakt van SQL. HTML HyperText Markup Language (HTML) is een markup taal, waarbij aanwijzingen instructies zijn voor de opmaak tijdens weergave, voor de specificatie van documenten op het World Wide Web.

65 Gebruikte technologieën
Javascript JavaScript is een objectgeoriënteerde programmeertaal die gebruikt wordt om internetpagina's interactief te maken en webapplicaties te ontwikkelen. CSS Cascading Style Sheets (CSS) kan gebruikt worden om vormgeving te beschrijven van data die zich in een HTML document bevindt. Deze informatie kan in het document zelf staan, maar ook in een extern document dat wordt geïmporteerd. XML Extensible Markup Language (XML) is een standaard voor het definiëren van formele markup-talen voor de representatie van gestructureerde gegevens in de vorm van platte tekst. Deze representatie is zowel machineleesbaar als leesbaar voor de mens.

66 Bouwen met Struts2 struts.xml

67 AuthenticationInterceptor
Zal nagaan of user gekend is, door in de session scope het User object op te vragen. Als een actie de ‘UserAware’ interface implementeert, zal het ‘User’ object in de actie worden geinjecteerd.

68 Onze acties Al onze actie worden per package in de config file struts.xml gedefinieerd. De execute() methode is de functie in je klasse waar je de functionaliteit van je actie moet plaatsen. Deze methode moet een string constante teruggeven. Onze actie kan nog vele andere interfaces implementeren, zoals de Prepareable met de prepare() methode, zoals de Validateable met de validate() methode, zoals de SessionAware met de setSession(Map<String, Object> session) methode de sessie map wordt in je actie geïnjecteerd.

69 Validatie ‘Klasse’-validation.xml
Bij gebruik van ModelDriven interface, moet de validatie xml het volgende bevatten.

70 Welke JSP? Bij elke actie hoort één of meerdere results.
Standaard struts result names Success Login Input Error de execute() methode van een actie moet een string teruggeven. Zo kan er bepaald worden welke jsp pagina moet worden terug gestuurd. Zo zal het validatie framework gebruik maken van de gekende string ‘input’. Wanneer er overtredingen zijn in de validatie van data, dan zal het framework een ‘input’ terugsturen.

71 Displaytag Displaytag is een open source library van custom tags die zorgen voor high-level webpresentatie functionaliteit. Kortom deze tags zorgen dat lijsten van data overzichtelijk gepresenteerd kunnen worden. Ook is er de mogelijkheid om de data te sorteren op specifieke properties.

72 Voorstelling applicatie

73 Vragen?


Download ppt "Bert Jacobs Ignace Van Tricht 4 juni 2009"

Verwante presentaties


Ads door Google