oracle adf architecture tv - design - architecting for plsql integration

67
1 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Upload: chris-muir

Post on 11-Nov-2014

243 views

Category:

Technology


5 download

DESCRIPTION

Slides from Oracle's ADF Architecture TV series covering the Design phase of ADF projects, considering integrating PLSQL into your ADF applications. Like to know more? Check out: - Subscribe to the YouTube channel - http://bit.ly/adftvsub - Design Playlist - http://www.youtube.com/playlist?list=PLJz3HAsCPVaSemIjFk4lfokNynzp5Euet - Read the episode index on the ADF Architecture Square - http://bit.ly/adfarchsquare

TRANSCRIPT

Page 1: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

1 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Page 2: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

2 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Real World ADF Design & Architecture Principles Architecting for PL/SQL Integration

ORACLE PRODUCT

LOGO

15th Feb 2013 v1.0

Page 3: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

3 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Learning Objectives

•  At the end of this module you should be able to:

– Understand all options for integrating PL/SQL into your ADF applications

–  Identify problem areas with global variables and pending transactions

– Be able to implement best practices PL/SQL access from ADF business services and clients

Image: imagerymajestic/ FreeDigitalPhotos.net

Page 4: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

4 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Program Agenda

•  Motivation for PL/SQL in Java •  SQL Data Type - Java Mismatch •  ADF Design Considerations for PL/SQL •  Integrating PL/SQL in ADF Business Components •  ADF and Database Triggers •  Summary & Best Practices

Page 5: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

5 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

How PL/SQL is used in existing applications

•  Core Data Access Layer (Table API) –  Data protection layer that encapsulates mostly DML operations –  Select (database views) –  DML through PL/SQL packages

•  Application Business Component Layer –  PL/SQL package for application specific data access –  Also used to convert PL/SQL types to supported Java types –  Uses the Table API for CRUD

•  Validation and aggregation –  Implemented in PL/SQL procedures or functions

Page 6: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

6 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Motivation for PL/SQL in Java

• Why do customers want to integrate PL/SQL into Java? –  Language Reasons – Data Protection Reasons –  Legacy Application Reasons

Page 7: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

7 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Motivation for PL/SQL in Java

•  PL/SQL is "the language" of the Oracle database •  Is highly integrated with SQL •  Platform and operation system agnostic as it’s executed in the

database –  Simplifies upgrade and migration of an application

•  There’s no need to write data to the middle tier to perform business operations on them

•  Oracle customers often have a PL/SQL programming background –  Procedural vs. Object Oriented Programming

Language Reasons

Page 8: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

8 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Motivation for PL/SQL in Java

•  Integrates well with database security –  PL/SQL participates in database role based security

•  DML operations may trigger calls to PL/SQL •  PL/SQL APIs to database tables ensure data integrity independent

of the client used to connect to the database schema •  Data that is not queried from the database cannot be stolen or

manipulated in transit

Data Protection Reasons

Page 9: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

9 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Motivation for PL/SQL in Java

•  Oracle Forms customers used PL/SQL packages to hold business logic as per Oracle Forms recommended best practices

•  Oracle RDBMS, Forms and Designer customers have built large numbers of PL/SQL packages in the past –  A project to re-develop the logic in Java is considered expensive and error-prone

•  "Never Change a Winning Team" –  Some PL/SQL applications have gone through acceptance testing or statutory

approval processes

•  Even large PL/SQL migration projects required PL/SQL and Java to be used in parallel

Legacy Application Reasons

Page 10: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

10 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 10 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Should PL/SQL be used within Java EE applications? Please advise.

Exercise

Image: imagerymajestic/ FreeDigitalPhotos.net

Page 11: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

11 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Program Agenda

•  Motivation for PL/SQL in Java •  SQL Data Type - Java Mismatch •  ADF Design Considerations for PL/SQL •  Integrating PL/SQL in ADF Business Components •  Summary & Best Practices

Page 12: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

12 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

SQL Data Type – Java Mismatch

