1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

88
1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005

Transcript of 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

Page 1: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

1Workshop ADF Business Components

Workshop ADF BC(pka BC4J)

2 and 3 June 2005

Page 2: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

2Workshop ADF Business Components

Agenda

Introductie doel en achtergrond Ontwikkel ADF BC business service met wizards

Gebruik van Tester Programmatische toegang tot ADF BC

Read Only Searching Navigating through results

Data Manipulatie via ADF BC Validations Exception Handling

Page 3: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

3Workshop ADF Business Components

ADF BC

ADF BC : Business Components for Java(BC4J – pre JDeveloper 10g)

Doel: Communicatie Java – Database (persistency)

• Implementatie Model• Deployment locally of remote

Business Rules

Java Framework Library van classes Extensie mogelijkheden

Page 4: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

4Workshop ADF Business Components

ADF BC

Historie 1999, JDeveloper 2.0

Zie: http://radio.weblogs.com/0118231/stories/2005/02/25/historyOfJdeveloperReleases.html

Java Business Objects (jbo) Client-server trekjes

Events, view synchronisatie, 3-Tier apps Internet applicaties

Pooling, Struts integratie Oracle Applications

Page 5: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

5Workshop ADF Business Components

Architectuur ADF BC Applicatie

Focus: Web applicatie Dus Geen Swing, GUI, JClient etc

Page 6: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

6Workshop ADF Business Components

Oracle 10g JDeveloper ADF Architecture

Page 7: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

7Workshop ADF Business Components

Model-View-Controller

View

Controller

Model

Business Service Business Service Business Service

ADF BC op Oracle RDBMS

POJO• TopLink op MySQL• Spring Framework

WebService op BPEL

HTML – JSP or UIX (WebApp)

GUI – Swing (Java Client)

SOAP/ XML (WebService)

PDF, Excel, Email (Java App)

Context

Query DataManipulate Data (update, insert, delete)Invoke methods: calculations, validations,…

Business Service

•Request•Event•Call/Invocation

Page 8: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

8Workshop ADF Business Components

Persistency

Omzetting database Data naar objectvorm en vv Database communicatie vanuit Java: JDBC JDBC code

Handmatig schrijven / genereren Voor elke insert, update, delete, select Voor elk object Correct omgaan met Connections, Statements,

ResultSets Exception Handling

Page 9: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

9Workshop ADF Business Components

Persistency

public Dossier( Connection conn, int iDsrId) throws SQLException { this( iDsrId); StringBuffer sb = new StringBuffer(); sb.append("select dsr.dsr_name, "); sb.append("dsr.dsr_birthdate, dsr.dsr_instnumber, "); sb.append("dsr.dsr_creationdate, dsr.dsr_phase, "); sb.append("from dlt_dossiers dsr "); sb.append("where dsr.dsr_id = ?");

PreparedStatement sql = conn.prepareStatement(sb.toString()); try { sql.setInt(1 , this.id); ResultSet set = sql.executeQuery(); while ( set.next() ) { this.setName( set.getString(1) ); this.setGebDatum( set.getString(2) ); this.setInstNo( set.getString(3) ); this.setDossierDatum( set.getString(4) ); this.setFase( set.getInt(5) ); } } finally { set.close(); sql.close(); } }

Page 10: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

10Workshop ADF Business Components

Persistency

Winst: (net als bij andere frameworks als TopLink, Hibernate, JDO)

Geen JDBC coderen Design-time checks (bijv op SQL syntax) Features van de API (bijv XML generatie) Locking management Optimalisaties

Data Caching JDBC Statement hergebruik Prepared statements Update batching Integratie ADF Binding Framework Deployment locally/remotely

Page 11: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

11Workshop ADF Business Components

Business Rules in ADF BC

Voordeel: Centralisatie (verg database trigger) Herbruikbaarheid

Nadeel: Alleen beschikbaar voor ADF BC applicaties

Alternatief: Logica in database : centraal + Logica in POJO’s : echt herbruikbaar ADF BC inzetten voor persistency

Page 12: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

12Workshop ADF Business Components

ADF BC Objecten

Bouwstenen van het Framework Library met Java classes Geconfigureerd d.m.v. XML files JDeveloper Tools: wizards & editors Runtime: Framework classes lezen XML

Op te splitsen in 2 delen: Business Domain Data Model

