Embedding JavaScript Services

Last updated 6 months ago

Embedding a JavaScript Service enables to use both the JavaScript language and Java methods by importing their classes.

Let us rewrite the twice service example as a JavaScript embedded service.

importClass( java.lang.System );
importClass( java.lang.Integer );
function twice( request )
{
var number = request.getFirstChild("number").intValue();
System.out.println( "Received a 'twice' request for number: " + number );
return Integer.parseInt(number + number);
}

At Lines 1-2 we respectively import java.lang.System to use it for printing at console a message, and java.lang.Integer to send a proper response to the embedder. This is necessary because of JavaScript's single number type which, internally, represents any number as a 64-bit floating point number. At Line 6 the methods getFirstChild and intValue, belonging to Value class, are used to read the request's data. Finally at Line 8 we use the parseInt method of class Integer to return an Integer value to the invoker.

include "console.iol"
type TwiceRequest:void {
.number: int
}
interface TwiceInterface {
RequestResponse:
twice( TwiceRequest )( int )
}
outputPort TwiceService {
Interfaces: TwiceInterface
}
embedded {
JavaScript:
"TwiceService.js" in TwiceService
}
main
{
request.number = 5;
twice@TwiceService( request )( response );
println@Console( "Javascript 'twice' Service response: " + response )()
}

Like embedding Jolie Services, also JavaScript Services require the specification of the local file where the JavaScript Service is defined (i.e., TwiceService.js, Line 18).