•  PL/SQL and SQL data types differ from Java types •  SQL data types need to be mapped to Java types and vice versa

•  Java DB Connectivity (JDBC) limitations –  No support for Record Types –  No support for %rowtype and table of %rowtype –  Boolean data type doesn't exist in RDBMS

•  Java uses connection pooling for better performance –  Users share a schema and don't have a 1-1 database connect relation –  Global package variables wont work

Page 13: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

13 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Program Agenda

•  Motivation for PL/SQL in Java •  SQL Data Type - Java Mismatch •  ADF Design Considerations for PL/SQL •  Integrating PL/SQL in ADF Business Components •  ADF and Database Triggers •  Summary & Best Practices

Page 14: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

14 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

ADF Design Considerations for PL/SQL

•  Tables are accessed by PL/SQL packages

•  If possible –  Consider a PL/SQL data access package

per table for ease of development and maintenance

–  Use application specific PL/SQL packages as an abstraction layer within the database

PL/SQL Data Access Layer Database

PL/

SQ

L P

L/S

QL

PL/

SQ

L

Create, update, delete

Create, update, delete

Create, update, delete

App

licat

ion

Spe

cific

PL/

SQ

L

Page 15: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

15 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

ADF Design Considerations for PL/SQL Overall Oracle Forms, ADF Architecture Choice

Database

PL/

SQ

L P

L/S

QL

PL/

SQ

L

Create, update, delete

Create, update, delete

Create, update, delete

App

licat

ion

Spe

cific

PL/

SQ

L

Oracle Forms

Page 16: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

16 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

ADF Design Considerations for PL/SQL Overall Oracle Forms, ADF Architecture Choice

Database

PL/

SQ

L P

L/S

QL

PL/

SQ

L

Create, update, delete

Create, update, delete

Create, update, delete

App

licat

ion

Spe

cific

PL/

SQ

L

ADF Client

Oracle Forms

Native Java Access

Page 17: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

17 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

ADF Design Considerations for PL/SQL Overall Oracle Forms, ADF Architecture Choice

Database

PL/

SQ

L P

L/S

QL

PL/

SQ

L

Create, update, delete

Create, update, delete

Create, update, delete

App

licat

ion

Spe

cific

PL/

SQ

L

SO

AP

Ser

vice

s R

ES

T S

ervi

ces

ADF Client

Oracle Forms

Native Java Access

Page 18: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

18 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

ADF Design Considerations for PL/SQL Overall Oracle Forms, ADF Architecture Choice

Database

PL/

SQ

L P

L/S

QL

PL/

SQ

L

Create, update, delete

Create, update, delete

Create, update, delete

App

licat

ion

Spe

cific

PL/

SQ

L

SO

AP

Ser

vice

s R

ES

T S

ervi

ces

ADF Client

Oracle Forms

Web Service Layer

Native Java Access

Page 19: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

19 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

ADF Design Considerations for PL/SQL Overall Oracle Forms, ADF Architecture Choice

Database

PL/

SQ

L P

L/S

QL

PL/

SQ

L

Create, update, delete

Create, update, delete

Create, update, delete

App

licat

ion

Spe

cific

PL/

SQ

L

SO

AP

Ser

vice

s R

ES

T S

ervi

ces

ADF Client

Oracle Forms

ADF BC

Web Service Layer

Native Java Access

Page 20: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

20 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Program Agenda

•  Motivation for PL/SQL in Java •  SQL Data Type - Java Mismatch •  ADF Design Considerations for PL/SQL •  Integrating PL/SQL in ADF Business Components

–  PL/SQL Table API –  PL/SQL Read Access –  PL/SQL Function Calls

•  ADF and Database Triggers •  Summary & Best Practices

Page 21: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

21 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 21 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Not to bore you with a too lengthy presentation, in the following PL/SQL integration is explained for ADF BC only. Note that TopLink (EclipseLink) integration is similar and patterns and recommendations apply

Image: Ambro/ FreeDigitalPhotos.net

Page 22: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

22 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

PL/SQL in ADF BC ADF BC Architecture

Application Module

