jboss - 以编程方式刷新 JBoss 4.2.2 连接池

标签 jboss jndi connection-pooling

我正在运行 JBoss 4.2.2。我正在尝试确定两者的正确代码:

  1. 查找 org.jboss.resource.connectionmanager.JBossManagedConnectionPool
  2. 对所述池执行flush()操作。

我发现了其他几个没有答案的问题。我希望这不会成为其中的又一个。

到目前为止我发现的最接近的问题:https://community.jboss.org/message/637784

最佳答案

这是使用快速常规示例的基础知识。 首先,您需要在类路径中添加 jboss-4.2.2/client/jbossall-client.jar 。 接下来,您需要数据源的 JMX ObjectName。在 JMX 控制台中找到此内容可能会有所帮助: http://localhost:8080/jmx-console/ 或者您如何部署。因此,ObjectName 的字符串值是域 + ":"+ 属性

例如:

enter image description here

对象名称为:jboss.jca:name=DefaultDS,service=ManagedConnectionPool

接下来,在 JNDI 中查找 RMIAdaptor。这是 MBeanServer 接口(interface),允许您在目标 MBean 上调用刷新操作。然后调用调用。就是这样。

import javax.management.*;
import javax.naming.*;

p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
p.put(Context.PROVIDER_URL, "localhost:1099");
ctx = new InitialContext(p);
rmiAdaptor = ctx.lookup("jmx/rmi/RMIAdaptor");
rmiAdaptor.invoke(new ObjectName("jboss.jca:name=DefaultDS,service=ManagedConnectionPool"), "flush", [] as Object[], [] as String[]);

有道理吗?

=====更新=====

如果您从 JBoss JVM 内部执行此操作,则不需要 JNDI 设置:

import javax.management.*;
import org.jboss.mx.util.MBeanServerLocator;

MBeanServer server = MBeanServerLocator.locateJBoss();
server.invoke(new ObjectName("jboss.jca:name=DefaultDS,service=ManagedConnectionPool"), "flush", [] as Object[], [] as String[]);

关于jboss - 以编程方式刷新 JBoss 4.2.2 连接池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10179184/

相关文章:

Java.sql.connection 对象第二次不工作

jakarta-ee - 从 webapp 访问托管服务器主机名和端口

grails - Grails + MySQL-BasicDataSource或JNDI

tomcat - JDBC 连接池未在 Tomcat 中重新打开连接

java - 使用 Spring 和 DBCP 处理 JDBC 连接的正确方法是什么?

java - 有用于 Tomcat 的 jBPM 7.5.0 版本吗?

batch-file - JBoss:如何忽略按任意键继续,而不编辑 jboss-cli.bat?

java - log4j:与 appender 阈值不同的类别优先级

java - Java JNDI 连接的 LDAP 错误 49

connection-pooling - python中的MySQL连接池?