最近我在应用程序启动时遇到问题,使用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可用。
是否还有其他人遇到过类似的问题,或者我是否有解决方案?
答案 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,目前..我只是忽略这个例外,一切运作良好^^