View Object

Entity Object

1 *

Data Model XML Definition

View Object Base Class

XML Definition

Entity Object Base Class

References References

XML Definition

AM Base Class

References

Page 23: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

23 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Program Agenda

•  Motivation for PL/SQL in Java •  SQL Data Type - Java Mismatch •  ADF Design Considerations for PL/SQL •  Integrating PL/SQL in ADF Business Components

–  PL/SQL Table API –  PL/SQL Read Access –  PLSQL Calls from View Layer

•  ADF and Database Triggers •  Summary & Best Practices

Page 24: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

24 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

ADF BC

•  ADF Business Components can be created based on database views and tables for read

•  Override the entity doDML method to perform entity insert, update and delete operations using PL/SQL

•  Optionally override the lock and findByPrimaryKey methods

•  Best Practice: Create a custom PLSQLEntityImpl class that extends the ADF BC EntityImpl class and use it as the base class for all PL/SQL entity classes

PL/SQL as Table API

Page 25: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

25 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

PL/SQL as Table API (DML)

•  Implementation –  Create ADF BC entity based on database table or view –  Create entity Impl class –  Override doDML to call PL/SQL procedures

•  Use when –  You only have very few entities that require to call PL/SQL when inserting,

updating or deleting data rows

•  Consider –  Application wide generic entity base class for common PL/SQL related boilerplate

code

No Reuse Implementation

Page 26: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

26 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

PL/SQL as Table API (DML) No Reuse Implementation

Entity Object

XML Definition

Custom EntityImpl

References

Entity Object Base Class

Extends

Page 27: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

27 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

PL/SQL as Table API (DML) No Reuse Implementation

Page 28: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

28 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

PL/SQL as Table API (DML) No Reuse Implementation

Entity Object

XML Definition

Custom EntityImpl

References

Entity Object Base Class

Extends

Page 29: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

29 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

PL/SQL as Table API (DML) No Reuse Implementation

View Object

Entity Object

1 *

XML Definition

Custom EntityImpl

References

Entity Object Base Class

Extends

Overrides

protected void doDML(int operation, TransactionEvent e) { if (operation == DML_INSERT) callInsertProcedure(e); else if (operation == DML_UPDATE) callUpdateProcedure(e); else if (operation == DML_DELETE) callDeleteProcedure(e); }

Page 30: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

30 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

ADF BC Framework Custom

PL/SQL as Table API (DML) Advanced Implementation (Reuse)

Entity Object

XML Definition

references PlsqlEntity Base Class

Entity Object Base Class

PlsqlEntityDef Base Class

EntityDef Object Base Class

References

extends

extends

Custom Properties set enter

Page 31: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

31 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

About the Sample

•  Sample is an implementation of Avrom Faderman blog entry –  http://www.avromroyfaderman.com/2008/07/the-power-of-properties/

•  Idea is to leverage entity object and attribute custom properties to parameterize generic framework classes

•  The EntityDefImpl class loads properties for the insert, update and delete argument lists –  Arguments are attributes of the entity that are configured with an index number to indicate the

argument position in the stored procedure call

•  DefImpl class reads procedure names from custom properties on the entity •  EntityImpl class uses the infromation in the DefImpl class to invoke the PL

\SQL procedure

Before Showing the Screen Shots

Page 32: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

32 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

PL/SQL as Table API (DML)

•  Import your ADF library that contains the ADF BC PL/SQL Framework Extension

•  Create entity object and view object based on database view or table

•  Override default ADF BC entity and entityDef class

•  Configure custom properties on entity object and attribute

Advanced Implementation: Reference Libraries

Page 33: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

33 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

PL/SQL as Table API (DML) Advanced Implementation: Override Entity Base Classes

<Entity xmlns="http://xmlns.oracle.com/bc4j" Name="Departments" … RowClass="sample.fmwext.PlSqlEntityBaseImpl" DefClass="sample.fmwext.PlSqlEntityBaseDefImpl"> <DesignTime> <Attr Name="_superClass" Value="sample.fmwext.PlSqlEntityBaseImpl"/> <Attr Name="_defSuperClass" Value="sample.fmwext.PlSqlEntityBaseDefImpl"/> </DesignTime> <Attribute ...

