Java J2EE Web Applicaties worden over het algemeen opgezet volgens by hcj

VIEWS: 10 PAGES: 17

									Java/J2EE productiviteit in de overtreffende trap – Oracle ADF en JHeadstart
Auteur: Lucas Jellema (AMIS) Java is ontegenzeggelijk een blijvertje gebleken. Java/J2EE is een zeer wijd verspreid ontwikkelplatform, serieus te nemen door iedere organisatie die aan applicatie ontwikkeling doet. Sinds de lancering van het J2EE platform hebben vele beloftes de rondte gedaan. Hergebruik en productiviteit, platformonafhankelijkheid, standaardisatie, leverancier-onafhankelijkheid en natuurlijk wereldvrede. Daarnaast hebben enkele tientallen acroniemen hun intrede gemaakt en hebben alle standaarden al verschillende releases doorlopen. Java is een moderne programmeertaal die nog volop in beweging is. Java/J2EE is een Walhalla voor de gevorderde programmeur en al helemaal voor de architect – een term die je sinds J2EE opgang doet ook veel meer tegenkomt. De beloftes van platformonafhankelijkheid en ten aanzien van ieder geval de applicatie servers ook een grote mate van leveranciersonafhankelijk zijn absoluut ingelost. De standaardisatie heeft een enorme golf van innovatie doen ontstaan, mede gevoed door de sterke open source beweging. Er zijn tientallen zo niet honderden tools en frameworks ontstaan rondom de standaard interfaces en specificaties die veelal tegen lage kosten ingezet kunnen worden.

Tegenvallende productiviteit
Er bleken de afgelopen vijf jaar ook enkele grote bezwaren aan het Java platform te kleven. De enorme scope van Java/J2EE – van hand-computer tot complete Enterprise Architectuur -, de grote dynamiek met als gevolg de enorme stroom aan alsmaar nieuwe versies – de applicatie is nog niet in productie of hij is technologisch al weer ouderwets, de enorme complexiteit van „het platform‟ met al zijn tiers en technologieën en een schrijnend gebrek aan productiviteit. Daarnaast wil de ontwikkeling van J2EE/Java applicaties en vooral architecturen nog wel eens gecompliceerd worden door een soms bijna religieuze discussie tussen architecten, ontwikkelaars, leveranciers en projectleiders over het pure Java/J2EE gehalte enerzijds en pragmatisme anderzijds. Zeker voor organisaties die jarenlang ontwikkeld hebben met Oracle Forms, vaak in combinatie met Oracle Designer en mogelijk Headstart voor nog meer geavanceerde generatie, is de overgang naar het Java/J2EE platform enorm. Van een zeer productieve, erg gestructureerde ontwikkelomgeving naar een omgeving die nog complexer, veel minder gestructureerd en over het algemeen factoren minder productief is. Met name het inzetten van ervaren Designer/Forms ontwikkelaars als Java/J2EE ontwikkelaars voor vergelijkbare ontwikkeling van vergelijkbare applicaties met vergelijkbare productiviteit vergt een langdurig traject. Overigens moet ik hierbij aantekenen dat Java/J2EE niet zozeer voor de typische OLTP Forms applicatie wordt ingezet, maar vooral voor het ontwikkelen van een nieuwe klasse van applicaties, te weten HTML en in beperkte mate

rich-Client Internet applicaties en applicaties die op het gebied van WebServices en Enterprise Application Integration hun werk doen. De grootste uitdaging van de afgelopen jaren voor alle leveranciers die actief willen zijn op Java/J2EE gebied is de ontsluiting van de tools en technologie naar de massa in plaats van alleen de J2EE-goeroes. Productiviteit is het sleutelwoord. Oracle heeft die handschoen met grote voortvarendheid opgepakt, niet in de laatste plaats vanwege het feit dat de Oracle Applications divisie zelf een enorme behoefte heeft aan een productief ontwikkelplatform; zie ook het artikel „Eating your own dogfood – interview met John Wookey‟ in het vorige nummer van OGHVisie.

