Two days back one of our subscribers Pavan had asked us by using comment , that is it possible to move the messages from one queue to another queue that to using WLST and the answer to that question is YES. It is possible to do the same using WLST and we have created the WLST script.
This is a very simple script which would just collect the target/destination queue where the messages has to be moved to (i.e. new.queue.name) and then would just go to the queue where the messages has to be moved from(i.e. old.queue.name). All this can be done using the same script just give the domain and there servers details in the domain.properties files and you are good to go.
Steps to Move Messages From One Queue To Another Queue Using WLST
Step1). Create a Directory somewhere in your file system like : “C:WLSTMove_Messages”
Step2). Write a Properties file “domain.properties“ inside “C:WLSTMove_Messages” like following:
server.url=t3://localhost:8001 username=weblogic password=weblogic system.module.name=MySystemModule old.server.name=AdminServer old.jms.server.name=Admin_JMSServer old.queue.name=Admin_Queue new.tragated.server.name=AdminServer new.jms.server.name=MyJMSServer new.queue.name=MyTestQueue
Step2). Now in the same directory write the following WLST Script “move_messages.py” like following:
############################################################################# # # @author Copyright (c) 2010 - 2011 by Middleware Magic, All Rights Reserved. # ############################################################################# from java.io import FileInputStream import java.lang import os import string propInputStream = FileInputStream("domain.properties") configProps = Properties() configProps.load(propInputStream) serverUrl = configProps.get("server.url") Username = configProps.get("username") Password = configProps.get("password") systemModuleName = configProps.get("system.module.name") oldServerName = configProps.get("old.server.name") oldJmsServerName = configProps.get("old.jms.server.name") oldQueueName = configProps.get("old.queue.name") newTragatedServerName = configProps.get("new.tragated.server.name") newJmsServerName = configProps.get("new.jms.server.name") newQueueName = configProps.get("new.queue.name") connect(Username,Password,serverUrl) serverRuntime() print 'Getting the traget...' cd('/JMSRuntime/'+newTragatedServerName+'.jms/JMSServers/'+newJmsServerName+'/Destinations/'+systemModuleName +'!'+ newQueueName) target = cmo.getDestinationInfo() print 'Got the traget...' cd('/JMSRuntime/'+oldServerName+'.jms/JMSServers/'+oldJmsServerName+'/Destinations/'+systemModuleName +'!'+ oldQueueName) print 'Moving the messages to the new traget...' cmo.moveMessages('',target) print 'Messages have been moved to the traget Successfully !!!' print '=======================================' print 'Messages from queue: "'+oldQueueName+'" have been moved to the new queue: "'+newQueueName+'" Successfully !!!' print '======================================='
Step3). Now Open a Command/Shell Prompt and then run the “setWLSEnv.sh” script to set the CLASSPATH and PATH environment variables. Run the “. ./setWLSEnv.sh” by adding two DOTs separated by a single space …..before the actual script like following : (use ‘cd’ command to move inside the <BEA_HOME>/wlserver_10.3/server/bin) then run the following command….
. ./setWLSEnv.sh
Note: Here The first DOT represents that set the Environment in the current Shell, AND the second ./ represents execute the script from the current directory.
Step4). Run the Above WLST Script like following:
java weblogic.WLST move_messages.py
Following would be the Output
java weblogic.WLST move_messages.py Initializing WebLogic Scripting Tool (WLST) ... Welcome to WebLogic Server Administration Scripting Shell Type help() for help on available commands Connecting to t3://localhost:8001 with userid weblogic ... Successfully connected to Admin Server 'AdminServer' that belongs to domain 'Domain_8001'. Warning: An insecure protocol was used to connect to the server. To ensure on-the-wire security, the SSL port or Admin port should be used instead. Location changed to serverRuntime tree. This is a read-only tree with ServerRuntimeMBean as the root. For more help, use help(serverRuntime) Getting the traget... Got the traget... Moving the messages to the new traget... Messages have been moved to the traget Successfully !!! ======================================= Messages from queue: "Admin_Queue" have been moved to the new queue: "MyTestQueue" Successfully !!! =======================================
Note:
cd('/JMSRuntime/'+oldServerName+'.jms/JMSServers/'+oldJmsServerName+'/Destinations/'+systemModuleName +'!'+newJmsServerName+'@'+ newQueueName)
- Instead for line number - 38cd('/JMSRuntime/'+oldServerName+'.jms/JMSServers/'+oldJmsServerName+'/Destinations/'+systemModuleName +'!'+oldJmsServerName+'@'+ oldQueueName)Regards, Ravish Mody
June 15th, 2011 on 4:59 pm
Hi Ravish,
Thanks for the script. I am able to move the messages from one queue another queue on the same server only.
I have a requirement that i need move the messages from Queue1 to Queue2. Queue1 and Queue2 are targetted on Server1 and Server2 respectivly.
please suggest me how can i do this.
Regards,
Pavan
June 15th, 2011 on 10:54 pm
Hi Pavan,
You would get your answer in the below article
Topic: [Updated Version] Steps to Move Messages From One Queue To Another Queue Using WLST
http://middlewaremagic.com/weblogic/?p=6899
Regards,
Ravish Mody
September 27th, 2011 on 7:26 am
cool stuff as usual. thanks a lot!
June 11th, 2012 on 3:56 pm
what is system module in the script, is it jmsmodule ??, pls help