Before you Begin
This 30-minute tutorial shows you how to plan and create the
Application Class for an Application Service.
Background
Use the Application Service Framework to create and test Oracle Standard REST Provider Services.
The tutorials in this series describe processes used create the Application Class for the Application Service, create the Application Service and test the Application Service. In this series, you will create a sample Application Service.
Creating a Provider Application Service involves the following steps:
- Plan Application Service.
- Create an Application Class which will provide the application logic.
- Create Application Service.
- Create or import a root resource.
- Add URI templates.
- Add base template parameters to URI Template.
- Add method to URI template.
- Add input and output parameters to method.
- Optionally assign headers for the method.
- Define result states for the method.
This is the first tutorial in the Create Application Service series. Read the tutorials in the order listed.
Determine the Resources for your Application Service
For this tutorial, you will create an Application Service for music. The initial design should include:
- URI Template(s)
- Method(s)
- Input Parameters
- Output Parameters
This tutorial will begin by creating the Application Class that defines the application logic for the Application Service. For this Application Service, the user can retrieve the number of players and playdate for a specific instrument. It will also include the ability to post a player and music code for an instrument.
The root resource for the Application Service will include a GET and PUT method.
URI Template | Index | Method | Input Parameters | Output Parameters |
band/{instrument} | 1 | GET | instrument (string) numPlayers (number) playdate (date) |
|
band/{instrument} | 1 | POST | player (string) musicCode (integer) |
results (string) |
Create Application Class
In Application Designer create a new Application Package and Application Class that implements the application logic:
- In Application Designer create a new Application Package. File, New, Application Package.
- Select File, Save. Enter Description and click OK. Enter Name: APPSRVEXAMPLE.
- Right click on the package and select Insert App Class. Class Name: band.
- Double click band to add the code.
The application class must extend the
PCBAPPLSVCDEFN:ApplicationServiceBase application class and then
implement the invokeService() method to define the application
logic.
import PTCBAPPLSVCDEFN:ApplicationServiceBase;
class band extends PTCBAPPLSVCDEFN:ApplicationServiceBase;
method invokeService();
end-class;
method invokeService
/+ Extends/implements PTCBAPPLSVCDEFN:ApplicationServiceBase.invokeService +/
Define the variables for the Application Service parameters:
Local string &Inst, &httpMethod, &player, &results, &headervalue;
Local integer &UriIndex, &code;
Local time &timein;
Local date &datein;
Use the %This.ServiceAPI property to read and write parameters and other Application Services metadata.
&httpMethod = %This.ServiceAPI.HttpMethod;
&UriIndex = %This.ServiceAPI.URIIndex;
Use the HttpMethod property and URIIndex property to return the HTTP method and URI index that was invoked for the transaction.
If &httpMethod = "GET" Then
If &UriIndex = 1 Then
Use the getTemplateParameter method to retrieve template value based on parameter defined on the application service.
&Inst = %This.ServiceAPI.getTemplateParameter("instrument");
Use setOutputParameters for single row output. The code is commented out here as the tutorial will use multi row output.
<* %This.ServiceAPI.setOutputParameter("numPlayers", 10);
%This.ServiceAPI.setOutputParameter("instrument",
&Inst);
%This.ServiceAPI.setOutputParameter("playdate", %Date);
%This.ServiceAPI.setOutputParameter("timeout",
&timein); *>
Use insertOutputRow for multi row output. For this tutorial the output is hardcoded for simplicity.
%This.ServiceAPI.insertOutputRow();
%This.ServiceAPI.OutputRows [1].setParameter("numPlayers", 10);
%This.ServiceAPI.OutputRows [1].setParameter("instrument", &Inst);
%This.ServiceAPI.OutputRows [1].setParameter("playdate", Date(20220202));
%This.ServiceAPI.insertOutputRow();
%This.ServiceAPI.OutputRows [2].setParameter("numPlayers", 6);
%This.ServiceAPI.OutputRows [2].setParameter("instrument", &Inst);
%This.ServiceAPI.OutputRows [2].setParameter("playdate", %Date);
Use the result state property to set the result state. Results States denote logical conclusion for the service execution.
%This.ServiceAPI.ResultState = "SUCCESS - PLAY MUSIC";
End-If;
End-If;
Next you will enter the code for the POST.
If &httpMethod = "POST" Then
If &UriIndex = 1 Then
Optionally you can add request and response headers. For this example, we will add both a request and response header to the POST.
Use getRequestHeaderValue to retrieve header value based on header defined on the application service. Use setResponseHeader to set the response header value based on header defined on the application service.
&headervalue = %This.ServiceAPI.getRequestHeaderValue("Accept-Language");
%This.ServiceAPI.setResponseHeader("Type","Woodwind");
Use the getTemplateParameter method to retrieve template value based on parameter defined on the application service.
&Inst = %This.ServiceAPI.getTemplateParameter("instrument");
Use the InputRows property to get values on the specified row.
&player = %This.ServiceAPI.InputRows[1].getParameter("player");
&Inst = %This.ServiceAPI.InputRows[1].getParameter("instrument");
&code = %This.ServiceAPI.InputRows[1].getParameter("musicCode");
&player = %This.ServiceAPI.InputRows[2].getParameter("player");
&Inst = %This.ServiceAPI.InputRows[2].getParameter("instrument");
&code = %This.ServiceAPI.InputRows[2].getParameter("musicCode");
Use the setOutputParameter to set output value based on parameter defined on the application service. (single row output)
%This.ServiceAPI.setOutputParameter("results", "Players added");
Use the result state property to set the result state.This is also the end of the if statement and end of the method.
%This.ServiceAPI.ResultState = "Success";
End-If;
End-If;
end-method;
This is an example of the code:
![Description of app_class_code.png follows](images/application_class_code.png)
Next Steps
Create Application Service.
Plan and Create Application Class
F54567-01
March 2022
Copyright © 2021,
Oracle and/or its affiliates.
Learn how to plan for and create an Application Class for an
Application Service.
This software and related documentation are provided under
a license agreement containing restrictions on use and
disclosure and are protected by intellectual property laws.
Except as expressly permitted in your license agreement or
allowed by law, you may not use, copy, reproduce, translate,
broadcast, modify, license, transmit, distribute, exhibit,
perform, publish, or display any part, in any form, or by
any means. Reverse engineering, disassembly, or
decompilation of this software, unless required by law for
interoperability, is prohibited.
If this is software or related documentation that is
delivered to the U.S. Government or anyone licensing it on
behalf of the U.S. Government, then the following notice is
applicable:
U.S. GOVERNMENT END USERS: Oracle programs (including any
operating system, integrated software, any programs
embedded, installed or activated on delivered hardware, and
modifications of such programs) and Oracle computer
documentation or other Oracle data delivered to or accessed
by U.S. Government end users are "commercial computer
software" or "commercial computer software documentation"
pursuant to the applicable Federal Acquisition Regulation
and agency-specific supplemental regulations. As such, the
use, reproduction, duplication, release, display,
disclosure, modification, preparation of derivative works,
and/or adaptation of i) Oracle programs (including any
operating system, integrated software, any programs
embedded, installed or activated on delivered hardware, and
modifications of such programs), ii) Oracle computer
documentation and/or iii) other Oracle data, is subject to
the rights and limitations specified in the license
contained in the applicable contract. The terms governing
the U.S. Government's use of Oracle cloud services are
defined by the applicable contract for such services. No
other rights are granted to the U.S. Government.
This software or hardware is developed for general use in a
variety of information management applications. It is not
developed or intended for use in any inherently dangerous
applications, including applications that may create a risk
of personal injury. If you use this software or hardware in
dangerous applications, then you shall be responsible to
take all appropriate fail-safe, backup, redundancy, and
other measures to ensure its safe use. Oracle Corporation
and its affiliates disclaim any liability for any damages
caused by use of this software or hardware in dangerous
applications.
Oracle and Java are registered trademarks of Oracle and/or
its affiliates. Other names may be trademarks of their
respective owners.
Intel and Intel Inside are trademarks or registered
trademarks of Intel Corporation. All SPARC trademarks are
used under license and are trademarks or registered
trademarks of SPARC International, Inc. AMD, Epyc, and the
AMD logo are trademarks or registered trademarks of Advanced
Micro Devices. UNIX is a registered trademark of The Open
Group.
This software or hardware and documentation may provide
access to or information about content, products, and
services from third parties. Oracle Corporation and its
affiliates are not responsible for and expressly disclaim
all warranties of any kind with respect to third-party
content, products, and services unless otherwise set forth
in an applicable agreement between you and Oracle. Oracle
Corporation and its affiliates will not be responsible for
any loss, costs, or damages incurred due to your access to
or use of third-party content, products, or services, except
as set forth in an applicable agreement between you and
Oracle.