De Oracle toolstack – “Productivity with choice”
De belangrijkste onderdelen van de Oracle product portfolio ten aanzien van de productiviteit van Java/J2EE applicatie ontwikkeling zijn:  ADF Business Components – sinds november 1999 beschikbaar onder de naam BC4J (Business Components for Java); dit is een OO/R Persistency Framework dat relationele data en services in object-vorm beschikbaar stelt aan Java applicaties  Oracle Toplink – sinds 1994 beschikbaar en in 2002 door Oracle ingelijfd; Toplink biedt een POJO (plain old Java Beans) gebaseerd OO/R Persistency Framework dat relationele data en services in object-vorm beschikbaar stelt aan Java applicaties; Toplink wordt als „meer OO en meer Java‟ gezien dan ADF BC  ADF UIX – sinds 2000 beschikbaar en door Oracle zelf veel toegepast in ondermeer de CRM en Self-Service modules van Oracle Applications, maar ook in tools als Oracle Enterprise Manager. UIX staat voor User Interface XML, en biedt een declaratief, XML gebaseerd mechanisme om User Interfaces te definiëren; de UIX rendering engine kan op basis van deze definities HTML pagina‟s genereren maar bijvoorbeeld ook WML en cHTML. ADF UIX zal op korte termijn verder evolueren tot ADF Faces, Oracle‟s implementatie van de nog vrije nieuwe Java Server Faces standaard voor event driven User Interfaces in ondermeer HTML  JDeveloper – sinds 1998 beschikbaar als kloon van Borland‟s JBuilder (overigens zit er sinds 2002 al geen Borland-code meer in JDeveloper). JDeveloper biedt naast de standaard ontwikkelomgeving voor Java code ook visuele editors voor ondermeer UIX, JSP, HTML, CSS en Struts en wizards voor BC4J, WebServices en Toplink.  JHeadstart – sinds 2001 beschikbaar; JHeadstart is een op standaard technologieën zoals Struts, Toplink, ADF BC, JSP en UIX gebaseerd framework met twee pijlers: o generatie van applicaties op basis van declaratieve definities of eventueel vanuit Oracle Designer o runtime componenten die de applicatie ondersteunen, ondermeer de „data binding‟ - de koppeling tussen de View en Controller enerzijds en het Model anderzijds

Met bovenstaande componenten heeft Oracle een krachtige geïntegreerde ontwikkelomgeving die niet onderdoet voor de beste Java IDEs in de markt. Echter, ook hiermee zijn productiviteit, toegankelijkheid voor niet-goeroe‟s en complexiteit respectievelijk vrij laag, laag en vrij hoog. Sinds April 2004 is het Oracle ADF (Application Development Framework) in productie, als onderdeel van JDeveloper 10g. ADF – eerder in OGH Visie besproken door Sandra Muller van Oracle Consulting – is allereerst een Binding Framework. ADF biedt faciliteiten om data elementen die door het Model beschikbaar worden gesteld – zoals Attributen of Methodes van ADF BC Objecten, Properties van JavaBeans en Methodes binnen WebServices – te koppelen aan de View pagina‟s, meestal JSP of UIX. Voor Oracle Designer gebruikers: dit lijkt heel erg op het definiëren van Table- en Column-usages in Forms Modules .

