|
RSS Feed - WebSphere MQ Support
|
RSS Feed - Message Broker Support
|
 |
|
Clustering Queue Java program |
« View previous topic :: View next topic » |
Author |
Message
|
tumstech |
Posted: Fri Nov 06, 2009 1:34 am Post subject: Clustering Queue Java program |
|
|
Newbie
Joined: 04 Nov 2009 Posts: 7
|
Hi,
Need help in Java Client connecting to Queue Cluster
Here is my Configuration
My Cluster Name : "MyCluster"
QMGW - Full Repository (Default Q Manager) - localhost(1414)
QM1 - Full Repos - localhost(1415)
QM2 - Partial Repos connected to QMGW - localhost(1416)
Have a Queue named "Q1" on all the Queue Manager
CLWSUSEQ = "Any" on all the Queue and Queue manager
Default Bind type = "Not Fixed"
After this setup, if i use the
amqsput Q1
or
amqsput Q1 QMGW
i get the message getting distributed among the Q's in the other Queue Manager
same settings if i try to use a java client to connect using sun's default java messaging api with
Context.PROVIDER_URL = "localhost:1414/SYSTEM.DEF.SVRCONN"
Context.INITIAL_CONTEXT_FACTORY="com.ibm.mq.jms.context.WMQInitialContextFactory"
i am using the generic JMS Java Client and not the API's provided by MQ.
The source code ihave taken is at this place
http://java.sun.com/products/jms/tutorial/1_3_1-fcs/doc/client_samples.html#1006838
all messages are going only to QMGW, and not getting distributed.
what should i do for my messages to be replicated..?
and change in client conf..? or client java code..? or any change on the cluster environment..? |
|
Back to top |
|
 |
fjb_saper |
Posted: Fri Nov 06, 2009 3:49 am Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
Show us the JNDI or URI used for the Destination definition.  _________________ MQ & Broker admin |
|
Back to top |
|
 |
tumstech |
Posted: Fri Nov 06, 2009 3:56 am Post subject: |
|
|
Newbie
Joined: 04 Nov 2009 Posts: 7
|
i do not have any extra conf appart from what i have mentioned.
Did i miss any configuration that i have done and forgot..?
i think i dont have any configuration other than this..
no jndi.properties
i am using
Context.PROVIDER_URL = "localhost:1414/SYSTEM.DEF.SVRCONN"
Context.INITIAL_CONTEXT_FACTORY="com.ibm.mq.jms.context.WMQInitialContextFactory" |
|
Back to top |
|
 |
fjb_saper |
Posted: Fri Nov 06, 2009 3:46 pm Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
tumstech wrote: |
i do not have any extra conf appart from what i have mentioned.
Did i miss any configuration that i have done and forgot..?
i think i dont have any configuration other than this..
no jndi.properties
i am using
Context.PROVIDER_URL = "localhost:1414/SYSTEM.DEF.SVRCONN"
Context.INITIAL_CONTEXT_FACTORY="com.ibm.mq.jms.context.WMQInitialContextFactory" |
You are starting with a handicap. This version of interactive JNDI should only be used for demo purposes...
Try and use the file based JNDI ...
Also you will have a hard time controlling your destinations with the version of JNDI you used... file based JNDI is the way to go.
I suspect your troubles have something to do with the way your destination is defined. The URI form of the destination you are using would tell me a little more....
Have fun  _________________ MQ & Broker admin |
|
Back to top |
|
 |
