2013-05-09 63 views
0

最近,我在使用MongoDB 2.10.1和我的JavaEE应用程序在Jboss 4.2.3GA上运行时遇到了应用程序启动时的问题。MongoDB JMX注册异常:类不公开管理接口

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数据库查询,从我所看到的,是有MongoOptions设置alwaysUseMBeans为的Java6或更高版本的用户,运行在JBoss上一段时间。但是,在尝试通过Java驱动程序将alwaysUseMBeans设置为true时,没有可用的setter。

有没有其他人有类似的问题,或者是否有我失踪的解决方案?

回答

0

他告诉你在异常本身的答案......我只是遇到了像你一样的失败。如果您在数据中某处使用数据类型“对象”,Java不会喜欢它 - >您始终需要使用Java中更具体的数据类型,而不是使用Object。

但我知道这个问题,我在同shizzle运行时更改地图这样

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

这个

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

后,我不得不改变它反对,因为一些值是字符串,其他一些是整数,整数必须是整数(不是字符串) - >仅仅因为它在语义上与字符串错误。仅将示例更改为字符串对象构造的示例。更好的方法是创建一个

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

并在正确的数据类型中追加您喜欢的值。

或者,你喜欢他告诉你在异常集MongoDB中驱动程序这个选项:

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

但是,是的......超级搞笑......我设置的选项和我仍然得到这个愚蠢的异常,哦,我喜欢这个!当记录的东西只是在撒谎时,这总是非常棒! :D好吧,我会改变我的地图成为BasicDBObject总有一天,目前..我只是忽略这个例外,一切运作良好^^