My favorites | Sign in
Project Home Downloads Wiki Issues
Project Information
Members
Links

IMPORTANT: This project is EOL. Please look at: Lanseti Integration Server.

What

GIntegrator is a lightweight and simple enterprise application integration (EAI) software. With GIntegrator, users can build a SOA-based environment easily. GIntegrator runs atop a JVM and uses a very easy language to describe message routing rules that leverages the enterprise integration patterns principles.

Why

SOA is a complex architecture. It embraces a lot of technologies such as XML, Schema, BPEL, WSDL, Soap, Dependency Injection, OSGi and so on. GIntegrator encapsulates all these technologies in a transparent fashion and gives to the users only an interface to describe the message routing rules. The users don't need to known about XML, Schema, Beans and others SOA technologies.

Who

Newbie Administrators and End-users.

Features

Examples

  1. Basic: printing table users from MySQL database to console:
  2. // basic.route
    db = Class.forName('org.gintegrator.adapter.Database').newInstance(
       url:'jdbc:mysql://localhost:3306/integrator',
       username:'root',
       password:'', 
       query:'select * from users'  
    )
    console = Class.forName('org.gintegrator.adapter.Console').newInstance(
       outputHeader:'Output table users from database integrator:'
    )
    
    route {
        from db
        to console
    }
  3. Regex filtering: save a file only if content of text equals to 'integrator':
  4. // regex.route
    console = Class.forName('org.gintegrator.adapter.Console').newInstance(
       prompt:'Enter text "integrator" to save in a file:'                         
    )
    file = Class.forName('org.gintegrator.adapter.File').newInstance(
       directory:'/tmp',
       pattern:'file.txt.$$'                       
    )
    
    route { 
        from console
        filter {
            regex 'integrator'
            to file
        }
    }
  5. XPath filtering: prints XML content only if the author of the first book is 'Giada De Laurentiis':
  6. // xpath.route
    file = Class.forName('org.gintegrator.adapter.File').newInstance(
       pattern:'bookstore.xml'
    )
    console = Class.forName('org.gintegrator.adapter.Console').newInstance(
       outputHeader:'Output from xpath filter'                       
    )
    
    route { 
        from file
        filter {
            xpath "/bookstore/book[1]/author/text()='Giada De Laurentiis'"
            to console
        }
    }
    <!-- bookstore.xml -->
    <?xml version="1.0" encoding="ISO-8859-1"?>
    
    <bookstore>
    
    <book category="COOKING">
      <title lang="en">Everyday Italian</title>
      <author>Giada De Laurentiis</author>
      <year>2005</year>
      <price>30.00</price>
    </book>
    
    <book category="CHILDREN">
      <title lang="en">Harry Potter</title>
      <author>J K. Rowling</author>
      <year>2005</year>
      <price>29.99</price>
    </book>
    
    </bookstore>
  7. Component: use a component to do the business logic
  8. // component.route
    console = Class.forName('org.gintegrator.adapter.Console').newInstance(
            prompt:"Type 'Hello' to the component:",        
            outputHeader:'Output from MyComponent'
    )
    
    route {
        from console
        component 'MyComponent'
        to console
    }
    // MyComponent.groovy
    import org.gintegrator.core.Endpoint
    import org.gintegrator.core.Message
    import org.gintegrator.core.Component
    
    class MyComponent extends Component {
        Message onCall(Message message) {
            message.body += ' World!'
            return message
        }
    }
  9. CBR: Content Based Router
  10. // xpathcbr.route
    file = Class.forName('org.gintegrator.adapter.File').newInstance(
       pattern:'bookstore.xml'
    )
    console1 = Class.forName('org.gintegrator.adapter.Console').newInstance(
       outputHeader:'Output for author: Giada De Laurentiis'
    )
    console2 = Class.forName('org.gintegrator.adapter.Console').newInstance(
       outputHeader:'Output for author: Other author'
    )
    
    route {
        from file
        select '/bookstore/book[1]/author/text()', {
            equal 'Giada De Laurentiis', console1
            equal 'Other author', console2
        }
    }
    <!-- bookstore.xml -->
    <?xml version="1.0" encoding="ISO-8859-1"?>
    
    <bookstore>
    
    <book category="COOKING">
      <title lang="en">Everyday Italian</title>
      <author>Giada De Laurentiis</author>
      <year>2005</year>
      <price>30.00</price>
    </book>
    ...
Powered by Google Project Hosting