ADF – Application Development Framework
ADF biedt ontwikkelfaciliteiten om de databinding te specificeren – deels zelfs door simpel drag & drop naar de pagina. Daarnaast biedt ADF de runtime libraries die de data afhandeling rond een pagina regelen. Dit betekent dat ADF ervoor zorgt dat de data die een pagina nodig heeft bij het Model wordt aangevraagd en op een voor de pagina bekende plaats wordt klaargezet. Het betekent ook dat data die door de gebruiker in de pagina is ingevoerd of gewijzigd op de juiste manier door ADF aan het Model wordt teruggegeven om permanent vast te leggen in de database. ADF laat de ontwikkelaar alle beschikbare Business Services registreren als Data Controls – dit kunnen WebServices zijn, Java Beans, Database PL/SQL Functies en Tabellen/Views (de laatste twee indirect). Deze Data Controls zijn vervolgens de componenten die pagina-ontwikkelaars in hun pagina‟s kunnen toepassen, door ze er simpelweg naar toe te slepen. Uiteraard dient er dan nog het nodige aan de pagina layout, eventuele client-side logica en ook niet-scherm gerichte Controller logica gebouwd te worden, maar de ruggegraat van een data- en transactie gerichte applicatie kan op deze wijze vrij snel worden neergezet. Het is bijna alsof je met de hand Forms bouwt: in een layout editor met slepen, klikken en property palettes de basis layout en functionaliteit bouwen. Met ADF besteedt de ontwikkelaar veel tijd aan het registreren van Data Controls en vervolgens het bouwen van individuele pagina‟s, waarbij vrij weinig generieke definities over pagina‟s heen gebruikt kunnen worden. Daarnaast kan relatief vaak gewenste functionaliteit –zoals multi-record schermen, List of Values, master-detail schermen- nog de nodige hoofdbrekens opleveren en veel tijd aan handmatig ontwikkelwerk vergen.

JHeadstart voor ADF
Dit is het punt waar JHeadstart zijn intrede doet. Waar Oracle Designer aan de ontwikkeling van Oracle Forms een grote mate van standaardisatie en productiviteit heeft toegevoegd door ondermeer het centraal en declaratief vastleggen van eigenschappen die

door generatie op vele plaatsen in de applicatie kunnen worden toegepast, doet JHeadstart datzelfde voor ADF! In Februari 2005 zag de eerste ADF JHeadstart Release (10.1.2) het licht, nadat sinds september 2004 diverse beta-versies al in de praktijk zijn ingezet. ADF JHeadstart bouwt voort op het fundament dat sinds 2001 is opgebouwd. JHeadstart 10.1.2 voegt aan JDeveloper een geïntegreerd tool toe dat op basis van simpele declaratieve definities applicaties genereert op basis van ADF en naar keuze UIX of JSP. Dit houdt concreet in dat JHeadstart Data Controls registreert, de Struts configuratie file genereert en een menu, message teksten en individuele paginas creëert met een gemeenschappelijke look & feel. Bij de generatie ondersteunt JHeadstart geavanceerde constructies zoals:  Item Groups  Multi-level tabbed menus  Master-Detail(-Detail-Detail)  Multi-Record Insert/Update/Delete  Tree of Navigator Style  List of Values en Shuttle voor enkelvoudige en meervoudige selectie  Zoek pagina‟s en Zoek Widgets binnen resultaat pagina‟s  Sorteerbare kolommen in Tabel-layout schermen  Detail-Disclosure Al deze elementen kunnen ook handmatig worden gebouwd, vaak wel met flinke investeringen in tijd en moeite. ADF is nog betrekkelijk nieuw en nog sterk in ontwikkeling. Het Oracle JDeveloper ontwikkelteam probeert via How-To documenten en Sample-code uit te leggen hoe veel voorkomende situaties met ADF aangepakt kunnen worden. Om aan te geven om welke basale zaken dit soms nog gaat: in deze serie ondermeer een document dat beschrijft hoe je aan een Select list een lege regel kan toevoegen voor het geval het veld niet verplicht is. Een van de grote toegevoegde waarden van JHeadstart is het feit dat het een bundeling geeft van een groot aantal “best practices” met ADF zoals die het afgelopen jaar door Oracle Consulting verzameld zijn. Wil je weten hoe je iets kunt bereiken met ADF dan heb je een goeie kans dat je er achter komt als je de applicatie genereert met JHeadstart 10.1.2.

