Обновление reactivemongo play 2.3 с 0.11.7 до 0.11.11 вызывает ExceptionInInitializerError

[Я редактирую этот вопрос, чтобы отразить мои последние тесты]

Я пытаюсь обновить приложение akka/play 2.3 с

"org.reactivemongo" %% "play2-reactivemongo" % "0.11.7.play23"

to

"org.reactivemongo" %% "play2-reactivemongo" % "0.11.11-play23"

Компиляция проходит нормально, но во время выполнения я получаю следующую ошибку:

[ERROR] -- NettyTransport(akka://reactivemongo)
failed to bind to /127.0.0.1:2552, shutting down Netty transport

...

Caused by: org.jboss.netty.channel.ChannelException: Failed to bind to: /127.0.0.1:2552

Akka-часть application.conf выглядит следующим образом:

akka {
    loggers = ["akka.event.slf4j.Slf4jLogger"]
    loglevel = "DEBUG"
    actor {
        provider = "akka.remote.RemoteActorRefProvider"
        mailbox {
            requirements {
                "akka.dispatch.BoundedMessageQueueSemantics" = bounded-mailbox
            }
        }
    }
    remote {
        enabled-transports = ["akka.remote.netty.tcp"]
        netty.tcp {
            hostname = "127.0.0.1"
            port = 2552
        }
    }
}

Исключение возникает при попытке создать экземпляр драйвера reactivemongo.

val driver = new reactivemongo.api.MongoDriver()

Это говорит о том, что mongodriver использует Akka под капотом и привязывается к тому же адресу, что и мое основное приложение. И действительно, если я отредактирую свой application.conf и изменю akka.remote.netty.tcp.port с 2552 на 2553, я получу следующее исключение:

[ERROR] -- NettyTransport(akka://reactivemongo)
failed to bind to /127.0.0.1:2553, shutting down Netty transport

В предыдущих версиях reactivemongo по умолчанию создание экземпляра драйвера запускало новую систему акторов, поэтому, возможно, версия 0.11.11 пытается повторно использовать существующую систему?

Я попытался изменить порт akka, используемый драйвером, следующим образом:

val customConf = ConfigFactory.parseString("""
  akka {
    remote {
      netty.tcp.port = 4711
    }
  }
  """)

val typesafeConfig: com.typesafe.config.Config = ConfigFactory.load(customConf)

val driver = new reactivemongo.api.MongoDriver(Some(typesafeConfig))

Но это не работает, новый порт не учитывается, и я продолжаю получать ту же ошибку:

[ERROR] -- NettyTransport(akka://reactivemongo)
failed to bind to /127.0.0.1:2552, shutting down Netty transport

person david    schedule 25.05.2016    source источник
comment
Поделитесь кодом/воспроизведением поможет   -  person cchantep    schedule 25.05.2016
comment
Хорошо, я только что добавил контекстный код.   -  person david    schedule 25.05.2016
comment
Вы используете connection(..), также известный как connection.apply, вам лучше использовать новый connection.database с правильным разрешением БД.   -  person cchantep    schedule 25.05.2016
comment
сделано, все соединения() заменены на connection.db(). Однако это не устраняет проблему.   -  person david    schedule 26.05.2016
comment
Я не сказал .db, но .database, что совсем не то же самое   -  person cchantep    schedule 26.05.2016
comment
Нет, тоже не помогает ;-( все еще получаю этот java.lang.ExceptionInInitializerError   -  person david    schedule 26.05.2016
comment
поместите полную трассировку стека   -  person cchantep    schedule 26.05.2016
comment
только что добавил трассировку стека внизу сообщения.   -  person david    schedule 26.05.2016
comment
Что такое mongodbInsert.scala:153) в tuktu.nosql.processors.mongodb   -  person cchantep    schedule 27.05.2016
comment
Вызов метода getFutureCollection в MongoTools (который объявлен как объект): MongoTools.getFutureCollection(настройки, учетные данные, scramsha1, conn)   -  person david    schedule 27.05.2016
comment
Вы должны попытаться сделать вещи проще. Без простого репродуктора есть много неправильного использования, чем причина этого.   -  person cchantep    schedule 27.05.2016
comment
Думаю, я лучше понимаю, в чем проблема. Только что обновил вопрос соответственно.   -  person david    schedule 31.05.2016


Ответы (1)


На самом деле ReactiveMongo загружает свою конфигурацию из ключа mongo-async-driver. Итак, добавление следующих разрешений для настройки базовой системы ReactiveMongo akka:

val customConf = ConfigFactory.parseString("""
  mongo-async-driver {
    akka {
      loglevel = WARNING
      remote {
        enabled-transports = ["akka.remote.netty.tcp"]
        netty.tcp {
          hostname = "127.0.0.1"
          port = 4711
        }
      }
    }
  }
  """)
person david    schedule 31.05.2016