44
Language Enhancement 11.4 Evan Bleicher Senior Development Manager April 10, 2014

Language Enhancement 11.4

  • Upload
    urania

  • View
    26

  • Download
    0

Embed Size (px)

DESCRIPTION

Language Enhancement 11.4. Evan Bleicher Senior Development Manager. April 10, 2014. Disclaimer. This talk includes information about future product enhancements - PowerPoint PPT Presentation

Citation preview

Page 1: Language Enhancement 11.4

Language Enhancement 11.4

Evan BleicherSenior Development Manager

April 10, 2014

Page 2: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.2

Disclaimer

This talk includes information about future product enhancements

What we are going to say reflects our views on future projects. The information contained herein is preliminary and subject to change. Any future product we ultimately deliver may be materially different from what is described here.

Page 3: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.3

ESAP

All features available via ESAP

Need to register for the ESAP

[email protected]

Provide feedback via forum• I used this• I like this• I like this less

No guarantee that these features will be in 11.4!

Page 4: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.4

Agenda

OOABL serialization

FINALLY block

GET-CLASS

JSON Before-Image Support

64-bit WebClient

Page 5: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.5

Object Serialization - Motivation

Problem

I need to efficiently pass OOABL between an ABL client and an AppServer

Solution

Use built-in OOABL object serialization

• Works between an ABL client and AppServer

• Serialization and de-serialization built into the language

Page 6: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.6

Object Serialization

Throwing OOABL error objects

Passing OOABL objects

Including OOABL objects in a temp-table

Next steps

Page 7: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.7

Object Serialization – Current behavior – prior to 11.4

THROW OOABL objects – not supported• Generated warning in the AppServer log file• ERROR raised on client• No object instance returned

Pass an OOABL object• Runtime error

Page 8: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.8

Object Serialization – Overview

THROW OOABL objects – supported• Between AppServer and ABL Client

– Not other client types

Pass an OOABL object• Some built-in objects• User-defined objects

Class must be marked serializable• All class in hierarchy• Otherwise error

Page 9: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.9

Object Serialization – Overview (cont)

Receiving side• Recreates the object instance• Pass by Value• Sender’s object instance may be garbage collected

Both sides must be 11.4• 11.4 client -> older AppServer

– Parameter passing errors

• 11.4 AppServer -> older client– OOABL error object not thrown

– Parameter passing errors

• VersionInfo property– CURRENT-REQUEST-INFO and CURRENT-RESPONSE-INFO

– SESSION and SERVER

Page 10: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.10

Object Serialization – Serialization Rules

All non-static data members are serialized• Variables• Properties• ProDataSets• Temp-tables

All access modes• Public• Protected• Private

Property getters• Not invoked • Value transferred

Page 11: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.11

Object Serialization – Serialization Rules (cont)

MEMPTRs• Serialize if allocated by the ABL application• Not serialized if allocated from external sources

– DLL or shared library

– Initial value when the object is deserialized

Handle-based variables (widgets, queries, buffers)• Serialized with the handle value• Data contained by the handle is not serialized• Only useful to round-trip data

Page 12: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.12

Object Serialization – Serialization Rules (cont)

Deep-copy• Serialize data member object references • Object graph is serialized - maintaining multiple references

Class AData A1Data A2

Class BData B1

Class CData C1

Class D

Page 13: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.13

Object Serialization – Serialization Rules (cont)

References are not maintained across parameters for a RUN statement Parameter 1

Parameter 2

Class AData A1Data A2

Class BData B1

Class CData C1

Class DData D1Data D2

Class EData E1

Class FData F1

Class G

Class AData A1Data A2

Class BData B1

Class CData C1

Class DData D1Data D2

Class EData E1

Class FData F1

Class G

Class G

Page 14: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.14

Object Serialization - Serialization Rules (cont)

The AVM does not maintain state• Open queries/cursor position• Buffer contents• Open files• Streams• Event subscriptions

Not all built-in classes can be serialized

Cannot serialize .NET or hybrid objects• AVM raises an error