Generatie vanuit Oracle Designer en Migratie van Oracle Forms
Overigens kan JHeadstart de ADF applicatie ook rechtstreeks vanuit Oracle Designer genereren. Dat wil dus zeggen dat ontwikkelaars hun ontwikkelwerk in principe gewoon binnen Designer kunnen blijven doen, alleen nu een andere generator gebruiken! Uiteraard ligt de waarheid iets genuanceerder: de JHeadstart generator is minder geavanceerd dan de Forms generator. Er is dus meestal meer behoefte aan post-generatie

aanpassingen. Om die te kunnen doen zal de ontwikkelaar toch in JDeveloper aan de slag moeten en ook enige kennis moeten meebrengen van de gebruikte technologieën. Als een organisatie een bestaande, niet gegenereerde Forms applicatie heeft die overgebracht moet worden naar het Java/J2EE platform, dan kan via Design Capture in Designer gevolgd door generatie met JHeadstart een uitstekende start gemaakt worden. Het resultaat van zo‟n migratie heeft de basisfunctionaliteit van de oorspronkelijke Forms applicatie – maar behoeft ongetwijfeld nog nazorg op het vlak van layout en client-side logica. Veel belangrijker: het migratie product is volledig gebaseerd op de architectuur en componenten die ook voor nieuwbouw gebruikt zouden worden. Onderhoud en uitbouw van zo‟n gemigreerde applicatie is net zo eenvoudig als onderhoud van een nieuw gebouwde applicatie.

Hoe ontwikkel je een applicatie met ADF en JHeadstart
In het vervolg van dit artikel wil ik een heel korte beschrijving geven van de ontwikkeling van een ADF applicatie. Voor details en een echte tutorial verwijs ik naar de homepage van JHeadstart op OTN – zie het blokje meer informatie. De basis van JHeadstart applicaties is een set tabellen of views in een database. Of meer specifiek, een ADF Business Components laag bovenop een database. We gaan voor dit voorbeeld uit van het AMIS Library System, een kleine applicatie voor het beheer van de boekencollectie van AMIS. We gebruiken een datamodel met vijf tabellen: Publisher, Book, Author, Authorship en Copy. Deze database is met Oracle Designer ontworpen en gegenereerd. Dit kan ook met JDeveloper: een database design inclusief een diagram en DDL scripts kan met JDeveloper worden geproduceerd. Het diagram zoals hier afgebeeld is afkomstig uit JDeveloper.

Vervolgens starten we Oracle 10g JDeveloper 10.1.2. Deze kan van Oracle worden gedownload als trial. We hebben – ook van OTN – JHeadstart 10.1.2 gedownload en geïnstalleerd. We creëren een Application Workspace in JDeveloper met Web Application [DEFAULT] als technology template. JDeveloper maakt nu een Model en een ViewController project aan. We selecteren het Model project en kiezen uit het rechtermuisknop-menu de optie New. In de New Gallery kiezen we onder Business Tier de node Business Components. Uit de lijst van opties selecteren we Business Components from Tables. JDeveloper opent nu een wizard die ons achtereenvolgens een Database Connectie laat aanmaken naar het schema met onze tabellen, de tabellen laat selecteren en daar de objecten in genereert die we nodig hebben om het Model te implementeren. Nu switchen we naar het View project. Uit het rechtermuisknop-menu (RMB menu) kiezen we nu Enable JHeadstart on this Project. De JHeadstart Enable Project Wizard start. Deze gaat ons JDeveloper project voorbereiden op het gebruik van JHeadstart. Standaard componenten en libraries worden aan het project toegevoegd, de geëigende directorystructuur wordt gecreëerd en de configuratie-files worden geïnitialiseerd.

Uit het RMB-menu op het View project kiezen we nu de optie New JHeadstart Application Structure File. De wizard die nu start vraagt ons de ADF BC Application Module te selecteren. Vervolgens maakt deze wizard een default application structur file aan. Deze file beschrijft de pagina‟s van onze applicatie, hun layout en data usages en hun onderlinge relaties – Multi/Single record, Master-Detail, List of Values etc. Met de JHeadstart Application Structure File Editor kunnen we deze file openen om te zien wat voor default applicatie JHeadstart voor ons in gedachten heeft – op basis van de Foreign Keys die in het Model zijn aangetroffern:

