本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告

戒除浮躁,读好书,交益友


我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:邢红瑞的blog
日志总数:523
评论数量:1142
留言数量:0
访问次数:9692091
建立时间:2004年12月20日




[数据库]强悍的oracle驱动
原创空间,  文章收藏,  软件技术,  电脑与网络

邢红瑞 发表于 2008/4/8 16:15:09

 随着oracle数据库的版本不断升级,9i 10g 11g,数据库的驱动也是不断变化,直到最新的ojdbc6.jar,唯一不变的就bug。最近使用Oracle 11.1.0.6.0-Production+ JDBC 4.0 complied with JDK6,出现SEVERE: Error while registering Oracle JDBC Diagnosability MBean.javax.management.MalformedObjectNameException: Invalid character '' in value part of propertyat javax.management.ObjectName.construct(ObjectName.java:602)at javax.management.ObjectName.<init>(ObjectName.java:1394)at oracle.jdbc.driver.OracleDriver.registerMBeans(OracleDriver.java:303)at oracle.jdbc.driver.OracleDriver$1.run(OracleDriver.java:213)at java.security.AccessController.doPrivileged(Native Method)at oracle.jdbc.driver.OracleDriver.<clinit>(OracleDriver.java:209)at java.lang.Class.forName0(Native Method)at java.lang.Class.forName(Class.java:169)只要是访问多次数据库,肯定出现,看了看自己的代码,认为是驱动的问题,oracle 11g可以使用diagnosabilty配置logging ,com.oracle.jdbc:type=diagnosability,name=<loader>一般用Thread.currentThread().getContextClassLoader().toString(),得到loader的。估计是javax.management.ObjectName 抛出一个异常MalformedObjectNameException - 如果 domain、key 或 value 包含非法字符,如果 value 未遵循有关引号使用的规则。javax.management.ObjectName 说明public class ObjectNameextends Objectimplements Comparable<ObjectName>, QueryExp表示 MBean 的对象名,或者能够与多个 MBean 名称相匹配的模式。 这个问题一般出现tomcat中,oracle对org.apache.catalina.loader.WebappClassLoader返回的字符toString()做了错误的错误的处理。 反编译的结果ojdbc6的驱动,反编译是不道德的,请上帝和佛祖赎罪。oracle.jdbc.driver的OracleDriver类  public static void registerMBeans() {        try {            MBeanServer mbeanserver = null;            try {                Class class1 = Class.forName("oracle.as.jmx.framework.PortableMBeanFactory");                Constructor constructor = class1.getConstructor(new Class[0]);                Object obj = constructor.newInstance(new Object[0]);                Method method = class1.getMethod("getMBeanServer", new Class[0]);                mbeanserver = (MBeanServer)method.invoke(obj, new Object[0]);            }            catch (ClassNotFoundException classnotfoundexception) {                mbeanserver = ManagementFactory.getPlatformMBeanServer();            }            catch (NoSuchMethodException nosuchmethodexception) {                Logger.getLogger("oracle.jdbc").log(Level.SEVERE, "Found Oracle Apps MBeanServer but not the getMBeanServer method.", nosuchmethodexception);                mbeanserver = ManagementFactory.getPlatformMBeanServer();            }            catch (InstantiationException instantiationexception) {                Logger.getLogger("oracle.jdbc").log(Level.SEVERE, "Found Oracle Apps MBeanServer but could not create an instance.", instantiationexception);                mbeanserver = ManagementFactory.getPlatformMBeanServer();            }            catch (IllegalAccessException illegalaccessexception) {                Logger.getLogger("oracle.jdbc").log(Level.SEVERE, "Found Oracle Apps MBeanServer but could not access the getMBeanServer method.", illegalaccessexception);                mbeanserver = ManagementFactory.getPlatformMBeanServer();            }            catch (InvocationTargetException invocationtargetexception) {                Logger.getLogger("oracle.jdbc").log(Level.SEVERE, "Found Oracle Apps MBeanServer but the getMBeanServer method threw an exception.", invocationtargetexception);                mbeanserver = ManagementFactory.getPlatformMBeanServer();            }            if (mbeanserver != null) {                String s = Thread.currentThread().getContextClassLoader().toString();                s = s.replaceAll("[,=:\"]+", "");                ObjectName objectname = new ObjectName((new StringBuilder()).append("com.oracle.jdbc:type=diagnosability,name=").append(s).toString());                mbeanserver.registerMBean(new OracleDiagnosabilityMBean(), objectname);            } else {                Logger.getLogger("oracle.jdbc").log(Level.SEVERE, "Unable to find an MBeanServer so no MBears are registered.");            }        }        catch (JMException jmexception) {            Logger.getLogger("oracle.jdbc").log(Level.SEVERE, "Error while registering Oracle JDBC Diagnosability MBean.", jmexception);        }        catch (Throwable throwable) {            Logger.getLogger("oracle.jdbc").log(Level.SEVERE, "Error while registering Oracle JDBC Diagnosability MBean.", throwable);        }    } 后来发现这就是 bug 6362104,oracle已经fixed。


阅读全文(13237) | 回复(0) | 编辑 | 精华
 


回复:强悍的oracle驱动
原创空间,  文章收藏,  软件技术,  电脑与网络

tom(游客)发表评论于2009/5/28 11:05:54

严重: Error while registering Oracle JDBC Diagnosability MBean.javax.management.MalformedObjectNameException: Invalid character '' in value part of property   我也遇到同样的问题,请问如何解决,谢谢!


个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.309 second(s), page refreshed 144766727 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号