Departments.xml

Page 34: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

34 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

PL/SQL as Table API (DML) Advanced Implementation: Custom Properties

Page 35: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

35 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

PL/SQL as Table API (DML) Advanced Implementation: Custom Entity Properties

Page 36: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

36 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

PL/SQL as Table API (DML) Advanced Implementation: Custom Attribute Properties

Page 37: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

37 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

PL/SQL as Table API (DML)

•  Use when –  You have a lot of PL/SQL APIs to integrate in ADF –  Declarative solution is preferred over coding solution –  You have developers with limited or no Java knowledge

•  Consider –  Always use application wide generic fmwk entity base class for common entity

related boilerplate code (recommended as ADF BC best practice) –  ADF is not a runtime container for PL/SQL. Use PL/SQL by exception

Advanced Implementation (Reuse)

Page 38: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

38 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Program Agenda

•  Motivation for PL/SQL in Java •  SQL Data Type - Java Mismatch •  ADF Design Considerations for PL/SQL •  Integrating PL/SQL in ADF Business Components

–  PL/SQL Table API –  PL/SQL Read Access –  PLSQL Calls from View Layer

•  ADF and Database Triggers •  Summary & Best Practices

Page 39: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

39 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Secret of ADF Rockstar Programmers

"Ideally you always read data from database tables or -views using SQL queries"

Page 40: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

40 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

View based on PL/SQL Function

•  Implementation –  Create view object Impl class –  Override the ViewObjectImpl methods to read data from PL/SQL

•  create() •  executeQueryForCollection() •  hasNextForCollection() •  createRowFromResultSet() •  getQueryHitCount()

•  Consider –  Generic view object impl class for common PL/SQL code

"No Reuse" Implementation

Page 41: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

41 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

View based on PL/SQL Function "No Reuse" Implementation

View Object

XML Definition

Custom ViewObjectImpl

References

ViewObject Base Class

Extends

Page 42: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

42 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

View based on PL/SQL Function "No Reuse" Implementation

protected void create(){ … getViewDef().setQuery(null); getViewDef().setSelectClause(null); } protected void executeQueryForCollection(){…} protected boolean hasNextForCollection(){…} protected ViewRowImpl createRowFromResultSet(){…} protected long getQueryHitCount(){…}

View Object

XML Definition

Custom ViewObjectImpl

References

ViewObject Base Class

Extends

Page 43: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

43 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Methods Explained

•  executeQueryForCollection() –  Executes the PL/SQL statement –  Calls setResultSetForCollection to store SQL result set as the user data for this

View Object •  createRowFromResultSet()

–  Called to copy row in user data to ViewRowImpl instance –  Calls populateAttributeForRow(...) for each attribute to add to new row –  Converts SQL Types in Result Set to ADF BC attribute types

•  getQueryHitCount() –  Calls PL/SQL procedure determining the number of rows to fetch for a query –  Used by ADF BC getEstimatedRowCount method

What You Need To Implement

Page 44: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

44 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

ADF BC Framework

View based on PL/SQL Function Advanced Implementation (Reuse)

references PlsqlViewObject Base Class

View Object Base Class

PlsqlViewDef Base Class

ViewDef Object Base Class

References

extends

extends

Custom Properties set enter

Custom

View Object

XML Definition

Page 45: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

45 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

PL/SQL Based Programmatic View Object

•  Implementing parent-child relationship between programmatic views –  Create ViewLink between parent and child view –  Map parent PK VO attribute to child FK VO attribute –  ViewLink defines BIND_<ATTRIBUTE NAME> bind variable –  Bind variable is passed as Object[] params argument to executeQueryForCollection method • Override method in custom VO IMPL class

–  "params" is an Array of Array[2] •  [0] name •  [1] value

–  Read bind variable and use in programmatic view object data query

Implementing Parent – Child Relationships

