3. About
me
3
Eugene
Fedorenko
Master
principal
R&D
architect
adfprac=ce-‐fedor.blogspot.com
@fisbudo
4. 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
6. 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. 7
ADF
Business
Components
ADF
Faces
ADF
Task
Flows
ADF
Data
Controls
/
ADF
Bindings
DB
Transac=on
Management
in
Oracle
ADF
9. 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
13. Ø 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
14. 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
15. Ø 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
17. Ø 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
18. Ø 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
19. 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
20. Ø 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
21. Ø 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
22.
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
23. 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
24. Oracle
ADF
Model
24
ADF
Faces
ADF
Bindings
DB
ADF
Data
Controls
ADF
Task
Flows
ADF
Business
Components
25. Ø ADF BC
Ø EJB
Ø Bean
Ø WebService (SOAP/REST)
Ø URL
Ø JMX
Ø BAM
Ø Placeholder
Ø Custom Data Controls
ADF
Data
Controls
25
31. Ø 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
32. Ø 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
33. 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
34. 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
36. Ø 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
37. Ø 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. 38
Data
Control
Frame
Task
Flow
Commit
Transac?on
Data
Control
Commit
commit
commitTransac?on
commit
DB
Transac?on
For
each
data
control
39. Ø 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
40. 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
41. Ø 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
42. Ø 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
43. Ø 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 BTFDivers BTF
44. Ø 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
45. 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
46. Ø 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
47. Ø 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
48. Ø 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
49. Ø 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
50. Ø 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
52. 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. 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.