Skip to content
Sławek Piotrowski edited this page Jul 13, 2015 · 14 revisions

Introduction

Ratel is a library that allows us to integrate system internal components in a simple way, which hopefully enables you to provide a scalable, testable distributed platform with less effort. The basic motivation behind the library is to minimize technological overhead so that the volume of a code that does not implement actual business logic is minimal. Ratel introduces a trivial abstraction of a service in a distributed environment:

In java world service is an interface. On client side you inject an interface, on provider side you implement an interface. Nothing more. Period.

Manifesto

Mission statement : Make intra-company SOA java applications development as simple as possible.

30 seconds example

Imagine a world in which building a distributed SOA application is as simple as that:

On provider side

Just add an annotation that marks your service subject to be discoverable on demand:

    
    @Service
    @Publish //<-- service provider 
    class FooServiceImpl implements FooService{ 
  
       public int bar(String name) throws MyException{
          return 2;
       }
    }

On client side

Just inject a service that you want to use to your code:

  class MyApp {
 
      @Discover //<-- service client
      FooService service;
      ...
 
      try {
        int result = service.bar("abc");
      } catch (MyException ex) {
         ...
  }

And this is all you need to have a working distributed SOA system with features such as:

Further reading