« | August 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 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。 |
|
回复:强悍的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 »
|