WARNING: Error while registering Oracle JDBC Diagn

2020-07-19 05:28发布

问题:

We are getting the following error when using Oracle 11g ojdbc6.jar:

WARNING: Error while registering Oracle JDBC Diagnosability MBean.
java.lang.NoSuchMethodError:
javax.management.StandardMBean.<init>(Ljava/lang/Class;Z)V
        at oracle.jdbc.driver.OracleDiagnosabilityMBean.<init>(OracleDiagnosabilityMBean.java:34)
        at oracle.jdbc.driver.OracleDriver.registerMBeans(OracleDriver.java:342)
        at oracle.jdbc.driver.OracleDriver$1.run(OracleDriver.java:199)

After investigating from many forums and blogs, we have not found any final solutions yet. So, we want to share the workaround way here.

回答1:

According Oracle document, The JDBC diagnosability management feature introduces an MBean, oracle.jdbc.driver.OracleDiagnosabilityMBean. This MBean provides means to enable and disable JDBC logging, you can find it here: https://docs.oracle.com/cd/B28359_01/java.111/b31224/diagnose.htm.

And, the driver uses java.util.logging for logging purpose, actually in our cases we don't really need to use that info, so decide to disable the log and there is NO warning happen anymore.

How to disable the log for the driver (oracle.jdbc):

  • As default, JRE use the default properties file in JRE_HOME\lib\logging.properties, so edit the file and adding this info:
    • oracle.jdbc.level=OFF
  • Or configuring your own properties log file for java.util.logging
    • java -Djava.util.logging.config.file=/YourConfig.properties
    • Add oracle.jdbc.level=OFF to YourConfig.properties

It works for us, don't get any WANRING error above.



回答2:

I had the exact same issue. I don't know if my environment is the same.

In my environment, I'm using both jdbc and jboss jars in the same application. I believe, but did not verify, that something in the jboss jars is hooking into the class loader and causing the issue.

I got around the issue by only loading the ojdbc driver jar, creating my database instance, and then loading the jboss jars.



回答3:

I'm using Maven and my project was using log4j 1.2.15. For whatever reason, 1.2.15 has dependencies on jms 1.1, jmxtools 1.2.1, and jmxri 1.2.1.

jmxri 1.2.1 contains a version of StandardMBean with a constructor that takes a StandardMBean (not java.lang.Class). While I did not do extensive testing to confirm this hypothesis, I believe that this is the version of the class that was being used, and the ultimate cause of the error.

It seems as though log4j 1.2.14 doesn't have those dependencies. So I backed down to 1.2.14, and took them out.