Follow Us on Twitter

JDeveloper 10G, ADF en databinding

Gepubliceerd in

April 2004 - Erg in het oog springend bij de nieuwe release van JDeveloper is de lancering van Oracle ADF. ADF staat voor application development framework. Oracle's definitie van ADF luidt:

Oracle ADF is a comprehensive productivity layer for J2EE developers. It simplifies building applications as a set of business services with Web, Wireless, and Rich Client interfaces. ADF accelerates development with ready-to-use J2EE Design Pattern implementations and metadata-driven components that you'd otherwise have to code, test, and debug by hand. Since its implementation is based on standards and its features embody years of experience from Oracle's own business application developers, your ADF-powered applications are high-performance, well-architected, and portable. 

De bijbehorende slogan van Jdeveloper is “ Productivity with choice”. Oracle wil zowel de ontwikkelaar aanspreken die van klikken en slepen houdt alswel de hardcore ontwikkelaar die eigenlijk alles het liefst in vi doet.

ADF

In figuur 1 wordt getoond wat ADF inhoudt. De kern van ADF bestaat uit Business Components for Java, ADF databinding\control en de ADF view componenten (Jclient en UIX). Wat in 9i nog BC4J heette heet nu ADF application module, ADF View Object en ADF Entity Object. Voor verdere informatie over BC4J zie de links onderaan deze Whitebook.

ADF overzicht
Figuur 1: ADF overzicht

In deze Whitebook wordt ingegaan op de nieuwste vinding van Oracle, de ADF Bindings en ADF Data Control. Voor deze Whitebook is gebruik gemaakt van een minimale applicatie. Figuur 2 geeft een idee van de opzet van de applicatie. De applicatie bestaat uit twee projectjes. Een Model project met een BC4J data service die werknemers beschikbaar stelt. Een ViewController project dat bestaat uit een Struts action en een JSP pagina. 

Voorbeeld applicatie
Figuur 2: Voorbeeld applicatie

In de model laag zijn een entity object Employees en een view object EmployeesView aangemaakt op basis van een database tabel. Om de view beschikbaar te maken voor een aanroepende applicatie is er de application module object AppModule. In het ViewController project roept de showEmployeesDataAction de JSP pagina showEmployees aan. De JSP pagina toont een tabel met alle werknemers. 

Databinding

Databinding klassen in ADF vormen een adapter tussen de Business Services en de rest van de applicatie. Door bijvoorbeeld een EJB, webservice of javabean te verpakken als een datacontrol, kan de data uit deze verschillende bronnen grotendeels hetzelfde behandelt worden door de bovenliggende applicatie lagen. De klassen in de onderstaande klassendiagram objecten zijn het hart van de Databinding laag.

Klassendiagram databinding
Figuur 3: Klassendiagram databinding

Binding Context

De bindingcontext is een object waar de locaties staan gedefinieerd van datacontrols in de model laag enerzijds en van de bindingcontainers in de view laag anderzijds. Vanuit dit document kan de applicatie de verschillende DCDataControl en DCBindingContainer objecten vinden. De bindingcontext wordt gedefinieerd door het xml document Databindings.cpx. De bindingcontext bevat datacontrols uit de model laag van de applicatie en bindingcontainers die gebruikt worden door de view laag. Het Databindings.cpx document in figuur 4 is een voorbeeld van de definitie van een bindingcontext. De tag datacontrol verwijst naar een datacontrol met de naam strutsbc4j_model_AppModuleDataControl. Dit datacontrol object verpakt AppModule, de BC4J business service uit het Model project. BC4J objecten zijn van Oracle en kunnen daardoor automatisch worden gebruikt als datacontrol. Andere dataservices zullen expliciet verpakt moeten worden als datacontrol. De definitie van de datacontrol komt dan te staan in het document Datacontrols.dcx. Dit is echter een fluitje van een cent daarvoor hoeft u geen enkele code of xml te schrijven.

Voorts wordt in het document Databindings.cpx verwezen naar de bindingcontainer voor de showEmployees pagina. De container met het id showEmployeesUIModel verwijst naar het gelijknamige bestand in het package strutsbc4j.view van het ViewController project.

Bindingcontext
Figuur 4: Bindingcontext

Bindingcontainer

Het bindingcontainer object (DCBindingContainer object in figuur 3) definieert iterators en controls voor een pagina. Op het moment dat u een control van het type tabel aanmaakt voor de showEmployees JSP pagina maakt Jdeveloper het bestand showEmployeesUIModel.xml aan. De bestandsnaam wordt <pagina naam>UIModel.xml. Het document in figuur 5 bevat de definitie van de bindingcontainer. 

In het showEmployeesUIModel.xml bestand staat een iterator (DCIteratorBinding in figuur 3) gedefinieerd die verwijst naar de datacontrol strutsbc4j_model_AppModuleDataControl in de bindingcontext. Daaronder wordt een DCControl object van het type DCTable gedefinieerd dat de bovenstaande iterator gebruikt om een tabel op de JSP pagina te renderen.

Bindingcontainer
Figuur 5: Bindingcontainer

Met value bindings hebt u toegang tot de waarden van de DCControl. Met action bindings kun u kun u acties uit voeren. Acties zijn bijvoorbeeld het updaten of deleten van een record in een iterator binding.

Databinding in de context van een webapplicatie