We kunnen ondermeer hier aangeven welke View implementatie we willen toepassen – UIX of JSP. Ook kunnen we de taal de applicatie als default aanhoudt – uiteraard is meertaligheid ondersteund, ondermeer door de resource bundles in meer dan tien talen die met JHeadstart worden meegeleverd. De default voor ons geprepareerde applicatie kunnen we met een druk op de knop genereren. Let wel: tot hier aan toe hebben we geen letter geprogrammeerd en ook anderszins eigenlijk niets anders gedaan dan wat knoppen in wizards indrukken! Het generatieproces duurt enkele tientallen seconden. Vervolgens kunnen we het ViewController project runnen. De gegenereerde applicatie start, in UIX op dit moment.

Bij nader inzien vind ik JSP een beter geschikte technologie voor deze applicatie. Ik maak de wijziging in de application structure file. Ik voeg een eigen css (cascading stylesheet) file toe om beter de kleuren en layout van AMIS weer te geven. Daarnaast gebruik ik ons logo in plaats van het Oracle logo. Dit zijn eenmalige wijzigingen in een tweetal files. Om tot iets fraaiere schermen te komen pas ik een paar display kenmerken aan in de JHeadstart ViewObject Editor. Dit tool laat zich goed vergelijken met de Module Component en Item wizards/property palettes in de Design Editor van Oracle Designer. Hierin worden eigenschappen als Prompt, Display Type, Veldlengte, Hinttekst en dergelijke gedefinieerd:

De gegenereerde applicatie ziet er nu als volgt uit – en is ook al volledig operationeel – nog steeds zonder enig handmatig programmeren:

Nota bene: het scherm hierboven bevat multi-record insert, update en delete functionaliteit – voor Java/J2EE web-applicaties is dat al buitengewoon geavanceerd. Dit is ook bij lange na nog niet standaard functionaliteit voor ADF en alleen al hiermee levert JHeadstart een substantiële toegevoegde waarde. JHeadstart ondersteunt ook meerdere niveaus van master-detail nesting. Hieronder een voorbeeld hiervan:

Merkwaardig genoeg ondersteunt JHeadstart ook met deze 10.1.2 release nog steeds niet het display type Radio. Het wordt ons al een poos beloofd en het zal vast wel komen – maar nu nog niet. Misschien is het aardig met een paar extra geavanceerde features af te sluiten, zoals de Tree of Navigator layout-style en de shuttle. Jammergenoeg zijn deze tree en de shuttle niet ondersteund voor JSP maar alleen in UIX. De tree ziet er bijvoorbeeld als volgt uit:

Een andere geavanceerde optie, is de mogelijkheid om data weer te geven door middel van grafieken. ADF en JDeveloper bieden voor JSP applicaties een buitengewoon eenvoudige optie om grafieken op te nemen in de schermen. Dit is wel een post-generatie handeling. Voor UIX wordt dit (nog) niet ondersteund.     Om onderstaande grafiek toe te voegen heb ik de volgende stappen gezet: Maak nieuw read-only view object met een query die per publisher het aantal boeken bepaalt Voeg dit view object toe aan de application module Sleep de data control voor dit view object van het data control palet op de PublisherTablePage.jsp



Edit in de wizards de eigenschappen van de grafiek: wat is de titel, wat is het formaat, wat zijn de labels en data-velden.

