0

最近我在应用程序启动时遇到了问题,使用 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 可用。

有没有其他人有类似的问题,或者有没有我缺少的解决方案?

4

1 回答 1

0

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

但是我知道问题所在,在更改了这样的地图后,我正在同样的混乱中奔跑

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

进入这个

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

而且我必须将其更改为对象,因为有些值是字符串,而另一些是整数,而整数必须是整数(不是字符串)-> 只是因为字符串在语义上是错误的..

因此,在我的示例中,将 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 好吧,我总有一天会将我的 Map 更改为 BasicDBObject,目前.. 我​​只是忽略了这个异常,一切正常^^

于 2013-05-17T12:46:09.543 回答