Page 46: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

46 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 46 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

How can I update PL/SQL function based view objects?

Exercise

Image: imagerymajestic/ FreeDigitalPhotos.net

Page 47: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

47 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Program Agenda

•  Motivation for PL/SQL in Java •  SQL Data Type - Java Mismatch •  ADF Design Considerations for PL/SQL •  Integrating PL/SQL in ADF Business Components

–  PL/SQL Table API –  PL/SQL Read Access –  PLSQL Calls from View Layer

•  ADF and Database Triggers •  Summary & Best Practices

Page 48: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

48 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Calling PL/SQL From ADF Faces

•  Expose Java method invoking PL/SQL on the Application Module or View Object client interface

•  Create a method binding in PageDef file •  Use OperationBinding to invoke method binding in binding layer

–  Method arguments passed in declaratively (binding layer) or programmatically (Java)

Managed Bean

Page 49: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

49 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 49 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Repeat after me 1000 times:

Always work through the binding layer Always work through the binding layer Always work through the binding layer

….

Image: Ambro / FreeDigitalPhotos.net

Page 50: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

50 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Calling PL/SQL From ADF Faces Architecture Diagram

Database

PL/

SQ

L

Func

tion Read, or Create,

or Delete

Application Module

Data Model

AM Impl public void invokePlSQL()

AM Client Interface public void invokePlSQL()

PageDef

method binding

Managed Bean

Button

Page 51: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

51 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 51 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Got it! But how do you call PL/SQL from a task flow method activity?

Exercise

Image: imagerymajestic/ FreeDigitalPhotos.net

Page 52: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

52 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. 52 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Anything to consider in regards to ADF BC application module pooling and associated

activation / passivation cycles?

Exercise

Image: imagerymajestic/ FreeDigitalPhotos.net

Page 53: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

53 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Program Agenda

•  Motivation for PL/SQL in Java •  SQL Data Type - Java Mismatch •  ADF Design Considerations for PL/SQL •  Integrating PL/SQL in ADF Business Components •  ADF and Database Triggers •  Summary & Best Practices

Page 54: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

54 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Database Updates in ADF BC

•  Entity objects are bound to database views and tables •  Entities handle data insert, update and delete operations •  View objects with no entity association are read-only •  Views based on entities read data from entity cache

–  Cache holds queried and updated data objects –  If a field should refresh upon entity row update, then this value is returned from

the update statement with no extra query required

Entities and Entity Field Refresh

Page 55: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

55 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Database Triggers With ADF BC Example: Update through Database Row Level Triggers

CREATE OR REPLACE TRIGGER EMPLOYEE_BEFORE_UPDATE BEFORE UPDATE ON EMPLOYEES FOR EACH ROW when ((NEW.SALARY is not null) AND (NEW.SALARY <> OLD.SALARY)) BEGIN if (:NEW.SALARY > 5000) THEN :NEW.COMMISSION_PCT := 0.25; ELSE :NEW.COMMISSION_PCT := 0.5; END IF; END;

Page 56: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

56 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Database Triggers With ADF BC Example: Update through Database Row Level Triggers

BEGIN UPDATE EMPLOYEES Employees SET SALARY=:1 WHERE EMPLOYEE_ID=:2 RETURNING COMMISSION_PCT INTO :3; END;

Page 57: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

57 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Program Agenda

•  Motivation for PL/SQL in Java •  SQL Data Type - Java Mismatch •  ADF Design Considerations for PL/SQL •  Integrating PL/SQL in ADF Business Components •  ADF and Database Triggers •  Summary & Best Practices

Page 58: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

58 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

PL/SQL in ADF

•  Remember not all PL/SQL is suitable for integration –  Many PL/SQL routines were written over 10 years ago –  Used by many different systems interfacing into the database –  Have been maintained by extended generation of programmers –  Are brittle in terms of how they are used –  Any slight change to suit new functionality required by your ADF application can have ongoing

impacts –  Do silly things like issue database commits/rollbacks in the middle of the transactional

processing, which is undesired by ADF applications

