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

以编程方式刷新JBoss 4.2.2连接池,jboss,jndi,connection-pooling,Jboss,Jndi,Connection Pooling,我正在运行JBoss4.2.2。我正在尝试确定以下两种情况的正确代码: 查找org.jboss.resource.connectionmanager.JBossManagedConnectionPool 对所述池执行flush()操作 我发现还有几个问题没有答案。我希望这不会成为他们中的又一个 到目前为止,我发现的最接近的问题是:以下是使用quickie groovy示例的基础知识。 首先,您希望类路径中有jboss-4.2.2/client/jbossall-client.jar。 接下来,需

我正在运行JBoss4.2.2。我正在尝试确定以下两种情况的正确代码:

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


    到目前为止,我发现的最接近的问题是:

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

    例如:

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

    接下来,在JNDI中查找RMIAdapter。这是MBeanServer接口,允许您在目标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[]);
    

    由于出现了其他优先事项,我还没有能够测试这个。但它在我的队列中,我一定会在尝试后回到这里。