Thursday, August 30, 2012

WTX with ActiveMQ Using JMS Adapter


WebSphere Transformation Extender's interaction with Activemq. Not hard but little tricks are important. As usual, if you google this solution, you will not find a single site or blog stating exact steps. So, here it is. Post your comments for questions.

Step 1: Setting jndi.propertise

Place provided “jndi.properties” file in <WTX_INSTALL>/java/lib directory or defined CLASSPATH. Sample jndi.properties can be downloaded from here.

Step 2: Include Jars

Include following Jars in local accessible folder.
activemq-all-5.5.1-fuse-07-11.jar
geronimo-jms_1.1_spec-1.1.1.jar
log4j-1.2.16.jar
slf4j-api-1.6.4.jar
slf4j-log4j12-1.6.4.jar
spring-jms-3.0.6.RELEASE.jar

Step 3: Add External Jars in dtx.ini


Include above mentioned jars in External jar section dtx.ini file. (replace home/aad/tmp with your folder path from root)
jar1=/home/aad/tmp/activemq-all-5.5.1-fuse-07-11.jar
jar2=/ home / aad /tmp/geronimo-jms_1.1_spec-1.1.1.jar
jar3=/ home / aad /tmp/log4j-1.2.16.jar
jar4=/ home / aad /tmp/slf4j-api-1.6.4.jar
jar5=/ home / aad /tmp/slf4j-log4j12-1.6.4.jar
jar6=/ home / aad /tmp/spring-jms-3.0.6.RELEASE.jar

Step 4: Command

-T -HDR -ICTXFURL tcp://<brokerURL>:<port>
 -ICTXF org.apache.activemq.jndi.ActiveMQInitialContextFactory
-CFN "connectionFactory"
-QN " testQueue"
Where
connectionFactory – JNDI Connection Factory Name
testQueue – JNDI Queue Name

Wednesday, August 8, 2012

WebSphere MQ With Tomcat : JNDI Property Names


WebSphere MQ JNDI Property Names:

I searched across the web and I didn’t find a single site stating exact JNDI MQ option for setting SSLCipherSuite value. I made this entire list of properties which can be useful for providing wide range of options to MQConnectionFactoty.
WebSphere MQ (IBM MQ) has lot of properties which can be made available from JNDI (Context.XML) entries. IBM MQ uses very specific Names which need to be set in Context XML Resource Entry.
Sample Resource Entry in Context is as below:
<Resource
        CHAN="<Channel Name>"
        HOST="<HostName>"
        PORT="<portNumber>"
        QMGR="<queueManagerName>"
        .
        .
        auth="Container"
       description="MQ JMS Queue Connection Factory"
        factory="com.ibm.mq.jms.MQQueueConnectionFactoryFactory"
        name="jms/ConnectionFactory"
        type="com.ibm.mq.jms.MQQueueConnectionFactory"/>

Below is the list of properties and their meaning.
Property Name
Used For
Short Description
CHAN
Channel Name
1 through 20 ASCII characters
HOST
Host Name
A valid TCP/IP host name
PORT
Port Number
A valid TCP/IP port numbe
QMGR
Queue Manager Name
Queue Manager Name
VER
Version
String
DESC
Description
String
TRAN
Transport Type
BINDINGS, CLIENT, DIRECT, QUEUED
CID
Client ID
JMS client identifier
CCS
CCS ID
coded character set identifier
MNS
Map Style Name
String
RCX
Receive Exit
String
RCXI
Receive Exit Init
String
SCX
Security Exit
String
SCXI
Security Exit Init
String
SDX
Send Exit
String
SDXI
Send Exit Init
String
SCPHS
SSL Cipher Suite  value
Cipher suite to use for SSL connection
SPEER
SSL Peer Name
Distinguished name is used to check the identifying certificate presented by the server at connection time
SCRL
SSL Certificate Store
 list of zero or more Certificate Revocation List
HC
HDR Component list
String
MC
Message Comp list
String
CT
Connection Tag
String
CTO
Connection Options
String
SCC
Send Check Count
String
SCALD
Shared Conversation Allowed
String
SRC
SSL Reset Count
String
SFIPS
SSL Fips Required
String
SPAG
Synch Points All Gets
String
UCP
Use Connection Pooling
Optional set of connection pool settings
PINT
Polling Interval
The interval, in milliseconds, between scans of all receivers during asynchronous message delivery
PVER
Provider Version
String
WCFMT
Wild Card Format
String
MBS
Message Batch Size
String
FIQ
Fail If Quiesce
Whether applications return from a method call if the queue manager has entered a controlled failure.
LA
Local Address
Specifies the local server address
RINT
Rescan Interval
the interval in milliseconds between which a topic is scanned to look for messages that have been added to a topic out of order
TCM
Target Client Matching
String
AEX
Asynch Exception
String
CCDTRUL
CCDT URL
String

These properties are very useful while using websphere MQ with Tomcat. This will enable user to get rid of provider specific code in App.
This list doesn’t end here. I will add more properties, as and when I get to know them, I will also add the descriptions as I find them.
More questions? Post a comment. I will try to answer as soon as possible.

Tuesday, August 7, 2012

ActiveMQ Mirror Queue: Working Example.


If you reached here, you might have already checked few very confusing paragraphs about Mirror queues in ActiveMQ.
Mirror Queues are disabled by default. To enable them, you have to following settings in activemq.xml
<destinationInterceptors>
<mirroredQueue copyMessage = "true" postfix="" prefix="MIRROR."/>
                <virtualDestinationInterceptor>
                                <virtualDestinations>
                                                <virtualTopic name="MIRROR.TEST.>"  prefix="MIR.>." selectorAware="false"/>
                                </virtualDestinations>
                </virtualDestinationInterceptor>
</destinationInterceptors>
               
Out of above: “<mirroredQueue copyMessage = "true" postfix="" prefix="MIRROR."/>” is actually responsible for enabling Mirror Queues.

How ActiveMQ Handles Mirror Queues:

1.       When you enable Mirror Queues, with say prefix as “MIRROR.”, for every queue in the broker one Topic will be created with MIRROR. Prefix.
2.       Now to receive a message from this Topic, Virtual Destinations can be used. More about Virtual Destination can be found here.

Working Example:

                Let’s consider above configuration for prefix for Mirror queues and Virtual Destinations.
1.       Create a queue: TEST.QUEUE
2.       With above settings, Mirror Topic is automatically created as : MIRROR.TEST.QUEUE
3.       Create Virtual Topic Consumer : MIR.COPY.MIRROR.TEST.QUEUE
a.       MIR – Defined Virtual Topic Interceptor
b.      COPY – Name of the Consumer
c.       MIRROR.TEST.QUEUE – is a Topic Name
4.       Send a test message to TEST.QUEUE, same message will appear in MIR.COPY.MIRROR.TEST.QUEUE.

This is complete setting of Mirror Queues.

Problems:

1.       Mirror Topics will be created for Every Queue in the broker
2.       As broker has to track each message from the queue and copy it to topic, further to virtual destination, broker may face performance problem depending on load.