dev-6: architecting your application in openedge 10

55
DEV-6: Architecting Your Application in OpenEdge 10 Joe Genovese Solutions Engineer

Upload: nigel-horn

Post on 30-Dec-2015

54 views

Category:

Documents


0 download

DESCRIPTION

DEV-6: Architecting Your Application in OpenEdge 10. Joe Genovese. Solutions Engineer. Agenda. What’s Your Starting Point? Using the OERA to Help You Adapt ProDataSets and Your Architecture Opening Your Application to the World Using Classes in Your Application Other Areas of Support. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: DEV-6: Architecting Your Application in OpenEdge 10

DEV-6: Architecting Your Application in OpenEdge 10

Joe GenoveseSolutions Engineer

Page 2: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation2

Agenda

What’s Your Starting Point? Using the OERA to Help You Adapt ProDataSets and Your Architecture Opening Your Application to the World Using Classes in Your Application Other Areas of Support

Page 3: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation3

One procedure to do everything

DEFINE VARIABLE cCarBrand AS CHARACTER NO-UNDO.DEFINE VARIABLE cCarModel AS CHARACTER NO-UNDO.CREATE Car.Update CarBrand CarModel CarStyle CarColor CarFuel CarEngine CarVIN WITH FRAME UpdFrame. Car.CarID = GUID(GENERATE-UUID).CASE CarBrand: WHEN "Hinda" THEN FIND Dealer WHERE Dealer.DealerName MATCHES "*#1*".…FIND BaseCode WHERE Category = "style“ AND Description = CarStyle.Car.BaseCodeStyleID = BaseCode.BaseCodeID.IF Dealer.DealerName MATCHES "*#1*" THEN Car.CarDescription = cCarColor + " " +…ELSE IF Dealer.DealerName MATCHES "*#2*" THEN Car.CarDescription = cCarBrand + " " +…

Page 4: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation4

So what happens when the UI requirements change?

Extracting and changing UI references Identifying what elements were displayed,

created or updated and in what order Extracting implicit business logic

Update CarBrand CarModel CarStyle CarColor CarFuel CarEngine CarVIN WITH FRAME UpdFrame.

Page 5: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation5

One procedure to do everything

DEFINE VARIABLE cCarBrand AS CHARACTER NO-UNDO.DEFINE VARIABLE cCarModel AS CHARACTER NO-UNDO.CREATE Car.Update CarBrand CarModel CarStyle CarColor CarFuel CarEngine CarVIN WITH FRAME UpdFrame. Car.CarID = GUID(GENERATE-UUID).CASE CarBrand: WHEN "Hinda" THEN FIND Dealer WHERE Dealer.DealerName MATCHES "*#1*".…FIND BaseCode WHERE Category = "style“ AND Description = CarStyle.Car.BaseCodeStyleID = BaseCode.BaseCodeID.IF Dealer.DealerName MATCHES "*#1*" THEN Car.CarDescription = cCarColor + " " +…ELSE IF Dealer.DealerName MATCHES "*#2*" THEN Car.CarDescription = cCarBrand + " " +…

Page 6: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation6

What happens as your logic grows?

Adding a brand or a dealership Many places in the code to change Finding them all Being sure they all work the same way Effects of this on testing

CASE CarBrand: WHEN "Hinda" THEN FIND Dealer WHERE Dealer.DealerName MATCHES "*#1*".

Page 7: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation7

One procedure to do everything

DEFINE VARIABLE cCarBrand AS CHARACTER NO-UNDO.DEFINE VARIABLE cCarModel AS CHARACTER NO-UNDO.CREATE Car.Update CarBrand CarModel CarStyle CarColor CarFuel CarEngine CarVIN WITH FRAME UpdFrame. Car.CarID = GUID(GENERATE-UUID).CASE CarBrand: WHEN "Hinda" THEN FIND Dealer WHERE Dealer.DealerName MATCHES "*#1*".…FIND BaseCode WHERE Category = "style“ AND Description = CarStyle.Car.BaseCodeStyleID = BaseCode.BaseCodeID.IF Dealer.DealerName MATCHES "*#1*" THEN Car.CarDescription = cCarColor + " " +…ELSE IF Dealer.DealerName MATCHES "*#2*" THEN Car.CarDescription = cCarBrand + " " +…

Page 8: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation8

How does your database schema affect your application code?

Schema complexities Many places in the

code Schema changes

FIND BaseCode WHERE Category = "style“ AND Description = CarStyle.Car.BaseCodeStyleID = BaseCode.BaseCodeID.

Relational keys

Page 9: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation9

One procedure to do everything

