Red Hat DocumentationFuse Message BrokerToggle FramesPrintFeedback

Analyzing and Modifying the Java Source Files

Overview

Now that you are familiar with JMS behavior, let's look inside the application source files to examine some of the patterns that are used. You will see how you can make and compile some changes to the source files that expose Fuse Message Broker client's JMS features you can then test. (There are features that require setting broker configurations; those will be discussed in a forthcoming chapter.)

Basics

The application source files and the class files that they create are located in application-specific folders that are subfolders of the two messaging models, QueuePTPSamples, and TopicPubSubSamples. The build file enabled you to enter ant commands at the root of the samples such that ant chat1 did the same as navigating to the TopicPubSubSamples/Chat directory to run the Chat.class file at that location as:

java Chat -u Chatter1

The Chat folder contains the source file Chat.java.

When you make changes to that or any other .java file, compile the source file to an updated class file and then run the modified file. To do this, you need to have a Java Development Kit (JDK) specified as JAVA_HOME, and the CLASSPATH needs to specify the JDK's tools JAR, the Fuse Message Broker's activemq core JAR, and the Geronimo JMS JAR. For example, on a Windows system, you might do the following:

set JAVA_HOME=C:\jdk1.5.0_11
set FUSE_MB_=C:\progress\-5.5.1-fuse-00-xx
set CLASSPATH=.;%JAVA_HOME%\lib\tools.jar;   \
                %FUSE_MB%\lib\activemq-core-5.5.1-fuse-00-xx-fuse.jar;   \
                %FUSE_MB%\lib\geronimo-jms_1.1_spec-1.1.1.jar 

Then, with the command line located at the Chat directory, enter:

javac Chat.java

Setting noLocal in chat

The TopicPubSub samples show that the message is received by every subscriber to the topic and its hierarchy -- including the publisher's connection. A feature of JMS is the ability to set a noLocal Boolean on the subscription that inhibits echoing messages sent in the publisher's connection. In Chat.java you can set the noLocal value to true but there is a catch: the method signature that sets noLocal requires a message selector string also. In Chat.java, the message consumer is created as follows:

javax.jms.MessageConsumer subscriber = subSession.createConsumer(topic);

Edit the line to set the message selector to a zero-length String to satisfy the method signature, and then add the boolean value true, as follows:

javax.jms.MessageConsumer subscriber = subSession.createConsumer(topic, "", true);

When you save and compile this sample, see the effect in your samples. Start chat1 and chat2. Send some messages from each of the chatters. The messages are not echoed in that sender's window.

Steal this code!

Use the patterns in these sample applications to meld them and transform them from user interactive examples to applications that pass your data to the message producer, and that take messages received by message consumers to move them into your data stores and application logic. As always, provide proper copyrights and licenses in your source files and application packages.

Comments powered by Disqus