Ativando o JMX para proxool com tomcat

1

Estou tentando disponibilizar os MBeans do proxool para que eu possa ver / manipulá-los com o jconsole. Eu tenho o jconsole funcionando, mas não vejo nada relacionado ao proxool.

O sistema está usando o Sun Java 1.5.0_17 (eu sei, eu sei ... Eu estou trabalhando com os desenvolvedores para atualizar). O JMX é ativado modificando $ JAVA_OPTS no meu script de inicialização do tomcat 5.5:

SJO="$SJO -Dcom.sun.management.jmxremote"
SJO="$SJO -Dcom.sun.management.jmxremote.port=4998"
SJO="$SJO -Dcom.sun.management.jmxremote.authenticate=false"
SJO="$SJO -Dcom.sun.management.jmxremote.ssl=false"

JAVA_OPTS="$JAVA_OPTS $SJO"

Eu tenho o proxool configurado com o JNDI no server.xml:

  <GlobalNamingResources>
    <Resource
        name="jdbc/database"
        auth="Container"
        type="javax.sql.DataSource"
        factory="org.logicalcobwebs.proxool.ProxoolDataSource"
        user="username"
        password="password"
        proxool.driver-url="jdbc:oracle:thin:@fqdn.example.com:1521:MYSID"
        proxool.driver-class="oracle.jdbc.driver.OracleDriver"
        proxool.alias="mysid"
        proxool.maximum-connection-count="20"
        proxool.statistics="20s,5m,15m"
        proxool.statistics-log-level="INFO"
        proxool.jmx="true"
        proxool.verbose="true"
    />
  </GlobalNamingResources>

Meu teste .jsp pode executar consultas e posso vê-lo usando as conexões com o servlet administrativo do proxool, mas não tenho certeza se há mais que eu preciso configurar no tomcat ou no proxool para obter o funcionamento do JMX.

Conselhos?

jmxproxy info edit:

O servlet jmxproxy está funcionando - quando eu vou para a URL http://tomcatserver.example.com:4999/manager/jmxproxy/?qry=*:type%3DRequestProcessor,* , os resultados são:

OK - Number of results: 2

Name: Catalina:type=RequestProcessor,worker=http-8080,name=HttpRequest0
modelerType: org.apache.coyote.RequestInfo
bytesSent: 0
requestBytesSent: 0
contentLength: -1
bytesReceived: 0
requestProcessingTime: 1297983483666
globalProcessor: org.apache.coyote.RequestGroupInfo@32dc51c8
requestBytesReceived: 0
serverPort: -1
stage: 0
requestCount: 0
maxTime: 0
processingTime: 0
errorCount: 0

Name: Catalina:type=RequestProcessor,worker=jk-127.0.0.1-8009,name=JkRequest794
modelerType: org.apache.coyote.RequestInfo
virtualHost: tomcatserver.example.com
bytesSent: 0
method: GET
remoteAddr: 172.30.3.51
requestBytesSent: 0
contentLength: -1
workerThreadName: TP-Processor15
bytesReceived: 0
requestProcessingTime: 9
globalProcessor: org.apache.coyote.RequestGroupInfo@1e7d3b8e
protocol: HTTP/1.1
currentQueryString: qry=*%3Atype%3DRequestProcessor%2C*
requestBytesReceived: 0
serverPort: 4999
stage: 3
requestCount: 0
maxTime: 0
processingTime: 0
currentUri: /manager/jmxproxy/
errorCount: 0

E mais, até o ponto http://tomcatserver.example.com:4999/manager/jmxproxy/?qry=Catalina:type%3DEnvironment,resourcetype%3DGlobal,name%3DProxool yields:

OK - Number of results: 0
    
por dialt0ne 17.02.2011 / 23:40

1 resposta

1

Resolvido - este foi um problema de carregamento de classe. Ao olhar novamente hoje nos logs, vi isso ao reiniciar o tomcat:

Feb 22, 2011 11:47:40 AM org.apache.catalina.core.NamingContextListener addResource
WARNING: Failed to register in JMX: javax.naming.NamingException: Could not load resource factory class [Root exception is java.lang.ClassNotFoundException: org.logicalcobwebs.proxool.ProxoolDataSource]

Eu acredito que desde que eu estava usando GlobalNamingResources, eu precisava mover proxool e jar com os drivers de banco de dados até o classloader "comum" em vez dos diretórios "compartilhados" ou por biblioteca webapp (Veja o HOW TO do Class Loader ). Depois que eu mudei os arquivos .jar para um diretório no common.loader, a interface JMX do proxool começou a funcionar. Para referência, o MBean está em Catalina > DataSource

    
por 22.02.2011 / 18:08