Page 13: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

13Workshop ADF Business Components

ADF BC Objecten

Business Domain

Entity Association Domain

Representeren Data / Entiteiten / Business Objecten Staan los van applicaties Meest herbruikbaar, nl in verschillende applicaties. Logica / Business Rules op entiteit niveau

Page 14: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

14Workshop ADF Business Components

ADF BC Objecten

Data model

ViewObject ViewLink ApplicationModule

Datamodel voor een applicatie / applicatiedeel Gebaseerd op (subset van) entiteiten Minder generiek, dus minder herbruikbaar

Page 15: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

15Workshop ADF Business Components

Samenhang ADF BC Objecten

Page 16: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

16Workshop ADF Business Components

ADF BC Objecten

Georganiseerd in package structuur bv nl.amis.urenregistratie.model.ADF BC

Java files & XML Files

Advies: Scheiden Business Domain <> Data Model Ondersteund vanaf JDeveloper 10g

Page 17: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

17Workshop ADF Business Components

ADF BC Objecten

EntityObject ~ Database Tabel / View Definieert Attributen van een entiteit Attributen hebben datatype: java Class Definieert dus mapping SQL Type – Java Type Subclassen voor Business Logic Nodig bij modificatie data (insert, update, delete)

Page 18: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

18Workshop ADF Business Components

Entity

Entity Definition editor Aanpassen Naam, onderliggende Tabel Synchronisatie met Database Definitie Attributen Generatie Java Files

NB: eenmaal gegenereerde files blijven op disk Base classes

Declaratieve validatie rules Event mechanisme Properties (+custom)

Page 19: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

19Workshop ADF Business Components

Entity

Page 20: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

20Workshop ADF Business Components

Entity

Attributen Persistent (checkbox persistent) Transient (tijdelijk, bijv tbv business logic)

Column constraints

Not null Checkbox Mandatory

PK Checkbox Primary Key

FK Association

Unique Alleen van toepassing bij table generatie

Check Validatie logic

Page 21: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

21Workshop ADF Business Components

Entity

Attribute Type Mapping

Zie JDeveloper Help:Developing Buss. Components, Buss.Components reference, Buss.Components Data Types

Page 22: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

22Workshop ADF Business Components

ADF BC Objecten

Association Definition Relatie tussen attributen van 2 entiteiten ~ Foreign Key FK is geen voorwaarde! 1:1, 1:n, m:n

Page 23: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

23Workshop ADF Business Components

Association

Relatie tussen 2 entities Source: Master - PK Destination: Detail – FK

Accessors in Entity Methods om bij andere kant te komen Source: accessor retourneert een RowIterator Destination: accessor retourneert een Entity

Page 24: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

24Workshop ADF Business Components

Association

Kan Compositie zijn: Bijv. Order - Orderregels On Cascade Delete Automatische invulling FK bij creatie detail

Page 25: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

25Workshop ADF Business Components

ADF BC Objecten

Domain Definition Java Class Datatype van een Attribuut

bijv oracle.jbo.domain.Number, oracle.jbo.domain.BlobDomain Oracle object type kolom

Validatie Bijv. url, e-mailaddress Custom domain class schrijven Dus herbruikbaar

Page 26: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

26Workshop ADF Business Components

ADF BC Objecten

ViewObject Definition Definieert (sub)set van attributen Gebaseerd op Entity

1 op 1 Obv meerdere entities Alle entities zijn updatable(?). Default alleen de 1e.

SQL only Obv select statement

Page 27: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

27Workshop ADF Business Components

ADF BC Objecten

ViewObject Definition Attributen

Obv Entity Attribuut (persistent, entity derived) Obv SQL (sql derived, select only) Geen van beiden (transient) Dynamic (created at runtime - addDynamicAttribute)

Page 28: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

28Workshop ADF Business Components

ViewObject

ViewObject definition editor Entity Objects (optioneel) Attribuut Definities Select statement

Whereclause, Order By Expert mode Test (syntax check) & Execution plan

Mapping Attributen op Database kolommen Java file generatie Tuning Properties (+custom)

Page 29: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

29Workshop ADF Business Components

ViewObject

Page 30: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

30Workshop ADF Business Components

ADF BC Objecten

ViewLink Definition Relateert 2 views (master & detail) Koppeling tussen attributen Zorgt runtime voor synchronisatie detail tov

