论坛首页 Java企业应用论坛

Jwebap(七)——插件:0.6.0版本发布

浏览 13404 次
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-07-22  
leadyu 写道
Jwebap JdbcComponent配置注意:


JdbcComponent 对于本地数据源,在配置driver-clazz时不推荐直接配置数据库驱动作为driver-clazz,这和原先配置文档的说明不同,请大家注意!

由于一般应用都采用连接池技术作为数据源,而直接配置数据库驱动作为driver-clazz,会受到连接池影响,监控发现所有的连接都是未关闭的,造成jwebap泄漏检测,时间统计的结果都无效了。所以,这种情况,建议直接配置,连接池的Datasource作为driver-clazz:

1)c3p0:可以配置com.mchange.v2.c3p0.ComboPooledDataSource

2)dbcp:可以配置org.apache.commons.dbcp.BasicDataSource

同时,也可以配置应用自己封装的ConnectionManager之类的类。jwebap对于driver-clazz所返回的Connection和Datasource会做监控。




我在TOMCAT5.5下,使用了JNDI,此时是JNDI+JDBC的模式使用数据源,使用mysql数据库
我分析了这个版本的DBCP,不是标准的commons-jdbc,而是naming-factory-dbcp


此时我尝试了很多的办法,都无法配置出JdbcComponent的driver-clazzs:
1、org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory
——此时加载时即出现异常:java.lang.LinkageError: duplicate class definition: org/apache/tomcat/dbcp/dbcp/BasicDataSourceFactory

2、org.apache.tomcat.dbcp.dbcp.BasicDataSource
——此时加载时即出现异常:java.lang.LinkageError: duplicate class definition: org/apache/tomcat/dbcp/dbcp/BasicDataSource

3、com.mysql.jdbc.NonRegisteringDriver
——我拷贝了驱动到WEB-INF/lib下,此时在使用连接时才会出现异常:java.lang.NoClassDefFoundError: org/jwebap/toolkit/bytecode/asm/StaticHandleFactory


0 请登录后投票
   发表时间:2009-07-24  
itstarting 写道
leadyu 写道
Jwebap JdbcComponent配置注意:


JdbcComponent 对于本地数据源,在配置driver-clazz时不推荐直接配置数据库驱动作为driver-clazz,这和原先配置文档的说明不同,请大家注意!

由于一般应用都采用连接池技术作为数据源,而直接配置数据库驱动作为driver-clazz,会受到连接池影响,监控发现所有的连接都是未关闭的,造成jwebap泄漏检测,时间统计的结果都无效了。所以,这种情况,建议直接配置,连接池的Datasource作为driver-clazz:

1)c3p0:可以配置com.mchange.v2.c3p0.ComboPooledDataSource

2)dbcp:可以配置org.apache.commons.dbcp.BasicDataSource

同时,也可以配置应用自己封装的ConnectionManager之类的类。jwebap对于driver-clazz所返回的Connection和Datasource会做监控。




我在TOMCAT5.5下,使用了JNDI,此时是JNDI+JDBC的模式使用数据源,使用mysql数据库
我分析了这个版本的DBCP,不是标准的commons-jdbc,而是naming-factory-dbcp


此时我尝试了很多的办法,都无法配置出JdbcComponent的driver-clazzs:
1、org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory
——此时加载时即出现异常:java.lang.LinkageError: duplicate class definition: org/apache/tomcat/dbcp/dbcp/BasicDataSourceFactory

2、org.apache.tomcat.dbcp.dbcp.BasicDataSource
——此时加载时即出现异常:java.lang.LinkageError: duplicate class definition: org/apache/tomcat/dbcp/dbcp/BasicDataSource

3、com.mysql.jdbc.NonRegisteringDriver
——我拷贝了驱动到WEB-INF/lib下,此时在使用连接时才会出现异常:java.lang.NoClassDefFoundError: org/jwebap/toolkit/bytecode/asm/StaticHandleFactory





你用的这个dbcp其实还是容器管理的jndi连接池,为什么出现duplicate class definition重复类定义错误呢,是由于这个链接数据源是容器自己构建的,是没有办法在web应用里面监控。你可以把driver-clazzs配成你工程里面用户获取连接的类,它所返回的连接或者datasource对象都会被监控。

昨天已有网友问过这个问题,现在已经解决了,你试下
0 请登录后投票
   发表时间:2009-07-24  
lovit 写道
为什么看不到执行的SQL,谢谢!


请把错误和你的配置发出来
0 请登录后投票
   发表时间:2009-07-27   最后修改:2009-07-27
