54
1

Deep Dive into Oracle ADF Transactions

Embed Size (px)

Citation preview

Page 1: Deep Dive into Oracle ADF Transactions

1

Page 2: Deep Dive into Oracle ADF Transactions
Page 3: Deep Dive into Oracle ADF Transactions

About  me  

3  

Eugene  Fedorenko    Master  principal  R&D  architect  adfprac=ce-­‐fedor.blogspot.com  @fisbudo  

         

Page 4: Deep Dive into Oracle ADF Transactions

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

Page 5: Deep Dive into Oracle ADF Transactions

5  

Page 6: Deep Dive into Oracle ADF Transactions

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  

Page 7: Deep Dive into Oracle ADF Transactions

7  

ADF  Business  Components  

ADF  Faces  

ADF  Task  Flows  

ADF  Data  Controls  /  ADF  Bindings  

DB  

Transac=on  Management  in  Oracle  ADF  

Page 8: Deep Dive into Oracle ADF Transactions

Giant  Stride  Entry  

8  

Page 9: Deep Dive into Oracle ADF Transactions

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

Page 10: Deep Dive into Oracle ADF Transactions

Oracle  ADF  BC  Revisited  

10  

View  Object  

 Nested  Applica?on  Module  

 

 En?ty  Object  

 

Page 11: Deep Dive into Oracle ADF Transactions

DB  Transac=on  Object  

11  

JDBC  Connec?on  

DB  

View  Object  

 Nested  Applica?on  Module  

 

 En?ty  Object  

 

 

 

Page 12: Deep Dive into Oracle ADF Transactions

Shared  Transac=on  

12  

JDBC  Connec?on  

DB  

View  Object  

 En?ty  Object  

 

 

 

View  Object   View  Object  

Page 13: Deep Dive into Oracle ADF Transactions

Ø 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  

Page 14: Deep Dive into Oracle ADF Transactions

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

Page 15: Deep Dive into Oracle ADF Transactions

Ø 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  

Page 16: Deep Dive into Oracle ADF Transactions

16  

 DB  Transac?on  

 

Commit  Cycle    AM    

 En?ty    Commit  

beforeValidate  validate  

aFerValidate  

postChanges  

lock  

prepareForDML  

doDML  

beforeCommit  

doCommit  

beforeCommit  

aFerCommit  aFerCommit  

Page 17: Deep Dive into Oracle ADF Transactions

Ø 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  

Page 18: Deep Dive into Oracle ADF Transactions

Ø 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  

Page 19: Deep Dive into Oracle ADF Transactions

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

Page 20: Deep Dive into Oracle ADF Transactions

Ø  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  

Page 21: Deep Dive into Oracle ADF Transactions

Ø  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  

Page 22: Deep Dive into Oracle ADF Transactions

   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  

Page 23: Deep Dive into Oracle ADF Transactions

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

Page 24: Deep Dive into Oracle ADF Transactions

Oracle  ADF  Model  

24  

ADF  Faces  

ADF  Bindings  

DB  

ADF  Data  Controls  

ADF  Task  Flows  

ADF  Business  Components  

Page 25: Deep Dive into Oracle ADF Transactions

Ø ADF BC Ø  EJB Ø Bean Ø WebService (SOAP/REST) Ø URL Ø  JMX Ø BAM Ø  Placeholder Ø Custom Data Controls      

ADF  Data  Controls  

25  

Page 26: Deep Dive into Oracle ADF Transactions

Mul=ple  Data  Controls  

26  

REST  API  

DB  

ADF  BC  

Global  Divers  Accommoda?on

Page 27: Deep Dive into Oracle ADF Transactions

Data  Control  Frame  

27  

REST  API  

DB  

ADF  BC  

Data  Control  Frame  

Global  Divers  Accommoda?on

BC  Data  Control  

REST  Data  Control  

Transac=on  

Page 28: Deep Dive into Oracle ADF Transactions

Oracle  ADF  Controller  

28  

ADF  Faces  

 ADF  Bindings  

 

DB  

ADF  Data  Controls  

ADF  Task  Flows  

ADF  Business  Components  

Page 29: Deep Dive into Oracle ADF Transactions

     

Task  Flow  

29  

Page 30: Deep Dive into Oracle ADF Transactions

     

Task  Flow  Transac=on  Op=ons  

30  

Page 31: Deep Dive into Oracle ADF Transactions

Ø  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  

Page 32: Deep Dive into Oracle ADF Transactions

Ø  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  

Page 33: Deep Dive into Oracle ADF Transactions

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

Page 34: Deep Dive into Oracle ADF Transactions

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  

Page 35: Deep Dive into Oracle ADF Transactions

 

Task  Flow  Transac=on  Op=ons  

35  

         <transac?on>                  <new-­‐transac?on/>            </transac?on>    

 

Page 36: Deep Dive into Oracle ADF Transactions

Ø  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  

Page 37: Deep Dive into Oracle ADF Transactions

Ø  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  

Page 38: Deep Dive into Oracle ADF Transactions

38  

 Data  Control  Frame  

 

Task  Flow  Commit    

Transac?on    

 Data  Control  

 Commit  commit  

commitTransac?on  

commit  

 DB  Transac?on  

 

For  each  data  control  

Page 39: Deep Dive into Oracle ADF Transactions

Ø  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  

Page 40: Deep Dive into Oracle ADF Transactions

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

Page 41: Deep Dive into Oracle ADF Transactions

Ø  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  

Page 42: Deep Dive into Oracle ADF Transactions

Ø  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  

Page 43: Deep Dive into Oracle ADF Transactions

Ø  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

Page 44: Deep Dive into Oracle ADF Transactions

Ø  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

Page 45: Deep Dive into Oracle ADF Transactions

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

Page 46: Deep Dive into Oracle ADF Transactions

Ø  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  

Page 47: Deep Dive into Oracle ADF Transactions

Ø  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  

Page 48: Deep Dive into Oracle ADF Transactions

Ø  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  

Page 49: Deep Dive into Oracle ADF Transactions

Ø  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  

Page 50: Deep Dive into Oracle ADF Transactions

Ø  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  

Page 51: Deep Dive into Oracle ADF Transactions

     

CRUD  Task  Flow  

51  

Page 52: Deep Dive into Oracle ADF Transactions

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

Page 53: Deep Dive into Oracle ADF Transactions

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.

Page 54: Deep Dive into Oracle ADF Transactions

54