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

时间:2012-04-16 17:59:27

标签: jboss jndi connection-pooling

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

  1. 查找org.jboss.resource.connectionmanager.JBossManagedConnectionPool
  2. 对所述池执行flush()操作。
  3. 我发现其他一些问题没有答案。我希望这不会成为他们中的另一个。

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

1 个答案:

答案 0 :(得分:2)

这是使用quickie groovy示例的基础知识。 首先,您需要在类路径中使用 jboss-4.2.2 / client / jbossall-client.jar 。 接下来,您需要数据源的JMX ObjectName。在JMX控制台的 http://localhost:8080/jmx-console/ 中找到它可能会有所帮助,或者您已经部署了它。因此,ObjectName的字符串值为域+“:”+属性

例如:

enter image description here

ObjectName是: jboss.jca:name = DefaultDS,service = ManagedConnectionPool

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

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[]);