DEFINE VARIABLE cCarBrand AS CHARACTER NO-UNDO.DEFINE VARIABLE cCarModel AS CHARACTER NO-UNDO.CREATE Car.Update CarBrand CarModel CarStyle CarColor CarFuel CarEngine CarVIN WITH FRAME UpdFrame. Car.CarID = GUID(GENERATE-UUID).CASE CarBrand: WHEN "Hinda" THEN FIND Dealer WHERE Dealer.DealerName MATCHES "*#1*".…FIND BaseCode WHERE Category = "style“ AND Description = CarStyle.Car.BaseCodeStyleID = BaseCode.BaseCodeID.IF Dealer.DealerName MATCHES "*#1*" THEN Car.CarDescription = CarColor + " " +…ELSE IF Dealer.DealerName MATCHES "*#2*" THEN Car.CarDescription = cCarBrand + " " +…

Page 10: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation10

What happens to business logic variants?

Duplicating and extending the logic When the code gets out of control Maintaining each variant

IF Dealer.DealerName MATCHES "*#1*" THEN Car.CarDescription = cCarColor + " " +…ELSE IF Dealer.DealerName MATCHES "*#2*" THEN Car.CarDescription = cCarBrand + " " +…

Page 11: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation11

Agenda

What’s Your Starting Point? Using the OERA to Help You Adapt ProDataSets and Your Architecture Opening Your Application to the World Using Classes in Your Application Other Areas of Support

Page 12: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation12

OpenEdge Reference Architecture

PresentationPresentation

Business ComponentsBusiness Components

Data AccessData Access

Data SourcesData Sources

Co

mm

on

Infrastru

cture

Co

mm

on

Infrastru

cture

Enterprise ServicesEnterprise ServicesUpdate CarBrand

IF DealerName MATCHES …

CREATE CAR…FIND DEALER WHERE…

Page 13: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation13

OpenEdge Reference Architecture

PresentationPresentation

Business ComponentsBusiness Components

Data AccessData Access

Data SourcesData Sources

Co

mm

on

Infrastru

cture

Co

mm

on

Infrastru

cture

Enterprise ServicesEnterprise Services

RUN Inventory_Service

AUDIT-CONTROL…

IF CAN-DO…

Page 14: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation14

Basic principles for agility and reuse

Do each job once and only once!

Let each component do only one job and one type of job!

Tackle one part of the problem at a time!

Business ComponentsBusiness Components Co

mm

on

Infrastru

cture

Co

mm

on

Infrastru

cture

Page 15: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation15

Starting the split

User Interface and Business Logic Or Client and Server

Data Definitions

User Interface

Client-Side Logic

Authentication

Business Logic

Database Access

Schema Defs

Client

Server

Page 16: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation16

Continuing the split

Data Definitions

User Interface

Client-Side Logic

Client

Server

Authentication

Business Logic

Database Access

Schema Defs

Sharing definitions Identifying the user What data for the UI What data for the

business logic

Page 17: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation17

Completing the split

Data Definitions

User Interface

Client-Side Logic

Authentication

Business Logic

Database Access

PresentationPresentation

Business ComponentsBusiness Components

Data AccessData Access

Data SourcesData Sources

Co

mm

on

Infrastru

cture

Co

mm

on

Infrastru

cture

Enterprise ServicesEnterprise Services

Schema Defs

Page 18: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation18

Agenda

What’s Your Starting Point? Using the OERA to Help You Adapt ProDataSets and Your Architecture Opening Your Application to the World Using Classes in Your Application Other Areas of Support

Page 19: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation19

ProDataSet™ bridges the gap from client to server

Holds any relational data instance• Data relationships

• Before-and-after versions of changes

• Input and output data elements

• Authentication and other data, too

• Transports all this as a single data object

• A Document Message in enterprise terms

PresentationPresentation

Business ComponentsBusiness Components

MasterDetailDetailDetail

ProDataSet

Page 20: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation20

ProDataSet holds the logical data definition

Lets you separate the logical from the physical data definitions• Eliminate schema complexities from logic

• Shield logic from schema changes

• Hold calculated fields and other values

Business ComponentsBusiness ComponentsMasterDetailDetailDetail

ProDataSet

Data AccessData Access

Page 21: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation21

Remember that complex schema definition?

Keep this in the Data Access object

FIND CarBrand WHERE CarBrandName = cCarBrand.FIND CarModel WHERE CarModel.CarModelName = cCarModel.FIND BaseCode WHERE Category = "style" AND BaseCodeDescription = cCarStyle.cBaseCodeStyleID = BaseCode.BaseCodeID.FIND BaseCode WHERE Category = "color" AND BaseCodeDescription = cCarColor.cBaseCodeColorID = BaseCode.BaseCodeID.FIND BaseCode WHERE Category = "fuel" AND BaseCodeDescription = cCarFuel.cBaseCodeFuelID = BaseCode.BaseCodeID.FIND BaseCode WHERE BaseCode.BaseCodeCategory = "engine" AND BaseCodeDescription = cCarEngine.cBaseCodeEngineID = BaseCode.BaseCodeID.