master

Page 31: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

31Workshop ADF Business Components

ViewLink

ViewLink Definition Editor

2 Views waartussen link komt Attributen (1 of meer), of obv Association SQL voor join Cardinaliteit: 1:1, 1:n, m:n Accessors

Page 32: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

32Workshop ADF Business Components

ADF BC Objecten

ApplicationModule Definition Verzameling ViewObjects & ViewLinks Definieert Data Model voor een applicatie Aanspreekpunt voor applicatie Bevat connectie met Database (1 sessie)

Configureerbaar; ondermeer: logging, pooling, type database,..

Page 33: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

33Workshop ADF Business Components

Application Module

ApplicationModule Editor ViewObjecten in DataModel Bevat instances:

ViewObject kan meerdere malen worden gebruikt Elke instance heeft unieke naam ViewObject kan via ViewLink worden opgenomen

Kunnen genest worden (bv modulen) Deployment (EJB SessionBean, Corba) Definitie Client methods Properties (+custom)

Page 34: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

34Workshop ADF Business Components

Application Module

Page 35: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

35Workshop ADF Business Components

Application Module

Opsplitsen & nesten van Modules Logische groepering functies

Duidelijker structuur Hergebruik

ViewObject cache klein houden Alle gefetchte Data wordt gecached AppMod met veel ViewObjects => grote cache

Page 36: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

36Workshop ADF Business Components

Configuration

Deployment Mogelijkheden ADF BC App Local Remote

Definitie: Rightclick op appmod

Page 37: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

37Workshop ADF Business Components

ADF BC Objecten

Aanmaken ADF BC objecten Entity generatie obv tabellen Entity obv UML design

Kan ook andersom: Tabellen genereren obv Entity Definitions Advies: alleen voor POC’s, hacks Productie systeem: Designer of vergelijkbaar tool

Page 38: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

38Workshop ADF Business Components

ADF BC Tester

ADF BC tester

Testen van Business Components Onafhankelijk van andere onderdelen zoals

UserInterface

Runt de ApplicationModule (main method) Genereert UI voor alle ViewObjecten & ViewLinks

in de ApplicationModule

Page 39: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

39Workshop ADF Business Components

ADF BC XML files

Bevatten definitie van de Objecten vastgelegd als xml

Ingelezen door Framework classes @runtime In JDeveloper bewerkt dmv editors/wizards Niet met XML editor Wel nuttig om inhoud te kennen:

Afhankelijkheden tussen files Source control Herstel bij fouten Refactoren

Page 40: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

40Workshop ADF Business Components

ADF BC XML files

1 file per ADF BC Object: <objectname>.xml Definieert object bv ApplicationModule: welke ViewObjecten/links ViewObject: Attributen, ViewLink accessors Locatie: package directory

1 file per ADF BC package: <packagename>.xml Welke objecten bevat package Locatie: package directory

Page 41: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

41Workshop ADF Business Components

ADF BC XML files

1 file per project: <projectname>.jpx Database connectie (designtime) Base classes (ivm extensies) Code generation opties (Java files / XML only) Locatie: project directory

Configuratiefile: bc4j.xcfg Runtime configuratie (oa Database connectie) Wordt gegenereerd obv project settings Aanpassen na deployment Locatie: <appmod’s package>/common/bc4j.xcfg

Page 42: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

42Workshop ADF Business Components

ADF BC API

Programmatisch werken met ADF BC

Applicaties die ADF BC gebruiken API: oracle.jbo en subpackages Coderen tegen Interfaces Alleen bij Local config: evt tegen Impl’s

Startpunt: ApplicationModule (root) Vandaar: ViewObjecten

Page 43: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

43Workshop ADF Business Components

ADF BC API

Framework Interfaces

oracle.jbo package

ApplicationModule ViewObject Row RowSet RowIterator, RowSetIterator

Page 44: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

44Workshop ADF Business Components

ADF BC API

Belangrijkste taken:

Verkrijgen ApplicationModule en retourneren

ViewObject verkrijgen Query uitvoeren Rows fetchen Attribute values ophalen

Insert, Update, Delete Transacties

Page 45: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

45Workshop ADF Business Components

ADF BC API

oracle.jbo.client.Configuration class

