doc: improve doc example of javadsl Extension (#28100)

This commit is contained in:
Patrik Nordwall 2019-11-08 16:27:52 +01:00 committed by Johan Andrén
parent a47886c4f5
commit 0eddbe3589
2 changed files with 31 additions and 29 deletions

View file

@ -9,16 +9,14 @@ import akka.actor.typed.Behavior;
import akka.actor.typed.Extension;
import akka.actor.typed.ExtensionId;
import akka.actor.typed.javadsl.Behaviors;
import com.typesafe.config.ConfigFactory;
import docs.akka.typed.extensions.DatabasePool;
import docs.akka.typed.extensions.ExtensionDocSpec;
import java.util.concurrent.CompletionStage;
public class ExtensionDocTest {
interface ExtensionDocTest {
// #shared-resource
public static class ExpensiveDatabaseConnection {
public class ExpensiveDatabaseConnection {
public CompletionStage<Object> executeQuery(String query) {
throw new RuntimeException("I should do a database query");
}
@ -27,10 +25,31 @@ public class ExtensionDocTest {
// #shared-resource
// #extension
public static class DatabaseConnectionPool implements Extension {
public class DatabaseConnectionPool implements Extension {
// #extension
// #extension-id
public static class Id extends ExtensionId<DatabaseConnectionPool> {
private static final Id instance = new Id();
private Id() {}
// called once per ActorSystem
@Override
public DatabaseConnectionPool createExtension(ActorSystem<?> system) {
return new DatabaseConnectionPool(system);
}
public static DatabaseConnectionPool get(ActorSystem<?> system) {
return instance.apply(system);
}
}
// #extension-id
// #extension
private final ExpensiveDatabaseConnection _connection;
public DatabaseConnectionPool(ActorSystem<?> system) {
private DatabaseConnectionPool(ActorSystem<?> system) {
// database configuration can be loaded from config
// from the actor system
_connection = new ExpensiveDatabaseConnection();
@ -42,25 +61,6 @@ public class ExtensionDocTest {
}
// #extension
// #extension-id
public static class DatabaseConnectionPoolId extends ExtensionId<DatabaseConnectionPool> {
private static final DatabaseConnectionPoolId instance = new DatabaseConnectionPoolId();
private DatabaseConnectionPoolId() {}
// called once per ActorSystem
@Override
public DatabaseConnectionPool createExtension(ActorSystem system) {
return new DatabaseConnectionPool(system);
}
public static DatabaseConnectionPool get(ActorSystem<?> system) {
return instance.apply(system);
}
}
// #extension-id
public static Behavior<Object> initialBehavior() {
return null;
}
@ -69,7 +69,7 @@ public class ExtensionDocTest {
// #usage
Behaviors.setup(
(context) -> {
DatabaseConnectionPoolId.get(context.getSystem())
DatabaseConnectionPool.Id.get(context.getSystem())
.connection()
.executeQuery("insert into...");
return initialBehavior();

View file

@ -36,9 +36,9 @@ Java
: @@snip [ExtensionDocTest.java](/akka-actor-typed-tests/src/test/java/jdocs/akka/typed/extensions/ExtensionDocTest.java) { #extension }
This is the public API of your extension. Internally in this example we instantiate our expensive database connection.
The `DatabaseConnectionPool` can be looked up this way any number of times and it will return the same instance.
Then create an @apidoc[akka.actor.typed.ExtensionId] to identify the extension.
@scala[A good convention is to let the companion object of the `Extension` be the `ExtensionId`.]@java[A good convention is to define the `ExtensionId` as a static inner class of the `Extension`.]
Scala
: @@snip [ExtensionDocSpec.scala](/akka-actor-typed-tests/src/test/scala/docs/akka/typed/extensions/ExtensionDocSpec.scala) { #extension-id }
@ -54,6 +54,8 @@ Scala
Java
: @@snip [ExtensionDocTest.java](/akka-actor-typed-tests/src/test/java/jdocs/akka/typed/extensions/ExtensionDocTest.java) { #usage }
The `DatabaseConnectionPool` can be looked up in this way any number of times and it will return the same instance.
<a id="loading"></a>
## Loading from configuration
@ -66,7 +68,7 @@ Scala
Java
: ```ruby
akka.actor.typed {
extensions = ["jdocs.akka.extensions.ExtensionDocTest$DatabaseConnectionPoolId"]
extensions = ["jdocs.akka.extensions.ExtensionDocTest$DatabaseConnectionPool$Id"]
}
```