Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "EDT:Resource Binding Services"

(link back)
m
Line 1: Line 1:
<span style="font-size:smaller;">&lt;&nbsp;[[EDT:Resource_Binding_Introduction|Resource Binding Introduction]]</span>  
+
<span style="font-size:smaller;">&lt;&nbsp;[[EDT:Resource_Binding_Introduction|Resource Binding Introduction]]</span> <br />
 
If the purpose of a resource binding is service access, the definition is called a ''service binding''. The main detail is in one of three categories:  
 
If the purpose of a resource binding is service access, the definition is called a ''service binding''. The main detail is in one of three categories:  
  

Revision as of 11:14, 28 February 2012

Resource Binding Introduction
If the purpose of a resource binding is service access, the definition is called a service binding. The main detail is in one of three categories:

  • If the service is deployed on an application server, you can specify a Universal Resource Identifier (URI). The URI begins with the http: or https: prefix (not shown) and continues with a string like this one:
    //myserver:8080/myproject/restservices/myService
Although you can run the deployed service during an EGL debugging session, the EGL debugger does not step into the service.
  • If the service is available in your workspace and was written in EGL, you can use a workspace URI, which is an identifier that points to a workspace location. Here is an example:
    workspace://mySourceProject/servicepackage.myService
In this case, the URI is useful only at development time, and an internal Test Server enables you to debug the code. You must arrange for the deployment of the service, as noted in a later example.
  • If a Rich UI application includes a Service type that will be deployed as a dedicated service, an Internal Test Server enables you to debug the code. In this case, the EGL deployment descriptor is never used. The only binding detail is the DedicatedService annotation, which is part of the service-access variable declaration. 

    If a Service part named MyServiceType is a dedicated service, the declaration might be as follows:
    myService MyServiceType {@DedicatedService};


Defining a service binding in the EGL deployment descriptor

At this writing, you can bind to a REST or EGL REST-RPC service. The distinctions among the service types are explained here: http://www.eclipse.org/edt/papers/topics/egl_soa_overview.html

To define a service binding in the EGL deployment descriptor, do as follows:

  • In an EGL project, expand the EGLSource folder and double-click the deployment descriptor, which has the file extension .egldd.  
  • Click the Resource Bindings tab. The Resource Bindings Configuraton page is displayed.
  • Click Add and, at the Add a Resource Binding page, select REST Service Binding. The Add a REST Service Binding page is displayed, as shown here:

Bind Img8.JPG


  • In the topmost field, specify the binding name. You can reference that name in your code, whether in a Resource annotation or in a statement that invokes the SysLib.getResource function.
  • In the Base URI field, specify a URI, which might be a workspace URI:
    • If you are accessing an EGL REST-RPC service, specify the complete URI.
    • If you are accessing a third-party REST service, you might decide to include only high-level details and to supplement them with values that are stored in an Interface type. For specifics, see the following help topic: "Creating an Interface part to access a REST service."
  • The sessionCookieID field is not in use.

If you are defining a service binding for a Service type in your workspace, you must ensure that the service will be deployed: 

  • Switch to the Service Deployment tab. If the service is not already listed, click Add. The Add Web Services page is displayed.

Bind Img6.JPG 

  • Highlight the Service type of interest, click Add, and click Finish. The Web Service Deployment tab is re-displayed with the new detail.

Bind Img7.JPG

  • To save the deployment descriptor, press Ctrl-S.

Retrieving one or another service binding in your code

You can rebind a service-access variable, as shown here:

myService MyInterfaceType?; 

    /* that declaration could have included 
       a Resource annotation, as shown here:

        myService MyInterfaceType?  
           { @Resource {uri="binding:MyGermanBinding"} };        // .8 syntaz

if ( ... )

   myService = SysLib.getResource("binding:MyEnglishBinding");   // .8 syntax   

else

   myService = SysLib.getResource("binding:MyFrenchBinding");    // .8 syntax

end

    /* here, you can access the service operations of 
       one or the other service, assuming that the two 
       have similar interfaces.                             */    

Retrieving a service binding and changing it in your code

Here is an example of preparing a variable and then using it to access a third-party REST service:

myService MyServiceType?;                                          
http HttpRest{@Resource{uri="binding:myService"}};                  /.8 syntax
http.request.encoding = encoding.json;                                  
call myService.myFunction() using http                              /.8 syntax 
   returning to myCallBackFunction 
   onException myExceptionHandler;


The code acts as follows:

  1. Declares an access variable. 

    The declaration references an Interface type that typically includes one or more uriTemplate annotation fields, each of which is a set of lower-level URI qualifiers that are resolved at run time. A resolved template might be this: /GetWeatherByZipCode?zipCode=27709 

  2. Accesses a new instance of an HTTPRest object.

    That object provides a higher-level URI such as http: //www.example.com/myproject/restservices/weather_service

    In this case, the object contains details that are retrieved from a service binding in the EGL deployment descriptor. If you do not specify a uri annotation field, the name of the service binding is assumed to be the name of the variable. In the example, the value of the annotation field defaults to "binding:myService".

    For details on the HttpRest object, see the help topic named "eglx.http package."

  3. Adds detail to the HTTPRest object; for example, to ensure that data is transferred to and from the service in JSON format.

  4. Invokes the ServiceLib.completeBind function so that the variable references the HTTPRest object.

Creating a service binding in your code

You can create a service binding in your code, in which case the EGL deployment descriptor is not involved. For example, you might substitute the second statement in the following code for the object declaration that was shown in the preceding section:

myService IMyService?; 
http HttpRest = new HttpRest{
   restType = eglx.rest.ServiceType.TrueRest, 
   uri = "www.example.com/myproject/restservices/weather_service"};
myBinding.request.encoding = Encoding.json;
call myService.myFunction() using http                             // .8 syntax   
   returning to myCallBackFunction
   onException myExceptionHandler;

For details on the HttpRest object, see the help topic named "eglx.http package."


Next:  SQL database bindings

Previous:  Resource binding introduction

Back to the top