Bert Jacobs Ignace Van Tricht 4 juni 2009

Slides:



Advertisements
Verwante presentaties
KINN 2010 •OOP •O Object •O Georiënteerd •P Programmeren.
Advertisements

Unleash your productivity with Startup TOOLS today •Configuratie voor de PTC product ontwikkeling omgeving, •Applicaties voor een gecentraliseerd, grafisch.
E-RADEN Roadmap. AGENDA • Overzicht van nieuwe ontwikkelingen 2009 • Interfaces • Document Types : Meta-data • E-raden gratis ? • Perspectieven.
(c) Marc de Graauw Presentatie XML Marc de Graauw 2 maart 2000.
Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 1 Internetapplicaties Deel 14: Eerste echte e-commerce applicatie: Implementatie (vervolg)
Software Architectuur Over de samenhang der dingen = Over de connecties tussen componenten Over de afhankelijkheden tussen modules Over de belangen van.
PHP & MYSQL LES 03 PHP & DATABASES. PHP & MYSQL 01 PHP BASICS 02 PHP & FORMULIEREN 03 PHP & DATABASES 04 CMS: BEST PRACTICE.
Een introductie. Open source Betere kwaliteit Hoge innovatiesnelheid Betere prijs/kwaliteit verhouding Vrijheid in keuze van leverancier Gedreven door.
Voor meer informatie: Link Invent Design: Externe promotor : Jean Van der Biest
17 april 2008 WAB*info De digitale bron van de Nederlandse waterbodems Gaston Lamaitre Data-ICT-Dienst, Delft Uitvoerders: Atlis (hoofdaannemer), CSO (functioneel.
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Webapplicaties: de serverkant
Hibernate Ignace Van Tricht Bert Jacobs 2 Juni 2009
49e adlib gebruikersgroep vergadering Brabants Museum 7 december 2004 Bert Degenhart Drenth.
Computervaardigheden en Programmatie Universiteit AntwerpenDatabank - Basis 4.1 Computervaardigheden en Programmatie 1rste BAC Toegepaste Biologische Wetenschappen.
PLDA – Connectiviteit Rudolf de Schipper Geoffroy Fauveaux 09/11/2004.
Ontwerpen van Informatiesystemen met
1 Voorwaarden hergebruik Modulair ontwerp Low coupling High cohesion.
Designing Knowledge Systems b Hoofdstuk 11 van Knowledge Engineering and Management. The CommonKADS Methodology. b A.Th. Schreiber, J.M. Akkermans, A.A.Anjewierder,
Subversion Version control
Wolter Kaper - Ruby on Rails Webtoepassing ontwerpen Webprogrammeren, week 1.
Informatieanalyse.
Workshop PHP Een productencatalogus Met database.
JProject02 Bert Jacobs Ignace Van Tricht 4 juni 2009.
Inhoudstafel 1.Inleiding 2.Ontwerp: 2.1 Prioriteiten 2.2 Structuur 2.3 Soorten functie 2.4 UseCases 2.5 UML-diagram & uitwerking 3. Implementatie.
Deel XXI 1 Internetapplicaties Internetprogrammeren Capita Selecta.
Ontwikkeld door CWB3. Opbouw Presentatie 1.Wat is GeoSport? 2.Ontwerp 1.Gebruikte ontwerpmethodieken 2.Ervaring 3.Implementatie 1.Gebruikte technologieën.
Windows Applicaties Bouwen met Visual Studio.NET Sijmen Koffeman Development Consultant Microsoft.
KINN 2010 OOP O Object O Georiënteerd P Programmeren.
Web 1.0 HTMLAfbeeldingen FlashHyperlinks CSS Participation AJAX Usability Design Ruby on Rails.
DigiDoc Een digitaal kantoor voor iedereen !. Ceci n’est pas du software?! 2.
MVC in de praktijk Jeroen Swart.NET architect, Quintor
NHibernate in DeltaShell
Computervaardigheden Hoofdstuk 4 — Databank (Basis)
Fase 2 – Functioneel ontwerp
Tircms03-p les 4 Klassen. Abstracte datatypes in C struct stack { char info[100]; int top; }; void reset(stack *s) { s->top = -1; } void push(stack *s,
1 XSLT processing & control Datamodellering 2006.
Cegeka & TenForce Ronde tafel 17/06/2014 Doelstellingenmanagement VO.
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Prototyping Week 7 // Tweenlite & API. TweenMax Snel mooie en effectieve animatie.
ANALYSE 3 INFANL01-3 WEEK CMI Informatica.
ANALYSE 3 INFANL01-3 WEEK CMI Informatica.
INFITT01 - Internettechnologie WEEK 3. Programma Sessies JSP.
Java & het Web Programma: Databases (jdbc, JNDI, ORM, JPA)
Java & het Web Programma: 3rd party libraries Standard actions (E)xpression (L)anguage.
Java & het Web Programma: Contexts Listeners Scope/Attributes Thread safety.
1 KPN Mobiel – Introductie Repository Object Browser & Designer 10 Designer 10g & Repository Object Browser Maandag 28 februari 2005 Lucas Jellema (AMIS)
Java & het Web Programma: Sessies JSP. Stateless vs. Stateful(1) HTTP is stateless WAT IS STATELESS?
Java & het Web Programma: JSP. JSP....herhaling Welke van de volgende expressions is geldig/ongeldig? %>
Java & het Web Programma: JSTL Uitgebreide demo. JSP....herhaling Standard actions en (E)xpression (L)anguage: -Standard actions hebben de syntax:
Over de fabels en feiten van applicatiebouw en de invoering van het Spring Framework 16 december 2014 Ferdy du Chatenier / Gilbert van den.
Trimester 2. Hfdst 1: e-Presentatie, master! e-Presentatie Met de hulp van Powerpoint gaan we leren hoe we een elektronische presentatie kan maken.
GBIF NODES Committee Meeting Copenhagen, Denmark 4 th October 2009 De GBIF Integrated Publishing Toolkit Alberto GONZÁLEZ-TALAVÁN Programme Officer for.
GUI & classes Een Gui in een class steken en het object gebruiken.
License Administration Workbench Handleiding voor het consolideren van gebruikersaccounts met de License Administration Workbench Global License Auditing.
Software Development fundamentals
Frontend Oss
Unified Modeling Language 2.0
ASP.NET MVC Web Development
Software Development fundamentals
ASP.NET MVC Web Development
ASP.NET MVC Web Development
Software Development fundamentals
– Software development fundamentals
SQL Les May 2019.
Software Development fundamentals
HTML5 introductie.
Transcript van de presentatie:

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

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

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.

Projectmanagement Plan van aanpak

Projectmanagement Gantt chart Show excel file

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.

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.

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.

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.

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.

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.

Functional decompostion diagram (systeem)

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.

Event-response lijst

Event-response lijst

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

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

Oo analyse en ontwerp Use-case diagram

Use cases

Use cases

Use cases

Use cases

Use cases

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

Use cases

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

Components Voorbeeld: Skill klasse

Klasse diagram Voorbeeld: Skill klasse, van database tot view

Klasse diagram IDateable interface

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.

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.

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.

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.

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.

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

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 email

Struts2 Sequence diagram van request workflow in Struts2

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

Structuur

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.

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.

Bouwen met Struts2 struts.xml

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.

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.

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

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.

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.

Voorstelling applicatie

Vragen?