Data AccessData Access

Page 22: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation22

Logical data definition is in temp-tables and ProDataSets

DEFINE TEMP-TABLE ttCarInfo FIELD CarBrand AS CHARACTER FIELD CarModel AS CHARACTER FIELD CarStyle AS CHARACTER FIELD CarColor AS CHARACTER FIELD CarFuel AS CHARACTER FIELD CarEngine AS CHARACTER FIELD CarVIN AS CHARACTER FIELD CarDesc AS CHARACTER FIELD CarDealer AS CHARACTER FIELD CarIsAvail AS LOGICAL FIELD CarAdded AS DATE.

DEFINE DATASET dsCarInfo FOR ttCarInfo.

Usable business data winds up here

Including calculated fields

And fields dependent on specific business logic

Business ComponentsBusiness Components

PresentationPresentation

Page 23: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation23

Wrap your code and data as a service

How much code?• Big enough for one request

• Small enough to promote reuse

How much data?• Enough to get the job done…

• Not so much as to take over somebody else’s business logic!

• Can be expressed as a ProDataSet

Page 24: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation24

In short: ProDataSets and Your Application Architecture Document Messages between parts of your application Organize the data a component uses Define the scope of a service

Data your user interface uses

Logical schema versus physical data

Data shared with another application

PresentationPresentation

Business ComponentsBusiness Components

Data AccessData Access

Data SourcesData Sources

Co

mm

on

Infrastru

cture

Co

mm

on

Infrastru

cture

Enterprise ServicesEnterprise Services

MasterDetailDetailDetail

ProDataSet

Page 25: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation25

Agenda

What’s Your Starting Point? Using the OERA to Help You Adapt ProDataSets and Your Architecture Opening Your Application to the World Using Classes in Your Application Other Areas of Support

Page 26: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation26

How else can you use a business service?

As a component to call from .NET™

As a component to call from Java™

As a component to expose as a Web service As a step in a Sonic™ ESB process

Page 27: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation27

Business ComponentsBusiness Components

Sharing data with a .NET application…

OpenEdge preserves all the data, • All the relationships,

• All the changes to data,

• All transparently for you

MasterDetailDetailDetail

ProDataSet

PresentationPresentation .NET Presentation LayerMasterDetailDetailDetail

.NET DataSet

Page 28: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation28

Business ComponentsBusiness Components

Sharing data with a Java application…

OpenEdge preserves all the data, • All the relationships,

• All the changes to data,

• All transparently for you

MasterDetailDetailDetail

ProDataSet

PresentationPresentation Java Presentation LayerMasterDetailDetailDetail

Java SDO

Page 29: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation29

Exposing your service as a Web service

Enterprise ServicesEnterprise Services

Page 30: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation30

Running Web services from your application

Run Web services as if they were ABL procedures

OpenEdge utility generates syntax to paste into your application

Parameters converted

Page 31: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation31

ProDataSets as Web service parameters

Convert a ProDataSet (or temp-table) to XML in a single WRITE-XML method• Also WRITE-XMLSCHEMA• Pass a ProDataSet as a parameter directly to

a Web service Converts XML to a ProDataSet (or temp-

table) with or without schema• READ-XML and READ-XMLSCHEMA• Likewise, receive a parameter directly from a

Web service

Page 32: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation32

Integrating Web services into your Business Components

Business ComponentsBusiness ComponentsMasterDetailDetailDetail

ProDataSetXMLXML

Somebody’sWeb service

RUN SomebodysService on hWebService(INPUT DATASET dsCarInfo, OUTPUT DATASET dsResultSet).

Page 33: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation33

Breaking up your services into maintainable, reusable units

Two business logic variants in one procedure

Separate that into two distinct services

/* ManageAmericanCars.p */

ASSIGN ttCarInfo.CarDealer = "#2" ttCarInfo.CarDesc = ttCarInfo.CarBrand + " " + ttCarInfo.CarModel + " " + … ttCarInfo.CarIsAvail = YES ttCarInfo.CarAdded = TODAY.

/* ManageForeignCars.p */

ASSIGN ttCarInfo.CarDealer = "#1" ttCarInfo.CarDesc = ttCarInfo.CarColor + " " + ttCarInfo.CarBrand + " " + … ttCarInfo.CarIsAvail = NO ttCarInfo.CarAdded = TODAY.

CASE CarBrand: WHEN "Hinda" THEN FIND Dealer WHERE Dealer.DealerName MATCHES "*#1*".

Page 34: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation34

Integrating your services into Sonic processes

Content-Based Routing

Page 35: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation35

Running ABL procedures from Sonic

ABL annotations describe the procedure and its parameters

OpenEdge Architect or ProxyGen can generate the annotations for you

Also creates the special-format descriptor file

Page 36: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation36

