From 0b0a86df542a4794d27cee8c74399f5ebf0387e5 Mon Sep 17 00:00:00 2001 From: Jan Ypma Date: Mon, 12 Oct 2015 09:32:23 +0200 Subject: [PATCH] =per #18708 only try further constructors if constructor can't be found * Any exception in a read journal's constructor can now be propagated to the caller correctly without being shadowed. --- .../scala/akka/persistence/query/PersistenceQuery.scala | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/akka-persistence-query/src/main/scala/akka/persistence/query/PersistenceQuery.scala b/akka-persistence-query/src/main/scala/akka/persistence/query/PersistenceQuery.scala index f1cfb3ff6d..51b31d2c96 100644 --- a/akka-persistence-query/src/main/scala/akka/persistence/query/PersistenceQuery.scala +++ b/akka-persistence-query/src/main/scala/akka/persistence/query/PersistenceQuery.scala @@ -78,9 +78,12 @@ class PersistenceQuery(system: ExtendedActorSystem) extends Extension { log.debug(s"Create plugin: ${configPath} ${pluginClassName}") val pluginClass = system.dynamicAccess.getClassFor[AnyRef](pluginClassName).get - system.dynamicAccess.createInstanceFor[ReadJournalProvider](pluginClass, (classOf[ExtendedActorSystem], system) :: (classOf[Config], pluginConfig) :: Nil) - .orElse(system.dynamicAccess.createInstanceFor[ReadJournalProvider](pluginClass, (classOf[ExtendedActorSystem], system) :: Nil)) - .orElse(system.dynamicAccess.createInstanceFor[ReadJournalProvider](pluginClass, Nil)) + def instantiate(args: collection.immutable.Seq[(Class[_], AnyRef)]) = + system.dynamicAccess.createInstanceFor[ReadJournalProvider](pluginClass, args) + + instantiate((classOf[ExtendedActorSystem], system) :: (classOf[Config], pluginConfig) :: Nil) + .recoverWith { case x: NoSuchMethodException ⇒ instantiate((classOf[ExtendedActorSystem], system) :: Nil) } + .recoverWith { case x: NoSuchMethodException ⇒ instantiate(Nil) } .recoverWith { case ex: Exception ⇒ Failure.apply(new IllegalArgumentException(s"Unable to create read journal plugin instance for path [$configPath], class [$pluginClassName]!", ex)) }.get