Hi Neil,

I believe this is an excellent idea. I appreciate it. I think we'll pursue it.

Regards,

Ed



--- On Wed, 2/10/10, Neil Harrison <[email protected]> wrote:

From: Neil Harrison <[email protected]>
Subject: Re: [patterns-discussion] Messaging Design Pattern
To: [email protected], "David S" <[email protected]>
Date: Wednesday, February 10, 2010, 3:00 PM

Hi,

Um, I'm wondering what kind of feedback you are expecting. Normally,
one
submits something like this to a PLoP conference, where you will get
one-on-one shepherding, as well as extensive feedback in the
conference.
May I
 suggest that you consider submitting this to a PLoP conference,
where
you will get a lot of help with your pattern. When you submit works,
they initially
can be in draft form -- shepherding will help you improve them.

See www.hillside.net, and see the list of conferences. For example, you
can
submit this right away to EuroPLoP; the deadline for initial
submissions is in a
few days.

Cheers,
Neil Harrison 

>>> On 2/9/2010 at 7:50 PM, "David S" <[email protected]> wrote:
> Dear List Members,
> 
> Please find enclosed a draft document covering the Messaging Design
Pattern. 
> Any feedback would be appreciated.
> 
> Best regards,
> 
> Ed
> dsheppard2k at yahoo.com
> 
> 
> Messaging Design Pattern (draft)
> 
> Intent:
 The messaging design pattern allows the interchange of
information 
> (messages) between components and applications. 
> 
> 
> Motivations (forces):  This design pattern can be applied to solve a
great 
> variety of problems in many diverse scenarios. The messaging paradigm
is 
> widely used in the real world. Messages are interchanged all around
us. 
> Entities are constantly sending, receiving and processing messages:
when we 
> watch TV, when we talk to a friend or send a message. Right now, you
are 
> reading this written message. Since computer applications seek to
model the 
> real world, it is only natural to design/write applications using a
messaging 
> approach. We can argue that messaging provides a better and more
accurate 
> representation (i.e. model) of the real world. As a consequence of
having a 
> better model, software
 engineering processes are significantly
improved by 
> the use of the messaging design pattern.
> 
> 
> 
> 
> Participants:
> 
> a)    Message Sender: Component that sends the message.
> b)    Message Recipient: Component that receives the input message
and 
> produces a reply (output message) after processing it.  The input
message, 
> general in nature, may contain any type of information. The
components may be 
> instructed to perform computations based on the input message. 
> c)    Messenger: Intermediary that transfers the message from the
sender to 
> the recipient. The sender and the recipient don’t need to be
concerned about 
> how the message is transferred (communication protocol, message
format, 
> encryption/security mechanism, etc.) and the transformations
performed on the 
>
 message along the way. This is the messenger’s purpose and
responsibility. 
> 
> 
>             
>                  --message  ->                    --message ->
> Sender                              Messenger                       
> Recipient
>                  <- reply --                         <- reply --
> 
> <UML diagram will replace this diagram>
> 
> 
> 
> 
> 
> Consequences:
> 
> - Encapsulation. The messaging design pattern
 maximizes
encapsulation. Each 
> component is a self-contained/independent unit. The only mechanism of

> communication with other components and applications is via
messaging.
>  
> - Decoupling. The messaging design pattern minimizes coupling. Again
each 
> component is a self-contained unit that can perform independently
from the 
> rest of the system.
> 
> - Reusability. The messaging design pattern improves reusability.
Components 
> that use the messaging design pattern can be interchangeably plugged
into 
> complex applications. This is similar to the building blocks in a
“lego” set. 
> The components can be assembled in a limitless variety of
configurations. The 
> user of a component only needs to know the input/output messages that
the 
> component handles. Applications are also able to reuse components
from other 
>
 applications at the component level: a single component
(self-contained) can 
> be extracted from another application, provided that the messaging
design 
> pattern is being used. 
> 
> - QA/Testing process. The messaging design facilitates testing and
debugging 
> efforts. Components are tested as independent units by sending
messages to 
> the component and verifying the expected reply messages (black box
testing). 
> Unit testing can be performed via a testing harness. No need to
include 
> testing code inside the component code which can be time consuming
and lead 
> to the unexpected introduction of software defects. 
> 
> - Design process. Components that use the messaging design pattern
improve 
> and simplify the design process. The bulk of the design work becomes
defining 
> the set of components needed to meet the system requirements and
 the

