...
Enterprise messaging has become an increasingly important component of loosely coupled, reliable enterprise frameworks. This is due in large part to the proliferation of enterprise applications and disparate enterprise resources, and the increasing need to integrate these applications into cohesive systems. Over the years Messaging and Message Oriented Middleware (MOM) has provided this integration propritery( proprietory ) manner. Introduction of Java Messaging Service (JMS) as a standard, eliminated many of the disadvantages in propritery( proprietory ) MOM based products. In addition to that Message Driven Beans(MDBs) introduced with Enterprise Java Beans 2.0 have served to get the best out of existing investments in J2EE application servers. Most of the J2EE application servers in modern era are acting as a MOM with a whole lot of value added services to JMS. As a J2EE 1.4 certified application server, Apache Geronimo comes into the party with support of JMS integrating with one of the best breed open source messaging frameworks, ActiveMQ. This article will provide you (with) a way to use JMS /MDBs for in(delete -in) your enterprise application scenario in (delete - in) both as a locally ( local ) and remotely reffered enviroments ( environments ) with Geronimo and ActiveMQ.
The company reffered in this sample application sells one specific item in both retail and whole sale ( wholesale ) markets under different categories. All the placed orders in the application has ( have ) to be autorized ( authorized ) by a company sales employee before delevering( delivering ) goods to the customer. To( For ) the whole sale ( wholesale ) market, ( the ) company has placed their agents all over the country. They send their orders as a bunch at once, which is called a consignment. End users place their orders using ( the ) company web site while agents send their consignments with a special software insalled ( installed ) in their premises. All the cosignments ( consignments ) must be approved by the comany ( company ) GM ( General Manager ) before it is handed over to a sales employee.
This is a typical application to use JMS as a solution because both cosignment( consignment ) and order requests are processed in asynchronous manner.
After reading this article, you should be able to define Message Queues and their Connection Factories in Geronimo/ActiveMQ enviroment ( environment), send and recieve messages them (delete - them) using different kinds of applications (including a MDB) in your Enterprise Application with ease.
...
Geronimo server comes with a JMS server and application components that can access JMS resources like connection factories, topics and queues from it. This JMS server ( is ) also known as message broker. The default message broker supports( supported ) by Geronimo is ActiveMQ, usually does not need to be changed since it is a mature and feature-rich JMS product. This implementations implementation uses (use) inbuilt Derby database for the message persistent features.
ActiveMQ supports a large variety of transports (such as TCP, SSL, UDP, multicast, intra-JVM, and NIO) and client interactions (such as push, pull, and publish/subscribe). In ( the ) Geronimo context ActiveMQ supports MDBs, which are EJBs that consume JMS messages. It allows JMS applications to take J2EE specific features from Geronimo and application components such as JSPs, Servlets or EJBs utilizing JMS. Geronimo has been implemented this JMS API in an abstract layer to support any JMS provider. It has achieved this feature by supporting J2EE Connector (JCA) specification. The JCA 1.5 specification details the contracts required between the application server (Geronimo) and the driver supplied by ActiveMQ (resource adapter). Applications deployed in the Geronimo access ActiveMQ message broker only through this resource adapter(RA).
...
Order processing application has two defined message queues (so) as to recieve orders and consignments. Order requests can be generated and send by the Order Sender company's web application. When order requests are recieved to the order queue, a MDB will be triggered. It will carry out the next level of order request processing by saving those requests in to a server repository. Those saved order requests will be processed by a company employee later.
Compnay's (The company's ) sales agents are using the Consignment Sender consignment sender application to send consignment (collection of orders) requests from their locations. First they will prepare consignment as an XML file, then it will be passed as an application parameter. Consignment Sender sender application will read the content of an XML file (with a consignmet( consignment ) request) and send it to the consignment queue. General (M)manager Manager in the company uses Consignment Reciever consignment reciever application to find out the consignment requests. When a consignment request recieved to the Consignment consignment queue, Consignment Reciever consignment reciever listener application will download those requests to the responsible managerGeneral Manager's computer. Then he will ( He will then ) authorize it and handed(hand) it over to a sales emplyee( employee ) for further processing.
(The ) Following following figure gives the overall architecture of the order processing application.
...
- org.apache.geronimo.samples.order.client
- ConsignmentReciever - Listening on recieving of consignment requests to a defined queue.
- ConsignmentSender - Send consignment requests to their queue.
- org.apache.geronimo.samples.order.ejb
- OrderRecvMDB - A MDB that listens on recieving of order requests to a defined queue.
- org.apache.geronimo.samples.order.util
- PropertyLoader - Loads configuration properties to application.
- org.apache.geronimo.samples.order.web
- OrderSenderServlet - Creates order requests based on the user input and send(s) sends them to respective queue.
Finally, ( the ) core of the order placement application will be deployed as an EAR to the application server. Overview of the contents of EAR is given in the following ( depiction).
Code Block | ||||
---|---|---|---|---|
| ||||
|-Order.ear |-OrderEjb.jar |-META-INF |- ejb-jar.xml |- openejb-jar.xml |-OrderWeb.war |-jsp |- index.jsp |- error.jsp |-WEB-INF |- web.xml |- geronimo-web.xml |- classes |-META-INF |- application.xml |- geronimo-application.xml |
First, we will look at how to define ( we will look at defining the ) connection factories and queues in the Geronimo server using jms-resource-plan.xml. It defines two JMS queues and a common queue connection factory to access them.
...
geronimo-application.xml and application.xml define the main components of the EAR. Both EJB component and Web archive information are given in this ( these ) files as usual.
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
<application xmlns="http://geronimo.apache.org/xml/ns/j2ee/application-1.1"> <dep:environment xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.1"> <dep:moduleId> <dep:groupId>samples</dep:groupId> <dep:artifactId>Order</dep:artifactId> <dep:version>1.0</dep:version> <dep:type>car</dep:type> </dep:moduleId> <dep:dependencies/> <dep:hidden-classes/> <dep:non-overridable-classes/> </dep:environment> </application> |
...
Order Processing Web application sends messages to the Order Queue. OrderSenderServlet will handle the relevant order request generation and ( the ) sending. web.xml of the archive has the relevant configurations for the both queue connection factory and the queue, which is essential to refer resources in a local enviroment.
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <servlet> <display-name>OrderSenderServlet</display-name> <servlet-name>OrderSenderServlet</servlet-name> <servlet-class>org.apache.geronimo.samples.order.web.OrderSenderServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>OrderSenderServlet</servlet-name> <url-pattern>/order</url-pattern> </servlet-mapping> <resource-ref> <res-ref-name>jms/CommonConnectionFactory</res-ref-name> <res-type>javax.jms.QueueConnectionFactory</res-type> <res-auth>Container</res-auth> <res-sharing-scope>Shareable</res-sharing-scope> </resource-ref> <message-destination-ref> <message-destination-ref-name>jms/OrderQueue</message-destination-ref-name> <message-destination-type>javax.jms.Queue</message-destination-type> <message-destination-usage>Produces</message-destination-usage> <message-destination-link>OrderQueue</message-destination-link> </message-destination-ref> <welcome-file-list> <welcome-file>/jsp/index.jsp</welcome-file> </welcome-file-list> </web-app> |
Note |
---|
Please note ( that ) this web application supports Servlet 2.4 specification. Some of the ( configurations ) cofigurations in other older versions (2.3) are ( slightly ) bit different than given in the above web.xml. |
...
Configuration of the application consists of creating JMS resources and accessing them via defferent ( different ) sorts of enviroments ( environments).
Creating JMS Specific Resources
All JMS specific resource information can be found in the config/jms-resource-plan.xml file. Follow ( the ) given ( instructions ) to deployment, after logged ( logging ) into the Geronimo console.
- Select Deploy New link from the Console Navigation in the left.
- Load the <geronimo_home>/repository/geronimo/ge-activemq-rar/1.1/ge-activemq-rar-1.1.rar file to the Archive field.
- Load the Order/config/jms-resource-plan.xml file to the Plan input field.
- Press Install button. Make sure Start app after install is selected when this deployment happens
- Upon successful installation message, verify the deployment ( by ) traversing JMS resources link. It will display the connection factory and two JMS queues.
...
This application has two very important property files in the config folder namely build.properties and order_mgmt.properties. Build process of the application is (delete-is) entirely depends on the build.propeties and application will use order_mgmt.properties to load application related properties.
Set the correct paths to ( for ) the xdoclet.home and geronimo.home directories to work ( perform the ) application build process correctly.
...
Note |
---|
If you deploy one of these application components out side of application server, make sure to ( you ) change the relevant network property in the above mentioned property file. |
...
Use a command prompt to navigate into the Order directory and just give ant command to build. It will create the Order.ear, recvclient.jar and sendclient.jar under the Order/releases folder. Also note it will create a lib folder and copy list of jar files refered( reffered ) by the remote client applications. Now you are ready to deploy order processing application into the Geronimo Application server.
...
Listener application to the consignment queue. It will download the consignment requests in the local repository. As in the above mentioned application, first travel to the Order/releases from a command prompt. After that issue ( the ) following command to start listening on the consignment queue.
...
Summary
Anchor | ||||
---|---|---|---|---|
|
This article has demontrated ( demonstrated the use of JMS features ) ) how to use JMS features in Apache Geronimo with the ActiveMQ JMS server.It provides a hypothical ( hypothetical ) example which extensively used JMS features.
...