MessageForge's Goals

The framework was conceived and created during the development of an online trading system for a major bank on Wall Street. The project made heavy use of TIBCO/RV . The current version of MessageForge provides support for JMS and TIBCO/RV . The framework is used in production at multiple Wall Street banks and commercial products.

Both JMS and TIBCO/RV have a well crafted API that enables development teams to quickly get started. However, on large scale projects, it quickly becomes critical that message definitions are kept in sync. with the application code. In addition, there is a need to provide the following services to the development team:

  • Making message definitions transparent
  • Automatic generation of JAVA (C#) classes from XML definitions
  • Providing a type-safe messaging JAVA (C#) API
  • Providing run-time message validation
  • Providing services to marshal/unmarshal messages
  • Uniform message definitions across all tiers
  • High performance

Making message definitions transparent

MessageForge accomplishes this goal by providing a well-defined schema that is used to define messages using XML. These XML definitions can be browsed by all members of a development team eliminating the classic mismatch between a message and its documentation.

Automatic generation of JAVA classes from XML definitions

The XML message definitions are processed by a code-generator to automatically generate JAVA classes. Application developers use the JAVA classes to code. Any mismatch between the application code and the message is caught at compile time.

Providing a type-safe messaging JAVA API

The framework generates message classes from the XML definitions. Application developers use the JAVA classes to code. Any mismatch between the application code and the message is caught at compile time.

Providing run-time message validation

Fields within messages can have various constraints. For example, a field can be declared optional , a field can have min/max values, etc. These constrains are enforced by the framework at run time.

Providing services to marshal/unmarshal messages

A number of converter classes are provided with the framework. These converter classes marshal/unmarshal message instances to a variety of formats. Currently, the framework provides converters for the following:

The set of converter classes can be extended to provide marshal/unmarshal capability for for other protocols.

Uniform message definitions across all tiers

The framework requires Java 1.3 or higher. All the tiers of a distributed application can work with the same message definitions and type-safe classes.

High performance

Any framework, by definition, will introduce some processing overhead. This framework was tested extensively and much effort was devoted to ensuring that performance is not compromised. Since this framework was first used to build a mission-critical trading system, suffice to say that the framework does not impose undue burden on application performance.