對weblogic進行配置一般是通過console控制台來進行配置的
但有的時候
需要自己在程序中需要進行動態的配置
比如增加隊列
顯示隊列
或者配置數據源
改寫寫config
xml
是可以達到動態配置的效果的
但bea不推薦這樣做
而且這樣做需要重新啟動服務器
怎麼樣既動態的配置
又不重新啟動服務器呢?
筆者查詢了weblogic的網站
了解到有兩種方法動態的配置(
)可以使用weblogic
Admin命令(文檔地址
)
(
)使用weblogic是用jmx編程來進行管理
通過jmx來對weblogic中的組件進行動態的配置
jmx的文檔地址
如果使用這種方法
要將weblogic
jar配置到CLASSPATH環境變量中(因為weblogic的jmx類是放在weblogic
jar中的)
本人寫了一份代碼
對Queue進行管理
包括JMSQueue的增加
刪除
和顯示
我的config
xml文件如下
<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 java
util
*;
import java
util
regex
Pattern;
import javax
naming
Context;
import weblogic
jndi
Environment;
import weblogic
management
MBeanHome;
import weblogic
management
runtime
ServletRuntimeMBean;
import weblogic
management
runtime
ApplicationRuntimeMBean;
import weblogic
management
runtime
WebAppComponentRuntimeMBean;
import weblogic
management
runtime
ComponentRuntimeMBean;
import weblogic
jms
extensions
*;
import weblogic
management
RemoteMBeanServer;
import javax
management
ObjectName;
import javax
management
QueryExp;
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服務器的名字
可以看到我的config
xml<JMSServer
Name=
MessageCenterServer
Store=
MyJmsSave
這一行
public JMSQueueMaintain() {
}
/**
* 得到initial context
*/
private static Context getCtx(String url
String username
String password) throws Exception{
Environment env = new Environment();
env
setProviderUrl(url);
env
setSecurityPrincipal(username);
env
setSecurityCredentials(password);
return env
getInitialContext();
}
/**
* 得到the Admin MBean Home
*/
private static MBeanHome getMBeanHome(String url
String username
String password) throws Exception
{
return (MBeanHome) getCtx(url
username
password)
lookup(MBeanHome
ADMIN_JNDI_NAME);
}
/**
* 增加隊列
*/
public static void addQueue(String queuename) throws Exception{
Context ctx = getCtx(WEBLOGIC_URL
WEBLOGIC_USER
WEBLOGIC_PASSWORD);
JMSHelper
createPermanentQueueAsync(ctx
WEBLOGIC_JMSSERVER
queuename
queuename);
}
/**
* 刪除隊列
*/
public static void deleteQueue(String queuename) throws Exception{
Context ctx = getCtx(WEBLOGIC_URL
WEBLOGIC_USER
WEBLOGIC_PASSWORD);
JMSHelper
deletePermanentQueue(ctx
WEBLOGIC_JMSSERVER
queuename);
}
/**
* 得到所有的隊列名
*/
public static Vector getQueuenames() throws Exception{
Vector vect = new Vector();
MBeanHome home = getMBeanHome(WEBLOGIC_URL
WEBLOGIC_USER
WEBLOGIC_PASSWORD);
RemoteMBeanServer homeServer = null;
QueryExp query = null;
homeServer = home
getMBeanServer();
Set JMSMBeans = homeServer
queryNames(new ObjectName(
mydomain:JMSServer=
+WEBLOGIC_JMSSERVER+
Type=JMSQueue
*
)
query);
//where
query
could be any object that implements the JMX
//javax
managementQueryExp
for (Iterator itr = erator(); itr
hasNext(); ) {
ObjectName mbean = (ObjectName)itr
next();
if(!mbean
getKeyProperty(
Name
)
equals(
CenterQueue
)){
vect
addElement(mbean
getKeyProperty(
Name
));
}
}
return vect;
}
public static void main(String[] args) {
JMSQueueMaintain JMSQueueMaintain
= new JMSQueueMaintain();
try{
System
out
println(JMSQueueMaintain
getQueuenames());
JMSQueueMaintain
addQueue(
queue
);
JMSQueueMaintain
deleteQueue(
queue
);
System
out
println(JMSQueueMaintain
getQueuenames());
}catch(Exception e){
}
}
}
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28614.html