Using Java and Apache ActiveMQ to implement two types of Java Message Service (JMS) clients

profilered13rt
hw3-2021.pdf

CSci 364 Spring, 2021 Programming Assignment #3 Due: Thursday, February 25, 2021

Design and implement a distributed computing application using Java Message Service (JMS) (aka Jakarta Messaging) and serialized objects. This will require implementing a two types of JMS clients—one that reads work data (the manager) and another JMS client (the worker) that performs the work tasks.

Apache ActiveMQ v5 will be the JMS provider. The provider will host two message queues: a data queue for sending from the manager to the worker and a work queue for sending from the worker to the manager.

The manager The manager JMS client reads a text input file. For each row of data the manager sends the row to the data queue as a javax.jms.TextMessage object. After the worker processes the data, the manager receives the work results from the work queue as a javax.jms.ObjectMessage object.The manager then prints the original input data (the row) and the results.

The worker The worker JMS client will receive JMS TextMessage objects containing a String of data (a row) from the data queue in ActiveMQ. Your client shall process the data using one of three Worker (see the api package on Blackboard) subclass objects described below. Specifically, the client shall run the Worker.doWork() method. After the doWork method has completed, the client shall send a JMS ObjectMessage to the work queue in ActiveMQ. The ObjectMessage object will contain the instance of the Worker subclass with the computed result.

Messages sent to either JMS queue will be non-transacted and acknowledged automatically (Session.AUTO_ACKNOWLEDGE).

Items on each line in the input file are separated by spaces. The format of each line is as follows.

id value1 [value2 [value3]]

The line starts with an id field, an integer that represents the work task id. The line has from one to three additional values. If the line has value1, the work task is to check if the value is prime. If the line has two values, value1 and value2 are numerator and denominator of a fraction, respectively. The task is to determine if the fraction can be reduced. Finally, if the line has three values, the client must sort the String values.

Each work tasks extend api.Worker abstract class and must implement the doWork() and getWorkResults() methods.

PrimeChecker See Blackboard for an example.

FractionReducer Given a numerator and denomenator, calculate the greatest common factor. Divide the input fields by the greatest common factor. Your class should have two accessor methods to retrieve the reduced numerator and reduced denominator.

Given input numerator of 12 and input denominator of 9, the reduced numerator should be 4 and the reduced denominator should be 3.

https://www.mathsisfun.com/greatest-common-factor.html

ValueSorter Sort a series of three values into ascending order.

A partial working example of the manager and worker is available on Blackboard (Assignments/ Program #3/hw3.tar). DO NOT CHANGE api/Worker.java.

Given following example input: 1 27 2 13 3 7 3 4 cherry apple banana 5 4 6 6 2 3 4

The manager output should be similar to the following. Task: 1, Input: 27. Prime false Task: 2, Input: 13. Prime true Task: 3, Input: 7 3. Reduced fraction: 7/3 Task: 4, Input: cherry apple banana. Sorted: apple banana cherry Task: 5, Input: 4 6. Reduced fraction: 2/3 Task: 6, Input: 2 3 4. Sorted: 2 3 4

Apache ActiveMQ Security Note: Copy the env file on Blackboard (Assignments/Program #3/env) to your ActiveMQ bin/ folder (over-write the existing file). This is required in order to send ObjectMessages via ActiveMQ.

Submit your source code and Ant script using the directory structure below. Your Ant script should have targets to clean and compile your source code and generate Javadoc comments.

hw3/ build.xml lib/activemq-all-5.15.8.jaw src/ api/ Worker.java PrimeChecker.java FractionReducer.java ValueSorter.java

manager/ [Java source files related to the manager JMS client]

worker/ [Java source files related to the worker JMS client]