ApplicationModule verkrijgen: static ApplicationModule createRootApplicationModule(String

qualifiedAMDefName, String configName)

Na gebruik teruggeven aan ADF BC: static void

releaseRootApplicationModule( ApplicationModule appModule, boolean remove)

Page 46: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

46Workshop ADF Business Components

ADF BC API

Viewobject verkrijgen: ApplicationModule Interface ViewObject findViewObject(String voName)

Query uitvoeren ViewObject Interface void executeQuery();

Page 47: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

47Workshop ADF Business Components

ADF BC API

Rows fetchen: ViewObject methods:

Boolean hasNext(); Row next();

Attributen opvragen Row method: getAttribute(String attributeName);

Page 48: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

48Workshop ADF Business Components

ADF BC API

Insert Methods op ViewObject Row createRow() void insertRow(Row)

Update Fetch Row Call Row method setAttribute(String name, Object

value)

Delete Fetch Row Call Row method remove()

Page 49: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

49Workshop ADF Business Components

ADF BC API

Transactions

ApplicationModule: public Transaction getTransaction()

Transaction: commit() rollback() postChanges()

Page 50: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

50Workshop ADF Business Components

ADF BC API

Calling PL/SQL stored procedures

getTransaction van ApplicationModule Cast naar DBTransaction createCallableStatement() method Verder als bij JDBC

Page 51: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

51Workshop ADF Business Components

ADF BC API

Andere common operaties

Filteren / zoeken Detail rows benaderen Sorteren Dynamische (runtime) query opbouw

Page 52: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

52Workshop ADF Business Components

ADF BC API

XML

Genereer XML mbv WriteXML method op ViewObject

Page 53: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

53Workshop ADF Business Components

ADF BC API opgaven

Vragen?

Opgaven

Gebruik ADF BC JavaDoc (JDeveloper Help)

Page 54: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

54Workshop ADF Business Components

Quiz – Waar vind je welke method

De voornaamste classes and interfaces Configuration ApplicationModule ViewObject

• RowSet

• (RowSet)Iterator

Row

Waar vind je deze methodes findViewObject() getRootApplicationModule() next() getAttributeDefs() getAttribute() getTransaction().commit() executeQuery() getViewObjectNames() setRangeSize() writeXML() getName() remove()

Page 55: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

55Workshop ADF Business Components

Demo/Recapitulatie

Preparation Create Workspace Create Project Create Database Connection

Setup Business Service Create Business Components from Tables

• Set package name, application module name• Select Tables and Views• Indicate 1:1 mapped ViewObjects (updateable and read only)

Add constraints, associations and viewlinks Refine ViewObjects with calculated and transient

attributes Add ViewObjectInstances to application module

Page 56: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

56Workshop ADF Business Components

Demo/Recapitulatie (2)

Testing the Business Service Run the Application Module Tester and browse

ViewObjectInstances

Programmatic Access Get hold of ApplicationModule from Configuration

• Using fully qualified name: nl.amis.hrm.HrmService

• Using Configuration Name: HrmServiceLocal

Get hold of ViewObject from ApplicationModule: findViewObject( viewObjectInstanceName)

Refine Query – bind parameter values, order by clause, additional where clause

Execute Query Iterate through results Use attribute values

Page 57: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

57Workshop ADF Business Components

Additional ViewObject concepts and features

Result of Query is (held in) a RowSet vo.getRowSet() This (default) RowSet is refreshed whenever query is

executed

A ViewObject can have multiple (named) RowSets, that can coexist RowSet rsA = vo.createRowSet(“a”);

rsA.executeQuery();…RowSet rsB = vo.createRowSet(“b”);rsB.executeQuery();

Multiple resultsets, alive simultaneously

Page 58: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

58Workshop ADF Business Components

Additional ViewObject concepts and features

RowSets allow for page-wise scrolling These methods are available on ViewObject and

RowSet interface vo.setRangeSize(int) vo.scrollRange(int) vo.getPreviousRangeSet() getNextRangeSet() vo.getRangeIndexOfRow(Row) vo.getRowCountInRange()

Handy for Web Applications that want to display Google-style result pages page 4, 40-49 of approximately 10.000.002 results

Page 59: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

59Workshop ADF Business Components

Additional ViewObject concepts and features

ViewObject (and Row) can write data as XML Using the org.w3c.dom.Node writeXML() method Multiple levels – detail traversal based on ViewLinks