In de voorbeeld applicatie worden de databinding objecten in combinatie met het Struts framework gebruikt (voor meer informatie over het struts framework zie de link onderaan deze Whitebook). Oracle heeft het struts framework uitgebreidt. De belangrijkste klassen zijn ADFBindingFilter , DataAction, BindingContainerActionForm en DataActionMapping.

De ADFBindingFilter servlet zorgt er voor dat de BindingContext onder de naam bindings beschikbaar is in de sessie voor de rest van de applicatie. De DataAction wordt gebruikt om requests af te handelen rekening houdend met de bindingcontainer. De DataActionMapping klasse heeft properties specifiek voor data binding. Bijvoorbeeld een property modelReference dat verwijst naar de BindingContainer die nodig is voor de DataAction om alle data voor de JSP klaar te zetten. De BindingContainerActionForm is het value object dat gebruikt wordt om de data naar de JSP toe te transporteren. 

In de voorbeeld applicatie kijkt de ShowEmployeesDataAction in zijn mapping. Vindt daar de property modelReference. Met deze modelReference zoekt de DataAction de showEmployeesUIModel bindingcontainer op in de bindingcontext die beschikbaar is gemaakt in de sessie door de ADFBindingFilter. Met de bindingcontainer definitie haalt de DataAction de data uit het EmployeesView object dat verpakt is als datacontrol en stopt de data in het BindingContainerActionForm object. Hierna zet de DataAction het form object in de request. In de request kan de JSP het form object en dus de data benaderen. 

Het JSP fragment in figuur 6 rendert een tabel waarin een kolom getoond wordt met voornamen van werknemers. De JSP pagina maakt gebruik van de data die klaargezet is in de request door de DataAction. Het JSP fragment maakt hiervoor gebruik van de JSTL core tag library en de EL-expression taal (voor meer informatie zie de links).

De rangeSet is een range value binding. FirstName is een attribute value binding. Beide objecten erven van het object JUControlActionBinding uit figuur 3. De range value biedt een iterator die voor elke regel een waarde in de variable Row stopt.

JSP fragment
Figuur 6: JSP fragment

Zoals u hierboven kunt zien worden de waarden van het FirstName attribuut uit de table control EmployeesView1 gehaald en afgedrukt per regel. Wat ook uit de table control gehaald wordt is het label van het FirstName attribuut. Als u de datacontrol als DCControl van het type form toont op de JSP pagina, kunt u op deze manier ook de maximale lengte, tooltip text en andere informatie van de valuebinding raadplegen. Het voordeel hiervan is dat dit soort gegevens op een centrale plek (in het Entity of View Object van BC4J) vastgelegd kunnen worden. Hiermee wordt voorkomen dat dit soort data voor elk scherm opnieuw moet worden vastgelegd. Ook kunt u, net als u met Oracle forms en reports kan, op basis van een datacontrol een scherm genereren. 

Conclusie 

Het maken van de voorbeeld applicatie op basis van een tabel kost nog geen tien minuten. Alle definities van de datacontrol zijn gegenereerd op basis van de employees tabel uit het voorbeeld HR schema van de oracle database. De page flow kan “klikkend en slepend” worden gemaakt en ook het maken van de schermen gebeurt met een WYSIWYG editor. Het grote voordeel van databinding is dat u vershillende business services transparant kunt gebruiken in uw controller en view laag. U zou een bestaande EJB data service kunnen vervangen voor Toplink of webservices zonder de bovenliggende applicatie lagen te wijzigen. Misschien als de situatie het verlangt kan een applicatie zelfs het ene moment zijn gegevens halen uit een webservice en het andere moment uit toplink object zonder dat te weten. Het is echter niet zo dat de onderliggende data service altijd zomaar vervangen kan worden. In de bovenstaande applicatie werd gebruikt gemaakt van BC4J als data service. BC4J legt extra informatie vast over de attributen zoals labels, maximale lengte enzovoorts. Op het moment dat de bovenliggende applicatielagen van deze additionele data gebruik maken, kan BC4J niet vervangen worden door een webservice die enkel de waarden van de attributen aanlevert.

Wanneer de productie versie van Jdeveloper 10G uit is lijkt het een goed alternatief voor Oracle forms en reports te zijn geworden. Qua productiviteit levert Jdeveloper misschien nog niet helemaal wat forms en reports leveren. Jdeveloper biedt daarentegen veel meer flexibiliteit en moglijkheden tot integratie met andere systemen. Met de komst van databinding en in de nabije toekomst Java Server Faces (een techniek die het makkelijker maakt om een GUI in elkaar te klikken) maakt het Java platform ook een inhaalslag ten opzichte van .NET in termen van productiviteit en ontwikkelgemak. .NET draait voorlopig echter alleen nog maar op windows en dit is voor veel bedrijven geen optie. Oracle ligt met Jdeveloper ook niet achter op concurrenten als BEA Weblogic Workshop en IBM Webshere Studio Enterprise Developer. Dit maakt Jdeveloper 10G zeker de moeite van het proberen waard.

Links


Waardering:
 

Reacties

Nieuwe reactie inzenden

De inhoud van dit veld is privé en zal niet openbaar worden gemaakt.

Meer informatie over formaatmogelijkheden

CAPTCHA
Deze vraag is om te testen of u een persoon bent en om spam te voorkomen
Image CAPTCHA
Enter the characters shown in the image.