我正在尝试获取 proxool 的 MBean,以便我可以使用 jconsole 查看/操作它们。我可以使用 jconsole,但我看不到任何与 proxool 相关的内容。
系统使用的是 Sun Java 1.5.0_17(我知道,我知道……我正在与开发人员合作进行升级)。通过修改我的 tomcat 5.5 启动脚本中的 $JAVA_OPTS 来启用 JMX:
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"
我已经在 server.xml 中使用 JNDI 配置了 proxool:
<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>
我的测试 .jsp 可以运行查询,并且我可以使用与 proxool 管理 servlet 的连接来查看它,但我不确定是否需要在 tomcat 或 proxool 中进行更多配置才能使 JMX 正常运行。
建议?
jmxproxy 信息编辑:
jmxproxy servlet 正在运行 - 当我转到 URL 时,http://tomcatserver.example.com:4999/manager/jmxproxy/?qry=*:type%3DRequestProcessor,*
结果是:
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
更重要的是http://tomcatserver.example.com:4999/manager/jmxproxy/?qry=Catalina:type%3DEnvironment,resourcetype%3DGlobal,name%3DProxool
:
OK - Number of results: 0
答案1
已解决 - 这是一个类加载问题。今天再次查看日志时,我在重新启动 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]
我相信因为我使用了 GlobalNamingResources,所以我需要将 proxool 和 jar 与数据库驱动程序一起移动到“通用”类加载器,而不是“共享”或每个 webapp 库目录(请参阅类加载器操作方法)。一旦我将 .jar 文件重新定位到 common.loader 中的目录,proxool 的 JMX 接口就开始工作了。作为参考,MBean 位于Catalina > DataSource