2015-06-08 12:26:19 +02:00
|
|
|
/*
|
2020-01-02 07:24:59 -05:00
|
|
|
* Copyright (C) 2009-2020 Lightbend Inc. <https://www.lightbend.com>
|
2015-06-08 12:26:19 +02:00
|
|
|
*/
|
2018-03-13 23:45:55 +09:00
|
|
|
|
2015-06-08 12:26:19 +02:00
|
|
|
package akka.persistence.query
|
|
|
|
|
|
2020-04-27 20:32:18 +08:00
|
|
|
import scala.reflect.ClassTag
|
|
|
|
|
|
|
|
|
|
import com.typesafe.config.{ Config, ConfigFactory }
|
|
|
|
|
|
2015-06-08 12:26:19 +02:00
|
|
|
import akka.actor._
|
2018-04-26 14:00:15 +01:00
|
|
|
import akka.annotation.InternalApi
|
|
|
|
|
import akka.persistence.{ PersistencePlugin, PluginProvider }
|
2020-04-27 20:32:18 +08:00
|
|
|
import akka.persistence.query.scaladsl.ReadJournal
|
2019-04-16 12:37:04 +01:00
|
|
|
import akka.util.unused
|
2018-04-26 14:00:15 +01:00
|
|
|
|
2015-06-08 12:26:19 +02:00
|
|
|
/**
|
|
|
|
|
* Persistence extension for queries.
|
|
|
|
|
*/
|
|
|
|
|
object PersistenceQuery extends ExtensionId[PersistenceQuery] with ExtensionIdProvider {
|
2019-03-11 10:38:24 +01:00
|
|
|
|
2015-06-08 12:26:19 +02:00
|
|
|
override def get(system: ActorSystem): PersistenceQuery = super.get(system)
|
2019-12-05 16:01:23 +01:00
|
|
|
override def get(system: ClassicActorSystemProvider): PersistenceQuery = super.get(system)
|
2015-06-08 12:26:19 +02:00
|
|
|
|
|
|
|
|
def createExtension(system: ExtendedActorSystem): PersistenceQuery = new PersistenceQuery(system)
|
|
|
|
|
|
2020-08-10 12:54:38 +02:00
|
|
|
def lookup: PersistenceQuery.type = PersistenceQuery
|
2015-06-08 12:26:19 +02:00
|
|
|
|
2018-04-26 14:00:15 +01:00
|
|
|
@InternalApi
|
|
|
|
|
private[akka] val pluginProvider: PluginProvider[ReadJournalProvider, ReadJournal, javadsl.ReadJournal] =
|
|
|
|
|
new PluginProvider[ReadJournalProvider, scaladsl.ReadJournal, javadsl.ReadJournal] {
|
|
|
|
|
override def scalaDsl(t: ReadJournalProvider): ReadJournal = t.scaladslReadJournal()
|
|
|
|
|
override def javaDsl(t: ReadJournalProvider): javadsl.ReadJournal = t.javadslReadJournal()
|
|
|
|
|
}
|
2015-06-08 12:26:19 +02:00
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2018-04-26 14:00:15 +01:00
|
|
|
class PersistenceQuery(system: ExtendedActorSystem)
|
2019-03-11 10:38:24 +01:00
|
|
|
extends PersistencePlugin[scaladsl.ReadJournal, javadsl.ReadJournal, ReadJournalProvider](system)(
|
|
|
|
|
ClassTag(classOf[ReadJournalProvider]),
|
|
|
|
|
PersistenceQuery.pluginProvider)
|
|
|
|
|
with Extension {
|
|
|
|
|
|
2018-03-26 13:52:31 +02:00
|
|
|
/**
|
|
|
|
|
* Scala API: Returns the [[akka.persistence.query.scaladsl.ReadJournal]] specified by the given
|
|
|
|
|
* read journal configuration entry.
|
|
|
|
|
*
|
|
|
|
|
* The provided readJournalPluginConfig will be used to configure the journal plugin instead of the actor system
|
|
|
|
|
* config.
|
|
|
|
|
*/
|
|
|
|
|
final def readJournalFor[T <: scaladsl.ReadJournal](readJournalPluginId: String, readJournalPluginConfig: Config): T =
|
2018-04-26 14:00:15 +01:00
|
|
|
pluginFor(readJournalPluginId, readJournalPluginConfig).scaladslPlugin.asInstanceOf[T]
|
2018-03-26 13:52:31 +02:00
|
|
|
|
2015-06-08 12:26:19 +02:00
|
|
|
/**
|
2015-09-14 11:08:22 +02:00
|
|
|
* Scala API: Returns the [[akka.persistence.query.scaladsl.ReadJournal]] specified by the given
|
|
|
|
|
* read journal configuration entry.
|
2015-06-08 12:26:19 +02:00
|
|
|
*/
|
2015-09-14 11:08:22 +02:00
|
|
|
final def readJournalFor[T <: scaladsl.ReadJournal](readJournalPluginId: String): T =
|
2018-03-26 13:52:31 +02:00
|
|
|
readJournalFor(readJournalPluginId, ConfigFactory.empty)
|
2015-09-14 11:08:22 +02:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Java API: Returns the [[akka.persistence.query.javadsl.ReadJournal]] specified by the given
|
|
|
|
|
* read journal configuration entry.
|
|
|
|
|
*/
|
2019-03-13 10:56:20 +01:00
|
|
|
final def getReadJournalFor[T <: javadsl.ReadJournal](
|
2019-04-16 12:37:04 +01:00
|
|
|
@unused clazz: Class[T],
|
2019-03-13 10:56:20 +01:00
|
|
|
readJournalPluginId: String,
|
|
|
|
|
readJournalPluginConfig: Config): T =
|
2018-04-26 14:00:15 +01:00
|
|
|
pluginFor(readJournalPluginId, readJournalPluginConfig).javadslPlugin.asInstanceOf[T]
|
2018-03-26 13:52:31 +02:00
|
|
|
|
2019-03-11 10:38:24 +01:00
|
|
|
final def getReadJournalFor[T <: javadsl.ReadJournal](clazz: Class[T], readJournalPluginId: String): T =
|
|
|
|
|
getReadJournalFor[T](clazz, readJournalPluginId, ConfigFactory.empty())
|
2015-09-14 11:08:22 +02:00
|
|
|
|
2015-06-08 12:26:19 +02:00
|
|
|
}
|