De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

JProject02 Bert Jacobs Ignace Van Tricht 4 juni 2009.

Verwante presentaties


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

1 JProject02 Bert Jacobs Ignace Van Tricht 4 juni 2009

2 Agenda ► Inleiding  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 Plan van aanpak

5 Projectmanagement ► Show excel file Gantt chart Gantt chart

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  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. Requirements

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

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

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 ► Serializabletraag - laag risico ► Repeatable read ► Read committed ► Read uncomittedsnel – hoog risico  Isolatie op persistentielaag ► Optimistic locking ► Pessimistic locking

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

24 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

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 ► Declaratie in DAO category private Set employees = new HashSet (0);

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

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  Vb

33 Van Hibernate naar Model

34 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

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

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

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

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

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

45

46

47

48 ► de event flow weer bij het aanmaken van een project

49 Use cases

50 ► 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 ► 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.  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.

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  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 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 "JProject02 Bert Jacobs Ignace Van Tricht 4 juni 2009."

Verwante presentaties


Ads door Google