tumstech |
Posted: Sun Nov 08, 2009 10:15 pm Post subject: |
|
|
Newbie
Joined: 04 Nov 2009 Posts: 7
|
can you please help me in doing the same.. please..
My JMS Utility file is as follows
Code: |
package com.vis.jms.sun.example;
/*
*
* Copyright 2002 Sun Microsystems, Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or
* without modification, are permitted provided that the following
* conditions are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* - Redistribution in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* Neither the name of Sun Microsystems, Inc. or the names of
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* This software is provided "AS IS," without a warranty of any
* kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
* WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
* EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY
* DAMAGES OR LIABILITIES SUFFERED BY LICENSEE AS A RESULT OF OR
* RELATING TO USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE OR
* ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE
* FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT,
* SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
* CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF
* THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS
* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
*
* You acknowledge that this software is not designed, licensed or
* intended for use in the design, construction, operation or
* maintenance of any nuclear facility.
*
*/
import java.util.Hashtable;
import javax.jms.JMSException;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueReceiver;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicSession;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class SampleUtilities {
public static String QUEUECONFAC = "QM1";
public static String TOPICCONFAC = "TopicConnectionFactory";
public static Hashtable<String, String> env = new Hashtable<String, String>();
public static Context jndiContext = null;
/**
* Returns a QueueConnectionFactory object.
*
* @return a QueueConnectionFactory object
* @throws javax.naming.NamingException (or other
* exception) if name cannot be found
*/
public static QueueConnectionFactory
getQueueConnectionFactory() throws Exception {
return (QueueConnectionFactory) jndiLookup(QUEUECONFAC);
}
/**
* Returns a TopicConnectionFactory object.
*
* @return a TopicConnectionFactory object
* @throws javax.naming.NamingException (or other
* exception) if name cannot be found
*/
public static TopicConnectionFactory
getTopicConnectionFactory() throws Exception {
return (TopicConnectionFactory) jndiLookup(TOPICCONFAC);
}
/**
* Returns a Queue object.
*
* @param name String specifying queue name
* @param session a QueueSession object
*
* @return a Queue object
* @throws javax.naming.NamingException (or other
* exception) if name cannot be found
*/
public static Queue getQueue(String name,
QueueSession session) throws Exception {
return (Queue) jndiLookup(name);
}
/**
* Returns a Topic object.
*
* @param name String specifying topic name
* @param session a TopicSession object
*
* @return a Topic object
* @throws javax.naming.NamingException (or other
* exception) if name cannot be found
*/
public static Topic getTopic(String name,
TopicSession session) throws Exception {
return (Topic) jndiLookup(name);
}
/**
* Creates a JNDI API InitialContext object if none exists
* yet. Then looks up the string argument and returns the
* associated object.
*
* @param name the name of the object to be looked up
*
* @return the object bound to name
* @throws javax.naming.NamingException (or other
* exception) if name cannot be found
*/
public static Object jndiLookup(String name)
throws NamingException {
Object obj = null;
if (jndiContext == null) {
try {
if(env.containsKey(Context.INITIAL_CONTEXT_FACTORY) == false)
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.mq.jms.context.WMQInitialContextFactory");
if(env.containsKey(Context.PROVIDER_URL) == false)
env.put(Context.PROVIDER_URL, "localhost:1540/SYSTEM.DEF.SVRCONN");
jndiContext = new InitialContext(env);
} catch (NamingException e) {
System.err.println("Could not create JNDI API " +
"context: " + e.toString());
throw e;
}
}
try {
obj = jndiContext.lookup(name);
} catch (NamingException e) {
System.err.println("JNDI API lookup failed: " +
e.toString());
throw e;
}
return obj;
}
/**
* Waits for 'count' messages on controlQueue before
* continuing. Called by a publisher to make sure that
* subscribers have started before it begins publishing
* messages.
*
* If controlQueue does not exist, the method throws an
* exception.
*
* @param prefix prefix (publisher or subscriber) to be
* displayed
* @param controlQueueName name of control queue
* @param count number of messages to receive
*/
public static void receiveSynchronizeMessages(String prefix,
String controlQueueName, int count)
throws Exception {
QueueConnectionFactory queueConnectionFactory = null;
QueueConnection queueConnection = null;
QueueSession queueSession = null;
Queue controlQueue = null;
QueueReceiver queueReceiver = null;
try {
queueConnectionFactory =
SampleUtilities.getQueueConnectionFactory();
queueConnection =
queueConnectionFactory.createQueueConnection();
queueSession =
queueConnection.createQueueSession(false,
Session.AUTO_ACKNOWLEDGE);
controlQueue = getQueue(controlQueueName,
queueSession);
queueConnection.start();
} catch (Exception e) {
System.err.println("Connection problem: " +
e.toString());
if (queueConnection != null) {
try {
queueConnection.close();
} catch (JMSException ee) {}
}
throw e;
}
try {
System.out.println(prefix +
"Receiving synchronize messages from " +
controlQueueName + "; count = " + count);
queueReceiver =
queueSession.createReceiver(controlQueue);
while (count > 0) {
TextMessage msg = (TextMessage)queueReceiver.receive();
count--;
System.out.println(prefix +
"Received synchronize message; " +
" expect " + count + " more : " + msg.getText());
}
} catch (JMSException e) {
System.err.println("Exception occurred: " +
e.toString());
throw e;
} finally {
if (queueConnection != null) {
try {
queueConnection.close();
} catch (JMSException e) {}
}
}
}
/**
* Sends a message to controlQueue. Called by a subscriber
* to notify a publisher that it is ready to receive
* messages.
* <p>
* If controlQueue doesn't exist, the method throws an
* exception.
*
* @param prefix prefix (publisher or subscriber) to be
* displayed
* @param controlQueueName name of control queue
*/
public static void sendSynchronizeMessage(String prefix,
String controlQueueName)
throws Exception {
QueueConnectionFactory queueConnectionFactory = null;
QueueConnection queueConnection = null;
QueueSession queueSession = null;
Queue controlQueue = null;
QueueSender queueSender = null;
TextMessage message = null;
try {
queueConnectionFactory =
SampleUtilities.getQueueConnectionFactory();
queueConnection =
queueConnectionFactory.createQueueConnection();
queueSession =
queueConnection.createQueueSession(false,
Session.AUTO_ACKNOWLEDGE);
controlQueue = getQueue(controlQueueName,
queueSession);
} catch (Exception e) {
System.err.println("Connection problem: " +
e.toString());
if (queueConnection != null) {
try {
queueConnection.close();
} catch (JMSException ee) {}
}
throw e;
}
try {
queueSender =
queueSession.createSender(controlQueue);
message = queueSession.createTextMessage();
message.setText("synchronize");
System.out.println(prefix +
"Sending synchronize message to " +
controlQueueName);
queueSender.send(message);
} catch (JMSException e) {
System.err.println("Exception occurred: " +
e.toString());
throw e;
} finally {
if (queueConnection != null) {
try {
queueConnection.close();
} catch (JMSException e) {}
}
}
}
/**
* Monitor class for asynchronous examples. Producer signals
* end of message stream; listener calls allDone() to notify
* consumer that the signal has arrived, while consumer calls
* waitTillDone() to wait for this notification.
*/
static public class DoneLatch {
boolean done = false;
/**
* Waits until done is set to true.
*/
public void waitTillDone() {
synchronized (this) {
while (! done) {
try {
this.wait();
} catch (InterruptedException ie) {}
}
}
}
/**
* Sets done to true.
*/
public void allDone() {
synchronized (this) {
done = true;
this.notify();
}
}
}
}
|
My Main File is as follows
Code: |
package com.vis.jms.sun.example;
import javax.naming.Context;
public class SunExampleRun {
public static void main(String args[]){
try {
SampleUtilities.env.put(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.mq.jms.context.WMQInitialContextFactory");
SampleUtilities.QUEUECONFAC = "QMGW";
SampleUtilities.env.put(Context.PROVIDER_URL, "localhost:1414/SYSTEM.DEF.SVRCONN");
SampleUtilities.sendSynchronizeMessage("publisher", "Q1");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
|
so what modification do i need to do here to use file jndi..
============================================
i also tried with the below configuration
Used JMSAdmin to create the ".binding" at location c:\JNDI
and used the following Code
DELETE QCF(MyQCF)
DEFINE QCF(MyQCF) QMGR(QMGW) tran(client) chan(SYSTEM.ADMIN.SVRCONN) host(127.0.0.1) port(1414)
DEFINE Q(Q1) QUEUE(Q1) QMGR(QMGW)
end
jndi.properties file is as follows
java.naming.factory.initial = com.sun.jndi.fscontext.RefFSContextFactory
java.naming.provider.url = file:///C:/JNDI
SECURITY_AUTHENTICATION=none
This also dint work.. they were also doing the putting in the message in the Queue inside the QMGW and not distributing it into any other queuemanager
=============================================== |
|
Back to top |
|
 |
mqjeff |
Posted: Mon Nov 09, 2009 5:24 am Post subject: |
|
|
Grand Master
Joined: 25 Jun 2008 Posts: 17447
|
The Q definition is doing exactly what you have told it to do. |
|
Back to top |
|
 |
|
|
 |
|
Page 1 of 1 |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|
|
|