www.jolie-lang.org
Open in
urlscan Pro
130.225.157.67
Public Scan
Submitted URL: http://jolie-lang.org/
Effective URL: https://www.jolie-lang.org/
Submission: On October 03 via manual from DK — Scanned from DE
Effective URL: https://www.jolie-lang.org/
Submission: On October 03 via manual from DK — Scanned from DE
Form analysis
0 forms found in the DOMText Content
* Home * Download * News * Blogs * Docs * Vision * About * FAQ * * * * * JOLIE THE SERVICE-ORIENTED PROGRAMMING LANGUAGE Download Docs Vision type HelloRequest { name:string } interface HelloInterface { requestResponse: hello( HelloRequest )( string ) } service HelloService { execution: concurrent inputPort HelloService { location: "socket://localhost:9000" protocol: http { format = "json" } interfaces: HelloInterface } main { hello( request )( response ) { response = "Hello " + request.name } } } Next THINKING IN SERVICES Jolie crystallises the programming concepts of service-oriented computing as linguistic constructs. The basic building blocks of software are not objects or functions, but rather services that can be relocated and replicated as needed. A composition of services is a service. Next TAILORED FOR MICROSERVICES AND APIS Jolie is a contract-first programming language, which puts API design at the forefront. It supports both synchronous and asynchronous communication. Data models are defined by types that support refinement (in red on the right), and DTO (Data Transfer Objects) transformations are transparently managed by the interpreter. type GetProfileRequestType { id:int } type GetProfileResponseType { name:string surname:string email:string( regex(".*@.*\\..*") ) accounts[0,*] { nickname:string service_url:string enabled:bool } ranking:int( ranges( [1,5] ) ) } type SendMessageRequestType { id:int message:string( length( [0,250] ) ) } interface ProfileInterface { requestResponse: // Synchronous RPC getProfile( GetProfileRequestType )( GetProfileResponseType ) oneWay: // Asynchronous sendMessage( SendMessageRequestType ) } Next BUILT FOR THE NETWORKED AGE Jolie code is always contained in services, which you can always move from being local to remote and vice versa, without altering the logic of your programs. A monolithical application can scale to being distributed by design: if you decide to distribute a part of it, just take it and execute it in another machine. PROGRAM YOUR MICROSERVICE SYSTEM DEPLOY IT IN A SINGLE MACHINE DEPLOY IT IN TWO DIFFERENT MACHINES DEPLOY IT IN FOUR DIFFERENT MACHINES Next PROTOCOL AGNOSTIC Jolie is protocol agnostic: your services can exchange data by using different protocols. Bridging two networks using different protocols is a matter of a few lines of code. If you need a protocol that Jolie does not support yet, there is an API for developing new ones in Java. type HelloRequest { name:string } interface HelloInterface { requestResponse: hello( HelloRequest )( string ) } service HelloService { execution { concurrent } inputPort HelloServiceHTTP { location: "socket://localost:9000" protocol: http { format = "json" } interfaces: HelloInterface } inputPort HelloServiceSOAP { location: "socket://localost:9001" protocol: soap { wsdl = "myWsdl.wsdl" wsdl.port = "MyServiceSOAPPort" } interfaces: HelloInterface } inputPort HelloServiceSODEP { location: "socket://localost:9002" protocol: sodep interfaces: HelloInterface } main { // This can now be reached through HTTP/JSON, SOAP, or SODEP (binary) hello( request )( response ) { response = "Hello " + request.name } } } Next STRUCTURED WORKFLOWS Jolie comes with native primitives for structuring workflows, for example in sequences (one after the other) or parallels (go at the same time). This makes the code follow naturally from the requirements, avoiding error-prone bookkeeping variables for checking what happened so far in a computation. For example, the following code says that the operations publish and edit become available at the same time (|), but only after (;) operation login is invoked: login( credentials )() { checkCredentials }; { publish( x ) | edit( y ) } DYNAMIC ERROR HANDLING FOR PARALLEL CODE Programming reliable parallel code is challenging because faults may cause side-effects in parallel activities. Jolie comes with a solid semantics for parallel fault handling. Programmers can update the behaviour of fault handlers at runtime, following the execution of activities thanks to the install primitive. include "console.iol" include "time.iol" main { scope( grandFather ) { install( this => println@Console( "recovering grandFather" )() ); scope( father ) { install( this => println@Console( "recovering father" )() ); scope ( son ) { install( this => println@Console( "recovering son" )() ); sleep@Time( 500 )(); println@Console( "Son's code block" )() } } } | throw( a_fault ) } Next EVERYTHING YOU BUILD CAN BE USED TO BUILD AGAIN Jolie offers many ways for building complex software from simple services. Even the deployment architecture of a system can be programmed with native primitives, generalising common practices. Whatever you build, is again a service that you can expose; so, it can be reused to build again! Here are some examples of composition: Orchestration: an orchestrator is a service that offers functionalities obtained by coordinating other services with a workflow. Aggregation: a generalisation of proxies and load balancers, which you can use to compose and expose the APIs of separate services Redirection: a generalisation of virtual servers, which hides the actual locations of services to clients by assigning logical names to services. Embedding: a generalisation of application servers, which runs other services as inner components. It enables fast local communications and can even run code written in different languages than Jolie, such as Java and Javascript (with more coming)! Next REVOLUTIONISE THE WAY YOU DEVELOP WEB APPLICATIONS Jolie allows for directly programming a web server that is just a service as everything else in Jolie. You don't need other extra frameworks for instantiating a web server. It is possible to directly aggregate other service APIs into a Jolie web server, thus web GUIs are completely independent from the microservice system they interact with. We natively support JSON, XML, AJAX, GWT, and other technologies. Next SOLID FOUNDATIONS Jolie comes with formal specifications of its semantics. It is used in Computer Science research and teaching at several universities around the world. Next JOIN US! Jolie is an open source project, with a growing community of contributors and users that you are welcome to join. Check out our project news, or have a look at our contributor blogs. STAKEHOLDERS AND SUPPORTERS Copyright (C) 2014-2020 The Jolie Team. This work is licensed under a Creative Commons Attribution 4.0 International License, except for the code samples, which are instead licensed under the GNU GPL License (v2). This website is made with Jolie and is powered by Leonardo.Please contact our webmaster for questions or comments concerning this website.