The OpenEdge Architect editor integrated into Sonic Workbench

@openapi.openedge.export FILE(type="ESB", esboeFilename="%FILENAME%", useReturnValue="false", writeDataSetBeforeImage="false", executionMode="external").

Page 37: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation37

In short: OpenEdge supports you in opening your services to the world ProDataSets as Document Messages

• As parameters to .NET or Java applications Run Web services from your application Expose your ABL procedures as Web services Make your services part of Sonic ESB processes

Business ComponentsBusiness Components

Enterprise ServicesEnterprise Services

MasterDetailDetailDetail

ProDataSet

PresentationPresentation

.NET or Java

Page 38: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation38

Agenda

What’s Your Starting Point? Using the OERA to Help You Adapt ProDataSets and Your Architecture Opening Your Application to the World Using Classes in Your Application Common Infrastructure Support

Page 39: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation39

Support for classes in ABL: Inheritance

Architecture is about isolating common behavior and eliminating redundancy

Classes provide inheritance• Common business object behavior

• Common infrastructure support

• Common support of all kinds

Business ComponentsBusiness ComponentsBus. Comp. Super ClassBus. Comp. Super Class

Car ClassCar Class Dealer ClassDealer Class

Page 40: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation40

Inheritance in classes

You can define a class with data and methods

Then you can define a subclass that inherits, overrides, and extends the standard behavior.CLASS AmericanCar INHERITS Car: /* Source file AmericanCar.cls */ METHOD PUBLIC OVERRIDE LOGICAL ReserveCar (INPUT pcCarId AS CHARACTER). SUPER:ReserveCar(INPUT pcCarId). /* Do reserve work for American cars. */ END METHOD.

END CLASS.

CLASS Car: /* Source file Car.cls */

METHOD PUBLIC LOGICAL ReserveCar (INPUT pcCarId AS CHARACTER). /* Do reserve work for all cars. */ END METHOD.

END CLASS.

Page 41: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation41

Support for classes: strong typing

Enforcing consistency and correctness Classes provide strong object typing to assist

• A variable holds a reference to a specific class

• The compiler verifies that all references are correct

• …even cross-checking many classes

• Interface files also represent programming contracts to enforce

Instance of Car Class

Instance of Car Class

Instance ofDealer ClassInstance of

Dealer Class

Page 42: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation42

Strong typing in classes

Here’s some procedural code:

Will it work at runtime?• Who knows?

Here’s some class-based code:

Will it work at runtime?• The compiler makes sure it will!

DEFINE VARIABLE hProc AS HANDLE.RUN MyProc.p PERSISTENT SET hProc.RUN SomeProc IN hProc(INPUT 5).

DEFINE VARIABLE rCar AS CLASS Car.rCar = NEW Car().rCar:SomeMethod(INPUT 5).

MyProc.p

SomeProc:

Car.cls

SomeMethod:

MyProc.p

SomeFunc:

?

Page 43: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation43

D I S C L A I M E R

Under Development

This talk includes information about potential future products and/or product enhancements.

What I am going to say reflects our current thinking, but the information contained herein is preliminary and subject to change. Any future products we ultimately deliver may be materially different from what is described here.

D I S C L A I M E R

Page 44: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation44

Classes for the Advanced UI in OE 10.2

Use .NET controls (both Microsoft and third party) as if they were native to ABL

Controls are expressed as objects Use ABL classes to build a UI with them

• Visual Designer in OpenEdge Architect

Integrate these new classes with other ABL classes or procedures

Page 45: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation45

In short: Using Classes in Your Architecture

Consider the practical benefits of using classes• Definitional inheritance

• Strong type checking

• More compiler support for finding errors

• Using and extending Advanced UI controls

Page 46: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation46

Agenda

What’s Your Starting Point? Using the OERA to Help You Adapt ProDataSets and Your Architecture Opening Your Application to the World Using Classes in Your Application Other Areas of Support

Page 47: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation47

Other Areas of Support

Auditing Authentication Structured error handling Don’t just think about the feature!

• Think about how it contributes to architecture

Page 48: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation48

In Summary

Consider the OpenEdge Reference Architecture as a set of practical guidelines

Make sure you are aware of key OpenEdge 10 features

Map features to their benefit in designing (changes to) your application

Page 49: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation49

Questions?

Page 50: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation50

Thank You

Page 51: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation51

Page 52: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation52

OERA component slide

PresentationPresentation

Business ComponentsBusiness Components

Data AccessData Access

Data SourcesData Sources

Co

mm

on

Infrastru

cture

Co

mm

on

Infrastru

cture

Enterprise ServicesEnterprise Services

Page 53: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation53

Questions?

Page 54: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation54

Thank You

Page 55: DEV-6: Architecting Your Application in OpenEdge 10

© 2008 Progress Software Corporation55