> input/output messages that each component needs to handle. There is a
tight 
> correspondence between UML design diagrams and the components needed
for the 
> implementation. Since all components share the same messaging
interface they 
> can also be easily added to BPM process diagrams. Again this is
similar to 
> ‘lego’ pieces that can be reused and connected in many different
ways.
> 
> - Development process. Since each component that relies on messaging
is 
> self-contained, a large number of people can cooperate in the
development 
> effort without stepping on each other's code/work. In the ideal
situation, 
> responsibility for one component/package can be given to an
individual. The 
> rest of the team only needs to know the input/output messages that
someone 
> else’s component is supposed to handle. No need to change
 someone
else’s 
> code. The need for creating, maintaining and merging several versions
of the 
> code is also minimized or eliminated. Testing/QA engineers can do
their 
> testing independently via a testing harness. No need to add testing
code. 
> 
> - Logging and Debugging. Since all the components use the same
messaging 
> interface, messages can be logged automatically. This minimizes the
need for 
> print/logging statements inside the code which can be time consuming
and 
> error prone. By taking a look at the messages being logged, the user
is 
> usually able to quickly track down the message/component that is
causing the 
> problem (with minimum or no extra effort). 
> 
> - Security. Well-known encryption and authentication mechanisms fit
in well 
> with the messaging design pattern.  Strong security can be provided
by the
 
> framework that implements the messaging design pattern. The sender
and the 
> recipient don’t need to be concerned with how secure messaging is 
> implemented. This provides strong security while at the same time
simplifying 
> the implementation of security. Custom security mechanisms are also
easy to 
> incorporate: sender and receiver need to agree on and implement the
message 
> encryption/authentication mechanism to be used.
> 
> - Multithreading and asynchronous messaging. The messaging design
pattern is 
> able to handle multithreading and asynchronous messaging. Components
that 
> implement the messaging design pattern are able to execute in a 
> separate/independent thread. This is a natural representation of the
real 
> world: each component (entity) is a self-contained unit and executes

> independently for the rest of the system.
 Messages can be processed 
> asynchronously using the component’s own independent thread.  This
capability 
> is usually implemented in the context of a component framework. The
component 
> doesn’t need to add separate logic to handle multithreading which
is time 
> consuming, complex and prone to error.
> 
> - Speed of development and cost. Because of all the reasons outlined
above, 
> the messaging design pattern is able to substantially improve the
speed of 
> development and reduce cost. 
> 
> - Quality and software maintenance. Quality and software maintenance
efforts 
> are also improved as a result of the all of the above.
> 
> 
> 
> 
> 
> 
> 
> Known uses:
> 
> -    Design patterns. The messaging design pattern has been used to 
> implement and/or facilitate the implementation
 of other well-known
design 
> patterns like Gang Of Four design patterns (GoF), DAO, J2EE Design
patterns, 
> etc. The messaging design pattern also provides a more natural,
streamlined 
> and straightforward implementation of other design patterns. Again,
we can 
> argue that this is possible because messaging provides an accurate 
> representation of the real world.  
> 
> -    Remote proxies and application interfaces. The messaging design
pattern 
> is particularly well suited for the implementation of remote access.
It is 
> able to provide transparent access to remote components regardless of
the 
> protocol, technology and communication mechanism being used: remote
framework 
> objects are treated as local objects. Messages can be transferred via
Web 
> services, EJBs, RMI, HTTP, Sockets. SSL or any other communication
interface.
 
> Design patterns implemented using messaging (adapters, remote proxies
and 
> facades) make this possible by hiding the complexities associated
with remote 
> APIs. The messaging design pattern solves a whole set of problems
dealing 
> with remote application interfaces. It also provides significant
improvements 
> over traditional methods and technologies. Sender and recipient
don’t need to 
> be concerned with how messages are transferred. 
> 
> -    Component based frameworks and design/BPM tools. The messaging
design 
> pattern can be utilized to implement component based frameworks:
components 
> can be interchangeably plugged into complex framework applications
using the 
> “Lego” architecture previously described. These components can
also be 
> readily incorporated into UML/BPM diagrams in order to design and
implement 
>
 complex applications. Notice that for components to be used
