1 Workshop ADF Business Components Workshop ADF BC (pka BC4J) 2 and 3 June 2005.
Post on 22-Dec-2015
220 Views
Preview:
Transcript
1Workshop 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
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
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
5Workshop ADF Business Components
Architectuur ADF BC Applicatie
Focus: Web applicatie Dus Geen Swing, GUI, JClient etc
6Workshop ADF Business Components
Oracle 10g JDeveloper ADF Architecture
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
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
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(); } }
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
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
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
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
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
15Workshop ADF Business Components
Samenhang ADF BC Objecten
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
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)
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)
19Workshop ADF Business Components
Entity
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
21Workshop ADF Business Components
Entity
Attribute Type Mapping
Zie JDeveloper Help:Developing Buss. Components, Buss.Components reference, Buss.Components Data Types
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
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
24Workshop ADF Business Components
Association
Kan Compositie zijn: Bijv. Order - Orderregels On Cascade Delete Automatische invulling FK bij creatie detail
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
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
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)
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)
29Workshop ADF Business Components
ViewObject
30Workshop ADF Business Components
ADF BC Objecten
ViewLink Definition Relateert 2 views (master & detail) Koppeling tussen attributen Zorgt runtime voor synchronisatie detail tov
master
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
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,..
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)
34Workshop ADF Business Components
Application Module
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
36Workshop ADF Business Components
Configuration
Deployment Mogelijkheden ADF BC App Local Remote
Definitie: Rightclick op appmod
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
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
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
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
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
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
43Workshop ADF Business Components
ADF BC API
Framework Interfaces
oracle.jbo package
ApplicationModule ViewObject Row RowSet RowIterator, RowSetIterator
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
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)
46Workshop ADF Business Components
ADF BC API
Viewobject verkrijgen: ApplicationModule Interface ViewObject findViewObject(String voName)
Query uitvoeren ViewObject Interface void executeQuery();
47Workshop ADF Business Components
ADF BC API
Rows fetchen: ViewObject methods:
Boolean hasNext(); Row next();
Attributen opvragen Row method: getAttribute(String attributeName);
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()
49Workshop ADF Business Components
ADF BC API
Transactions
ApplicationModule: public Transaction getTransaction()
Transaction: commit() rollback() postChanges()
50Workshop ADF Business Components
ADF BC API
Calling PL/SQL stored procedures
getTransaction van ApplicationModule Cast naar DBTransaction createCallableStatement() method Verder als bij JDBC
51Workshop ADF Business Components
ADF BC API
Andere common operaties
Filteren / zoeken Detail rows benaderen Sorteren Dynamische (runtime) query opbouw
52Workshop ADF Business Components
ADF BC API
XML
Genereer XML mbv WriteXML method op ViewObject
53Workshop ADF Business Components
ADF BC API opgaven
Vragen?
Opgaven
Gebruik ADF BC JavaDoc (JDeveloper Help)
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()
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
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
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
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
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){}
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)
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
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()
63Workshop ADF Business Components
ADF BC API
Transactions
ApplicationModule: public Transaction getTransaction()
Transaction: commit() rollback() postChanges()
64Workshop ADF Business Components
ADF BC API
Calling PL/SQL stored procedures
getTransaction van ApplicationModule Cast naar DBTransaction createCallableStatement() method Verder als bij JDBC
65Workshop ADF Business Components
Framework extension
Subclassen van de framework classes
Doelen Business Logic Applicatie Logica, service methods Typesafety
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
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
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
69Workshop ADF Business Components
Framework extension
ApplicationModuleImpl Toevoegen Servicemethods ~ façade voor module Voor aanroep vanuit client: custom Interface maken
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
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
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?
73Workshop ADF Business Components
Business Logic
Entity Attribuut validatie
Validation Rules Validation Domain Setter method
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
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
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
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)
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
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!
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.
81Workshop ADF Business Components
Business Logic
Default values
Entity attribute: fixed value voor alle instances EntityImpl create() method: dynamische value
Call super.create() !
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
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
84Workshop ADF Business Components
Performance
ViewLinks / Associations: FK is geen voorwaarde Leg wel index op join kolommen!
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)
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
87Workshop ADF Business Components
ADF BC
Vragen ?
Opgaven
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/
top related