Conclusies
De ontwikkeling van web-applicaties op basis van een Java/J2EE architectuur is geen sinecure. De overgang voor een ontwikkelorganisatie die ervaren is in traditionele Oracle technologie als Forms en Designer is enorm. De daling van productiviteit kan makkelijk tot een factor drie a vier oplopen. Oracle heeft een offensief ingezet om die productiviteit te verhogen en de drempels te verlagen. ADF en de visuele ontwikkelomgeving van JDeveloper zijn belangrijke elementen daarin. JHeadstart 10.1.2 geeft ADF nog een flinke duw in de rug door de belangrijkste schermconstructies en onderliggende logica te genereren. Ook met al deze hulpmiddelen is het ontwikkelen van Java/J2EE web-applicaties minder productief dan het genereren van WebForms applicaties door ervaren Designer en Forms ontwikkelaars, zeker in situaties waar post-generatie aanpassingen nodig zijn. Maar ADF en JHeadstart hebben de kloof wel aanzienlijk verkleind. Bovendien is met de generatie capaciteit van JHeadstart prototyping voor web-applicaties nu een reële mogelijkheid.

MVC architectuur en veel gebruikte J2EE frameworks
Java/J2EE Web Applicaties worden over het algemeen opgezet volgens de MVCarchitectuur. MVC beschrijft diverse componenten in de applicatie die elk een eigen verantwoordelijkheid hebben en tamelijk onafhankelijk van elkaar hun werk doen. Elk van de componenten is ook gebaseerd op specifieke technologie en vereist specifieke kennis om te ontwikkelen. Niet zelden worden binnen grotere teams verschillende ontwikkelaars voor de verschillende componenten ingezet. Hierin staat de M voor Model – de component die met de Database communiceert en de applicatie services voor Data Retrieval en Data Manipulatie biedt. Binnen het Model wordt ook de vertaling gemaakt van relationele data naar de OO wereld van Java Objecten; dit gebeurt met een OO/R persistency framework, zoals ADF Business Components, Oracle Toplink, Hibernate, handgecodeerde JDBC code of eventueel Enterprise Java Beans . De V staat voor View – de component die de web-pagina‟s genereert die uiteindelijk aan de gebruiker worden getoond. De technologie voor het produceren van HTML pagina‟s is vaak JSP (Java Server Page) of Oracle UIX. Daarnaast wordt ook XML en XSLT transformatie technologie ingezet. De C van MVC is de Controller, de besturing van de applicatie. De scheiding van de componenten in MVC houdt in dat de View niet rechtstreeks met het Model communiceert en dat het Model niet eens weet dat de View bestaat. Evenmin hebben Model of View weet van de Controller. Het is de Controller die alles aan elkaar knoopt: het request van de browser van gebruiker wordt ontvangen door de Controller en vertaalt in aanroepen van Model services om data uit de webpagina eventueel via het Model te laten vastleggen en om uit het Model data op te vragen die voor een volgende pagina nodig is. De Controller geeft tenslotte een seintje aan een View element, bijvoorbeeld een JSP dat deze zich moet gaan „renderen‟ en daarbij gebruik kan maken van data die door de Controller voor hem is klaargezet. De bijna de-factor standaard op Controller gebied is Struts van het Apache open source project. Ook voor Oracle is Struts (op dit moment want er zijn plannen voor een ADF Controller) de enige serieuze optie voor de implementatie van de Controller rol. Daarnaast ondersteunt Oracle binnen JDeveloper verschillende implementaties van Model en View. Onderstaande figuur laat dat zien – waarbij zij aangetekend dat hier Model en Business Services apart zijn weergegeven waar ze in bovenstaande beschrijving samen zijn genomen. . Een grote uitdaging in de ontwikkeling van Java/J2EE applicaties is de koppeling tussen Controller/View en Model/Business Services. Dat is het vlak waar geen (de-facto) standaarden in de markt bestaan en dat is precies het gat waar met het ADF Data Binding Framework ingesprongen is.

Meer informatie:
De JHeadstart Home page op OTN: http://www.oracle.com/technology/consulting/9iServices/JHeadstart.html De JDeveloper en ADF Home page op OTN: http://www.oracle.com/technology/products/jdev/index.html De AMIS Technology Weblog met nieuws en achtergronden bij tools en technologie: http://technology.amis.nl/blog/ De ALS applicatie kan in zijn geheel worden gedownload van http://www.amis.nl/technology


								
To top