•  PL/SQL integration should be implemented such that you can later easily replace calls to PL/SQL with equivalent Java calls

Setting Expectations Right

Page 59: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

59 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

PL/SQL in ADF

•  Java EE uses connection pooling –  ADF application doesn't connect to individual database user accounts –  Database user session is not kept between request –  Database doesn't share ADF web session

•  Database functionality like label security need to get user context injected with each request

•  ADF BC view object and entity caches don't synchronize with data changes applied in database

•  A commit performed in PL/SQL is not recognized by ADF BC •  Locking behavior of ADF BC and PL/SQL may conflict

Setting Expectations Right

Page 60: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

60 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

PL/SQL in ADF

•  ADF is not Oracle Forms –  Recommendations for best practices in ADF differ from those in Oracle Forms

•  Oracle Forms recommended best practice is to store business logic in the database –  PL/SQL is the programming language of Oracle Forms –  Oracle Forms does not have the option to extend or reuse data blocks

•  To protect tables from direct Forms access you need to use PLSQL as a table wrapper

•  Java EE has different ways to handle "Forms" problems

Addressing Oracle Forms Best Practices

Page 61: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

61 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

PL/SQL in ADF

•  Using PL/SQL in Oracle ADF doesn't turn Oracle Forms into Oracle ADF developers –  Same for PL/SQL application developers –  Use PL/SQL for integration and while migrating applications towards Oracle ADF –  At the same time prepare for a Java based substitution of PL/SQL where possible

•  Allow Oracle Forms and PL/SQL application developers to learn Oracle ADF –  Learn Oracle ADF properly before making any decision about how to migrate –  Forms to Oracle ADF integration is not easy and not straight forward. Don't

underestimate the effort

Addressing Oracle Forms and PLSQL Application Migration

Page 62: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

62 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Conclusion I/II

•  Separate PL/SQL Java logic from application logic –  Create

•  PLSQL Java util classes –  Wrap calls to PL/SQL by exposing methods for the most

common use cases (e.g. Stored procedures calls having up to 3 arguments)

•  Base PL/SQL entities •  Base PL/SQL view objects

•  Enable custom entity and view implementation classes for configuration through properties

Page 63: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

63 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Conclusion II/III •  Refactor your code up in the Java call hierarchy if it is

generic so it can be reused •  Refactor code into helper classes if it can be used on

all layers •  Fix PL/SQL integration problems in the database tier

–  Write PL/SQL procedures and functions as a wrapper around existing functions

–  For example: the following database types are not supported in JDBC and require a work around • Record Types • %rowtype and table of %rowtype

Page 64: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

64 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Conclusion III/III

•  ADF is not a container for PL/SQL! –  Java is the primary language of ADF –  Use PL/SQL only when and where needed

•  Always work through the binding layer when accessing PL/SQL procedured and function from a managed bean –  Exceptions are handled by the ADF binding error handler –  Consistent programming model

Page 65: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

65 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Further Reading

•  Oracle Forms developers should see: –  When and how to migrate Oracle Forms applications

•  http://www.youtube.com/watch?v=C4Dz8zO623U

–  ODTUG article about the myths in migrating Oracle Forms •  http://www.oracle.com/technetwork/developer-tools/forms/documentation/formsmigration-133693.pdf

–  ADF Summit: Oracle Forms to Oracle ADF redevelopment study •  http://download.oracle.com/otn_hosted_doc/jdeveloper/11gdemos/SummitADF/

SummitADF_Redevelopment.pdf

Page 66: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

66 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Further Reading

•  http://www.oracle.com/technetwork/developer-tools/jdev/documentation/index.html –  Oracle JDeveloper and ADF Documentation Library –  Fusion Developer Guide

• How to Implement the Stored Procedure Calls for DML Operations

•  Avrom Faderman blog entry about maximum reuse of entities and view objects –  http://www.avromroyfaderman.com/2008/07/the-power-of-properties/

Page 67: Oracle ADF Architecture TV - Design - Architecting for PLSQL Integration

67 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.