This post is continous series of JMS configurations experimenting with Python. Here the JMS module configuration changes for the JMS will be stored to
config.xml repository and its sub-deployment module descriptor in a separate file. JMS system
module can be defined with name, target to servers or cluster, its related
sub-deployments such as Queue or publisher/Subscriber topics.
The WebLogic JMS related Mbeans are constructed as follows :
- JMSBean
- JMSSystemReourceMBean
- QueueBean
- JMSConnectionFactoryBean
- DistributedQueueBean
- UniformDistributedQueueBean
- SubdeploymentMBean
While configuring you need to understand that JMS system module, that consists of ConnectionFactory that give access to the JMS services, and there
could be a different scenario on demand. The machines are high-powered, low
powered are in the same cluster then JMS destinations must be distributed
destinations with ‘Allocate members Uniformly’ option set to false and manually
select more physical destination from the high powered machines.The configuring
JMS module is going to have various sub-deployment components in it. First we
need to configure the JMS Module name, target to the advanced deployment as
sub-deployment.
Now you need brainstrom, and provide your customized domain with JMS module details in the properties file, let me give you sample :
############################################################################### # JMS MODULE CONFIGURATION ############################################################################### total_default_jms_module=1 jms_mod_name1=jmsSystemModule jms_mod_target1=my_cluster
Subdeployment in JMS Module
Most of the Admins not really aware of the use of subdeployment. We need to configure a subdeployment per JMS Module. While configuring the subdeployment we have to provide the target as JMS servers which are configured in the first section. Why we need a subdeployment is interesting topic • To avoid network traffic between JMS components communication • It will group Connection factories, queues, topics• Easy to migrate
WebLogic - JMS Module configuration using WLST |
############################################################################### # JMS SUBDEPLOY CONFIGURATION ############################################################################### total_subdply=1 subdeployment_name=aJmssub
JMS Connection Factory
We have configured the ConnectionFactory properties as follows############################################################################### # JMS CONNECTION FACTORY CONFIGURATION ########## conf_jndi1=myConnectionFactory conf_name1=MyConnectionFactoryConfiguring Uniform distributed queue using WLST We have configured the Queue with Distributed option because we have multiple JMS providers. The Uniform Distributed Queue is the one of the best practice when you have Clustered WebLogic Domain. While configuring this you need a name for the Uniform Distributed Queue and a JNDI name for it.
############################################################################### # UNIFORM DISTRIBUTED QUEUE CONFIGURATION ############################################################################### total_udq=3 udq_name1=jmsIncomingChannel udq_jndi1=jms/incoming/responseThe JMS Module configuration with Subdeployment target to JMS Servers configured earlier. ConnectionFactory, Uniform Distributed Queue target to subdeployment.
from java.util import Properties from java.io import FileInputStream from java.io import File from java.io import FileOutputStream from java import io from java.lang import Exception from java.lang import Throwable import os.path import sys envproperty="" if (len(sys.argv) > 1): envproperty=sys.argv[1] else: print "Environment Property file not specified" sys.exit(2) propInputStream=FileInputStream(envproperty) configProps=Properties() configProps.load(propInputStream) def createJMSModule(jms_module_name,cluster_target_name): cd('/JMSServers') jmssrvlist=ls(returnMap='true') # jmssrvlist=['AjmsServer1','AjmsServer2'] cd('/') module = create(jms_module_name, "JMSSystemResource") cluster = getMBean("Clusters/"+cluster_target_name) module.addTarget(cluster) cd('/SystemResources/'+jms_module_name) module.createSubDeployment(subdeployment_name) cd('/SystemResources/'+jms_module_name+'/SubDeployments/'+subdeployment_name) list=[] for j in jmssrvlist: s='com.bea:Name='+j+',Type=JMSServer' list.append(ObjectName(str(s))) set('Targets',jarray.array(list, ObjectName)) def getJMSModulePath(jms_module_name): jms_module_path = "/JMSSystemResources/"+jms_module_name+"/JMSResource/"+jms_module_name return jms_module_path def createJMSTEMP(jms_module_name,jms_temp_name): jms_module_path= getJMSModulePath(jms_module_name) cd(jms_module_path) cmo.createTemplate(jms_temp_name) cd(jms_module_path+'/Templates/'+jms_temp_name) cmo.setMaximumMessageSize(20) def createJMSUDQ(jms_module_name,jndi,jms_udq_name): jms_module_path = getJMSModulePath(jms_module_name) cd(jms_module_path) cmo.createUniformDistributedQueue(jms_udq_name) cd(jms_module_path+'/UniformDistributedQueues/'+jms_udq_name) cmo.setJNDIName(jndi) # cmo.setDefaultTargetingEnabled(bool("true")) cmo.setSubDeploymentName(subdeployment_name) def createJMSConnectionFactory(jms_module_name,cfjndi,jms_cf_name): jms_module_path = getJMSModulePath(jms_module_name) cd(jms_module_path) cf = create(jms_cf_name,'ConnectionFactory') jms_cf_path = jms_module_path+'/ConnectionFactories/'+jms_cf_name cd(jms_cf_path) cf.setJNDIName(cfjndi) cd (jms_cf_path+'/SecurityParams/'+jms_cf_name) #cf.setAttachJMXUserId(bool("false")) cd(jms_cf_path+'/ClientParams/'+jms_cf_name) cmo.setClientIdPolicy('Restricted') cmo.setSubscriptionSharingPolicy('Exclusive') cmo.setMessagesMaximum(10) cd(jms_cf_path+'/TransactionParams/'+jms_cf_name) #cmo.setXAConnectionFactory(bool("true")) cd(jms_cf_path) cmo.setDefaultTargetingEnabled(bool("true")) adminUser=configProps.get("adminUser") adminPassword=configProps.get("adminPassword") adminURL=configProps.get("adminURL") connect(adminUser,adminPassword,adminURL) edit() startEdit() # ====# JMS CONFIGURATION## ########################################## total_temp=configProps.get("total_temp") total_udq=configProps.get("total_udq") total_conf=configProps.get("total_conf") tot_djmsm=configProps.get("total_default_jms_module") subdeployment_name=configProps.get("subdeployment_name") a=1 while(a <= int(tot_djmsm)): var1=int(a) jms_mod_name=configProps.get("jms_mod_name"+ str(var1)) cluster=configProps.get("jms_mod_target"+ str(var1)) createJMSModule(jms_mod_name,cluster) i=1 while(i <= int(total_temp)): t_name=configProps.get("temp_name"+ str(i)) createJMSTEMP(jms_mod_name,t_name) i = i + 1 j=1 while(j <= int(total_udq)): udq_name=configProps.get("udq_name"+ str(j)) udq_jndi=configProps.get("udq_jndi"+ str(j)) createJMSUDQ(jms_mod_name,udq_jndi,udq_name) j = j + 1 k = 1 while(k <= int(total_conf)): conf_name=configProps.get("conf_name"+ str(k)) conf_jndi=configProps.get("conf_jndi"+ str(k)) createJMSConnectionFactory(jms_mod_name,conf_jndi,conf_name) k = k + 1 a = a+1 save() activate(block="true") disconnect()
############################################################
The sample properties listed for helping out how to create here for your projects.
############################################################################### # JMS SUBDEPLOY CONFIGURATION ############################################################################### total_subdply=1 total_default_jms_module=1 total_conf=1 subdeployment_name=demoSub ############################################################################### # JMS CONNECTION FACTORY CONFIGURATION ###################################################### conf_jndi1=demoCF conf_name1=jms/demoCF ############################################################################### # UNIFORM DISTRIBUTED QUEUE CONFIGURATION ############################################################################### total_temp=0 total_udq=2 udq_name1=jmsIncomingChannel udq_jndi1=jms/incoming/response temp_name1=jmsIncomingChannel1 udq_name2=jmsOutgoingChannel udq_jndi2=jms/outgoing/response temp_name2=jmsOutgoingChannel1 adminUser=weblogic adminPassword=welcome1 adminURL=t3://192.168.1.106:8100 ############################################################################### # JMS MODULE CONFIGURATION ############################################################################### total_default_jms_module=1 jms_mod_name1=demo_jmsmod jms_mod_target1=democlstr
To execute this JMS Module with subdeployments you need to pass the properties file as argument
java weblogic.WLST jms_module.py jms_module.properties
pavanbsd@ubuntu:~/pybin$ wlst jmsmodnq.py jmsmodnq.properties Initializing WebLogic Scripting Tool (WLST) ... Welcome to WebLogic Server Administration Scripting Shell Type help() for help on available commands Connecting to t3://192.168.1.106:8100 with userid weblogic ... Successfully connected to Admin Server "demoadmin" that belongs to domain "demodomain". 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 edit tree. This is a writable tree with DomainMBean as the root. To make changes you will need to start an edit session via startEdit(). For more help, use help('edit') You already have an edit session in progress and hence WLST will continue with your edit session. Starting an edit session ... Started edit session, please be sure to save and activate your changes once you are done. drw- jms_ms1 drw- jms_ms2 MBean type JMSSystemResource with name demo_jmsmod has been created successfully. MBean type ConnectionFactory with name jms/demoCF has been created successfully. Saving all your changes ... Saved all your changes successfully. Activating all your changes, this may take a while ... The edit lock associated with this edit session is released once the activation is completed. Activation completed Disconnected from weblogic server: demoadmin