Documentation Overview

The following diagrams and notes are my understanding of part of the ServiceMix architecture based on a study of the source code [See Also: NMR Flows ]

– PS

ServiceMix code is evolving faster than I can keep up with it so some of the information in this document may be already be out-of-date. Diagram comments indicate what version of the code was studied.

Contents

NMR Flow types

The flow type determines the mechanism by which the Normalized Message Router (NMR) Broker sends messages from one BC/SE to another.

Flow implementation classes

The 'cluster' flow (present in ServiceMix version 1.x) is now just a synonym for 'jms' flow type

goto top

Broker send sequence diagram

goto top

STFlow

STFlow = "Straight Through" Flow. This is the simplest mechanism.

There is no staging or buffering.

sequence diagram

goto top

SedaFlow

SEDA = "Staged Event Driven Architecture" Flow.

SEDA decomposes a complex, event-driven application into a set of stages connected by queues.

SedaFlow / SedaQueue classes

goto top

sequence diagram

goto top

JMSFlow

Uses JMS for message routing among a network of remote containers.

"remote" just means separate. In fact, it makes no difference if the JMSFlow containers are on the same or separate machines.

JMSFlow classes and JMS Destinations

This JMSFlow implementation relies on an ActiveMQ JMS 1.1 provider because it uses some non standard JMS features such as the ConsumerAdvisor and dynamic Topic/Queue creation, as well as some JMS 1.1 features.

goto top

Notification of remote component state changes

goto top

JMSFlow send ME sequence diagram

goto top

JCAFlow

The JCAFlow uses a JCA1.5 inbound resource adapters for message routing among a network of remote containers.

The resource adapters encapsulate JMS functionality.

The logic of JCAFlow and JMSFlow seems basically the same.

Like JMSFlow, the JCA resource adapters are hardwired to use ActiveMQ (JMS).

The main difference between the JCAFlow and JMSFlow is that in the jca flow, message may be delivered concurrently within an XA transaction.

goto top