Бесконечные исключения средства обновления MongoDB ReplicaSetStatus, использующие драйвер Java в Spring - PullRequest
4 голосов
/ 22 апреля 2011

Я только что развернул веб-приложение Spring на Glassfish. Это приложение содержит внедренный Spring bean-объект для объекта Mongo, который является довольно простым, он просто выглядит так:

<bean id="mongo" class="com.mongodb.Mongo">
    <constructor-arg value="127.0.0.1" />
    <constructor-arg value="27017" />
</bean>

Я запускаю свое веб-приложение, а затем использую этот объект Mongo для запроса БД и вставки записей и еще чего-то ... и все работает нормально.

Но в моем файле server.log я получаю бесконечный поток SEVERE сообщений об ошибках. Это NullPointerException с и IOException с. Похоже, что они имеют какое-то отношение к ReplicaSetStatus, но я не знаю, почему он пытается подключиться, включен ли он по умолчанию?

Кто-нибудь знает, что вызывает это? Как я могу решить проблему или остановить то, что их вызывает?

// РЕДАКТИРОВАТЬ: Исключения начинаются сразу после развертывания приложения. Но они не останавливаются, когда я отключаю свое приложение или даже удаляю его.

Эти сообщения просто пишутся постоянно, но из того, что я вижу, есть только 4 типа ошибок:

[#|2011-04-22T17:49:40.818+0900|SEVERE|glassfish3.1|com.mongodb.ReplicaSetStatus|_ThreadID=37;_ThreadName=Thread-1;|can't update node: 27017:27017
java.lang.NullPointerException
    at com.mongodb.OutMessage.reset(OutMessage.java:73)
    at com.mongodb.OutMessage.<init>(OutMessage.java:51)
    at com.mongodb.OutMessage.query(OutMessage.java:38)
    at com.mongodb.DBPort.findOne(DBPort.java:127)
    at com.mongodb.DBPort.runCommand(DBPort.java:138)
    at com.mongodb.ReplicaSetStatus$Node.update(ReplicaSetStatus.java:149)
    at com.mongodb..updateAll(ReplicaSetStatus.java:314)
    at com.mongodb.ReplicaSetStatus$Updater.run(ReplicaSetStatus.java:263)
|#]

[#|2011-04-22T17:49:40.818+0900|SEVERE|glassfish3.1|com.mongodb.ReplicaSetStatus|_ThreadID=37;_ThreadName=Thread-1;|can't update node: localhost:27017
java.lang.NullPointerException
    at com.mongodb.OutMessage.reset(OutMessage.java:73)
    at com.mongodb.OutMessage.<init>(OutMessage.java:51)
    at com.mongodb.OutMessage.query(OutMessage.java:38)
    at com.mongodb.DBPort.findOne(DBPort.java:127)
    at com.mongodb.DBPort.runCommand(DBPort.java:138)
    at com.mongodb.ReplicaSetStatus$Node.update(ReplicaSetStatus.java:149)
    at com.mongodb.ReplicaSetStatus.updateAll(ReplicaSetStatus.java:314)
    at com.mongodb.ReplicaSetStatus.ensureMaster(ReplicaSetStatus.java:306)
    at com.mongodb.DBTCPConnector.checkMaster(DBTCPConnector.java:383)
    at com.mongodb.ReplicaSetStatus$Updater.run(ReplicaSetStatus.java:275)
|#]

[#|2011-04-22T17:49:41.676+0900|SEVERE|glassfish3.1|com.mongodb.ReplicaSetStatus|_ThreadID=48;_ThreadName=Thread-1;|can't update node: 127.0.0.1:27017
java.io.IOException: couldn't connect to [/127.0.0.1:27017] bc:java.net.ConnectException: Connection refused: connect
    at com.mongodb.DBPort._open(DBPort.java:206)
    at com.mongodb.DBPort.go(DBPort.java:94)
    at com.mongodb.DBPort.go(DBPort.java:75)
    at com.mongodb.DBPort.findOne(DBPort.java:129)
    at com.mongodb.DBPort.runCommand(DBPort.java:138)
    at com.mongodb.ReplicaSetStatus$Node.update(ReplicaSetStatus.java:149)
    at com.mongodb.ReplicaSetStatus.updateAll(ReplicaSetStatus.java:314)
    at com.mongodb.ReplicaSetStatus.ensureMaster(ReplicaSetStatus.java:306)
    at com.mongodb.DBTCPConnector.checkMaster(DBTCPConnector.java:383)
    at com.mongodb.ReplicaSetStatus$Updater.run(ReplicaSetStatus.java:275)
|#]

[#|2011-04-22T17:49:41.676+0900|SEVERE|glassfish3.1|com.mongodb.ReplicaSetStatus|_ThreadID=48;_ThreadName=Thread-1;|can't update node: 27017:27017
java.io.IOException: couldn't connect to [/0.0.105.137:27017] bc:java.net.SocketException: Network is unreachable: connect
    at com.mongodb.DBPort._open(DBPort.java:206)
    at com.mongodb.DBPort.go(DBPort.java:94)
    at com.mongodb.DBPort.go(DBPort.java:75)
    at com.mongodb.DBPort.findOne(DBPort.java:129)
    at com.mongodb.DBPort.runCommand(DBPort.java:138)
    at com.mongodb.ReplicaSetStatus$Node.update(ReplicaSetStatus.java:149)
    at com.mongodb.ReplicaSetStatus.updateAll(ReplicaSetStatus.java:314)
    at com.mongodb.ReplicaSetStatus.ensureMaster(ReplicaSetStatus.java:306)
    at com.mongodb.DBTCPConnector.checkMaster(DBTCPConnector.java:383)
    at com.mongodb.ReplicaSetStatus$Updater.run(ReplicaSetStatus.java:275)
|#]

1 Ответ

9 голосов
/ 23 апреля 2011

Измените ваше определение bean-компонента Mongo в контекстном файле Spring, как здесь:

    <constructor-arg value="${db.host}" type="java.lang.String" />
    <constructor-arg value="${db.port}" type="int" />

Если вы пропустите атрибуты type , вызывается другой конструктор класса Mongo, аргументы которого являются экземплярами типа com.mongodb.ServerAddress, а 27017 обрабатывается как имя хоста, а InetAddress.getAllByName (host) разрешается до этого IP 0.0.105.137 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...