Page 15: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.15

Object Serialization - Syntax

Indicates objects of the class can be passed as a parameter between an AppServer and a remote client

Compiler enforced• Entire hierarchy must be marked• Cannot be used with ABL-extended .NET classes

Page 16: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.16

Object Serialization – Serializable Built-in OOABL Objects

Classes which implement Progress.Lang.Error• Progress.Lang.SysError• Progress.Lang.AppError• Progress.Lang.JsonError• Progress.Lang.JsonParserError• Progress.BPM.BPMError

Progress.Json.ObjectModel.JsonObject Progress.Json.ObjectModel.JsonArray Progress.Json.ObjectModel.ObjectModelParser Progress.Lang.Object

Page 17: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.17

Object Serialization – Deserialization Rules

Creating the new instance• Instance Constructor not invoked• Property Setters not invoked• Static Constructors are invoked

Only the object’s data is deserialized• R-code must already exist on both sides of the wire

Page 18: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.18

Object Serialization – Object compatibility - Client / AppServer

Class on Client and AppServer must be the same(*)

Method signature and data members must match exactly• Public, Protected and Private data members• AVM maintains an MD5 value

Error is raised on RUN statement if values do not match

Application needs to maintain compatibility between the client and AppServer versions• May need to design specific classes for parameter passing

AVM does not check if the r-code matches• Business logic can change in AppServer code and not impact passing

objects

Page 19: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.19

Object Serialization - CallStack

Error objects can optionally contain Callstack information• SESSION:ERROR-STACK-TRACE attribute to TRUE • -errorstack startup parameter

Callstack augmented with info from both client and AppServer call stacks

client_se_bl.p at line 20  (client_se_bl.p)runit.p at line 2  (runit.p)

Server StackTrace:server-se-bl.p at line 8  (./server-se-bl.p)

Page 20: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.20

Object Serialization – Character Data

Character data serialized via sender’s –cpinternal

Character data deserialized via receiver’s –cpinternal

Longchar same rules apply except if:• Codepage fixed

Runtime error can be raised during conversion

Page 21: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.21

Object Serialization - PDSOE

Page 22: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.22

Object Serialization – Temp-Table

Restriction lifted• Pass temp-table to AppServer if it contains an OOABL class• Field is defined as Progress.Lang.Object

Page 23: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.23

Object Serialization - Reflection

Progress.Lang.Class

IsSerializable ( ) returns a LOGICAL• Indicating whether the specified object type defined as SERIALIZABLE• Valid for built-in classes

Page 24: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.24

Object Serialization – Tooling

COMPILE XREF output updated to reflect if class is serializable

class-name,[ INHERITS inherited-class-name

[ (inherited-class-name ...) ] ],

[ IMPLEMENTS interface-name

[ interface-name ]... ],

[ USE-WIDGET-POOL ], [ FINAL ], [ ABSTRACT ], [ SERIALIZABLE ]

<Class-ref>

<Source-guid>t6BMga8eOYXVE8DcTJMLng</Source-guid>

<Ref-seq>4</Ref-seq>

<Inherited-list/>

<Implements-list/>

<Has-use-pool>false</Has-use-pool>

<Is-final>true</Is-final>

<Is-serializable>true</Is-serializable>

Page 25: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.25

Object Serialization – Tooling (cont)

Logging• DynObjects.Class• Logging that the AVM created the object during deserialization

Page 26: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.26

Object Serialization - Async

Asynchronous invocation supports object passing

Asynchronous invocation does not support thrown OOABL errors

Page 27: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.27

Object Serialization – Next Steps

Implementation of serialization to ‘wire’ complete• However could provide an option to support ‘relaxed’ levels of client/server matching:

– Exact match (as described) – default mode – 11.4

– Exact match for public and protected data members only

– Match by data members name for public members only

• Transient data (do not serialize)

Design / implementation of object serialization to ‘disk’• Binary format• JSON• XML• Application defined (via callback)

Page 28: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.28

Agenda

