Enterprise Integration Patterns in Metl: An Open Source Integration Tool

Chris Henson
Data Weekly by Jumpmind
3 min readFeb 5, 2018

--

Enterprise Integration Patterns are a series of common solutions to integration problems published in a popular book in the form of a pattern language. The book has become a common reference for communicating integration concepts across the industry.

This article will focus primarily on how Metl, a web-based integration platform, implements different Integration Styles and will delve into detail on how it uses common Messaging Patterns.

Metl can be used to graphically build and run real-time, batch-oriented or service-based integrations. The source code is open source and is hosted on Github. The ready-to-go, standalone web application can be downloaded from there as well. Documentation is maintained on the Github wiki and is released in the form of a users guide hosted at jumpmind.com.

Integration Styles — File Transfer

Metl stands for Messaging ETL. It has excellent support for ETL based operations. It’s Text File Reader and Text File Writer can source and target files across various resources such as the Local File System, SFTP, HTTP and JMS to name a few.

Metl also has XML and Binary File readers and writers. A File Poller can be used to monitor for files.

Integration Styles — Shared Database

Metl supports the shared database pattern of integration through the use of its RDBMS Readers and Writers. The RDBMS components support any database that has a JDBC driver. RDBMS components map data to and from Models. Model entities typically map directly to database tables.

Integration Styles — Remote Procedure Invocation

Metl has full support for REST services. REST web services, based on the Open API Standard, can be implemented by simply adding HTTP Requests and/or HTTP Responses to an integration.

Other integrations can be invoked via a management REST API. Metl users frequently leverage the REST API to integrate with an Enterprise Scheduler.

Integration Styles — Messaging

Metl is the Messaging ETL tool. Metl itself is a Messaging System that internally breaks units of work down into messages that components can work with. Metl also supports publishing and subscribing to JMS topics and queues.

Enterprise integration patterns that make up a messaging system include:

  • Message Channels — When building a Flow in Metl each component is linked to other components. These links are the channels to and from which components send and receive messages.
  • Messages — There are several types of Messages in Metl. Entity Messages are messages that contain formatted data that maps to a model. Text Messages are messages whose payload is character data. Binary Messages are messages whose payload is binary data.
  • Pipes and Filters — A flow in Metl implements the pipes and filters architecture. Each component in a flow is a filter and they are connected by links which are the pipes (or channels).
  • Message Router — A message router is a special type of component that can make decisions on if and where a message should be sent next. Metl’s Content Router is a good example of a message router. The content router can inspect a message’s payload via an expression and make a decision on to which component(s) it should be forwarded to.
  • Message Translator — The message translator is all about manipulating the data format. Metl does this via formatters, parsers and mappers.
  • Message Endpoint — A message endpoint is the connector to other systems. Endpoints in Metl are resources. Metl supports all the basic endpoints you would expect.

“Metl”ing with Patterns

Metl Design View

Metl is an integration tool that provides an integration runtime based on well known design patterns. It doesn’t stop here. Each of the aforementioned categories are further broken down into more and more specific EIPs. Feel free to download and try Metl and see if you can identify patterns that you are familiar with.

While Metl has been battle-tested in Fortune 500 enterprises, it still is a work in progress and could use your help. Questions and issues can be raised at the Metl Issue Tracker on Github.

We look forward to hearing from you!

--

--