精华帖 (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 |
|
返回顶楼 | |
发表时间: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对象都会被监控。 昨天已有网友问过这个问题,现在已经解决了,你试下 |
|
返回顶楼 | |
发表时间:2009-07-24
lovit 写道 为什么看不到执行的SQL,谢谢!
请把错误和你的配置发出来 |
|
返回顶楼 | |
发表时间: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方法,太影响使用效率了 |
|
返回顶楼 | |
发表时间: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分析器还不具备这种过滤功能,待以后增强吧 |
|
返回顶楼 | |
发表时间: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分析器还不具备这种过滤功能,待以后增强吧 第一个问题,在实际上线的时候是不可能对所有程序进行监控,对效率肯定有影响,但是在开发过程中,效率就不是考虑的问题,每个人都要对自己的所有程序监控一下,如果能实现了更大的范围,那更小的范围自然也能实现,每个场景下的需求是不同的,你这个项目做的不错,但是希望这个功能可以的话还是加上吧 |
|
返回顶楼 | |
发表时间: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之类的也好;或者好好的写注释,否则还不知道你会因为这个问题浪费多少口舌,也不知让多少像我这么郁闷但又没我坚持的人对你的作品敬而远之。 |
|
返回顶楼 | |
发表时间: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也可以,甚至直接配数据库驱动也可以,可能这个名字确实需要换一换,呵呵 |
|
返回顶楼 | |
发表时间:2009-08-05
我项目中应用个这个框架,tomcat启动一切正常。能够进去管理界面。但是为什么只监控到http相关的信息。 jdbc和method都没有任何信息。我也看了前面的帖子,需要配detect-clazzs 我配的是自己封装的获取数据源 类。什么回事吗? |
|
返回顶楼 | |
发表时间:2009-08-05
ibadboy 写道 我项目中应用个这个框架,tomcat启动一切正常。能够进去管理界面。但是为什么只监控到http相关的信息。 jdbc和method都没有任何信息。我也看了前面的帖子,需要配detect-clazzs 我配的是自己封装的获取数据源 类。什么回事吗? jwebap启动有否错误?或者把你的这个类发出来看看 |
|
返回顶楼 | |