MongoDB JMX注册异常:类不公开管理接口

时间:2013-05-09 10:46:51

标签: mongodb exception jmx jboss-4.2.x

最近我在应用程序启动时遇到问题,使用MongoDB 2.10.1,我的JavaEE应用程序在Jboss 4.2.3GA上运行。

 AM com.mongodb.DBPortPool$Holder get
 WARNING: JMX registration error: com.mongodb.util.management.JMException:
 javax.management.NotCompliantMBeanException: Class does not expose a management
 Class does not expose a management interface: java.lang.Object
 Consider setting com.mongodb.MongoOptions.alwaysUseMBeans property to true.
 Continuing...

我的应用程序使用无状态会话Bean处理数据库查询,从我看到的情况来看,在Jboss上运行时,有一个MongoOptions设置为Java6或更高版本的用户使用alwaysUseMBeans。但是,在尝试通过Java驱动程序将alwaysUseMBeans设置为true时,没有这样的setter可用。

是否还有其他人遇到过类似的问题,或者我是否有解决方案?

1 个答案:

答案 0 :(得分:0)

他告诉你异常本身的答案......我和你一样陷入了同样的失败。如果您在数据中的某处使用数据类型“对象”,Java不喜欢它 - >在Java中总是有一个更具体的数据类型,您应该使用它而不是Object。

但是我知道这个问题,我改变了像这样的地图后,我正在运行相同的shizzle

Map<String, String> map = new HashMap<String, String>();

进入这个

Map<String, Object> map = new HashMap<String, Object>();

我必须将它更改为object,因为有些值是字符串,有些值是整数,而整数必须是整数(不是字符串) - &gt;仅仅因为字符串在语义上是错误的。

因此,在我的示例中,简单地将Map更改为String-Object-Construct是最简单的方法。更好的方法是创建一个

BasicDBObject().append("myField", aValueOfTheCorrectDatatype);

并将您喜欢的值附加到正确的数据类型中。

或者,您在MongoDB驱动程序中设置此选项,就像他在异常中告诉您的那样:

MongoClientOptions.Builder builder = new MongoClientOptions.Builder().alwaysUseMBeans(true);
mongo = new MongoClient(configuration.getEpgMongoDbHost(), builder.build());

但是啊......超级好笑...我设定了选项,我仍然得到这个愚蠢的例外,哦,我爱这个!当记录的东西只是说谎时,总是那么好! :D好吧我有一天会把我的地图变成一个BasicDBObject,目前..我只是忽略这个例外,一切运作良好^^