Deep Dive into Oracle ADF Transactions
-
Upload
eugene-fedorenko -
Category
Software
-
view
907 -
download
1
Transcript of Deep Dive into Oracle ADF Transactions
1
About me
3
Eugene Fedorenko Master principal R&D architect adfprac=ce-‐fedor.blogspot.com @fisbudo
The Briefing
4
ADF BC Transaction
Shared Transaction
Transaction Commit Cycle
ADF BC Save Points
ADF Model Transaction
Data Control Frame
Programmatic Approach
Q&A
Data Control Scope
Task Flow Transaction Options
Transaction Definition
5
Transac=on Ø A logical unit-of-work with a start and end Ø Must be entirely completed or aborted Ø If the start state is valid, the end state is valid Ø Is not affected by and does not affect any other transaction Ø State management of uncommitted changes
6
7
ADF Business Components
ADF Faces
ADF Task Flows
ADF Data Controls / ADF Bindings
DB
Transac=on Management in Oracle ADF
Giant Stride Entry
8
The Briefing
9
ADF BC Transaction
Shared Transaction
Transaction Commit Cycle
ADF BC Save Points
ADF Model Transaction
Data Control Frame
Programmatic Approach
Q&A
Data Control Scope
Task Flow Transaction Options
Transaction Definition
Oracle ADF BC Revisited
10
View Object
Nested Applica?on Module
En?ty Object
DB Transac=on Object
11
JDBC Connec?on
DB
View Object
Nested Applica?on Module
En?ty Object
Shared Transac=on
12
JDBC Connec?on
DB
View Object
En?ty Object
View Object View Object
Ø Based on jbo.shared.txn property Ø Designed for shared Application Modules Ø Used for not-shared root AMs to reduce number of DB
connections
Shared Transac=on
13
The Briefing
14
ADF BC Transaction
Shared Transaction
Transaction Commit Cycle
ADF BC Save Points
ADF Model Transaction
Data Control Frame
Programmatic Approach
Q&A
Data Control Scope
Task Flow Transaction Options
Transaction Definition
Ø Validation Listener List Ø Entities for validation
Ø Transaction Post Listener List Ø Dirty entities
Ø Transaction Listener List Ø AMs and entities listening to commit phase
DB Transac=on Listeners
15
16
DB Transac?on
Commit Cycle AM
En?ty Commit
beforeValidate validate
aFerValidate
postChanges
lock
prepareForDML
doDML
beforeCommit
doCommit
beforeCommit
aFerCommit aFerCommit
Ø Validation Ø Raises validation exception
Ø Post Changes Ø Rollbacks DB to savepoint Ø Restores state of posted entities Ø Raises an exception
Ø Before Commit or Commit Ø Rollbacks DB to savepoint Ø Raises an exception Ø Does not restore state of posted entities by default
Failure at Commit Cycle
17
Ø Validation logic in beforeCommit method Ø Deferrable constraints
Ø jbo.txn.handleafterpostexc = true
Ø Forces in memory passivation snapshot Ø Activation of all AMs with all VO instances
Error at Commit phase
18
public void beforeCommit(Transac?onEvent e) { if ( !isDataValid() ) throw new Valida?onExcep?on(VALIDATION_EXCEPTION); }
CONSTRAINT "CK_DIVEBOAT_WIDTH" CHECK (WIDTH<5) DEFERRABLE INITIALLY DEFERRED
The Briefing
19
ADF BC Transaction
Shared Transaction
Transaction Commit Cycle
ADF BC Save Points
ADF Model Transaction
Data Control Frame
Programmatic Approach
Q&A
Data Control Scope
Task Flow Transaction Options
Transaction Definition
Ø Invoke a PL/SQL procedure Ø Modify entity attributes Ø Invoke another PL/SQL procedure Ø Commit the transaction public class AppModuleImpl extends Applica?onModuleImpl { public void someBusinessServiceMethod() { invokePLSQLProcedure1(); modifySomeA^ributes(); invokePLSQLProcedure2(); getDBTransac?on().commit(); }
Business Service Method
20
Ø passivateStateForUndo Ø Makes a snapshot with AM’s state
Ø activateStateForUndo Ø Restores AM’s state from snapshot Ø Rollbacks the transaction
public class AppModuleImpl extends Applica?onModuleImpl { private String passivateStateForUndo() { String savePoint = super.passivateStateForUndo(null, null, PASSIVATE_UNDO_FLAG); return savePoint; } private void ac?vateStateForUndo(String savePointId) { super.ac?vateStateForUndo(savePointId, ACTIVATE_UNDO_FLAG); }
Managing Savepoints with ADF BC
21
public class AppModuleImpl extends Applica?onModuleImpl { public void someBusinessServiceMethod() { String spid = passivateStateForUndo(); try { invokePLSQLProcedure1(); modifySomeA^ributes(); invokePLSQLProcedure2(); getDBTransac?on().commit(); } catch (Run?meExcep?on e) { ac=vateStateForUndo(spid); throw new JboExcep?on(e); } }
Managing Savepoints with ADF BC
22
The Briefing
23
ADF BC Transaction
Shared Transaction
Transaction Commit Cycle
ADF BC Save Points
ADF Model Transaction
Data Control Frame
Programmatic Approach
Q&A
Data Control Scope
Task Flow Transaction Options
Transaction Definition
Oracle ADF Model
24
ADF Faces
ADF Bindings
DB
ADF Data Controls
ADF Task Flows
ADF Business Components
Ø ADF BC Ø EJB Ø Bean Ø WebService (SOAP/REST) Ø URL Ø JMX Ø BAM Ø Placeholder Ø Custom Data Controls
ADF Data Controls
25
Mul=ple Data Controls
26
REST API
DB
ADF BC
Global Divers Accommoda?on
Data Control Frame
27
REST API
DB
ADF BC
Data Control Frame
Global Divers Accommoda?on
BC Data Control
REST Data Control
Transac=on
Oracle ADF Controller
28
ADF Faces
ADF Bindings
DB
ADF Data Controls
ADF Task Flows
ADF Business Components
Task Flow
29
Task Flow Transac=on Op=ons
30
Ø Shared Data Control Frame Ø Data Control Instance (same type & name)
Ø AM instance Ø VO instances
Ø Transaction Handler Ø DB Transaction Object
Ø DB Connection Ø Entity Cache
Ø Default Option for BTF
Shared Data Control Scope
31
Ø Isolated Data Control Frame Ø Data Control Instance (same type & name)
Ø AM instance Ø VO instances
Ø Transaction Handler Ø DB Transaction Object
Ø DB Connection Ø Entity Cache
Ø Always for UTF
Isolated Data Control Scope
32
The Briefing
33
ADF BC Transaction
Shared Transaction
Transaction Commit Cycle
ADF BC Save Points
ADF Model Transaction
Data Control Frame
Programmatic Approach
Q&A
Data Control Scope
Task Flow Transaction Options
Transaction Definition
Data Control Frame #1
Data Control Frames
34
Main.jspx UTF
Menu BTF
Data Control Frame #2
Divers BTF
Log Book Record BTF
Data Control Frame #3
Dive Sites BTF
Task Flow Transac=on Op=ons
35
<transac?on> <new-‐transac?on/> </transac?on>
Ø Starts a new transaction on Data Control Frame Ø Supports Both Data Control Scopes
Ø Isolated Ø Shared
Ø Called from UTF Ø The caller has ”No Controller Transaction”
Ø Must Finish the Transaction
Always Begin New Transac=on (new-‐transac=on)
36
Ø Only Transaction starter can finish it Ø Always Begin New Transaction Ø Use Existing Transaction if Possible (no caller’s transaction)
Commit and Rollback on Return
37
38
Data Control Frame
Task Flow Commit
Transac?on
Data Control
Commit commit
commitTransac?on
commit
DB Transac?on
For each data control
Ø Prematurely Terminated Task Flow Ø Finished not via return activities Ø Task Flow’s container is not rendered anymore Ø Has been refreshed by the parent
Ø Task Flow owns the transaction Ø Auto-rollback behavior
Prematurely Terminated Transac=on
39
The Briefing
40
ADF BC Transaction
Shared Transaction
Transaction Commit Cycle
ADF BC Save Points
ADF Model Transaction
Data Control Frame
Programmatic Approach
Q&A
Data Control Scope
Task Flow Transaction Options
Transaction Definition
Ø Joins an existing transaction Ø Supports Only Shared Data Control Scope
Ø Isolated is disabled Ø Can not Finish the Transaction
Always Use Exis=ng Transac=on (requires-‐exis=ng-‐transac=on)
41
Ø Created by default when shared transaction is reused Ø Used to restore model state on task flow exit Ø ”No Save Point on Task Flow Entry” to prevent creation
Task Flow Save Points
42
Ø Root AM requires a dedicated DB connection Ø Parent and Child Task Flows should share Transaction Ø Too many DB connections for multi-root-AMs application
Root AM Connec=on Challenge
43
Divers VO Log Book VO
Divers Root AM Log Book Root AM
Log Book Record BTF Divers BTF
Ø Root AMs refer to the same data source Ø Task Flows use Transaction Options
Ø Any but <No Controller Transaction> Ø Value for jbo.shared.txn is generated Ø Transaction is shared
Root AM Connec=on Sharing
44
JDBC Connec?on
Divers VO
Log Book VO
Divers Root AM Log Book Root AM
The Briefing
45
ADF BC Transaction
Shared Transaction
Transaction Commit Cycle
ADF BC Save Points
ADF Model Transaction
Data Control Frame
Programmatic Approach
Q&A
Data Control Scope
Task Flow Transaction Options
Transaction Definition
Ø Dynamic transaction option Ø Isolated Data Control Scope
Ø Always Begin New Transaction Ø Shared Data Control Scope
Ø There is open transaction Ø Always Use Existing Transaction
Ø There is No open transaction Ø Always Begin New Transaction
Use Exis=ng Transac=on if Possible (requires-‐transac=on)
46
Ø Switches Off controller transaction management Ø Does not start a transaction on task flow entry Ø Does not create a save point on task flow entry Ø Does not restore to save point Ø Does not rollback or commit transaction
No Controller Transac=on
47
Ø Get current binding context Ø Get current Data Control Frame Ø Start a new transaction on the frame public void startTransac?on() { BindingContext context = BindingContext.getCurrent(); //Get the name of Data Control Frame String dcFrameName = context.getCurrentDataControlFrame(); //Get Data Control Frame DataControlFrame dcFrame = context.findDataControlFrame(dcFrameName); //Start Transac?on dcFrame.beginTransac?on(new Transac?onProper?es()); }
Start a Transac=on
48
Ø Get current binding context Ø Get current Data Control Frame Ø Commit or Rollback transaction public void finishTransac?on() { BindingContext context = BindingContext.getCurrent(); //Get the name of Data Control Frame String dcFrameName = context.getCurrentDataControlFrame(); //Get Data Control Frame DataControlFrame dcFrame = context.findDataControlFrame(dcFrameName); //Finish Transac?on if (doRollback) dcFrame.rollback(); else dcFrame.commit(); }
Finish a Transac=on
49
Ø Create Save Point Ø Save Save Point handle in pageFlowScope bean Ø Restore Save Point private SavepointHandle savepointHandle; public void createSavePoint() { DataControlFrame dcFrame = getCurrentDataControlFrame(); savepointHandle = dcFrame.createSavepoint(); } public void restoreSavePoint() { DataControlFrame dcFrame = getCurrentDataControlFrame(); dcFrame.restoreSavepoint(savepointHandle); }
Create Savepoint & Restore to Savepoint
50
CRUD Task Flow
51
Safety Stop. Ques=ons & Answers
52
ADF BC Transaction
Shared Transaction
Transaction Commit Cycle
ADF BC Save Points
ADF Model Transaction
Data Control Frame
Programmatic Approach
Q&A
Data Control Scope
Task Flow Transaction Options
Transaction Definition
53
Join Your Community! Tonight from 8:00 – 10:00 in Sheraton I
ADF Monday Night Foosball What is more fun than foosball and beer at your best friend’s house? Well, how about a foosball tournament with a whole bunch of friends at Kscope16? Join your fellow ADF enthusiasts for some great networking and friendly competition.
54