有使用过JMX实时修改wblogic连接池密码的么?

taber 2008-03-24 09:29:41
系统使用jndi通过weblogic81连接池访问数据库。
===========
碰到的问题
===========
由于安全原因,数据库密码会定期修改,这样导致weblogic服务重新启动后无法连接到数据库。
由于部署了weblogic的机器众多,不希望一台台连上去通过console修改密码,而是通过部署在weblogic中的
一个jar包自动获得正确的密码,然后更新weblogic的config.xml文件,同时刷新连接池,使其能够正常工作。
=====
现状
=====
已经能够使用JMX修改连接池密码了(见modifyAdmin方法),但连接池仍无法正常使用。请高手指教,帮顶有分:

package weblogic;

import java.util.Properties;

import javax.management.InstanceNotFoundException;
import javax.management.InvalidAttributeValueException;
import javax.naming.Context;
import javax.naming.NamingException;

import weblogic.jndi.Environment;
import weblogic.management.MBeanHome;
import weblogic.management.configuration.JDBCConnectionPoolMBean;

/**
* 测试调用weblogic api直接修改config.xml
*
*
*/
public class ConfigOperator {

/**
* @param args
*/
public static void main(String[] args) {
//modifyAdmin("user", "pass");
modifyConfig("user", "pass");
System.out.println("test finished");
}

public static void modifyConfig(String userName, String password) {
try {
String poolName = "MyJDBC Connection Pool";
MBeanHome home = getMBeanHome();
JDBCConnectionPoolMBean mConfigBean = (JDBCConnectionPoolMBean) home
.getConfigurationMBean(poolName, "JDBCConnectionPoolConfig");
Properties nameProperty = new Properties();
nameProperty.setProperty("name", userName);
mConfigBean.setProperties(nameProperty);
mConfigBean.setPassword(password);
System.out.println(mConfigBean.getPassword());
//mConfigBean.setDriverName("helloworld1");
} catch (InvalidAttributeValueException iave) {
System.out.println("Invalid attribute while configuring tracing "
+ iave);
} catch (InstanceNotFoundException infe) {
System.out.println("Instance not found while configuring tracing "
+ infe);
} catch (Exception e) {
System.out.println(e);
}
}

public static void modifyAdmin(String userName, String password) {
try {
String poolName = "MyJDBC Connection Pool";
MBeanHome home = getMBeanHome();
JDBCConnectionPoolMBean mConfigBean = (JDBCConnectionPoolMBean) home
.getAdminMBean(poolName, "JDBCConnectionPool");
Properties nameProperty = new Properties();
nameProperty.setProperty("name", userName);
mConfigBean.setProperties(nameProperty);
mConfigBean.setPassword(password);
//mConfigBean.setDriverName("helloworld1");
} catch (InvalidAttributeValueException iave) {
System.out.println("Invalid attribute while configuring tracing "
+ iave);
} catch (InstanceNotFoundException infe) {
System.out.println("Instance not found while configuring tracing "
+ infe);
} catch (Exception e) {
System.out.println(e);
}
}

private static MBeanHome getMBeanHome() {
String url = "t3://localhost:7001";
String username = "weblogic";
String password = "weblogic";
MBeanHome home = null;

try {
Environment env = new Environment();
env.setProviderUrl(url);
env.setSecurityPrincipal(username);
env.setSecurityCredentials(password);
Context ctx = env.getInitialContext();
home = (MBeanHome) ctx.lookup(MBeanHome.LOCAL_JNDI_NAME);
} catch (NamingException ne) {
System.out.println("Error getting MBeanHome " + ne);
}
return home;
}

}

...全文
210 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xlongbuilder 2008-03-24
  • 打赏
  • 举报
回复

是的 没什么好办法的

若急就重新创建
可以将就
但你以前的那部分资源是否可以避免内存泄漏?是个问题
若否
想办法用个钩子程序 动态定义吧 当然这个较难 又不是开源
祝你好运 呵呵

taber 2008-03-24
  • 打赏
  • 举报
回复
没错,因为密码不对,weblogic启动时连接池初始化就失败了。
我要解决的正式这个问题:初始化失败后,我使用新的密码重新初始化。

现在我已经使用重新创建连接池的方式来解决这个问题,还有一点没调通。
请各位继续发表高见,谢谢。
xlongbuilder 2008-03-24
  • 打赏
  • 举报
回复
同时刷新连接池
??

刷新后还没有 得到正确的密码但不能运行 ??

应该不是吧

那么说明刷新连接池没有成功


还有就是 若用了hibernate 也是同样的问题

改密码必须重启 除非用硬代码改 比如加个钩子程序

你的weblogic 是否可以重启

若不能同hibernate 处理办法

说的不对 请指教
miaoliujun 2008-03-24
  • 打赏
  • 举报
回复
没有细看你的代码

我觉得大概的问题有可能是这样引起的
因为连接池初始化时就已经建立了连接,如果密码修改了,需要重新初始化连接池
老紫竹 2008-03-24
  • 打赏
  • 举报
回复
1 换9.0/10.0看看,我担心8.1根本不支持这个
2 打电话给BEA, 他们的工程师会跟你联系的。当然,你得有一个许可证号。呵呵!
3 你为何不到bea的网站问问呢?我想你不会是第一个遇到这个问题的人吧!

www.bea.com.cn

去里面的dev2dev
taber 2008-03-24
  • 打赏
  • 举报
回复
to java2000_net:
谢谢,我要解决的就是3.a。
db password更改后,重新启动起来的weblogic中的connection pool肯定是无效的。
目前我已使用jmx api在weblogic重新启动起来以后重新建立了connection pool和data source,算是初步解决了问题吧。
一个关联问题是:如何判断connection pool的状态?
因为我只希望在connection pool不正常的情况下才去重新创建connection pool,而不是每次启起来都建立一把
xlongbuilder 2008-03-24
  • 打赏
  • 举报
回复
帮顶
老紫竹 2008-03-24
  • 打赏
  • 举报
回复
根据我的经验
1 已经建立的连接,是不会再去验证用户名和密码的,所以不会受影响
2 新连接会使用新的配置,也不会有问题,除非你设置的有问题
3 当连接端掉时,再次尝试连接,有可能
a) 使用老的配置
b) 使用新的配置

我比较担心的是8.1是否会处理a)的问题,他会不会自动的检测到属性的改变。我想不能。

建议你再看看Weblogic的API,我想一个应该有刷新连接的操作。

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