OOABL serialization

FINALLY block

GET-CLASS

JSON Before-Image Support

64-bit WebClient

Page 29: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.29

FINALLY block - Motivation

Problem

Flow-of-control statements in a FINALLY block may conflict with associated block

Solution

How the AVM handles flow-of-control statements in a FINALLY block was changed

DO TRANSACTION:UNDO THROW myAppError.

END.

FINALLY:RETURN.

END.

Page 30: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.30

FINALLY block

Best Practice: Avoid flow-of-control conflicts between Associated block and FINALLY block

Associated Block FINALLY block Caller

Return 1 Return 2 2

Error 1 RETURN, NEXT, LEAVE, RETRY Error 1

Page 31: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.31

Agenda

OOABL serialization

FINALLY block

GET-CLASS

JSON Before-Image Support

64-bit WebClient

Page 32: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.32

GET-CLASS - Motivation

Problem

ABL supports today Progress.Lang.Class:GetClass(<type-name-exp>)

The ABL does not provide compile time validation of type-name-exp

Solution

Introduce GET-CLASS built-in function

• Accepts a type-name parameter

– not a character expression

Page 33: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.33

GET-CLASS

Syntax

Returns a Progress.Lang.Class

USING statements are applied to a non-qualified name

Compiler error if not found

GET-CLASS(<type-name>).

Page 34: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.34

Agenda

OOABL serialization

FINALLY block

GET-CLASS

JSON Before-Image Support

64-bit WebClient

Page 35: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.35

JSON – Before-Image - Motivation

Problem

Lack of serialize / deserialize for a ProDataSet with before-image data to JSON

Solution

Introduce new language elements which express before-image data in JSON

• Similar to support in the product for XML

Page 36: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.36

JSON – Before-Image - Syntax

No change to READ-JSON syntax

WRITE-JSON ( target-type , { file | stream | stream-handle | memptr | longchar }

[ , formatted [ , encoding [ , omit-initial-values

[ , omit-outer-object [ , write-before-image ] ] ] ] ] )

Page 37: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.37

JSON – Before-Image – After table

{  "datasetName": {    "prods:hasChanges" : true, // if no before-image data, property is absent     "tableName1": [ // after table data        {        "prods:id" : "idValue", // unique id matching before and error rows        "prods:rowState" :  "created | modified",        "prods:hasErrors" : true,  //if no errors, property is absent          ... //field values          ... //nested records if dataset is NESTED        },        ...  //more tableName1 records    ],    ... //more tables/records

Page 38: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.38

JSON – Before-Image – Before table

    "prods:before" : { // before table data      "tableName1" : [            {          "prods:id" : "idValue", // unique id matching after row          "prods:rowState" :  "deleted | modified",           "prods:hasErrors" : true,  //only for deleted records                                       if no errors property absent          ... // field values        },        ... // more tableName1 records      ],      ... //more before-tables/records    },

Page 39: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.39

JSON – Before-Image - Errors

    "prods:errors" : { // before table ERROR information      "tableName1" : [         {             "prods:id" : "idValue", // unique id matching after row            "prods:error" : "error-string"        },        ... //errors for more tableName1 records        ],      ... //errors on more tables    }}

Page 40: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.40

Agenda

OOABL serialization

FINALLY block

GET-CLASS

JSON Before-Image Support

64-bit WebClient

Page 41: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.41

WebClient – Windows 64-bit

Problem

Missing functionality – support for 64-bit WebClient

Solution

WebClient application can be defined as supporting

• 32-bit platform

• 64-bit platform

• Both

Page 42: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.42

WebClient Application Assembler - General

On General tab, added • Platform toggles

– 32-bit

– 64-bit

• By Default all applications were 32-bit

Page 43: Language Enhancement 11.4

© 2014 Progress Software Corporation. All rights reserved.43

WebClient Application Assembler - General

When you select 64-bit you decide the upgrade path• Default shown• Preference might be uninstall the 32-bit and install 64-bit

Page 44: Language Enhancement 11.4