对weblogic进行配置一般是通过console控制台来进行配置的但有的时候需要自己在程序中需要进行动态的配置比如增加队列显示队列或者配置数据源改写写configxml是可以达到动态配置的效果的但bea不推荐这样做而且这样做需要重新启动服务器
怎么样既动态的配置又不重新启动服务器呢?
笔者查询了weblogic的网站了解到有两种方法动态的配置()可以使用weblogicAdmin命令(文档地址)()使用weblogic是用jmx编程来进行管理通过jmx来对weblogic中的组件进行动态的配置jmx的文档地址如果使用这种方法要将weblogicjar配置到CLASSPATH环境变量中(因为weblogic的jmx类是放在weblogicjar中的)
本人写了一份代码对Queue进行管理包括JMSQueue的增加删除和显示我的configxml文件如下
<JMSServer Name=MessageCenterServer Store=MyJmsSave
Targets=myserver TemporaryTemplate=MyJMSTemplate>
<JMSQueue CreationTime= JNDIName=CenterQueue
Name=CenterQueue Template=MyJMSTemplate/>
<JMSQueue CreationTime= JNDIName=que
Name=que Template=MyJMSTemplate/>
<JMSQueue CreationTime= JNDIName=que
Name=que Template=MyJMSTemplate/>
<JMSQueue CreationTime= JNDIName=queue Name=queue/>
</JMSServer>
代码如下
package messagecenter;
/**
* <p>Title: 消息中心</p>
* <p>Description: 对消息队列进行维护</p>
* @author 张荣斌
* @version
*/
import javautil*;
import javautilregexPattern;
import javaxnamingContext;
import weblogicjndiEnvironment;
import weblogicmanagementMBeanHome;
import weblogicmanagementruntimeServletRuntimeMBean;
import weblogicmanagementruntimeApplicationRuntimeMBean;
import weblogicmanagementruntimeWebAppComponentRuntimeMBean;
import weblogicmanagementruntimeComponentRuntimeMBean;
import weblogicjmsextensions*;
import weblogicmanagementRemoteMBeanServer;
import javaxmanagementObjectName;
import javaxmanagementQueryExp;
public class JMSQueueMaintain {
public static final String WEBLOGIC_URL = t://localhost:;
public static final String WEBLOGIC_USER=system;
public static final String WEBLOGIC_PASSWORD = ;
public static final String WEBLOGIC_JMSSERVER = MessageCenterServer;//JMS服务器的名字可以看到我的configxml<JMSServer
Name=MessageCenterServer Store=MyJmsSave这一行
public JMSQueueMaintain() {
}
/**
* 得到initial context
*/
private static Context getCtx(String urlString username String password) throws Exception{
Environment env = new Environment();
envsetProviderUrl(url);
envsetSecurityPrincipal(username);
envsetSecurityCredentials(password);
return envgetInitialContext();
}
/**
* 得到the Admin MBean Home
*/
private static MBeanHome getMBeanHome(String urlString username String password) throws Exception
{
return (MBeanHome) getCtx(urlusernamepassword)lookup(MBeanHomeADMIN_JNDI_NAME);
}
/**
* 增加队列
*/
public static void addQueue(String queuename) throws Exception{
Context ctx = getCtx(WEBLOGIC_URLWEBLOGIC_USERWEBLOGIC_PASSWORD);
JMSHelpercreatePermanentQueueAsync(ctxWEBLOGIC_JMSSERVERqueuenamequeuename);
}
/**
* 删除队列
*/
public static void deleteQueue(String queuename) throws Exception{
Context ctx = getCtx(WEBLOGIC_URLWEBLOGIC_USERWEBLOGIC_PASSWORD);
JMSHelperdeletePermanentQueue(ctxWEBLOGIC_JMSSERVERqueuename);
}
/**
* 得到所有的队列名
*/
public static Vector getQueuenames() throws Exception{
Vector vect = new Vector();
MBeanHome home = getMBeanHome(WEBLOGIC_URLWEBLOGIC_USERWEBLOGIC_PASSWORD);
RemoteMBeanServer homeServer = null;
QueryExp query = null;
homeServer = homegetMBeanServer();
Set JMSMBeans = homeServerqueryNames(new ObjectName(mydomain:JMSServer=+WEBLOGIC_JMSSERVER+Type=JMSQueue*)
query);
//where query could be any object that implements the JMX
//javaxmanagementQueryExp
for (Iterator itr = erator(); itrhasNext(); ) {
ObjectName mbean = (ObjectName)itrnext();
if(!mbeangetKeyProperty(Name)equals(CenterQueue)){
vectaddElement(mbeangetKeyProperty(Name));
}
}
return vect;
}
public static void main(String[] args) {
JMSQueueMaintain JMSQueueMaintain = new JMSQueueMaintain();
try{
Systemoutprintln(JMSQueueMaintaingetQueuenames());
JMSQueueMaintainaddQueue(queue);
JMSQueueMaintaindeleteQueue(queue);
Systemoutprintln(JMSQueueMaintaingetQueuenames());
}catch(Exception e){
}
}
}