1、MethodComponent 配置里的detect-clazzs 为何不支持递归搜索,现在只支持配置到哪里就trace哪里,只能一个.*,连.*.*都不行更不用说递归所有子目录了
如果项目大点,有几百个子目录,那不是完全无法完成的任务
我觉得理论上这个不难啊,建议在下个版本里支持
2、第二个问题,sqls里显示
Statement: 2009-07-27 03:42:56/2009-07-27 03:42:56
sql: 3ms 9%
但是在列表里的cost是32,这个3ms,9%,32ms各是什么含义?能否解释一下,谢谢
3、第三个问题,Method trace里能不能把get,set方法过滤掉,你知道spring里一堆的get,set方法,翻了几页就一个有用的方法,其他都是get,set方法,太影响使用效率了
0 请登录后投票
   发表时间:2009-07-27  
daiing 写道
1、MethodComponent 配置里的detect-clazzs 为何不支持递归搜索,现在只支持配置到哪里就trace哪里,只能一个.*,连.*.*都不行更不用说递归所有子目录了
如果项目大点,有几百个子目录,那不是完全无法完成的任务
我觉得理论上这个不难啊,建议在下个版本里支持
2、第二个问题,sqls里显示
Statement: 2009-07-27 03:42:56/2009-07-27 03:42:56
sql: 3ms 9%
但是在列表里的cost是32,这个3ms,9%,32ms各是什么含义?能否解释一下,谢谢
3、第三个问题,Method trace里能不能把get,set方法过滤掉,你知道spring里一堆的get,set方法,翻了几页就一个有用的方法,其他都是get,set方法,太影响使用效率了


1)jwebap确实不支持包名通配符,我觉得一般也没有必要对全工程进行监控,一个是粒度太细必然给工程带来一定压力,可以只针对某一层次进行监控,比如业务层,或者服务层。在实现上,要考虑的问题也是比较多的。

2)这个时间指sql实际执行的时间,列表的时间指Connection从获取到关闭的时间,如果两者差距较大,这部分时间有可能开销在sql执行完,到连接关闭间的代码中(一般是操作游标的代码,可以理解成,数据传输的时间)

3)你提的建议,很好,这个版本的trace分析器还不具备这种过滤功能,待以后增强吧
0 请登录后投票
   发表时间:2009-07-28  
leadyu 写道
daiing 写道
1、MethodComponent 配置里的detect-clazzs 为何不支持递归搜索,现在只支持配置到哪里就trace哪里,只能一个.*,连.*.*都不行更不用说递归所有子目录了
如果项目大点,有几百个子目录,那不是完全无法完成的任务
我觉得理论上这个不难啊,建议在下个版本里支持
2、第二个问题,sqls里显示
Statement: 2009-07-27 03:42:56/2009-07-27 03:42:56
sql: 3ms 9%
但是在列表里的cost是32,这个3ms,9%,32ms各是什么含义?能否解释一下,谢谢
3、第三个问题,Method trace里能不能把get,set方法过滤掉,你知道spring里一堆的get,set方法,翻了几页就一个有用的方法,其他都是get,set方法,太影响使用效率了


1)jwebap确实不支持包名通配符,我觉得一般也没有必要对全工程进行监控,一个是粒度太细必然给工程带来一定压力,可以只针对某一层次进行监控,比如业务层,或者服务层。在实现上,要考虑的问题也是比较多的。

2)这个时间指sql实际执行的时间,列表的时间指Connection从获取到关闭的时间,如果两者差距较大,这部分时间有可能开销在sql执行完,到连接关闭间的代码中(一般是操作游标的代码,可以理解成,数据传输的时间)

3)你提的建议,很好,这个版本的trace分析器还不具备这种过滤功能,待以后增强吧


第一个问题,在实际上线的时候是不可能对所有程序进行监控,对效率肯定有影响,但是在开发过程中,效率就不是考虑的问题,每个人都要对自己的所有程序监控一下,如果能实现了更大的范围,那更小的范围自然也能实现,每个场景下的需求是不同的,你这个项目做的不错,但是希望这个功能可以的话还是加上吧
0 请登录后投票
   发表时间:2009-07-30  
leadyu 写道
itstarting 写道
leadyu 写道
Jwebap JdbcComponent配置注意:


JdbcComponent 对于本地数据源,在配置driver-clazz时不推荐直接配置数据库驱动作为driver-clazz,这和原先配置文档的说明不同,请大家注意!

由于一般应用都采用连接池技术作为数据源,而直接配置数据库驱动作为driver-clazz,会受到连接池影响,监控发现所有的连接都是未关闭的,造成jwebap泄漏检测,时间统计的结果都无效了。所以,这种情况,建议直接配置,连接池的Datasource作为driver-clazz:

1)c3p0:可以配置com.mchange.v2.c3p0.ComboPooledDataSource

2)dbcp:可以配置org.apache.commons.dbcp.BasicDataSource

同时,也可以配置应用自己封装的ConnectionManager之类的类。jwebap对于driver-clazz所返回的Connection和Datasource会做监控。




我在TOMCAT5.5下,使用了JNDI,此时是JNDI+JDBC的模式使用数据源,使用mysql数据库
我分析了这个版本的DBCP,不是标准的commons-jdbc,而是naming-factory-dbcp