Example:vo.executeQuery(); Node n = vo.writeXML(0,XMLInterface.XML_OPT_ALL_ROWS);

Document d = n.getOwnerDocument(); n = ((XMLDocument)d).adoptNode(n); d.appendChild(n); try { File xmlFile = new File("c:/temp/emps.xml"); OutputStream out = new FileOutputStream(xmlFile); ((XMLDocument)d).print(out); } catch (Exception e){}

Page 60: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

60Workshop ADF Business Components

AMIS Addins for JDeveloper and ADF BC

Developed against JDeveloper API Configured through addin mechanism Published on JDeveloper addin exchange on OTN

Extended Copy ViewObjects Including attributes and properties Including ViewLinks

Force Delete ViewObjects Including attributes Including ViewLinks Including ApplicationModule ViewObject Instances (in

Data Model)

Page 61: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

61Workshop ADF Business Components

Data Manipulatie via ADF BC

Time to create, update or delete rows through ADF BC Look at locking policy and transaction control

• At ApplicationModule level

Pessimistic Locking = acquire lock when first setter is called on ViewObject Oracle Forms style

Optimistic Locking = acquire lock when record is posted Verify whether records in database is changed

compared to data in EntityObject cache

Page 62: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

62Workshop ADF Business Components

ADF BC API

Insert Methods op ViewObject Row createRow() void insertRow(Row)

Update Fetch Row Call Row method setAttribute(String name, Object

value)

Delete Fetch Row Call Row method remove()

Page 63: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

63Workshop ADF Business Components

ADF BC API

Transactions

ApplicationModule: public Transaction getTransaction()

Transaction: commit() rollback() postChanges()

Page 64: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

64Workshop ADF Business Components

ADF BC API

Calling PL/SQL stored procedures

getTransaction van ApplicationModule Cast naar DBTransaction createCallableStatement() method Verder als bij JDBC

Page 65: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

65Workshop ADF Business Components

Framework extension

Subclassen van de framework classes

Doelen Business Logic Applicatie Logica, service methods Typesafety

Page 66: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

66Workshop ADF Business Components

Framework extension

Base classes

oracle.jbo.server package

EntityImpl entity row EntityDefImpl entity definitie

ViewObjectImpl query (definitie + resultset) ViewRowImpl result record ViewDefImpl

ApplicationModuleImpl ApplicationModuleDefImpl

Page 67: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

67Workshop ADF Business Components

Framework extension

EntityImpl Meest gangbaar Methods voor create, update, delete van rows Stored Procedures voor DML Business Logic op row level Bijv in setter method

EntityDefImpl Methods om Entity definitie te modificeren Bijv attributen toevoegen, verwijderen

Page 68: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

68Workshop ADF Business Components

Framework extension

ViewObjectImpl Toevoegen methods die specifiek zijn voor query

resultaat ViewObject + logica herbruikbaar in meerdere

ApplicationModules

ViewRowImpl Logica die specifiek is voor een row Bijv. getter voor afgeleid attribuut

Page 69: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

69Workshop ADF Business Components

Framework extension

ApplicationModuleImpl Toevoegen Servicemethods ~ façade voor module Voor aanroep vanuit client: custom Interface maken

Page 70: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

70Workshop ADF Business Components

Framework extension

Specifieke subclass Logica specifiek voor een bepaald object Bv: CountriesImpl extends EntityImpl

Generieke subclass Logica gedeeld door meerdere objecten Bv: AmisEntityImpl extends EntityImpl + CountriesImpl extends AmisEntityImpl

Definitie: Globaal in JDeveloper Preferences Per project in JPX file / editor Per Object in Object editor

Page 71: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

71Workshop ADF Business Components

Framework Extension

Client Interfaces

Custom class extends Interface extends

MyAppModImpl ApplicationModuleImpl MyAppMod ApplicationModule

MyViewImpl ViewObjectImpl MyView ViewObject

MyRowImpl ViewRowImpl MyRow Row

Page 72: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

72Workshop ADF Business Components

Business Logic

Business Logic in ADF BC

Al een aantal gerelateerde zaken gezien: Extension points als EntityImpl Validatie Domains

Welke logic zet je waar ? Wanneer logic triggeren?

Page 73: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

73Workshop ADF Business Components

Business Logic

Entity Attribuut validatie

Validation Rules Validation Domain Setter method

Page 74: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

74Workshop ADF Business Components

Business Logic

Validation Rules Declaratief koppelen aan attribuut (Entity Object editor) Standaard rules

CompareValidator ListValidator RangeValidator MethodValidator

Custom Rule Implement oracle.jbo.server.rules.JbiValidator public boolean validateValue(java.lang.Object value) Registreren in project

Page 75: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

75Workshop ADF Business Components

Business Logic

Validation dmv Domain

Herbruikbaar voor meerdere entities Bijv email adres in Employees Attribuut is String; vervangen door email domain

Custom class In JDev: Template dmv new Domain Implementeer logic in validate() method Throw JboException indien invalid

Page 76: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

76Workshop ADF Business Components

Business Logic

Setter method

Gecodeerd in de EntityImpl subclass, dus Kan bij andere attributen via getters Kan bij andere entities via accessors

Indien invalid, throw JboException

Page 77: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

77Workshop ADF Business Components

Business Logic

Setter method

Hoepublic void setCountryName(String newName) { if (“Germany”.equals(newName) ) { throw new NoKrautsException(); } else { setAttributeInternal(COUNTRYNAME, value); }}

En als je via setAttribute() gaat ?? Roept setter aan (indien die bestaat)

Page 78: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

78Workshop ADF Business Components

Business Logic

Volgorde:

Domain validate() Setter method, Validation Rules

Logisch: eerst wordt waarde in een domain geplaats, dan aan setter doorgegeven

Setter roept setAttributeInternal aan Die roept validatie rules aan

Page 79: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

79Workshop ADF Business Components

Business Logic

Entity level validation

Row-level check Validation Rule

MethodValidator UniqueKeyValidator

Custom Rule: Implement JbiValidator Lastig herbruikbaar voor meerdere entities

Override EntityImpl’s validateEntity() Call super!

Page 80: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

80Workshop ADF Business Components

Business Logic

Entity level validation

Compositions Bij wijziging in deel van een Compositie worden

alle sources (masters) gemarkeerd voor validatie Bij uitvoer validateEntity method worden alle

destinations (details) gevalideerd.

Page 81: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

81Workshop ADF Business Components

Business Logic

Default values

Entity attribute: fixed value voor alle instances EntityImpl create() method: dynamische value

Call super.create() !

Page 82: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

82Workshop ADF Business Components

Business Logic

Interactie met Database Logic

Sequence Refresh after insert

• Kolom obv sequence in trigger DBSequence domain

• Idem, maar tijdelijke unique value SequenceImpl

• fetch value van sequence• Verliest waarde bij rollback

Afgeleide kolommen Triggers, defaults refresh after insert/update

Page 83: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

83Workshop ADF Business Components

Performance

Performance tuning

Tuning opties in ADF BC Object editors Entity:

Update batching

ViewObject: Fetchsize setForwardOnly method (schakelt VO-cache uit) Altijd gebruiken voor readonly Hints op query

Page 84: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

84Workshop ADF Business Components

Performance

ViewLinks / Associations: FK is geen voorwaarde Leg wel index op join kolommen!

Page 85: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

85Workshop ADF Business Components

Pooling

ApplicationModule Pooling Connection Pooling

Waarom poolen: Creatie kost tijd Geen dedicated AppMod / Connectie per user Kan meer users bedienen met 1 Connectie /

ApplicationModule Mag dan geen state vasthouden Of moet state herstellen (bijv database context, VPD)

Page 86: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

86Workshop ADF Business Components

Pooling

ApplicationModule Pooling

State ? ViewObject caches, whereclauses, pending changes, etc

Statefull Mode Affiniteit met usersession AppMod recycling

Stateless Mode State reset, rollback op connectie

Details & configuratie:http://www.oracle.com/technology/products/jdev/tips/muench/ampooling/index.html

Page 87: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

87Workshop ADF Business Components

ADF BC

Vragen ?

Opgaven

Page 88: 1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.

88Workshop ADF Business Components

Resources

JDeveloper Help Tutorials (JDev 9.0.4 – in 10g zijn ze verdwenen) JDeveloper 9i / 10g Handbook OTN

JDeveloper site JDeveloper Forum

Blogs Steve Muench - http://radio.weblogs.com/0118231/