interchangeably, 
> they need to share the same interface. The messaging design pattern
provides 
> this common interface.
> 
> -    Secure Web Services. The messaging design pattern has been
utilized to 
> implement secure web services. This includes Restful web services.  A
Web 
> service is just another mechanism of communication between
heterogeneous 
> applications. Notice that the messaging design pattern doesn’t
place any 
> restrictions on the message sender and recipient. These components
can be 
> running on multiple computers and operating systems. They can also be

> implemented using multiple computer languages. 
> 
> -    Enterprise Service Bus (ESB) components and applications.
Messaging has 
> been used to implement ESB components and applications.
 Once all the
building 
> blocks are present (remote proxies, adapters, facades, etc), they can
be 
> assembled to create a new application in a fraction of the time. This
is 
> possible thanks to the messaging design pattern and the “Lego”
architecture. 
> 
> -    Secure and Multithreaded applications. Again the messaging
design 
> pattern provides the building blocks required to assemble secure and

> multithreaded applications in a fraction of the time required by
traditional 
> methods. These building blocks are usually provided within the
context of a 
> messaging framework.  
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> Code examples:
> 
> 
> The messaging design pattern is implemented using the Jt messaging
interface 
> (JtInterface). This interface
 consists of a single method:
> 
> 
> 
> public interface JtInterface  {
> 
> /**
>   * Jt messaging interface used for the implementation
>   * of the messaging design pattern.
>   * Process an input message and return a reply (output message). 
>   */
> 
>   Object processMessage (Object message);  
> 
> 
> }
> 
> The JtInterface is simple but powerful. The simplicity of this
interface can 
> be deceiving. One method is all that is needed (dry). It acts as a
universal 
> messaging interface that applies to remote and local framework
components. 
> This interface handles any type of message (Object class).  
> 
> The following example sends a message to a remote component/Restful
service 
> via a remote proxy. The
 messaging design pattern is able to handle
any 
> communication protocol/technology (Web Service, EJBs, RMI, sockets,
SSL, 
> etc.). 
> 
>     /**
>      * Send a message to a remote component/Restful service using
>      * a remote proxy. Secure/Encrypted messaging may be used.
>      * The messaging design pattern provides transparent access
>      * to remote components.
>      */
> 
>     public static void main(String[] args) {
> 
>         JtFactory factory = new JtFactory ();
>         String sReply;
>         JtRestProxy proxy;
>         String url = "http://localhost:8080/JtPortal/JtRestService";;
> 
>         // Create an instance of the remote Proxy.
> 
>         proxy = (JtRestProxy) 
>                factory.createObject (JtRestProxy.JtCLASS_NAME);
>         
>         proxy.setUrl(url);
>         proxy.setClassname ("Jt.examples.Echo");
>         
>             // Specify that secure/encrypted messaging should be
used.
>         
>         proxy.setEncrypted(true);
> 
>             // Send the message to the remote component/service
 via
>             // the remote proxy.
>         
>         sReply = (String) 
>               factory.sendMessage (proxy, "Welcome to Jt messaging
...");
>         
>             // The remote component will echo the input message.
> 
>         System.out.println ("Reply:" + sReply);
>         
>         
>     }
> 
> 
> 
>            --message  ->                --message ->      --message
->          
> 
       --message ->
> Sender                     Messenger                  Proxy          
    
> HTTP Adapter   ....network…. Remote  Component
>             <- reply --                    <- reply --            <-
reply --   
>                    <- reply --
> 
> Note: Any other communication protocol/technology can be handled
(EJB, RMI, 
> sockets, SSL, etc). It is just a matter of replacing the HTTP Adapter
and 
> plugging another component or building block. The messaging design
pattern 
> and the “Lego”
 architecture make this possible. This design
pattern solves a 
> whole family of problems associated with remote APIs.  
> 
> <UML diagram will replace this diagram>
> 
> 
> 
> 
> Related design patterns:
> 
> - Command
> - Proxy 
> - Adapter 
> - Bridge 
> - Façade
> 
> 
> 
> 
> 
>       



      
_______________________________________________
patterns-discussion mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/patterns-discussion

Reply via email to