此时我尝试了很多的办法,都无法配置出JdbcComponent的driver-clazzs:
1、org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory
——此时加载时即出现异常:java.lang.LinkageError: duplicate class definition: org/apache/tomcat/dbcp/dbcp/BasicDataSourceFactory

2、org.apache.tomcat.dbcp.dbcp.BasicDataSource
——此时加载时即出现异常:java.lang.LinkageError: duplicate class definition: org/apache/tomcat/dbcp/dbcp/BasicDataSource

3、com.mysql.jdbc.NonRegisteringDriver
——我拷贝了驱动到WEB-INF/lib下,此时在使用连接时才会出现异常:java.lang.NoClassDefFoundError: org/jwebap/toolkit/bytecode/asm/StaticHandleFactory





你用的这个dbcp其实还是容器管理的jndi连接池,为什么出现duplicate class definition重复类定义错误呢,是由于这个链接数据源是容器自己构建的,是没有办法在web应用里面监控。你可以把driver-clazzs配成你工程里面用户获取连接的类,它所返回的连接或者datasource对象都会被监控。

昨天已有网友问过这个问题,现在已经解决了,你试下



搞定了!

说说我的调试验证过程:
(注:验证你的包时,我正好在看OSWorkflow的代码,就扔进去试了)

为了搞清楚你说的“工程里面用户获取链接的类”,我还看了相关的代码,为:com.opensymphony.user.provider.jdbc.BaseJDBCProvider

这里的代码其实很简单:
protected DataSource ds;
...
ds = (DataSource) lookup(jndi);
...
ds.getConnection();

我跟踪调试了代码,此时lookup到的ds就是“org.apache.tomcat.dbcp.dbcp.BasicDataSource”的实例

到这里,我一直以为“工程里面用户获取链接的类”指的就是“org.apache.tomcat.dbcp.dbcp.BasicDataSource”,但怎么试都不行,我甚至怀疑自己的修改没有起作用,又看了看你的代码,确认无误啊

此时我灵机一动,你说的不会就是com.opensymphony.user.provider.jdbc.BaseJDBCProvider吧,一试果然对了,真是晕啊。

建议:你起名的driver-clazzs应该调整调整,哪怕叫ConnectionManager之类的也好;或者好好的写注释,否则还不知道你会因为这个问题浪费多少口舌,也不知让多少像我这么郁闷但又没我坚持的人对你的作品敬而远之。
0 请登录后投票
   发表时间:2009-07-31   最后修改:2009-07-31
itstarting 写道


说说我的调试验证过程:
(注:验证你的包时,我正好在看OSWorkflow的代码,就扔进去试了)

为了搞清楚你说的“工程里面用户获取链接的类”,我还看了相关的代码,为:com.opensymphony.user.provider.jdbc.BaseJDBCProvider

这里的代码其实很简单:
protected DataSource ds;
...
ds = (DataSource) lookup(jndi);
...
ds.getConnection();

我跟踪调试了代码,此时lookup到的ds就是“org.apache.tomcat.dbcp.dbcp.BasicDataSource”的实例

到这里,我一直以为“工程里面用户获取链接的类”指的就是“org.apache.tomcat.dbcp.dbcp.BasicDataSource”,但怎么试都不行,我甚至怀疑自己的修改没有起作用,又看了看你的代码,确认无误啊

此时我灵机一动,你说的不会就是com.opensymphony.user.provider.jdbc.BaseJDBCProvider吧,一试果然对了,真是晕啊。

建议:你起名的driver-clazzs应该调整调整,哪怕叫ConnectionManager之类的也好;或者好好的写注释,否则还不知道你会因为这个问题浪费多少口舌,也不知让多少像我这么郁闷但又没我坚持的人对你的作品敬而远之。


driver-clazzs的配置不管在界面上还是文档里都有说明,很多网友不爱看,又或者我的描述不清楚。其实driver-clazzs的配置是很灵活的,不仅仅配ConnectionManager可以,配连接池的Datasource也可以,甚至直接配数据库驱动也可以,可能这个名字确实需要换一换,呵呵
0 请登录后投票
   发表时间:2009-08-05  


  我项目中应用个这个框架,tomcat启动一切正常。能够进去管理界面。但是为什么只监控到http相关的信息

  jdbc和method都没有任何信息。我也看了前面的帖子,需要配detect-clazzs 我配的是自己封装的获取数据源

类。什么回事吗?
0 请登录后投票
   发表时间:2009-08-05  
ibadboy 写道


  我项目中应用个这个框架,tomcat启动一切正常。能够进去管理界面。但是为什么只监控到http相关的信息

  jdbc和method都没有任何信息。我也看了前面的帖子,需要配detect-clazzs 我配的是自己封装的获取数据源

类。什么回事吗?


jwebap启动有否错误?或者把你的这个类发出来看看
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics