Document Message

Entwurfsmuster in der Softwarearchitektur und -entwicklung aus der Kategorie Nachrichtenerzeugung im Werk Enterprise Integration Patterns von Gregor Hohpe und Bobby Woolf

Document Message (von englisch document ‚Dokument‘ und message ‚Nachricht‘) ist ein Entwurfsmuster in der Softwarearchitektur und -entwicklung aus der Kategorie Nachrichtenerzeugung im Werk Enterprise Integration Patterns von Gregor Hohpe und Bobby Woolf.[1]

Anforderung Bearbeiten

 
Übermitteln von Daten mit Hilfe einer Document Message (Dokumentnachricht)

Eine Anwendung möchte Daten an eine andere übermitteln. Sie könnte das mit einem Dateitransfer oder einer gemeinsamen Datenbank bewerkstelligen. Diese Ansätze haben allerdings ihre Defizite. Die Übertragung funktionierte mit einer Nachrichtenübermittlung möglicherweise besser.

Frage Bearbeiten

Wie kann Nachrichtenübermittlung genutzt werden, um Informationen und Daten zwischen zwei Anwendungen zu übertragen?

Antwort Bearbeiten

Eine Datenstruktur kann mit einer Dokumentnachricht (Document Message) zuverlässig zwischen Anwendungen übertragen werden.

Verwendungsbeispiel Bearbeiten

Im folgenden Beispiel in Java wird die DSL von Apache Camel[2] verwendet, das auf den Enterprise Integration Patterns basiert.[3]

package org.wikipedia.de.eip.message.construction;

import static java.lang.System.out;

import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;
import javax.swing.text.StringContent;

import org.apache.camel.Message;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;

class DocumentMessageSample {

	private static DefaultCamelContext cc = new DefaultCamelContext();

	public static void main( final String... args ) throws Exception {

		final StringContent text = new StringContent();
		text.insertString( 0, "**** containing document content ****" );
		final PlainDocument doc = new PlainDocument( text ); // EIP Document

		cc.setName( "DocumentMessageSample" );
		cc.addRoutes( new RouteBuilder() {

			@Override
			public void configure() {

				from( "timer:start?repeatCount=1" )
						.process().message( m -> m.setBody( doc ) )
						.process().message( m -> print( "Sending Document", m ) )
						.log( "Sending..." )
						.to( "direct:receive" ) // EIP Sender
						.setId( "Sender" );

				from( "direct:receive" ) // EIP Receiver
						.log( "Receiving..." )
						.process().message( m -> print( "Receiving Document", m ) )
						.setId( "Receiver" );
			}
		} );
		cc.start();
		Thread.sleep( 2000 );
		cc.stop();
		cc.close();
	} // main()

	static void print( final String process, final Message m ) {
		try {
			out.printf( "%s %s: %s%n", process, m, ((PlainDocument) m.getBody()).getText( 0, 37 ) ); // EIP Document packed in Message
		}
		catch ( final BadLocationException e ) {
			e.printStackTrace();
		}
	} // print()

} // DocumentMessageSample

Ausgabe Bearbeiten

...
Sending Document Message: **** containing document content ****
[ple) thread #1 - timer://start] send                      INFO  Sending...
[ple) thread #1 - timer://start] receive                     INFO  Receiving...
Receiving Document Message: **** containing document content ****
...

Verwandte Muster Bearbeiten

Andere Muster aus der Kategorie Nachrichtenerzeugung (Message Construction) sind Message, Command Message, Event Message, Request-Reply, Return Address, Correlation Identifier, Message Sequence, Message Expiration und Format Indicator.

Literatur Bearbeiten

Weblinks Bearbeiten

Einzelnachweise Bearbeiten

  1. Gregor Hohpe, Bobby Woolf: Enterprise Integration Patterns. Designing, Building and Deploying Messaging Solutions. Hrsg.: Addison-Wesley. 1. Auflage. Addison-Wesley, 2003, ISBN 978-0-321-20068-6, S. 143–145 (englisch, 480 S.).
  2. N.N.: Java DSL. In: Apache Camel User Manual. Apache Software Foundation, abgerufen am 6. Dezember 2020 (englisch).
  3. N.N.: Enterprise Integration Patterns. In: Apache Camel User Manual. Apache Software Foundation, abgerufen am 14. Dezember 2020 (englisch).