Download presentation
Presentation is loading. Please wait.
1
Jarmo Nieminen Sales Engineer, Principal, EMEA
2
What is Kendo UI Builder?
Responsive web UI productivity tool that significantly accelerates OpenEdge modernization efforts and provides modern look and feel with industry-leading web technologies while future-proofing your UI Progress
3
High Level Overview of The Web Development Market
18.5M+ developers worldwide (IDC report) 5M are professional web developers (full-stack, back-end & front-end web devs) * Today, JavaScript is the most commonly used programming language on earth, according to Stackoverflow * and GitHub ** Highly fragmented market with ever increasing open source JavaScript solutions (IDC Report 2014) * Stackoverflow Developer Survey Results 2016 ** Language Trends On Github, 08/2015 Let’s start with a high-level overview of the web development market. Today there are almost 19 million developers worldwide creating web, desktop and mobile applications. About 11 million of those are professional developers; the rest are hobby developers who are just experimenting with different frameworks. 46% of the professional developers (or about 5 million people) are web developers– and they largely consider themselves full-stack developers, because they do both front-end and back-end development work. According to Stackoverflow and GitHub, which are two of the most popular developer communities, JavaScript is the most commonly-used programming language on earth. But the web development market is a highly-fragmented market, with ever-increasing open-source JavaScript solutions - and many developers prefer to use open-source JavaScript components in their projects.
4
Most Popular Technologies among Stackoverflow Users
same thru JSP thru ASP.NET MVC Kendo UI play Most popular technologies among Stackoverflow users… Stackoverflow is an online forum for developers to ask questions and seek answers from fellow developers. It’s the biggest website available to get free development help for projects. Shown here are some results from the 2016 Stackoverflow Developer Survey. As you can see, the most popular technology among Stackoverflow users in 2016 is JavaScript, followed by SQL and then Java. Javascript usage has remained very consistent since 2013, and JavaScript remains the programming language of choice for about 55% of all developers. This is the technology that Kendo UI is mainly focused on. Popularity of other technologies has fluctuated much more, however. The biggest increases have been in Node.js and AngularJS usage, both of which are based on JavaScript. (click) The strongest plays for Kendo UI are with JavaScript (the most popular technology), Java (the third most popular technology), and C# and PHP (on fourth and fifth places, respectively). Kendo UI can work with Java through our UI for JSP suite, with C# through our UI for ASP.Net MVC suite, and with PHP thru our UI for PHP suite. Also notice the strong Kendo UI plays with Node.js and AngularJS – two of the fastest-growing technologies. Source: Stackoverflow Developer Survey Results 2016
5
Most Popular Languages among GitHub Users
thru JSP Kendo UI play thru ASP.NET MVC Now let’s look at the most popular programming languages in GitHub. GitHub is a web-based code repository that allows developers to host their code and keep track of the changes made to the code. Since its start in 2008, GitHub has established itself as the biggest open-source repository in the world, with over 14 million users. Similar to the results from the Stackoverflow survey, JavaScript is the most popular language among GitHub users since 2012, followed by Java, Ruby, PHP, and others. And here is the Kendo UI play. Kendo UI can work with JavaScript, Java, PHP, CSS… even C# through the ASP.NET MVC UI Suite. The JavaScript usage trends in Stackoverflow and GitHub indicate that the JavaScript UI component market is the biggest in the web development world. This is the reason why we have Kendo UI – it is a lucrative market that we need to explore to its fullest. Source: GitHub 08/2015
6
Progress Technology Recommendations Building Business Applications of the Future
Angular JSDO OpenEdge and Telerik Development Environment REST Interfaces OpenEdge Mgmt OpenEdge and Telerik Development Environment Progress Application Server for OpenEdge OpenEdge BPM Corticon BRMS Ask Susan – Should Rollbase stay in the slide? Was there a concern/question at SE training? OpenEdge RDBMS – Advanced Enterprise Edition OpenEdge DataServers
7
What Does Kendo UI Builder Provide?
JSDO View / Page Designer UI based on latest technology UI generated with Kendo UI and Angular.js 1.5 As technology evolves, your generated UI will be updated too Custom UI logic Add your custom UI logic using simple JavaScript Template Build UI Meta-data Progress
8
Kendo UI Builder by Progress
Kendo UI Controls Kendo UI Designer JSDO Angular, Node.js, Bootstrap PASOE PDSOE Progress
9
Agenda KUIB ”basic” Grid, Form DropDownList JSDO – invoke Themes (CSS) Deployment
10
ABL Backend!!
11
REST services with CRUD operations
12
Grid
13
Grid Sorting, paging, grouping, filtering etc..
14
Grid and form for editing
15
Grid – Grid relationship
16
Grid – Grid relationship
<!DOCTYPE html> <html> <head> <title>JSDO / Kendo UI Grid Example</title> <link rel="stylesheet" href=" <link rel="stylesheet" href=" <script src=" <script src=" <!-- <script src=" --> <script src=" <style> html { font-size: 12px; font-family: Arial, Helvetica, sans-serif; } </style> <link rel="stylesheet" href=" <link rel="stylesheet" href=" <script src=" <script src=" </head> <body> <div id="example"> <div id="grid"></div> </div> <script> $(function() { function createGrid() { $('#grid').kendoChart({ // define transports as the class functions dataSource: { type: "jsdo", transport: { jsdo: "Item" }, error: function(e) { title: { text: "Sports2000 Product info" legend: { position: "top" series: [ { type: "line", field: "Price", name: "Price EUR", { type: "area", field: "ReOrder", name: "Re Orders", field: "Weight", name: "Weight KG", color: "#4e4141", }], categoryAxis: { field: "ItemName", tooltip: { visible: true }); console.log("DEBUG: JSDO instance: " + $("#grid").data("kendoGrid").dataSource.transport.jsdo); try { var serviceURI = " jsdoSettings = { serviceURI: serviceURI, catalogURIs: serviceURI + "/static/OE_ServicesService.json" jsdosession, promise; // create a new session object jsdosession = new progress.data.JSDOSession(jsdoSettings); promise = jsdosession.login("", ""); promise.done(function(jsdosession, result, info){ jsdosession.addCatalog(jsdoSettings.catalogURIs) .done(function(jsdosession, result, details){ createGrid(); }) .fail(function(jsdosession, result, details){ alert("Error while executing addCatalog()."); promise.fail(function(jsdosession, result, info){ alert("Error while executing login()."); catch (e) { alert("Error instantiating objects: " + e); </script> </body> </html> Progress
17
Drop Down List with OpenEdge
18
You buy something and you walk out of the shop
English lesson!!! Long time no see = Long time no sea = Long time no ocean!! You buy something and you walk out of the shop ”Bye, bye” = Buy, buy!!! I just bought these, why you are asking me to buy more….
19
Drop down list with Kendo – data from OpenEdge table
20
How JSDO helps me?
21
transport.jsdo.invoke("ClickMe")
One single JSDO command will run a procedure and execute your ABL code!! transport.jsdo.invoke("ClickMe") METHOD PUBLIC VOID ClickMe(); … END METHOD.
22
Themebuilder and styling
23
Kendo ThemeBuilder <link rel="stylesheet" href=" Progress
24
Deployment
25
KUIB Deployment 1. Right click on Web UI project from PDS OE and then choose Export > Web UI Application 2. Provide the Destination path along with WAR file name to export the project 3. Keep Export debug build radio button ON 4. Click Finish 5. Now go to Proenv and then publish the WAR file using tcman.bat command utility (proenv><PAS-Instance-Name>/bin/tcman.bat deploy <WAR-File-Name>)
26
Kendo UI Builder - samples
27
Progress
30
Progress Application Server for OpenEdge with WebSpeed
Jarmo Nieminen
31
Agenda Architecture Configuration Administration Migration Deployment
32
Architecture
33
4 © 2015 Progress Software Corporation. All rights reserved.
34
Architecture: Basics It is a web server Tomcat It is not a repackaged AppServer We migrated the functionality – not the implementation Its designed for the Cloud •Scales •Security •New monitoring and administration tools 64-bit platforms only
35
Architecture: Classic vs Progress Application Server (PASOE)
Classic AppServer Components Browser Client (http) Client AIA WSA REST/Mobile AdminServer PAS for OpenEdge 11.6 NameServer HTTP Session Manager MSAgent 50 ABL Sessions APSV (AIA) SOAP (WSA) REST/Mobile APSV (AIA) SOAP (WSA) REST/Mobile State-Free Rest/Mobile State-Aware Stateless Session Manager AppServer WebSpeed Agent (1 ABL Session) 50 Agents AppServer WebSpeed Agent (1 ABL Session) 50 Agents AppServer WebSpeed Agent (1 ABL Session) 50 Agents CLASSIC Must have an AdminServer - AdminServer starts NameServer and AppServer - then the AdminServer is just used to monitor and manage Client connects to NameServer (optional) and is then redirected to the AppServer If the Client needs to connect through the internet (HTTP/HTTPS) - you must install and configure separate and distinct adapters AIA/WSA/REST/Mobile PAS for OE Start the PAS for OE instance Client connects using HTTP/HTTPS always + AdminServer is not necessary (except for running OEMgmt on the same machine or publishing) + There is NO NameServer (load balancing and fault tolerance are handled another way) MSAgent 150 ABL Sessions
36
Architecture: Session Models
37
Architecture: Multi-Session Agent
Multiple client requests at the same time Supports both Session-Managed and Session-Free simultaneously request Manages database shared memory connections Uses far fewer system resources Handles multiple times more transactions than the single session AppServer agents
38
Architecture: Products
PAS for OpenEdge Development • Debug and management tools installed We create a sample instance at install time (OEPAS1) Limited to 5 concurrent connections and 1 msagent Able to compile code Installed automatically with Progress Developer Studio (64-bit) PAS for OpenEdge Production • Designed for high security Unable to compile code Debug and management tools _NOT_ installed by default Unlimited concurrent connections and agents
39
Architecture: NameServer and AdminServer
There is _NO_ NameServer with PAS for OpenEdge • Load balancing will be handled _before_ the PAS for OpenEdge instance • Any HTTP/HTTPS load balancing product should work The AdminServer is not required to manage PAS for OE unless: • you want to PUBLISH from Developer’s Studio (PDSOE) manage PAS for OpenEdge using OpenEdge Explorer monitor PAS for OpenEdge using OpenEdge Management
40
Configuration
41
Create a new PAS for OpenEdge instance
Configuration Create a new PAS for OpenEdge instance • In the Classic AppServer you created a new AppServer by adding a definition in the ubroker.properties file With PAS for OpenEdge you create an working instance of the “read-only” instance in $DLC/servers/pasoe in a new location • $DLC/servers/pasoe/bin/tcman.sh create –p 8080 –P 8443 –s 8901 /psc/115/wrk/oepas1 –p port_num (TCP port that listens for HTTP messages. The default is 8080) –P port_num (TCP port that listens for HTTPS messages. The default is 8443.) –s port_num - TCP port to use to stop an instance Start the new PAS for OpenEdge instance: <pas_instance>/bin/tcman.sh start
42
Configuration: PAS for OpenEdge at Instance Create and Run-time
PAS for OE Instance *.sh conf logs temp work webapps openedge /psc/116/wrk/oepas1 create ( CATALINA_BASE ) $DLC/servers/pasoe PAS for OE Process lib bin *.sh conf logs temp work webapps common/lib openedge run OS Process PAS for OE (template) lib bin *.sh conf webapps common/lib openedge extras ( ROOT [ *.war ] ) Full copy Copy & tailor ( CATALINA_HOME )
43
Configuration: Files openedge.properties appserver.properties
© 2015 Progress Software Corporation. All rights reserved. Configuration: Files openedge.properties • In <pas_instance>/conf directory Use oeprop.sh/bat to make changes appserver.properties • In <pas_instance>/conf directory Use tcman.sh features to modify values in this file server.xml • In <pas_instance>/conf directory JMXLifeCycle, HTTP, HTTPS, AJP13, Cluster, more… Log files • In <pas_instance>/logs directory OpenEdge and Tomcat files
44
PASOE for Administration
45
Administration: tcman.sh/.bat
© 2015 Progress Software Corporation. All rights reserved. Administration: tcman.sh/.bat TCMAN is your all-in-one administration tool tcman extends all Tomcat administration and enables PAS for OE administration For help with TCMAN: tcman.sh/.bat help tcman.sh/.bat help action Server actions • create start clean feature env plist • delete stop clean -A ON or OFF env and running process IDs status Manager actions • deploy enable • disable web apps
46
Administration: More Command Line Tools…
47
Administration: OpenEdge Explorer and Management
OpenEdge Explorer • For full management AdminServer must be local OpenEdge Management • For full management AdminServer Can monitor and alert But trending is not available yet must be local
48
Administration: Log Files
Log files are located in the <pas_instance>/logs directory Problems with the web server: • catalina.out – log for tomcat instance startup and shutdown catalina.<date>.log – same as catalina.out and standard error Problems with an application • localhost.<date>.log – application logging localhost_access_log.<date>.txt – HTTP response messages (200,401,404) Problems with the PAS for OpenEdge instance • <application_name>.<date>.log – session manager messages and errors <application_name>.agent.log – multi-session agent messages and errors
49
Administration: New Monitoring Access!
Classic AppServer tools asbman –query OpenEdge Explorer or Management PAS for OpenEdge Management REST API The “oemanager” application must be installed for access to the REST API JMX Remote access Using Jconsole Locally by PID Remotely running “tcman.sh/.bat feature JMXLifecycle=on” Nagios 3rd party tool recommended by Tomcat for monitoring Uses the tools above to monitor, alert and graph
50
PASOE for Migration
51
Migration: Connect Method
REST/Mobile clients: URL still uses ../rest/.. SOAP clients: ../soap/.. instead of ../wsa/.. in URL OpenEdge clients URL connection format only -URL If appname=ROOT, you may use ROOT or skip the appname -URL or -URL Doc reference: Connecting to AppServers Using a URL NOTE: Since all of the old web servlets are now encapsulated in one PASOE we use these “transports” to identify the communication: rest, soap and apsv
52
Migration: Configuring AppServer Event
Procedures Changes to openedge.properties • New agent Startup and Shutdown values srvr values have been renamed to session Some ABL code may need changes • CONNECT – as in previous slide sessionStartupProc & sessionShutdownProc – Binding a session (mimic State-Aware) – QUIT to clean up (mimic State-Reset) Doc reference: Pacific Application Server for OpenEdge: Application Guide Migrating Applications from the OpenEdge AppServer : ABL application AppServer operating modes Migration and Development code migration : Migrating
53
Migration - PASOE Upgrades
CATALINA_BASE Inst1 PAS OE (version 11.6) PASOE (version 11.5) Inst2 Inst3 Inst4 $DLC/servers/pasoe/bin/ tcman[.sh|.bat] register
54
PAS for Deployment
55
Deployment: Applications
Design your Application in Developer’s Studio (PDSOE) • Test your application from PDSOE to PASOE Package it for deployment to PASOE Copy and change tailoring script to tailor your deployment package • Use $DLC/servers/pasoe/bin/oeabl_tailor.sh(.ps1) and Add, modify openedge.properties as need Add any tailoring you need oeabl_tlr.sh(.bat) as templates Install your Production PASOE • Copy tailoring scripts to $DLC/servers/pasoe/bin Copy war file to production location Deploy your application with <pas-instance>/bin/tcman.sh(.bat) deploy <war-file>
56
PASOE with WebSpeed
57
All the methods (verbs)
WebSpeed 11.6 All the methods (verbs) GET HEAD PUT PATCH POST OPTIONS DELETE TRACE
58
All the methods (verbs) All the message
WebSpeed 11.6 All the methods (verbs) All the message GET HEAD PUT PATCH POST OPTIONS DELETE TRACE POST /rest/EmployeeSvc/Employee HTTP/1.1 Authorization: Basic dG9tY2F0OnRvbWNhdA== Host: oelxdev06:8881 User-Agent: OpenEdge-HttpClient/0.3.0 Content-Length: 18 {"request": "data"}
59
All the methods (verbs) All the message All the control
WebSpeed 11.6 All the methods (verbs) All the message All the control GET HEAD PUT PATCH POST OPTIONS DELETE TRACE oHeader = poRequest:GetHeader('Content-Type'). oHeader:ParamDelimiter = ';':u. oHeader:ExtractParameters(). /* URL is /web/img/Employee/{EmpNum} */ assign iEmpNum = integer(poRequest:GetPathParameter('EmpNum':u)) oEntityWriter = EntityWriterBuilder:Build(poRequest) :Option('multipartBoundary':u, oHeader:GetParameterValue('boundary':u)) :Writer. oEntityWriter:Open(). oEntityWriter:Write(poRequest:Entity). oEntityWriter:Close(). assign oEntity = cast(oEntityWriter:Entity, MultipartEntity) oPart = oEntity:GetPart(1) oHeader = oPart:Headers:Get('Content-Disposition':u) /* Content-Disposition: form-data; name="myphoto.png"; filename="emp_21.png" */ cImageFileName = oHeader:GetParameterValue('filename':u). moBE:WriteEmployeePic(iEmpNum, cImageFileName, cast(oPart:Body, ByteBucket):GetBytes()). POST /rest/EmployeeSvc/Employee HTTP/1.1 Authorization: Basic dG9tY2F0OnRvbWNhdA== Host: oelxdev06:8881 User-Agent: OpenEdge-HttpClient/0.3.0 Content-Length: 18 {"request": "data"} define variable webRequest as IWebRequest no-undo. define variable httpStatus as integer no-undo. assign webRequest = new WebRequest() httpStatus = integer(StatusCodeEnum:None). case MethodEnum:GetEnum(webRequest:Method): when MethodEnum:DELETE then httpStatus = HandleDelete(webRequest). when MethodEnum:GET then httpStatus = HandleGet(webRequest). when MethodEnum:HEAD then httpStatus = HandleHead(webRequest). when MethodEnum:POST then httpStatus = HandlePost(webRequest). when MethodEnum:PUT then httpStatus = HandlePut(webRequest). otherwise httpStatus = HandleNotImplemented(webRequest). end case. Assert:NotNull(httpStatus, 'Status return code'). /* good */ return httpStatus. catch oError as Progress.Lang.Error: assign httpStatus = HandleException(oError, webRequest) no-error. if httpStatus eq ? then assign httpStatus = 0. end catch.
60
Your existing WebSpeed just works!
But Wait! There's More! Your existing WebSpeed just works! All the methods (verbs) All the message All the control GET HEAD PUT PATCH POST OPTIONS DELETE TRACE POST /rest/EmployeeSvc/Employee HTTP/1.1 Authorization: Basic dG9tY2F0OnRvbWNhdA== Host: oelxdev06:8881 User-Agent: OpenEdge-HttpClient/0.3.0 Content-Length: 18 {"request": "data"} define variable webRequest as IWebRequest no-undo. define variable httpStatus as integer no-undo. assign webRequest = new WebRequest() httpStatus = integer(StatusCodeEnum:None). case MethodEnum:GetEnum(webRequest:Method): when MethodEnum:DELETE then httpStatus = HandleDelete(webRequest). when MethodEnum:GET then httpStatus = HandleGet(webRequest). when MethodEnum:HEAD then httpStatus = HandleHead(webRequest). when MethodEnum:POST then httpStatus = HandlePost(webRequest). when MethodEnum:PUT then httpStatus = HandlePut(webRequest). otherwise httpStatus = HandleNotImplemented(webRequest). end case. Assert:NotNull(httpStatus, 'Status return code'). /* good */ return httpStatus. catch oError as Progress.Lang.Error: assign httpStatus = HandleException(oError, webRequest) no-error. if httpStatus eq ? then assign httpStatus = 0. end catch.
61
Request flow … incoming
Instance receives the request POST /CorpHR/web/Employees/jniemine HTTP/1.1 ABL application config maps the URI to an ABL handler handler1=Sports.Web.EmployeeHandler: /Employees/{EmpName} Handler calls a HTTP method-appropriate method method override protected integer HandlePost( poRequest as IWebRequest) HandlePost() reads the request and calls appropriate business logic oHeader = poRequest:GetHeader('Content-Type'). moBE:WriteEmployeePic(iEmpNum, cImageFileName, oPic). moBE:GetEmployeeInfo(iEmpNum, output oEmployeeJsonData).
62
Request flow … outgoing
HandlePost() creates a response object assign oResp = new OpenEdge.Web.WebResponse() oResp:Entity = oEmployeeJsonData oResp:ContentType = 'application/json':u. HandlePost() writes the response data to the output stream oWriter = new WebResponseWriter(oResp). oWriter:Open(). cast(oResp:Entity, JsonObject):Write(mEntity). oResp:ContentLength = get-size(mEntity). oWriter:Write(mEntity). return integer(StatusCodeEnum:None). // 0 - zero Alternative approach for errors/status codes return integer(StatusCodeEnum:InternalServerError). // 500
63
Coding model Web handlers: request routing & parameter mapping
OOABL implementation of Progress.Web.IWebRequest for advanced use only OpenEdge.Web.WebHandler use this for new code HandleGet(), HandlePost(), HandlePut(), HandleDelete() … HandleException() OpenEdge.Web.CompatibilityHandler what 'classic' WebSpeed uses WebRequest & WebResponse objects URI, method or Status Entity Headers, Cookies WebResponseWriter {&OUT} still works OpenEdge.Web & OpenEdge.Net packages in $DLC/tty/netlib/OpenEdge.Net.pl API doc at
64
Migration: architecture
Classic One call from www -> cgi -> web-disp.p Process, session, request all same thing Wait-for web-notify PASOE/WEB Agent and Session and request totally separate Sessions/processes persist beyond request Classic request/response SESSION:REMOTE, ~CLIENT-TYPE, ~SERVER-OPERATING-MODE checks SESSION:CURRENT-REQUEST-INFO:AdapterType
65
Migration: Session state
Classic Can only be stateless PASOE Has to be session-free Means requests aren't guaranteed to go to the same session WebSpeed global variables may need (re)setting in different places Beware of cleanup code being excessively enthusiastic Session-free HTTP for NOW (chaing in 11.7 I think)
66
Spring Security OpenEdge supplements the Java container’s security with the industry-recognized Spring security framework Spring Security is a customizable authentication and access control framework It is one of the industry standards for securing Spring-based applications
67
Web Application Authentication Models
Anonymous : No user authentication or login session HTTP Basic Authentication — Client sends base64 encoded user name/password to web application in each http request HTTP header: Authorization HTTP Form Authentication — Client logs in and out the web application once per session Login: The client obtains user credentials and POSTs them to the web application URI: /static/auth/j_spring_security_check Body: j_username=xxxx&j_password=yyyy&submit=Submit+Query Cookie: JSESSIONID Logout: The client uses a GET request to log out URI: /static/auth/j_spring_security_logout
68
ATM test
69
ATM Test Simulates ATM Banking Transactions Highly update intensive
Machine Specifications Redhat Linux Server Bit 8 CPU’s 6 GB Ram Classic AppServer 1 Agent per Client (75 Clients = 75 Agent Processes) PASOE 1 Agent Period.
70
ATM Test
71
PASOE Workshop
73
Service Interface Approaches
WebHandler Associate an OOABL WebHandler class with a URI pattern Uses WEB transport Very flexible Do whatever you want in code/ABL URI is all yours too b REST (Mapped RPC) c Data Object (REST) d Data Object (WebHandler) ## Handout 0 Data Object (REST) As of ; formerly Mobile Services Annotate certain methods (w/ particular signatures) Very prescriptive Programming model URI paths Uses REST transport Creates Data Service Catalog as public API REST (Mapped RPC) As of ; formerly REST Services Use GUI tool to map HTTP elements to program input/outputs Flexible in URI paths WebSpeed WebHandler As of Associate an OOABL WebHandler class with a URI pattern Uses WEB transport Very flexible do whatever you want in code/ABL URI is all yours too Data Object (WebHandler) As of Quite prescriptive More flexibility in mapping Progress
74
Service Interface Approaches
WebHandler Formerly REST Services Use GUI tool to map HTTP elements to program input/outputs Uses REST transport Flexible in URI paths b REST (Mapped RPC) c Data Object (REST) d Data Object (WebHandler) ## Handout 0 Data Object (REST) As of ; formerly Mobile Services Annotate certain methods (w/ particular signatures) Very prescriptive Programming model URI paths Uses REST transport Creates Data Service Catalog as public API REST (Mapped RPC) As of ; formerly REST Services Use GUI tool to map HTTP elements to program input/outputs Flexible in URI paths WebSpeed WebHandler As of Associate an OOABL WebHandler class with a URI pattern Uses WEB transport Very flexible do whatever you want in code/ABL URI is all yours too Data Object (WebHandler) As of Quite prescriptive More flexibility in mapping Progress
75
Service Interface Approaches
WebHandler Formerly Mobile Services Annotate certain methods (w/ particular signatures) Very prescriptive Programming model URI paths Uses REST transport Creates Data Service Catalog as public API b REST (Mapped RPC) c Data Object (REST) d Data Object (WebHandler) ## Handout 0 Data Object (REST) As of ; formerly Mobile Services Annotate certain methods (w/ particular signatures) Very prescriptive Programming model URI paths Uses REST transport Creates Data Service Catalog as public API REST (Mapped RPC) As of ; formerly REST Services Use GUI tool to map HTTP elements to program input/outputs Flexible in URI paths WebSpeed WebHandler As of Associate an OOABL WebHandler class with a URI pattern Uses WEB transport Very flexible do whatever you want in code/ABL URI is all yours too Data Object (WebHandler) As of Quite prescriptive More flexibility in mapping Progress
76
Service Interface Approaches
WebHandler As of Annotate certain methods (w/ particular signatures) Quite prescriptive More flexibility in mapping Uses WEB transport Creates Data Service Catalog as public API b REST (Mapped RPC) c Data Object (REST) d Data Object (WebHandler) ## Handout 0 Data Object (REST) As of ; formerly Mobile Services Annotate certain methods (w/ particular signatures) Very prescriptive Programming model URI paths Uses REST transport Creates Data Service Catalog as public API REST (Mapped RPC) As of ; formerly REST Services Use GUI tool to map HTTP elements to program input/outputs Flexible in URI paths WebSpeed WebHandler As of Associate an OOABL WebHandler class with a URI pattern Uses WEB transport Very flexible do whatever you want in code/ABL URI is all yours too Data Object (WebHandler) As of Quite prescriptive More flexibility in mapping Progress
77
Exposing Business Logic via Service Interface
WebHandler d Data Object (WebHandler) Flexibility / Control b REST (Mapped RPC) c Data Object (REST) Productivity (by fewer lines of code you write)
78
Server / Deployment Architecture: Classic vs PASOE
Classic + REST Adapter Can run in DMZ No security model for ABL clients unless AIA used No web transport Broader OE version support PASOE AVM bound to Tomcat oeabl.war (need separate server for DMZ) Web transport for ABL-based routing, mapping Single security context across all transports (incl. APSV/ABL clients) Primary OE development focus Both Serve ABL data via rest transport / adapter
79
Transports: REST vs WEB
c d REST Limited control over messages Java-based: better performance, security Simple transform-and-pass-through to AVM Harder to source-control services Changes to service require redeployed webapps Hard to script / create customer tooling WEB Message-based routing (content-type, headers, message body) Data validation in service interface (not domain/business logic) ABL-based: devs know and like it ABL-based: slower, security concerns More manual work Simpler JSON configuration Both Domain / business logic written in ABL Transports are in a OE-specific webapp
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.