diff --git a/akka-docs/src/main/paradox/experimental/index-java.md b/akka-docs/src/main/paradox/experimental/index-java.md
index 90baded126..d1f592dad0 100644
--- a/akka-docs/src/main/paradox/experimental/index-java.md
+++ b/akka-docs/src/main/paradox/experimental/index-java.md
@@ -1,4 +1,4 @@
# Experimental Modules
The label experimental caused confusion and discomfort and has therefore been replaced with "May Change"
-please see @ref:[Modules marked "May Change"](../common/may-change.md).
\ No newline at end of file
+please see @ref:[Modules marked "May Change"](../scala/common/may-change.md).
\ No newline at end of file
diff --git a/akka-docs/src/main/paradox/experimental/index.md b/akka-docs/src/main/paradox/experimental/index.md
index 90baded126..d1f592dad0 100644
--- a/akka-docs/src/main/paradox/experimental/index.md
+++ b/akka-docs/src/main/paradox/experimental/index.md
@@ -1,4 +1,4 @@
# Experimental Modules
The label experimental caused confusion and discomfort and has therefore been replaced with "May Change"
-please see @ref:[Modules marked "May Change"](../common/may-change.md).
\ No newline at end of file
+please see @ref:[Modules marked "May Change"](../scala/common/may-change.md).
\ No newline at end of file
diff --git a/akka-docs/src/main/paradox/index.md b/akka-docs/src/main/paradox/index.md
index 13fb3d140a..204c099eee 100644
--- a/akka-docs/src/main/paradox/index.md
+++ b/akka-docs/src/main/paradox/index.md
@@ -4,7 +4,6 @@
@@@ index
-* [guide](guide/index.md)
* [java](java.md)
* [scala](scala.md)
diff --git a/akka-docs/src/main/paradox/java.md b/akka-docs/src/main/paradox/java.md
index da40c62c37..4a2caf3ea1 100644
--- a/akka-docs/src/main/paradox/java.md
+++ b/akka-docs/src/main/paradox/java.md
@@ -4,9 +4,9 @@
@@@ index
-* [security/index](security/index.md)
-* [intro/index-java](intro/index-java.md)
-* [general/index](general/index.md)
+* [security/index](java/security/index.md)
+* [intro/index-java](java/intro/index-java.md)
+* [general/index](java/general/index.md)
* [java/index-actors](java/index-actors.md)
* [java/index-futures](java/index-futures.md)
* [java/index-network](java/index-network.md)
@@ -15,8 +15,8 @@
* [java/http/index](java/http/index.md)
* [java/howto](java/howto.md)
* [java/scala-compat](java/scala-compat.md)
-* [dev/index](dev/index.md)
-* [project/index](project/index.md)
-* [additional/index](additional/index.md)
+* [dev/index](java/dev/index.md)
+* [project/index](java/project/index.md)
+* [additional/index](java/additional/index.md)
@@@
\ No newline at end of file
diff --git a/akka-docs/src/main/paradox/java/actors.md b/akka-docs/src/main/paradox/java/actors.md
index 5a0e2227c5..6236c98649 100644
--- a/akka-docs/src/main/paradox/java/actors.md
+++ b/akka-docs/src/main/paradox/java/actors.md
@@ -17,8 +17,8 @@ its syntax from Erlang.
Since Akka enforces parental supervision every actor is supervised and
(potentially) the supervisor of its children, it is advisable that you
-familiarize yourself with @ref:[Actor Systems](../general/actor-systems.md) and supervision and it
-may also help to read @ref:[Actor References, Paths and Addresses](../general/addressing.md).
+familiarize yourself with @ref:[Actor Systems](../scala/general/actor-systems.md) and supervision and it
+may also help to read @ref:[Actor References, Paths and Addresses](../scala/general/addressing.md).
@@@
@@ -140,7 +140,7 @@ create a child actor.
It is recommended to create a hierarchy of children, grand-children and so on
such that it fits the logical failure-handling structure of the application,
-see @ref:[Actor Systems](../general/actor-systems.md).
+see @ref:[Actor Systems](../scala/general/actor-systems.md).
The call to `actorOf` returns an instance of `ActorRef`. This is a
handle to the actor instance and the only way to interact with it. The
@@ -175,7 +175,7 @@ constructor arguments are determined by a dependency injection framework.
You might be tempted at times to offer an `IndirectActorProducer`
which always returns the same instance, e.g. by using a static field. This is
not supported, as it goes against the meaning of an actor restart, which is
-described here: @ref:[What Restarting Means](../general/supervision.md#supervision-restart).
+described here: @ref:[What Restarting Means](../scala/general/supervision.md#supervision-restart).
When using a dependency injection framework, actor beans *MUST NOT* have
singleton scope.
@@ -374,7 +374,7 @@ usual.
Be aware that the ordering of failure notifications relative to user messages
is not deterministic. In particular, a parent might restart its child before
it has processed the last messages sent by the child before the failure.
-See @ref:[Discussion: Message Ordering](../general/message-delivery-reliability.md#message-ordering) for details.
+See @ref:[Discussion: Message Ordering](../scala/general/message-delivery-reliability.md#message-ordering) for details.
@@@
@@ -390,7 +390,7 @@ sent to a stopped actor will be redirected to the `deadLetters` of the
## Identifying Actors via Actor Selection
-As described in @ref:[Actor References, Paths and Addresses](../general/addressing.md), each actor has a unique logical path, which
+As described in @ref:[Actor References, Paths and Addresses](../scala/general/addressing.md), each actor has a unique logical path, which
is obtained by following the chain of actors from child to parent until
reaching the root of the actor system, and it has a physical path, which may
differ if the supervision chain includes any remote supervisors. These paths
@@ -573,7 +573,7 @@ on the enclosing actor from within the callback. This would break the actor
encapsulation and may introduce synchronization bugs and race conditions because
the callback will be scheduled concurrently to the enclosing actor. Unfortunately
there is not yet a way to detect these illegal accesses at compile time. See also:
-@ref:[Actors and shared mutable state](../general/jmm.md#jmm-shared-state)
+@ref:[Actors and shared mutable state](../scala/general/jmm.md#jmm-shared-state)
@@@
@@ -784,7 +784,7 @@ is only used for debugging/logging.
Tasks added to the same phase are executed in parallel without any ordering assumptions.
Next phase will not start until all tasks of previous phase have been completed.
-If tasks are not completed within a configured timeout (see @ref:[reference.conf](../general/configuration.md#config-akka-actor))
+If tasks are not completed within a configured timeout (see @ref:[reference.conf](../scala/general/configuration.md#config-akka-actor))
the next phase will be started anyway. It is possible to configure `recover=off` for a phase
to abort the rest of the shutdown process if a task fails or is not completed within the timeout.
@@ -938,7 +938,7 @@ You can kill an actor by sending a `Kill` message. This will cause the actor
to throw a `ActorKilledException`, triggering a failure. The actor will
suspend operation and its supervisor will be asked how to handle the failure,
which may mean resuming the actor, restarting it or terminating it completely.
-See @ref:[What Supervision Means](../general/supervision.md#supervision-directives) for more information.
+See @ref:[What Supervision Means](../scala/general/supervision.md#supervision-directives) for more information.
Use `Kill` like this:
@@ -1008,7 +1008,7 @@ Please note, that the child actors are *still restarted*, but no new `ActorRef`
the same principles for the children, ensuring that their `preStart()` method is called only at the creation of their
refs.
-For more information see @ref:[What Restarting Means](../general/supervision.md#supervision-restart).
+For more information see @ref:[What Restarting Means](../scala/general/supervision.md#supervision-restart).
### Initialization via message passing
diff --git a/akka-docs/src/main/paradox/java/additional b/akka-docs/src/main/paradox/java/additional
new file mode 120000
index 0000000000..b9b438df71
--- /dev/null
+++ b/akka-docs/src/main/paradox/java/additional
@@ -0,0 +1 @@
+../scala/additional
\ No newline at end of file
diff --git a/akka-docs/src/main/paradox/java/agents.md b/akka-docs/src/main/paradox/java/agents.md
index dd4e2ae6fb..ba84c482a2 100644
--- a/akka-docs/src/main/paradox/java/agents.md
+++ b/akka-docs/src/main/paradox/java/agents.md
@@ -81,7 +81,7 @@ See @ref:[Futures](futures.md) for more information on `Futures`.
## Configuration
There are several configuration properties for the agents module, please refer
-to the @ref:[reference configuration](../general/configuration.md#config-akka-agent).
+to the @ref:[reference configuration](../scala/general/configuration.md#config-akka-agent).
## Deprecated Transactional Agents
diff --git a/akka-docs/src/main/paradox/java/camel.md b/akka-docs/src/main/paradox/java/camel.md
index 21b5c5710f..98856f5418 100644
--- a/akka-docs/src/main/paradox/java/camel.md
+++ b/akka-docs/src/main/paradox/java/camel.md
@@ -414,7 +414,7 @@ using the Camel Quartz component
## Configuration
There are several configuration properties for the Camel module, please refer
-to the @ref:[reference configuration](../general/configuration.md#config-akka-camel).
+to the @ref:[reference configuration](../scala/general/configuration.md#config-akka-camel).
## Additional Resources
diff --git a/akka-docs/src/main/paradox/java/cluster-usage.md b/akka-docs/src/main/paradox/java/cluster-usage.md
index 10a14d71ab..81db6b7753 100644
--- a/akka-docs/src/main/paradox/java/cluster-usage.md
+++ b/akka-docs/src/main/paradox/java/cluster-usage.md
@@ -775,7 +775,7 @@ Make sure you understand the security implications of enabling remote monitoring
## Configuration
There are several configuration properties for the cluster. We refer to the
-@ref:[reference configuration](../general/configuration.md#config-akka-cluster) for more information.
+@ref:[reference configuration](../scala/general/configuration.md#config-akka-cluster) for more information.
### Cluster Info Logging
diff --git a/akka-docs/src/main/paradox/java/common b/akka-docs/src/main/paradox/java/common
new file mode 120000
index 0000000000..8e9bd02a3b
--- /dev/null
+++ b/akka-docs/src/main/paradox/java/common
@@ -0,0 +1 @@
+../scala/common
\ No newline at end of file
diff --git a/akka-docs/src/main/paradox/java/dev b/akka-docs/src/main/paradox/java/dev
new file mode 120000
index 0000000000..d38eae8212
--- /dev/null
+++ b/akka-docs/src/main/paradox/java/dev
@@ -0,0 +1 @@
+../scala/dev
\ No newline at end of file
diff --git a/akka-docs/src/main/paradox/java/distributed-pub-sub.md b/akka-docs/src/main/paradox/java/distributed-pub-sub.md
index 0ceed24811..75077b891c 100644
--- a/akka-docs/src/main/paradox/java/distributed-pub-sub.md
+++ b/akka-docs/src/main/paradox/java/distributed-pub-sub.md
@@ -174,7 +174,7 @@ akka.extensions = ["akka.cluster.pubsub.DistributedPubSub"]
## Delivery Guarantee
-As in @ref:[Message Delivery Reliability](../general/message-delivery-reliability.md) of Akka, message delivery guarantee in distributed pub sub modes is **at-most-once delivery**.
+As in @ref:[Message Delivery Reliability](../scala/general/message-delivery-reliability.md) of Akka, message delivery guarantee in distributed pub sub modes is **at-most-once delivery**.
In other words, messages can be lost over the wire.
If you are looking for at-least-once delivery guarantee, we recommend [Kafka Akka Streams integration](https://github.com/akka/reactive-kafka).
diff --git a/akka-docs/src/main/paradox/java/fault-tolerance.md b/akka-docs/src/main/paradox/java/fault-tolerance.md
index 00fb97eec9..f43c0f347e 100644
--- a/akka-docs/src/main/paradox/java/fault-tolerance.md
+++ b/akka-docs/src/main/paradox/java/fault-tolerance.md
@@ -1,6 +1,6 @@
# Fault Tolerance
-As explained in @ref:[Actor Systems](../general/actor-systems.md) each actor is the supervisor of its
+As explained in @ref:[Actor Systems](../scala/general/actor-systems.md) each actor is the supervisor of its
children, and as such each actor defines fault handling supervisor strategy.
This strategy cannot be changed afterwards as it is an integral part of the
actor system’s structure.
@@ -96,7 +96,7 @@ by overriding the `logFailure` method.
## Supervision of Top-Level Actors
Toplevel actors means those which are created using `system.actorOf()`, and
-they are children of the @ref:[User Guardian](../general/supervision.md#user-guardian). There are no
+they are children of the @ref:[User Guardian](../scala/general/supervision.md#user-guardian). There are no
special rules applied in this case, the guardian simply applies the configured
strategy.
diff --git a/akka-docs/src/main/paradox/java/general b/akka-docs/src/main/paradox/java/general
new file mode 120000
index 0000000000..fd3a5a485c
--- /dev/null
+++ b/akka-docs/src/main/paradox/java/general
@@ -0,0 +1 @@
+../scala/general
\ No newline at end of file
diff --git a/akka-docs/src/main/paradox/java/guide b/akka-docs/src/main/paradox/java/guide
new file mode 120000
index 0000000000..e073c29a94
--- /dev/null
+++ b/akka-docs/src/main/paradox/java/guide
@@ -0,0 +1 @@
+../scala/guide
\ No newline at end of file
diff --git a/akka-docs/src/main/paradox/java/index-network.md b/akka-docs/src/main/paradox/java/index-network.md
index 0c7ef30707..f1b6449ec3 100644
--- a/akka-docs/src/main/paradox/java/index-network.md
+++ b/akka-docs/src/main/paradox/java/index-network.md
@@ -4,7 +4,7 @@
@@@ index
-* [../common/cluster](../common/cluster.md)
+* [../scala/common/cluster](../scala/common/cluster.md)
* [cluster-usage](cluster-usage.md)
* [cluster-singleton](cluster-singleton.md)
* [distributed-pub-sub](distributed-pub-sub.md)
diff --git a/akka-docs/src/main/paradox/java/index-utilities.md b/akka-docs/src/main/paradox/java/index-utilities.md
index 45fd046727..296455851a 100644
--- a/akka-docs/src/main/paradox/java/index-utilities.md
+++ b/akka-docs/src/main/paradox/java/index-utilities.md
@@ -7,9 +7,9 @@
* [event-bus](event-bus.md)
* [logging](logging.md)
* [scheduler](scheduler.md)
-* [../common/duration](../common/duration.md)
-* [../common/circuitbreaker](../common/circuitbreaker.md)
+* [../scala/common/duration](../scala/common/duration.md)
+* [../scala/common/circuitbreaker](../scala/common/circuitbreaker.md)
* [extending-akka](extending-akka.md)
-* [../intro/deployment-scenarios](../intro/deployment-scenarios.md)
+* [../scala/intro/deployment-scenarios](../scala/intro/deployment-scenarios.md)
@@@
\ No newline at end of file
diff --git a/akka-docs/src/main/paradox/java/intro b/akka-docs/src/main/paradox/java/intro
new file mode 120000
index 0000000000..bbe5ba82d3
--- /dev/null
+++ b/akka-docs/src/main/paradox/java/intro
@@ -0,0 +1 @@
+../scala/intro
\ No newline at end of file
diff --git a/akka-docs/src/main/paradox/java/io.md b/akka-docs/src/main/paradox/java/io.md
index 7d1cd331d1..6791a9c7d9 100644
--- a/akka-docs/src/main/paradox/java/io.md
+++ b/akka-docs/src/main/paradox/java/io.md
@@ -101,4 +101,4 @@ A `ByteStringBuilder` can be wrapped in a `java.io.OutputStream` via the `asOutp
## Architecture in-depth
-For further details on the design and internal architecture see @ref:[I/O Layer Design](../dev/io-layer.md).
\ No newline at end of file
+For further details on the design and internal architecture see @ref:[I/O Layer Design](../scala/dev/io-layer.md).
\ No newline at end of file
diff --git a/akka-docs/src/main/paradox/java/persistence.md b/akka-docs/src/main/paradox/java/persistence.md
index ce920fd8fa..4130cfa3ac 100644
--- a/akka-docs/src/main/paradox/java/persistence.md
+++ b/akka-docs/src/main/paradox/java/persistence.md
@@ -1098,7 +1098,7 @@ When testing Persistence based projects always rely on @ref:[asynchronous messag
## Configuration
There are several configuration properties for the persistence module, please refer
-to the @ref:[reference configuration](../general/configuration.md#config-akka-persistence).
+to the @ref:[reference configuration](../scala/general/configuration.md#config-akka-persistence).
## Multiple persistence plugin configurations
diff --git a/akka-docs/src/main/paradox/java/project b/akka-docs/src/main/paradox/java/project
new file mode 120000
index 0000000000..029c1c15c1
--- /dev/null
+++ b/akka-docs/src/main/paradox/java/project
@@ -0,0 +1 @@
+../scala/project
\ No newline at end of file
diff --git a/akka-docs/src/main/paradox/java/remoting-artery.md b/akka-docs/src/main/paradox/java/remoting-artery.md
index 895a4821d5..7e5cf19a92 100644
--- a/akka-docs/src/main/paradox/java/remoting-artery.md
+++ b/akka-docs/src/main/paradox/java/remoting-artery.md
@@ -2,7 +2,7 @@
@@@ note
-This page describes the @ref:[may change](../common/may-change.md) remoting subsystem, codenamed *Artery* that will eventually
+This page describes the @ref:[may change](../scala/common/may-change.md) remoting subsystem, codenamed *Artery* that will eventually
replace the old remoting implementation. For the current stable remoting system please refer to @ref:[Remoting](remoting.md).
@@@
@@ -170,7 +170,7 @@ and automatically reply to with a `ActorIdentity` message containing the
the `ActorSelection`, which returns a `Future` of the matching
`ActorRef`.
-For more details on how actor addresses and paths are formed and used, please refer to @ref:[Actor References, Paths and Addresses](../general/addressing.md).
+For more details on how actor addresses and paths are formed and used, please refer to @ref:[Actor References, Paths and Addresses](../scala/general/addressing.md).
@@@ note
@@ -354,7 +354,7 @@ marking them `PossiblyHarmful` so that a client cannot forge them.
Akka remoting is using Aeron as underlying message transport. Aeron is using UDP and adds
among other things reliable delivery and session semantics, very similar to TCP. This means that
-the order of the messages are preserved, which is needed for the @ref:[Actor message ordering guarantees](../general/message-delivery-reliability.md#message-ordering).
+the order of the messages are preserved, which is needed for the @ref:[Actor message ordering guarantees](../scala/general/message-delivery-reliability.md#message-ordering).
Under normal circumstances all messages will be delivered but there are cases when messages
may not be delivered to the destination:
@@ -363,7 +363,7 @@ may not be delivered to the destination:
* if serialization or deserialization of a message fails (only that message will be dropped)
* if an unexpected exception occurs in the remoting infrastructure
-In short, Actor message delivery is “at-most-once” as described in @ref:[Message Delivery Reliability](../general/message-delivery-reliability.md)
+In short, Actor message delivery is “at-most-once” as described in @ref:[Message Delivery Reliability](../scala/general/message-delivery-reliability.md)
Some messages in Akka are called system messages and those cannot be dropped because that would result
in an inconsistent state between the systems. Such messages are used for essentially two features; remote death
@@ -748,7 +748,7 @@ crashes unexpectedly.
for production systems.
The location of the file can be controlled via the *akka.remote.artery.advanced.flight-recoder.destination* setting (see
-@ref:[akka-remote (artery)](../general/configuration.md#config-akka-remote-artery) for details). By default, a file with the *.afr* extension is produced in the temporary
+@ref:[akka-remote (artery)](../scala/general/configuration.md#config-akka-remote-artery) for details). By default, a file with the *.afr* extension is produced in the temporary
directory of the operating system. In cases where the flight recorder casuses issues, it can be disabled by adding the
setting *akka.remote.artery.advanced.flight-recorder.enabled=off*, although this is not recommended.
@@ -756,7 +756,7 @@ setting *akka.remote.artery.advanced.flight-recorder.enabled=off*, although this
## Remote Configuration
There are lots of configuration properties that are related to remoting in Akka. We refer to the
-@ref:[reference configuration](../general/configuration.md#config-akka-remote-artery) for more information.
+@ref:[reference configuration](../scala/general/configuration.md#config-akka-remote-artery) for more information.
@@@ note
diff --git a/akka-docs/src/main/paradox/java/remoting.md b/akka-docs/src/main/paradox/java/remoting.md
index 5dd5e90a49..cb8de7b0ef 100644
--- a/akka-docs/src/main/paradox/java/remoting.md
+++ b/akka-docs/src/main/paradox/java/remoting.md
@@ -9,7 +9,7 @@ peer-to-peer fashion and it has limitations for client-server setups. In
particular Akka Remoting does not work transparently with Network Address Translation,
Load Balancers, or in Docker containers. For symmetric communication in these situations
network and/or Akka configuration will have to be changed as described in
-@ref:[Peer-to-Peer vs. Client-Server](../general/remoting.md#symmetric-communication).
+@ref:[Peer-to-Peer vs. Client-Server](../scala/general/remoting.md#symmetric-communication).
@@@
@@ -95,7 +95,7 @@ the `ActorSelection`, which returns a `CompletionStage` of the matching
@@@ note
-For more details on how actor addresses and paths are formed and used, please refer to @ref:[Actor References, Paths and Addresses](../general/addressing.md).
+For more details on how actor addresses and paths are formed and used, please refer to @ref:[Actor References, Paths and Addresses](../scala/general/addressing.md).
@@@
@@ -495,7 +495,7 @@ Creating and working with keystores and certificates is well documented in the
[Generating X.509 Certificates](http://typesafehub.github.io/ssl-config/CertificateGeneration.html#using-keytool)
section of Lightbend's SSL-Config library.
-Since an Akka remoting is inherently @ref:[peer-to-peer](../general/remoting.md#symmetric-communication) both the key-store as well as trust-store
+Since an Akka remoting is inherently @ref:[peer-to-peer](../scala/general/remoting.md#symmetric-communication) both the key-store as well as trust-store
need to be configured on each remoting node participating in the cluster.
The official [Java Secure Socket Extension documentation](http://docs.oracle.com/javase/7/jdocs/technotes/guides/security/jsse/JSSERefGuide.html)
@@ -592,7 +592,7 @@ marking them `PossiblyHarmful` so that a client cannot forge them.
## Remote Configuration
There are lots of configuration properties that are related to remoting in Akka. We refer to the
-@ref:[reference configuration](../general/configuration.md#config-akka-remote) for more information.
+@ref:[reference configuration](../scala/general/configuration.md#config-akka-remote) for more information.
@@@ note
diff --git a/akka-docs/src/main/paradox/java/security b/akka-docs/src/main/paradox/java/security
new file mode 120000
index 0000000000..dd5fb2ec4f
--- /dev/null
+++ b/akka-docs/src/main/paradox/java/security
@@ -0,0 +1 @@
+../scala/security
\ No newline at end of file
diff --git a/akka-docs/src/main/paradox/java/stream/index.md b/akka-docs/src/main/paradox/java/stream/index.md
index c47a6edee6..67e543c6a2 100644
--- a/akka-docs/src/main/paradox/java/stream/index.md
+++ b/akka-docs/src/main/paradox/java/stream/index.md
@@ -6,7 +6,7 @@
* [stream-introduction](stream-introduction.md)
* [stream-quickstart](stream-quickstart.md)
-* [../../general/stream/stream-design](../../general/stream/stream-design.md)
+* [../../scala/general/stream/stream-design](../../scala/general/stream/stream-design.md)
* [stream-flows-and-basics](stream-flows-and-basics.md)
* [stream-graphs](stream-graphs.md)
* [stream-composition](stream-composition.md)
@@ -20,6 +20,6 @@
* [stream-testkit](stream-testkit.md)
* [stages-overview](stages-overview.md)
* [stream-cookbook](stream-cookbook.md)
-* [../../general/stream/stream-configuration](../../general/stream/stream-configuration.md)
+* [../../scala/general/stream/stream-configuration](../../scala/general/stream/stream-configuration.md)
@@@
\ No newline at end of file
diff --git a/akka-docs/src/main/paradox/java/stream/stream-introduction.md b/akka-docs/src/main/paradox/java/stream/stream-introduction.md
index 95b44a8fb2..acf12a392d 100644
--- a/akka-docs/src/main/paradox/java/stream/stream-introduction.md
+++ b/akka-docs/src/main/paradox/java/stream/stream-introduction.md
@@ -65,7 +65,7 @@ and for best results we recommend the following approach:
* Read the @ref:[Quick Start Guide](stream-quickstart.md#stream-quickstart-java) to get a feel for how streams
look like and what they can do.
- * The top-down learners may want to peruse the @ref:[Design Principles behind Akka Streams](../../general/stream/stream-design.md) at this
+ * The top-down learners may want to peruse the @ref:[Design Principles behind Akka Streams](../../scala/general/stream/stream-design.md) at this
point.
* The bottom-up learners may feel more at home rummaging through the
@ref:[Streams Cookbook](stream-cookbook.md).
diff --git a/akka-docs/src/main/paradox/java/stream/stream-quickstart.md b/akka-docs/src/main/paradox/java/stream/stream-quickstart.md
index bd20a554d7..204f8e528e 100644
--- a/akka-docs/src/main/paradox/java/stream/stream-quickstart.md
+++ b/akka-docs/src/main/paradox/java/stream/stream-quickstart.md
@@ -3,7 +3,7 @@
# Quick Start Guide
Create a project and add the akka-streams dependency to the build tool of your
-choice as described in @ref:[Using a build tool](../../intro/getting-started.md#build-tool).
+choice as described in @ref:[Using a build tool](../../scala/intro/getting-started.md#build-tool).
A stream usually begins at a source, so this is also how we start an Akka
Stream. Before we create one, we import the full complement of streaming tools:
diff --git a/akka-docs/src/main/paradox/java/testing.md b/akka-docs/src/main/paradox/java/testing.md
index 6173d00128..ae2ff667bd 100644
--- a/akka-docs/src/main/paradox/java/testing.md
+++ b/akka-docs/src/main/paradox/java/testing.md
@@ -316,7 +316,7 @@ for managing time constraints:
@@snip [TestKitDocTest.java](code/jdocs/testkit/TestKitDocTest.java) { #test-within }
-The block in `within` must complete after a @ref:[Duration](../common/duration.md) which
+The block in `within` must complete after a @ref:[Duration](../scala/common/duration.md) which
is between `min` and `max`, where the former defaults to zero. The
deadline calculated by adding the `max` parameter to the block's start
time is implicitly available within the block to all examination methods, if
@@ -679,4 +679,4 @@ akka {
## Configuration
There are several configuration properties for the TestKit module, please refer
-to the @ref:[reference configuration](../general/configuration.md#config-akka-testkit).
\ No newline at end of file
+to the @ref:[reference configuration](../scala/general/configuration.md#config-akka-testkit).
\ No newline at end of file
diff --git a/akka-docs/src/main/paradox/scala.md b/akka-docs/src/main/paradox/scala.md
index 919a7d3e34..c59a61adc9 100644
--- a/akka-docs/src/main/paradox/scala.md
+++ b/akka-docs/src/main/paradox/scala.md
@@ -4,9 +4,10 @@
@@@ index
-* [security/index](security/index.md)
-* [intro/index-scala](intro/index-scala.md)
-* [general/index](general/index.md)
+* [scala/guide](scala/guide/index.md)
+* [security/index](scala/security/index.md)
+* [intro/index-scala](scala/intro/index-scala.md)
+* [general/index](scala/general/index.md)
* [scala/index-actors](scala/index-actors.md)
* [scala/index-futures](scala/index-futures.md)
* [scala/index-network](scala/index-network.md)
@@ -14,8 +15,8 @@
* [scala/stream/index](scala/stream/index.md)
* [scala/http/index](scala/http/index.md)
* [scala/howto](scala/howto.md)
-* [dev/index](dev/index.md)
-* [project/index](project/index.md)
-* [additional/index](additional/index.md)
+* [dev/index](scala/dev/index.md)
+* [project/index](scala/project/index.md)
+* [additional/index](scala/additional/index.md)
-@@@
\ No newline at end of file
+@@@
diff --git a/akka-docs/src/main/paradox/scala/actors.md b/akka-docs/src/main/paradox/scala/actors.md
index 115d87a654..ade6be5860 100644
--- a/akka-docs/src/main/paradox/scala/actors.md
+++ b/akka-docs/src/main/paradox/scala/actors.md
@@ -17,8 +17,8 @@ its syntax from Erlang.
Since Akka enforces parental supervision every actor is supervised and
(potentially) the supervisor of its children, it is advisable that you
-familiarize yourself with @ref:[Actor Systems](../general/actor-systems.md) and supervision and it
-may also help to read @ref:[Actor References, Paths and Addresses](../general/addressing.md).
+familiarize yourself with @ref:[Actor Systems](../scala/general/actor-systems.md) and supervision and it
+may also help to read @ref:[Actor References, Paths and Addresses](../scala/general/addressing.md).
@@@
@@ -157,7 +157,7 @@ create a child actor.
It is recommended to create a hierarchy of children, grand-children and so on
such that it fits the logical failure-handling structure of the application,
-see @ref:[Actor Systems](../general/actor-systems.md).
+see @ref:[Actor Systems](../scala/general/actor-systems.md).
The call to `actorOf` returns an instance of `ActorRef`. This is a
handle to the actor instance and the only way to interact with it. The
@@ -200,7 +200,7 @@ constructor arguments are determined by a dependency injection framework.
You might be tempted at times to offer an `IndirectActorProducer`
which always returns the same instance, e.g. by using a `lazy val`. This is
not supported, as it goes against the meaning of an actor restart, which is
-described here: @ref:[What Restarting Means](../general/supervision.md#supervision-restart).
+described here: @ref:[What Restarting Means](../scala/general/supervision.md#supervision-restart).
When using a dependency injection framework, actor beans *MUST NOT* have
singleton scope.
@@ -404,7 +404,7 @@ usual.
Be aware that the ordering of failure notifications relative to user messages
is not deterministic. In particular, a parent might restart its child before
it has processed the last messages sent by the child before the failure.
-See @ref:[Discussion: Message Ordering](../general/message-delivery-reliability.md#message-ordering) for details.
+See @ref:[Discussion: Message Ordering](../scala/general/message-delivery-reliability.md#message-ordering) for details.
@@@
@@ -420,7 +420,7 @@ sent to a stopped actor will be redirected to the `deadLetters` of the
## Identifying Actors via Actor Selection
-As described in @ref:[Actor References, Paths and Addresses](../general/addressing.md), each actor has a unique logical path, which
+As described in @ref:[Actor References, Paths and Addresses](../scala/general/addressing.md), each actor has a unique logical path, which
is obtained by following the chain of actors from child to parent until
reaching the root of the actor system, and it has a physical path, which may
differ if the supervision chain includes any remote supervisors. These paths
@@ -603,7 +603,7 @@ on the enclosing actor from within the callback. This would break the actor
encapsulation and may introduce synchronization bugs and race conditions because
the callback will be scheduled concurrently to the enclosing actor. Unfortunately
there is not yet a way to detect these illegal accesses at compile time.
-See also: @ref:[Actors and shared mutable state](../general/jmm.md#jmm-shared-state)
+See also: @ref:[Actors and shared mutable state](../scala/general/jmm.md#jmm-shared-state)
@@@
@@ -777,7 +777,7 @@ is only used for debugging/logging.
Tasks added to the same phase are executed in parallel without any ordering assumptions.
Next phase will not start until all tasks of previous phase have been completed.
-If tasks are not completed within a configured timeout (see @ref:[reference.conf](../general/configuration.md#config-akka-actor))
+If tasks are not completed within a configured timeout (see @ref:[reference.conf](../scala/general/configuration.md#config-akka-actor))
the next phase will be started anyway. It is possible to configure `recover=off` for a phase
to abort the rest of the shutdown process if a task fails or is not completed within the timeout.
@@ -945,7 +945,7 @@ You can kill an actor by sending a `Kill` message. This will cause the actor
to throw a `ActorKilledException`, triggering a failure. The actor will
suspend operation and its supervisor will be asked how to handle the failure,
which may mean resuming the actor, restarting it or terminating it completely.
-See @ref:[What Supervision Means](../general/supervision.md#supervision-directives) for more information.
+See @ref:[What Supervision Means](../scala/general/supervision.md#supervision-directives) for more information.
Use `Kill` like this:
@@ -1033,7 +1033,7 @@ Please note, that the child actors are *still restarted*, but no new `ActorRef`
the same principles for the children, ensuring that their `preStart()` method is called only at the creation of their
refs.
-For more information see @ref:[What Restarting Means](../general/supervision.md#supervision-restart).
+For more information see @ref:[What Restarting Means](../scala/general/supervision.md#supervision-restart).
### Initialization via message passing
diff --git a/akka-docs/src/main/paradox/additional/books.md b/akka-docs/src/main/paradox/scala/additional/books.md
similarity index 100%
rename from akka-docs/src/main/paradox/additional/books.md
rename to akka-docs/src/main/paradox/scala/additional/books.md
diff --git a/akka-docs/src/main/paradox/additional/code/docs/faq/Faq.scala b/akka-docs/src/main/paradox/scala/additional/code/docs/faq/Faq.scala
similarity index 100%
rename from akka-docs/src/main/paradox/additional/code/docs/faq/Faq.scala
rename to akka-docs/src/main/paradox/scala/additional/code/docs/faq/Faq.scala
diff --git a/akka-docs/src/main/paradox/additional/faq.md b/akka-docs/src/main/paradox/scala/additional/faq.md
similarity index 95%
rename from akka-docs/src/main/paradox/additional/faq.md
rename to akka-docs/src/main/paradox/scala/additional/faq.md
index b7f68eb2d5..90f2bcc087 100644
--- a/akka-docs/src/main/paradox/additional/faq.md
+++ b/akka-docs/src/main/paradox/scala/additional/faq.md
@@ -93,12 +93,12 @@ be different
If you still do not see anything, look at what the logging of remote
life-cycle events tells you (normally logged at INFO level) or switch on
-@ref:[Auxiliary remote logging options](../java/logging.md#logging-remote-java)
+@ref:[Auxiliary remote logging options](../../java/logging.md#logging-remote-java)
to see all sent and received messages (logged at DEBUG level).
### Which options shall I enable when debugging remoting issues?
-Have a look at the @ref:[Remote Configuration](../java/remoting.md#remote-configuration-java), the typical candidates are:
+Have a look at the @ref:[Remote Configuration](../../java/remoting.md#remote-configuration-java), the typical candidates are:
* *akka.remote.log-sent-messages*
* *akka.remote.log-received-messages*
@@ -170,4 +170,4 @@ To enable different types of debug logging add the following to your configurati
* `akka.actor.debug.autoreceive` will log all *special* messages like `Kill`, `PoisonPill` e.t.c. sent to all actors
* `akka.actor.debug.lifecycle` will log all actor lifecycle events of all actors
-Read more about it in the docs for @ref:[Logging](../java/logging.md) and @ref:[actor.logging-scala](../scala/testing.md#actor-logging-scala).
\ No newline at end of file
+Read more about it in the docs for @ref:[Logging](../../java/logging.md) and @ref:[actor.logging-scala](../../scala/testing.md#actor-logging-scala).
diff --git a/akka-docs/src/main/paradox/additional/index.md b/akka-docs/src/main/paradox/scala/additional/index.md
similarity index 98%
rename from akka-docs/src/main/paradox/additional/index.md
rename to akka-docs/src/main/paradox/scala/additional/index.md
index bed69f2023..39dc9cbc89 100644
--- a/akka-docs/src/main/paradox/additional/index.md
+++ b/akka-docs/src/main/paradox/scala/additional/index.md
@@ -10,4 +10,4 @@
* [books](books.md)
* [osgi](osgi.md)
-@@@
\ No newline at end of file
+@@@
diff --git a/akka-docs/src/main/paradox/additional/osgi.md b/akka-docs/src/main/paradox/scala/additional/osgi.md
similarity index 100%
rename from akka-docs/src/main/paradox/additional/osgi.md
rename to akka-docs/src/main/paradox/scala/additional/osgi.md
diff --git a/akka-docs/src/main/paradox/scala/agents.md b/akka-docs/src/main/paradox/scala/agents.md
index 5158766235..cedeab3a4d 100644
--- a/akka-docs/src/main/paradox/scala/agents.md
+++ b/akka-docs/src/main/paradox/scala/agents.md
@@ -109,7 +109,7 @@ Example of monadic usage:
## Configuration
There are several configuration properties for the agents module, please refer
-to the @ref:[reference configuration](../general/configuration.md#config-akka-agent).
+to the @ref:[reference configuration](../scala/general/configuration.md#config-akka-agent).
## Deprecated Transactional Agents
diff --git a/akka-docs/src/main/paradox/scala/camel.md b/akka-docs/src/main/paradox/scala/camel.md
index 1a98a5f099..973945713f 100644
--- a/akka-docs/src/main/paradox/scala/camel.md
+++ b/akka-docs/src/main/paradox/scala/camel.md
@@ -403,7 +403,7 @@ using the Camel Quartz component
## Configuration
There are several configuration properties for the Camel module, please refer
-to the @ref:[reference configuration](../general/configuration.md#config-akka-camel).
+to the @ref:[reference configuration](../scala/general/configuration.md#config-akka-camel).
## Additional Resources
diff --git a/akka-docs/src/main/paradox/scala/cluster-usage.md b/akka-docs/src/main/paradox/scala/cluster-usage.md
index 4f504ca7c2..e1c3c7a1d4 100644
--- a/akka-docs/src/main/paradox/scala/cluster-usage.md
+++ b/akka-docs/src/main/paradox/scala/cluster-usage.md
@@ -717,12 +717,12 @@ and to the registered subscribers on the system event bus with the help of `clus
## How to Test
-@ref:[Multi Node Testing](../dev/multi-node-testing.md) is useful for testing cluster applications.
+@ref:[Multi Node Testing](../scala/dev/multi-node-testing.md) is useful for testing cluster applications.
-Set up your project according to the instructions in @ref:[Multi Node Testing](../dev/multi-node-testing.md) and @ref:[Multi JVM Testing](../dev/multi-jvm-testing.md), i.e.
+Set up your project according to the instructions in @ref:[Multi Node Testing](../scala/dev/multi-node-testing.md) and @ref:[Multi JVM Testing](../scala/dev/multi-jvm-testing.md), i.e.
add the `sbt-multi-jvm` plugin and the dependency to `akka-multi-node-testkit`.
-First, as described in @ref:[Multi Node Testing](../dev/multi-node-testing.md), we need some scaffolding to configure the `MultiNodeSpec`.
+First, as described in @ref:[Multi Node Testing](../scala/dev/multi-node-testing.md), we need some scaffolding to configure the `MultiNodeSpec`.
Define the participating roles and their [cluster_configuration_scala](#cluster-configuration-scala) in an object extending `MultiNodeConfig`:
@@snip [StatsSampleSpec.scala]../../../../../akka-cluster-metrics/src/multi-jvm/scala/akka/cluster/metrics/sample/StatsSampleSpec.scala) { #MultiNodeConfig }
@@ -839,7 +839,7 @@ Make sure you understand the security implications of enabling remote monitoring
## Configuration
There are several configuration properties for the cluster. We refer to the
-@ref:[reference configuration](../general/configuration.md#config-akka-cluster) for more information.
+@ref:[reference configuration](../scala/general/configuration.md#config-akka-cluster) for more information.
### Cluster Info Logging
diff --git a/akka-docs/src/main/paradox/common/binary-compatibility-rules.md b/akka-docs/src/main/paradox/scala/common/binary-compatibility-rules.md
similarity index 100%
rename from akka-docs/src/main/paradox/common/binary-compatibility-rules.md
rename to akka-docs/src/main/paradox/scala/common/binary-compatibility-rules.md
diff --git a/akka-docs/src/main/paradox/common/circuitbreaker.md b/akka-docs/src/main/paradox/scala/common/circuitbreaker.md
similarity index 100%
rename from akka-docs/src/main/paradox/common/circuitbreaker.md
rename to akka-docs/src/main/paradox/scala/common/circuitbreaker.md
diff --git a/akka-docs/src/main/paradox/common/cluster.md b/akka-docs/src/main/paradox/scala/common/cluster.md
similarity index 100%
rename from akka-docs/src/main/paradox/common/cluster.md
rename to akka-docs/src/main/paradox/scala/common/cluster.md
diff --git a/akka-docs/src/main/paradox/common/code/docs/circuitbreaker/CircuitBreakerDocSpec.scala b/akka-docs/src/main/paradox/scala/common/code/docs/circuitbreaker/CircuitBreakerDocSpec.scala
similarity index 100%
rename from akka-docs/src/main/paradox/common/code/docs/circuitbreaker/CircuitBreakerDocSpec.scala
rename to akka-docs/src/main/paradox/scala/common/code/docs/circuitbreaker/CircuitBreakerDocSpec.scala
diff --git a/akka-docs/src/main/paradox/common/code/docs/circuitbreaker/DangerousJavaActor.java b/akka-docs/src/main/paradox/scala/common/code/docs/circuitbreaker/DangerousJavaActor.java
similarity index 100%
rename from akka-docs/src/main/paradox/common/code/docs/circuitbreaker/DangerousJavaActor.java
rename to akka-docs/src/main/paradox/scala/common/code/docs/circuitbreaker/DangerousJavaActor.java
diff --git a/akka-docs/src/main/paradox/common/code/docs/circuitbreaker/EvenNoFailureJavaExample.java b/akka-docs/src/main/paradox/scala/common/code/docs/circuitbreaker/EvenNoFailureJavaExample.java
similarity index 100%
rename from akka-docs/src/main/paradox/common/code/docs/circuitbreaker/EvenNoFailureJavaExample.java
rename to akka-docs/src/main/paradox/scala/common/code/docs/circuitbreaker/EvenNoFailureJavaExample.java
diff --git a/akka-docs/src/main/paradox/common/code/docs/circuitbreaker/TellPatternJavaActor.java b/akka-docs/src/main/paradox/scala/common/code/docs/circuitbreaker/TellPatternJavaActor.java
similarity index 100%
rename from akka-docs/src/main/paradox/common/code/docs/circuitbreaker/TellPatternJavaActor.java
rename to akka-docs/src/main/paradox/scala/common/code/docs/circuitbreaker/TellPatternJavaActor.java
diff --git a/akka-docs/src/main/paradox/common/code/docs/duration/Java.java b/akka-docs/src/main/paradox/scala/common/code/docs/duration/Java.java
similarity index 100%
rename from akka-docs/src/main/paradox/common/code/docs/duration/Java.java
rename to akka-docs/src/main/paradox/scala/common/code/docs/duration/Java.java
diff --git a/akka-docs/src/main/paradox/common/code/docs/duration/Sample.scala b/akka-docs/src/main/paradox/scala/common/code/docs/duration/Sample.scala
similarity index 100%
rename from akka-docs/src/main/paradox/common/code/docs/duration/Sample.scala
rename to akka-docs/src/main/paradox/scala/common/code/docs/duration/Sample.scala
diff --git a/akka-docs/src/main/paradox/common/duration.md b/akka-docs/src/main/paradox/scala/common/duration.md
similarity index 100%
rename from akka-docs/src/main/paradox/common/duration.md
rename to akka-docs/src/main/paradox/scala/common/duration.md
diff --git a/akka-docs/src/main/paradox/common/may-change.md b/akka-docs/src/main/paradox/scala/common/may-change.md
similarity index 97%
rename from akka-docs/src/main/paradox/common/may-change.md
rename to akka-docs/src/main/paradox/scala/common/may-change.md
index 69a3c347c9..e3bc3b6125 100644
--- a/akka-docs/src/main/paradox/common/may-change.md
+++ b/akka-docs/src/main/paradox/scala/common/may-change.md
@@ -33,7 +33,7 @@ These are the current complete modules marked as **may change**:
@@@ index
* [../dev/multi-node-testing](../dev/multi-node-testing.md)
-* [../scala/typed](../scala/typed.md)
+* [../../scala/typed](../../scala/typed.md)
@@@
diff --git a/akka-docs/src/main/paradox/dev/building-akka.md b/akka-docs/src/main/paradox/scala/dev/building-akka.md
similarity index 100%
rename from akka-docs/src/main/paradox/dev/building-akka.md
rename to akka-docs/src/main/paradox/scala/dev/building-akka.md
diff --git a/akka-docs/src/main/paradox/dev/developer-guidelines.md b/akka-docs/src/main/paradox/scala/dev/developer-guidelines.md
similarity index 100%
rename from akka-docs/src/main/paradox/dev/developer-guidelines.md
rename to akka-docs/src/main/paradox/scala/dev/developer-guidelines.md
diff --git a/akka-docs/src/main/paradox/dev/documentation.md b/akka-docs/src/main/paradox/scala/dev/documentation.md
similarity index 100%
rename from akka-docs/src/main/paradox/dev/documentation.md
rename to akka-docs/src/main/paradox/scala/dev/documentation.md
diff --git a/akka-docs/src/main/paradox/dev/index.md b/akka-docs/src/main/paradox/scala/dev/index.md
similarity index 100%
rename from akka-docs/src/main/paradox/dev/index.md
rename to akka-docs/src/main/paradox/scala/dev/index.md
diff --git a/akka-docs/src/main/paradox/dev/io-layer.md b/akka-docs/src/main/paradox/scala/dev/io-layer.md
similarity index 100%
rename from akka-docs/src/main/paradox/dev/io-layer.md
rename to akka-docs/src/main/paradox/scala/dev/io-layer.md
diff --git a/akka-docs/src/main/paradox/dev/multi-jvm-testing.md b/akka-docs/src/main/paradox/scala/dev/multi-jvm-testing.md
similarity index 98%
rename from akka-docs/src/main/paradox/dev/multi-jvm-testing.md
rename to akka-docs/src/main/paradox/scala/dev/multi-jvm-testing.md
index 1c6eadbee8..adf61cecc5 100644
--- a/akka-docs/src/main/paradox/dev/multi-jvm-testing.md
+++ b/akka-docs/src/main/paradox/scala/dev/multi-jvm-testing.md
@@ -9,7 +9,7 @@ The multi-JVM testing is an sbt plugin that you can find at [http://github.com/s
You can add it as a plugin by adding the following to your project/plugins.sbt:
-@@snip [plugins.sbt]../../../../../project/plugins.sbt) { #sbt-multi-jvm }
+@@snip [plugins.sbt]../project/plugins.sbt) { #sbt-multi-jvm }
You can then add multi-JVM testing to `build.sbt` or `project/Build.scala` by including the `MultiJvm`
settings and config. Please note that MultiJvm test sources are located in `src/multi-jvm/...`,
@@ -197,4 +197,4 @@ the sbt prompt.
There has also been some additions made to the `SbtMultiJvm` plugin to accommodate the
@ref:[may change](../common/may-change.md) module @ref:[multi node testing](multi-node-testing.md),
-described in that section.
\ No newline at end of file
+described in that section.
diff --git a/akka-docs/src/main/paradox/dev/multi-node-testing.md b/akka-docs/src/main/paradox/scala/dev/multi-node-testing.md
similarity index 100%
rename from akka-docs/src/main/paradox/dev/multi-node-testing.md
rename to akka-docs/src/main/paradox/scala/dev/multi-node-testing.md
diff --git a/akka-docs/src/main/paradox/scala/distributed-pub-sub.md b/akka-docs/src/main/paradox/scala/distributed-pub-sub.md
index a11f7ac193..61d3273a5e 100644
--- a/akka-docs/src/main/paradox/scala/distributed-pub-sub.md
+++ b/akka-docs/src/main/paradox/scala/distributed-pub-sub.md
@@ -177,7 +177,7 @@ akka.extensions = ["akka.cluster.pubsub.DistributedPubSub"]
## Delivery Guarantee
-As in @ref:[Message Delivery Reliability](../general/message-delivery-reliability.md) of Akka, message delivery guarantee in distributed pub sub modes is **at-most-once delivery**.
+As in @ref:[Message Delivery Reliability](../scala/general/message-delivery-reliability.md) of Akka, message delivery guarantee in distributed pub sub modes is **at-most-once delivery**.
In other words, messages can be lost over the wire.
If you are looking for at-least-once delivery guarantee, we recommend [Kafka Akka Streams integration](https://github.com/akka/reactive-kafka).
diff --git a/akka-docs/src/main/paradox/scala/fault-tolerance.md b/akka-docs/src/main/paradox/scala/fault-tolerance.md
index e94884880d..c9ffad0b06 100644
--- a/akka-docs/src/main/paradox/scala/fault-tolerance.md
+++ b/akka-docs/src/main/paradox/scala/fault-tolerance.md
@@ -1,6 +1,6 @@
# Fault Tolerance
-As explained in @ref:[Actor Systems](../general/actor-systems.md) each actor is the supervisor of its
+As explained in @ref:[Actor Systems](../scala/general/actor-systems.md) each actor is the supervisor of its
children, and as such each actor defines fault handling supervisor strategy.
This strategy cannot be changed afterwards as it is an integral part of the
actor system’s structure.
@@ -104,7 +104,7 @@ by overriding the `logFailure` method.
## Supervision of Top-Level Actors
Toplevel actors means those which are created using `system.actorOf()`, and
-they are children of the @ref:[User Guardian](../general/supervision.md#user-guardian). There are no
+they are children of the @ref:[User Guardian](../scala/general/supervision.md#user-guardian). There are no
special rules applied in this case, the guardian simply applies the configured
strategy.
diff --git a/akka-docs/src/main/paradox/general/ActorPath.png b/akka-docs/src/main/paradox/scala/general/ActorPath.png
similarity index 100%
rename from akka-docs/src/main/paradox/general/ActorPath.png
rename to akka-docs/src/main/paradox/scala/general/ActorPath.png
diff --git a/akka-docs/src/main/paradox/general/RemoteDeployment.png b/akka-docs/src/main/paradox/scala/general/RemoteDeployment.png
similarity index 100%
rename from akka-docs/src/main/paradox/general/RemoteDeployment.png
rename to akka-docs/src/main/paradox/scala/general/RemoteDeployment.png
diff --git a/akka-docs/src/main/paradox/general/actor-systems.md b/akka-docs/src/main/paradox/scala/general/actor-systems.md
similarity index 95%
rename from akka-docs/src/main/paradox/general/actor-systems.md
rename to akka-docs/src/main/paradox/scala/general/actor-systems.md
index 9f5d464bec..c4ffe3d0d6 100644
--- a/akka-docs/src/main/paradox/general/actor-systems.md
+++ b/akka-docs/src/main/paradox/scala/general/actor-systems.md
@@ -119,7 +119,7 @@ includes the following suggestions:
>
* Do the blocking call within an actor (or a set of actors managed by a router
-[@ref:[Java](../java/routing.md), @ref:[Scala](../scala/routing.md)]), making sure to
+[@ref:[Java](../../java/routing.md), @ref:[Scala](../../scala/routing.md)]), making sure to
configure a thread pool which is either dedicated for this purpose or
sufficiently sized.
* Do the blocking call within a `Future`, ensuring an upper bound on
@@ -144,8 +144,8 @@ on which DBMS is deployed on what hardware.
Configuring thread pools is a task best delegated to Akka, simply configure
in the `application.conf` and instantiate through an `ActorSystem`
-[@ref:[Java](../java/dispatchers.md#dispatcher-lookup-java), @ref:[Scala
-](../scala/dispatchers.md#dispatcher-lookup-scala)]
+[@ref:[Java](../../java/dispatchers.md#dispatcher-lookup-java), @ref:[Scala
+](../../scala/dispatchers.md#dispatcher-lookup-scala)]
@@@
@@ -167,4 +167,4 @@ actor, which in turn will recursively stop all its child actors, the system
guardian.
If you want to execute some operations while terminating `ActorSystem`,
-look at `CoordinatedShutdown` [@ref:[Java](../java/actors.md#coordinated-shutdown-java), @ref:[Scala](../scala/actors.md#coordinated-shutdown-scala)]
\ No newline at end of file
+look at `CoordinatedShutdown` [@ref:[Java](../../java/actors.md#coordinated-shutdown-java), @ref:[Scala](../../scala/actors.md#coordinated-shutdown-scala)]
\ No newline at end of file
diff --git a/akka-docs/src/main/paradox/general/actors.md b/akka-docs/src/main/paradox/scala/general/actors.md
similarity index 96%
rename from akka-docs/src/main/paradox/general/actors.md
rename to akka-docs/src/main/paradox/scala/general/actors.md
index 4b1fc0ed16..3950777112 100644
--- a/akka-docs/src/main/paradox/general/actors.md
+++ b/akka-docs/src/main/paradox/scala/general/actors.md
@@ -5,7 +5,7 @@ hierarchies and are the smallest unit when building an application. This
section looks at one such actor in isolation, explaining the concepts you
encounter while implementing it. For a more in depth reference with all the
details please refer to
-@ref:[Actors (Scala)](../scala/actors.md) and @ref:[Actors (Java)](../java/actors.md).
+@ref:[Actors (Scala)](../../scala/actors.md) and @ref:[Actors (Java)](../../java/actors.md).
An actor is a container for [State](#state), [Behavior](#behavior), a [Mailbox](#mailbox), [Child Actors](#child-actors)
and a [Supervisor Strategy](#supervisor-strategy). All of this is encapsulated behind an [Actor
@@ -32,7 +32,7 @@ publishes this information itself.
Actor objects will typically contain some variables which reflect possible
states the actor may be in. This can be an explicit state machine (e.g. using
-the @ref:[FSM](../scala/fsm.md) module), or it could be a counter, set of listeners,
+the @ref:[FSM](../../scala/fsm.md) module), or it could be a counter, set of listeners,
pending requests, etc. These data are what make an actor valuable, and they
must be protected from corruption by other actors. The good news is that Akka
actors conceptually each have their own light-weight thread, which is
@@ -53,7 +53,7 @@ the actor. This is to enable the ability of self-healing of the system.
Optionally, an actor's state can be automatically recovered to the state
before a restart by persisting received messages and replaying them after
-restart (see @ref:[Persistence](../scala/persistence.md)).
+restart (see @ref:[Persistence](../../scala/persistence.md)).
## Behavior
diff --git a/akka-docs/src/main/paradox/general/addressing.md b/akka-docs/src/main/paradox/scala/general/addressing.md
similarity index 100%
rename from akka-docs/src/main/paradox/general/addressing.md
rename to akka-docs/src/main/paradox/scala/general/addressing.md
diff --git a/akka-docs/src/main/paradox/general/code/docs/config/ConfigDoc.java b/akka-docs/src/main/paradox/scala/general/code/docs/config/ConfigDoc.java
similarity index 100%
rename from akka-docs/src/main/paradox/general/code/docs/config/ConfigDoc.java
rename to akka-docs/src/main/paradox/scala/general/code/docs/config/ConfigDoc.java
diff --git a/akka-docs/src/main/paradox/general/code/docs/config/ConfigDocSpec.scala b/akka-docs/src/main/paradox/scala/general/code/docs/config/ConfigDocSpec.scala
similarity index 100%
rename from akka-docs/src/main/paradox/general/code/docs/config/ConfigDocSpec.scala
rename to akka-docs/src/main/paradox/scala/general/code/docs/config/ConfigDocSpec.scala
diff --git a/akka-docs/src/main/paradox/general/configuration.md b/akka-docs/src/main/paradox/scala/general/configuration.md
similarity index 98%
rename from akka-docs/src/main/paradox/general/configuration.md
rename to akka-docs/src/main/paradox/scala/general/configuration.md
index 205a753d3f..5ec341d609 100644
--- a/akka-docs/src/main/paradox/general/configuration.md
+++ b/akka-docs/src/main/paradox/scala/general/configuration.md
@@ -244,8 +244,8 @@ The configuration can also be used for application specific settings.
A good practice is to place those settings in an Extension, as described in:
>
- * Scala API: @ref:[extending-akka-scala.settings](../scala/extending-akka.md#extending-akka-scala-settings)
- * Java API: @ref:[extending-akka-java.settings](../java/extending-akka.md#extending-akka-java-settings)
+ * Scala API: @ref:[extending-akka-scala.settings](../../scala/extending-akka.md#extending-akka-scala-settings)
+ * Java API: @ref:[extending-akka-java.settings](../../java/extending-akka.md#extending-akka-java-settings)
## Configuring multiple ActorSystem
diff --git a/akka-docs/src/main/paradox/general/guardians.png b/akka-docs/src/main/paradox/scala/general/guardians.png
similarity index 100%
rename from akka-docs/src/main/paradox/general/guardians.png
rename to akka-docs/src/main/paradox/scala/general/guardians.png
diff --git a/akka-docs/src/main/paradox/general/index.md b/akka-docs/src/main/paradox/scala/general/index.md
similarity index 100%
rename from akka-docs/src/main/paradox/general/index.md
rename to akka-docs/src/main/paradox/scala/general/index.md
diff --git a/akka-docs/src/main/paradox/general/jmm.md b/akka-docs/src/main/paradox/scala/general/jmm.md
similarity index 97%
rename from akka-docs/src/main/paradox/general/jmm.md
rename to akka-docs/src/main/paradox/scala/general/jmm.md
index 56c986358b..a2d4d4a79f 100644
--- a/akka-docs/src/main/paradox/general/jmm.md
+++ b/akka-docs/src/main/paradox/scala/general/jmm.md
@@ -67,6 +67,6 @@ Since Akka runs on the JVM there are still some rules to be followed.
* Closing over internal Actor state and exposing it to other threads
-@@snip [SharedMutableStateDocSpec.scala](../scala/code/docs/actor/SharedMutableStateDocSpec.scala) { #mutable-state }
+@@snip [SharedMutableStateDocSpec.scala](../../scala/code/docs/actor/SharedMutableStateDocSpec.scala) { #mutable-state }
* Messages **should** be immutable, this is to avoid the shared mutable state trap.
\ No newline at end of file
diff --git a/akka-docs/src/main/paradox/general/message-delivery-reliability.md b/akka-docs/src/main/paradox/scala/general/message-delivery-reliability.md
similarity index 96%
rename from akka-docs/src/main/paradox/general/message-delivery-reliability.md
rename to akka-docs/src/main/paradox/scala/general/message-delivery-reliability.md
index de6ec58cec..a7bfe3478f 100644
--- a/akka-docs/src/main/paradox/general/message-delivery-reliability.md
+++ b/akka-docs/src/main/paradox/scala/general/message-delivery-reliability.md
@@ -280,13 +280,13 @@ acknowledgement
The third becomes necessary by virtue of the acknowledgements not being guaranteed
to arrive either. An ACK-RETRY protocol with business-level acknowledgements is
-supported by @ref:[At-Least-Once Delivery](../scala/persistence.md#at-least-once-delivery-scala) of the Akka Persistence module. Duplicates can be
-detected by tracking the identifiers of messages sent via @ref:[At-Least-Once Delivery](../scala/persistence.md#at-least-once-delivery-scala).
+supported by @ref:[At-Least-Once Delivery](../../scala/persistence.md#at-least-once-delivery-scala) of the Akka Persistence module. Duplicates can be
+detected by tracking the identifiers of messages sent via @ref:[At-Least-Once Delivery](../../scala/persistence.md#at-least-once-delivery-scala).
Another way of implementing the third part would be to make processing the messages
idempotent on the level of the business logic.
Another example of implementing all three requirements is shown at
- reliable-proxy (which is now superseded by @ref:[At-Least-Once Delivery](../scala/persistence.md#at-least-once-delivery-scala)).
+ reliable-proxy (which is now superseded by @ref:[At-Least-Once Delivery](../../scala/persistence.md#at-least-once-delivery-scala)).
### Event Sourcing
@@ -301,7 +301,7 @@ components may consume the event stream as a means to replicate the component’
state on a different continent or to react to changes). If the component’s
state is lost—due to a machine failure or by being pushed out of a cache—it can
easily be reconstructed by replaying the event stream (usually employing
-snapshots to speed up the process). @ref:[Event sourcing](../scala/persistence.md#event-sourcing-scala) is supported by
+snapshots to speed up the process). @ref:[Event sourcing](../../scala/persistence.md#event-sourcing-scala) is supported by
Akka Persistence.
### Mailbox with Explicit Acknowledgement
@@ -344,7 +344,7 @@ guaranteed delivery.
### How do I Receive Dead Letters?
An actor can subscribe to class `akka.actor.DeadLetter` on the event
-stream, see @ref:[Event Stream](../java/event-bus.md#event-stream-java) (Java) or @ref:[Event Stream](../scala/event-bus.md#event-stream-scala)
+stream, see @ref:[Event Stream](../../java/event-bus.md#event-stream-java) (Java) or @ref:[Event Stream](../../scala/event-bus.md#event-stream-scala)
(Scala) for how to do that. The subscribed actor will then receive all dead
letters published in the (local) system from that point onwards. Dead letters
are not propagated over the network, if you want to collect them in one place
diff --git a/akka-docs/src/main/paradox/general/remoting.md b/akka-docs/src/main/paradox/scala/general/remoting.md
similarity index 95%
rename from akka-docs/src/main/paradox/general/remoting.md
rename to akka-docs/src/main/paradox/scala/general/remoting.md
index 5bdda971a8..490b509e5d 100644
--- a/akka-docs/src/main/paradox/general/remoting.md
+++ b/akka-docs/src/main/paradox/scala/general/remoting.md
@@ -66,7 +66,7 @@ containers violates assumption 1, unless additional steps are taken in the
network configuration to allow symmetric communication between involved systems.
In such situations Akka can be configured to bind to a different network
address than the one used for establishing connections between Akka nodes.
-See @ref:[Akka behind NAT or in a Docker container](../scala/remoting.md#remote-configuration-nat).
+See @ref:[Akka behind NAT or in a Docker container](../../scala/remoting.md#remote-configuration-nat).
## Marking Points for Scaling Up with Routers
@@ -81,4 +81,4 @@ up a configurable number of children of the desired type and route to them in
the configured fashion. Once such a router has been declared, its configuration
can be freely overridden from the configuration file, including mixing it with
the remote deployment of (some of) the children. Read more about
-this in @ref:[Routing (Scala)](../scala/routing.md) and @ref:[Routing (Java)](../java/routing.md).
\ No newline at end of file
+this in @ref:[Routing (Scala)](../../scala/routing.md) and @ref:[Routing (Java)](../../java/routing.md).
\ No newline at end of file
diff --git a/akka-docs/src/main/paradox/general/stream/stream-configuration.md b/akka-docs/src/main/paradox/scala/general/stream/stream-configuration.md
similarity index 100%
rename from akka-docs/src/main/paradox/general/stream/stream-configuration.md
rename to akka-docs/src/main/paradox/scala/general/stream/stream-configuration.md
diff --git a/akka-docs/src/main/paradox/general/stream/stream-design.md b/akka-docs/src/main/paradox/scala/general/stream/stream-design.md
similarity index 100%
rename from akka-docs/src/main/paradox/general/stream/stream-design.md
rename to akka-docs/src/main/paradox/scala/general/stream/stream-design.md
diff --git a/akka-docs/src/main/paradox/general/supervision.md b/akka-docs/src/main/paradox/scala/general/supervision.md
similarity index 92%
rename from akka-docs/src/main/paradox/general/supervision.md
rename to akka-docs/src/main/paradox/scala/general/supervision.md
index ea82351da8..134552bd21 100644
--- a/akka-docs/src/main/paradox/general/supervision.md
+++ b/akka-docs/src/main/paradox/scala/general/supervision.md
@@ -195,7 +195,7 @@ Provided as a built-in pattern the `akka.pattern.BackoffSupervisor` implements t
This pattern is useful when the started actor fails [1] because some external resource is not available,
and we need to give it some time to start-up again. One of the prime examples when this is useful is
-when a @ref:[PersistentActor](../scala/persistence.md) fails (by stopping) with a persistence failure - which indicates that
+when a @ref:[PersistentActor](../../scala/persistence.md) fails (by stopping) with a persistence failure - which indicates that
the database may be down or overloaded, in such situations it makes most sense to give it a little bit of time
to recover before the peristent actor is started.
@@ -204,13 +204,13 @@ to recover before the peristent actor is started.
The following Scala snippet shows how to create a backoff supervisor which will start the given echo actor after it has stopped
because of a failure, in increasing intervals of 3, 6, 12, 24 and finally 30 seconds:
-@@snip [BackoffSupervisorDocSpec.scala](../scala/code/docs/pattern/BackoffSupervisorDocSpec.scala) { #backoff-stop }
+@@snip [BackoffSupervisorDocSpec.scala](../../scala/code/docs/pattern/BackoffSupervisorDocSpec.scala) { #backoff-stop }
The above is equivalent to this Java code:
-@@snip [BackoffSupervisorDocTest.java](../java/code/jdocs/pattern/BackoffSupervisorDocTest.java) { #backoff-imports }
+@@snip [BackoffSupervisorDocTest.java](../../java/code/jdocs/pattern/BackoffSupervisorDocTest.java) { #backoff-imports }
-@@snip [BackoffSupervisorDocTest.java](../java/code/jdocs/pattern/BackoffSupervisorDocTest.java) { #backoff-stop }
+@@snip [BackoffSupervisorDocTest.java](../../java/code/jdocs/pattern/BackoffSupervisorDocTest.java) { #backoff-stop }
Using a `randomFactor` to add a little bit of additional variance to the backoff intervals
is highly recommended, in order to avoid multiple actors re-start at the exact same point in time,
@@ -225,23 +225,23 @@ crashes and the supervision strategy decides that it should restart.
The following Scala snippet shows how to create a backoff supervisor which will start the given echo actor after it has crashed
because of some exception, in increasing intervals of 3, 6, 12, 24 and finally 30 seconds:
-@@snip [BackoffSupervisorDocSpec.scala](../scala/code/docs/pattern/BackoffSupervisorDocSpec.scala) { #backoff-fail }
+@@snip [BackoffSupervisorDocSpec.scala](../../scala/code/docs/pattern/BackoffSupervisorDocSpec.scala) { #backoff-fail }
The above is equivalent to this Java code:
-@@snip [BackoffSupervisorDocTest.java](../java/code/jdocs/pattern/BackoffSupervisorDocTest.java) { #backoff-imports }
+@@snip [BackoffSupervisorDocTest.java](../../java/code/jdocs/pattern/BackoffSupervisorDocTest.java) { #backoff-imports }
-@@snip [BackoffSupervisorDocTest.java](../java/code/jdocs/pattern/BackoffSupervisorDocTest.java) { #backoff-fail }
+@@snip [BackoffSupervisorDocTest.java](../../java/code/jdocs/pattern/BackoffSupervisorDocTest.java) { #backoff-fail }
The `akka.pattern.BackoffOptions` can be used to customize the behavior of the back-off supervisor actor, below are some examples:
-@@snip [BackoffSupervisorDocSpec.scala](../scala/code/docs/pattern/BackoffSupervisorDocSpec.scala) { #backoff-custom-stop }
+@@snip [BackoffSupervisorDocSpec.scala](../../scala/code/docs/pattern/BackoffSupervisorDocSpec.scala) { #backoff-custom-stop }
The above code sets up a back-off supervisor that requires the child actor to send a `akka.pattern.BackoffSupervisor.Reset` message
to its parent when a message is successfully processed, resetting the back-off. It also uses a default stopping strategy, any exception
will cause the child to stop.
-@@snip [BackoffSupervisorDocSpec.scala](../scala/code/docs/pattern/BackoffSupervisorDocSpec.scala) { #backoff-custom-fail }
+@@snip [BackoffSupervisorDocSpec.scala](../../scala/code/docs/pattern/BackoffSupervisorDocSpec.scala) { #backoff-custom-fail }
The above code sets up a back-off supervisor that restarts the child after back-off if MyException is thrown, any other exception will be
escalated. The back-off is automatically reset if the child does not throw any errors within 10 seconds.
@@ -279,4 +279,4 @@ Please note that creating one-off actors from an all-for-one supervisor entails
that failures escalated by the temporary actor will affect all the permanent
ones. If this is not desired, install an intermediate supervisor; this can very
easily be done by declaring a router of size 1 for the worker, see
-@ref:[Routing](../scala/routing.md) or @ref:[Routing](../java/routing.md).
\ No newline at end of file
+@ref:[Routing](../../scala/routing.md) or @ref:[Routing](../../java/routing.md).
\ No newline at end of file
diff --git a/akka-docs/src/main/paradox/general/terminology.md b/akka-docs/src/main/paradox/scala/general/terminology.md
similarity index 100%
rename from akka-docs/src/main/paradox/general/terminology.md
rename to akka-docs/src/main/paradox/scala/general/terminology.md
diff --git a/akka-docs/src/main/paradox/guide/actors-intro.md b/akka-docs/src/main/paradox/scala/guide/actors-intro.md
similarity index 100%
rename from akka-docs/src/main/paradox/guide/actors-intro.md
rename to akka-docs/src/main/paradox/scala/guide/actors-intro.md
diff --git a/akka-docs/src/main/paradox/guide/diagrams/actor_graph.png b/akka-docs/src/main/paradox/scala/guide/diagrams/actor_graph.png
similarity index 100%
rename from akka-docs/src/main/paradox/guide/diagrams/actor_graph.png
rename to akka-docs/src/main/paradox/scala/guide/diagrams/actor_graph.png
diff --git a/akka-docs/src/main/paradox/guide/diagrams/actor_graph.svg b/akka-docs/src/main/paradox/scala/guide/diagrams/actor_graph.svg
similarity index 100%
rename from akka-docs/src/main/paradox/guide/diagrams/actor_graph.svg
rename to akka-docs/src/main/paradox/scala/guide/diagrams/actor_graph.svg
diff --git a/akka-docs/src/main/paradox/guide/diagrams/actor_top_tree.png b/akka-docs/src/main/paradox/scala/guide/diagrams/actor_top_tree.png
similarity index 100%
rename from akka-docs/src/main/paradox/guide/diagrams/actor_top_tree.png
rename to akka-docs/src/main/paradox/scala/guide/diagrams/actor_top_tree.png
diff --git a/akka-docs/src/main/paradox/guide/diagrams/actor_top_tree.svg b/akka-docs/src/main/paradox/scala/guide/diagrams/actor_top_tree.svg
similarity index 100%
rename from akka-docs/src/main/paradox/guide/diagrams/actor_top_tree.svg
rename to akka-docs/src/main/paradox/scala/guide/diagrams/actor_top_tree.svg
diff --git a/akka-docs/src/main/paradox/guide/diagrams/actor_tree_supervision.png b/akka-docs/src/main/paradox/scala/guide/diagrams/actor_tree_supervision.png
similarity index 100%
rename from akka-docs/src/main/paradox/guide/diagrams/actor_tree_supervision.png
rename to akka-docs/src/main/paradox/scala/guide/diagrams/actor_tree_supervision.png
diff --git a/akka-docs/src/main/paradox/guide/diagrams/actor_tree_supervision.svg b/akka-docs/src/main/paradox/scala/guide/diagrams/actor_tree_supervision.svg
similarity index 100%
rename from akka-docs/src/main/paradox/guide/diagrams/actor_tree_supervision.svg
rename to akka-docs/src/main/paradox/scala/guide/diagrams/actor_tree_supervision.svg
diff --git a/akka-docs/src/main/paradox/guide/diagrams/arch_boxes_diagram.png b/akka-docs/src/main/paradox/scala/guide/diagrams/arch_boxes_diagram.png
similarity index 100%
rename from akka-docs/src/main/paradox/guide/diagrams/arch_boxes_diagram.png
rename to akka-docs/src/main/paradox/scala/guide/diagrams/arch_boxes_diagram.png
diff --git a/akka-docs/src/main/paradox/guide/diagrams/arch_boxes_diagram.svg b/akka-docs/src/main/paradox/scala/guide/diagrams/arch_boxes_diagram.svg
similarity index 100%
rename from akka-docs/src/main/paradox/guide/diagrams/arch_boxes_diagram.svg
rename to akka-docs/src/main/paradox/scala/guide/diagrams/arch_boxes_diagram.svg
diff --git a/akka-docs/src/main/paradox/guide/diagrams/arch_tree_diagram.png b/akka-docs/src/main/paradox/scala/guide/diagrams/arch_tree_diagram.png
similarity index 100%
rename from akka-docs/src/main/paradox/guide/diagrams/arch_tree_diagram.png
rename to akka-docs/src/main/paradox/scala/guide/diagrams/arch_tree_diagram.png
diff --git a/akka-docs/src/main/paradox/guide/diagrams/arch_tree_diagram.svg b/akka-docs/src/main/paradox/scala/guide/diagrams/arch_tree_diagram.svg
similarity index 100%
rename from akka-docs/src/main/paradox/guide/diagrams/arch_tree_diagram.svg
rename to akka-docs/src/main/paradox/scala/guide/diagrams/arch_tree_diagram.svg
diff --git a/akka-docs/src/main/paradox/guide/diagrams/device_manager_tree.png b/akka-docs/src/main/paradox/scala/guide/diagrams/device_manager_tree.png
similarity index 100%
rename from akka-docs/src/main/paradox/guide/diagrams/device_manager_tree.png
rename to akka-docs/src/main/paradox/scala/guide/diagrams/device_manager_tree.png
diff --git a/akka-docs/src/main/paradox/guide/diagrams/device_manager_tree.svg b/akka-docs/src/main/paradox/scala/guide/diagrams/device_manager_tree.svg
similarity index 100%
rename from akka-docs/src/main/paradox/guide/diagrams/device_manager_tree.svg
rename to akka-docs/src/main/paradox/scala/guide/diagrams/device_manager_tree.svg
diff --git a/akka-docs/src/main/paradox/guide/diagrams/exception_prop.png b/akka-docs/src/main/paradox/scala/guide/diagrams/exception_prop.png
similarity index 100%
rename from akka-docs/src/main/paradox/guide/diagrams/exception_prop.png
rename to akka-docs/src/main/paradox/scala/guide/diagrams/exception_prop.png
diff --git a/akka-docs/src/main/paradox/guide/diagrams/exception_prop.svg b/akka-docs/src/main/paradox/scala/guide/diagrams/exception_prop.svg
similarity index 100%
rename from akka-docs/src/main/paradox/guide/diagrams/exception_prop.svg
rename to akka-docs/src/main/paradox/scala/guide/diagrams/exception_prop.svg
diff --git a/akka-docs/src/main/paradox/guide/diagrams/object_graph.png b/akka-docs/src/main/paradox/scala/guide/diagrams/object_graph.png
similarity index 100%
rename from akka-docs/src/main/paradox/guide/diagrams/object_graph.png
rename to akka-docs/src/main/paradox/scala/guide/diagrams/object_graph.png
diff --git a/akka-docs/src/main/paradox/guide/diagrams/object_graph.svg b/akka-docs/src/main/paradox/scala/guide/diagrams/object_graph.svg
similarity index 100%
rename from akka-docs/src/main/paradox/guide/diagrams/object_graph.svg
rename to akka-docs/src/main/paradox/scala/guide/diagrams/object_graph.svg
diff --git a/akka-docs/src/main/paradox/guide/diagrams/object_graph_snakes.png b/akka-docs/src/main/paradox/scala/guide/diagrams/object_graph_snakes.png
similarity index 100%
rename from akka-docs/src/main/paradox/guide/diagrams/object_graph_snakes.png
rename to akka-docs/src/main/paradox/scala/guide/diagrams/object_graph_snakes.png
diff --git a/akka-docs/src/main/paradox/guide/diagrams/object_graph_snakes.svg b/akka-docs/src/main/paradox/scala/guide/diagrams/object_graph_snakes.svg
similarity index 100%
rename from akka-docs/src/main/paradox/guide/diagrams/object_graph_snakes.svg
rename to akka-docs/src/main/paradox/scala/guide/diagrams/object_graph_snakes.svg
diff --git a/akka-docs/src/main/paradox/guide/diagrams/seq_chart.png b/akka-docs/src/main/paradox/scala/guide/diagrams/seq_chart.png
similarity index 100%
rename from akka-docs/src/main/paradox/guide/diagrams/seq_chart.png
rename to akka-docs/src/main/paradox/scala/guide/diagrams/seq_chart.png
diff --git a/akka-docs/src/main/paradox/guide/diagrams/seq_chart.svg b/akka-docs/src/main/paradox/scala/guide/diagrams/seq_chart.svg
similarity index 100%
rename from akka-docs/src/main/paradox/guide/diagrams/seq_chart.svg
rename to akka-docs/src/main/paradox/scala/guide/diagrams/seq_chart.svg
diff --git a/akka-docs/src/main/paradox/guide/diagrams/seq_chart_multi_thread.png b/akka-docs/src/main/paradox/scala/guide/diagrams/seq_chart_multi_thread.png
similarity index 100%
rename from akka-docs/src/main/paradox/guide/diagrams/seq_chart_multi_thread.png
rename to akka-docs/src/main/paradox/scala/guide/diagrams/seq_chart_multi_thread.png
diff --git a/akka-docs/src/main/paradox/guide/diagrams/seq_chart_multi_thread.svg b/akka-docs/src/main/paradox/scala/guide/diagrams/seq_chart_multi_thread.svg
similarity index 100%
rename from akka-docs/src/main/paradox/guide/diagrams/seq_chart_multi_thread.svg
rename to akka-docs/src/main/paradox/scala/guide/diagrams/seq_chart_multi_thread.svg
diff --git a/akka-docs/src/main/paradox/guide/diagrams/seq_chart_thread.png b/akka-docs/src/main/paradox/scala/guide/diagrams/seq_chart_thread.png
similarity index 100%
rename from akka-docs/src/main/paradox/guide/diagrams/seq_chart_thread.png
rename to akka-docs/src/main/paradox/scala/guide/diagrams/seq_chart_thread.png
diff --git a/akka-docs/src/main/paradox/guide/diagrams/seq_chart_thread.svg b/akka-docs/src/main/paradox/scala/guide/diagrams/seq_chart_thread.svg
similarity index 100%
rename from akka-docs/src/main/paradox/guide/diagrams/seq_chart_thread.svg
rename to akka-docs/src/main/paradox/scala/guide/diagrams/seq_chart_thread.svg
diff --git a/akka-docs/src/main/paradox/guide/diagrams/serialized_timeline_invariants.png b/akka-docs/src/main/paradox/scala/guide/diagrams/serialized_timeline_invariants.png
similarity index 100%
rename from akka-docs/src/main/paradox/guide/diagrams/serialized_timeline_invariants.png
rename to akka-docs/src/main/paradox/scala/guide/diagrams/serialized_timeline_invariants.png
diff --git a/akka-docs/src/main/paradox/guide/diagrams/serialized_timeline_invariants.svg b/akka-docs/src/main/paradox/scala/guide/diagrams/serialized_timeline_invariants.svg
similarity index 100%
rename from akka-docs/src/main/paradox/guide/diagrams/serialized_timeline_invariants.svg
rename to akka-docs/src/main/paradox/scala/guide/diagrams/serialized_timeline_invariants.svg
diff --git a/akka-docs/src/main/paradox/guide/index.md b/akka-docs/src/main/paradox/scala/guide/index.md
similarity index 100%
rename from akka-docs/src/main/paradox/guide/index.md
rename to akka-docs/src/main/paradox/scala/guide/index.md
diff --git a/akka-docs/src/main/paradox/guide/introduction.md b/akka-docs/src/main/paradox/scala/guide/introduction.md
similarity index 100%
rename from akka-docs/src/main/paradox/guide/introduction.md
rename to akka-docs/src/main/paradox/scala/guide/introduction.md
diff --git a/akka-docs/src/main/paradox/guide/modules.md b/akka-docs/src/main/paradox/scala/guide/modules.md
similarity index 100%
rename from akka-docs/src/main/paradox/guide/modules.md
rename to akka-docs/src/main/paradox/scala/guide/modules.md
diff --git a/akka-docs/src/main/paradox/guide/quickstart.md b/akka-docs/src/main/paradox/scala/guide/quickstart.md
similarity index 96%
rename from akka-docs/src/main/paradox/guide/quickstart.md
rename to akka-docs/src/main/paradox/scala/guide/quickstart.md
index 0c176d4d83..952c429722 100644
--- a/akka-docs/src/main/paradox/guide/quickstart.md
+++ b/akka-docs/src/main/paradox/scala/guide/quickstart.md
@@ -111,14 +111,14 @@ The usual pattern is to have your system set up to stop on external signal (i.e.
Once there is an `ActorSystem` we can populate it with actors. This is done by using the `actorOf` method. The `actorOf` method expects a `Props` instance and the name of the actor to be created. You can think of the `Props` as a configuration value for what actor to create and how it should be created. Creating an actor with the `actorOf` method will return an `ActorRef` instance. Think of the `ActorRef` as a unique address with which it is possible to message the actor instance. The `ActorRef` object contains a few methods with which you can send messages to the actor instance. One of them is called `tell`, or in the Scala case simply `!` (bang), and this method is used in the example here below. Calling the `!` method is an asynchronous operation and it instructs Akka to send a message to the actor instance that is uniquely identified by the actor reference.
-@@snip [HelloWorldApp.scala](../../../test/scala/quickstart/HelloWorldApp.scala) { #create-send }
+@@snip [HelloWorldApp.scala](../../../../test/scala/quickstart/HelloWorldApp.scala) { #create-send }
Before we can create any actor in the actor system we must define one first. Luckily, creating actors in Akka is quite simple! Just have your actor class extend `akka.actor.Actor` and override the method `receive: Receive` and you are good to go. As for our `HelloWorldActor` class, it extends `Actor` and overrides the `receive` method as per the requirement. Our implementation of the `receive` method expects messages of type `String`. For every `String` message it receives it will print "Hello " and the value of the `String`. Since the message we send in the main class is "World" we expect the string "Hello World" to be printed when running the application.
-@@snip [HelloWorldApp.scala](../../../test/scala/quickstart/HelloWorldApp.scala) { #actor-impl }
+@@snip [HelloWorldApp.scala](../../../../test/scala/quickstart/HelloWorldApp.scala) { #actor-impl }
Here is the full example:
-@@snip [HelloWorldApp.scala](../../../test/scala/quickstart/HelloWorldApp.scala) { #full-example }
+@@snip [HelloWorldApp.scala](../../../../test/scala/quickstart/HelloWorldApp.scala) { #full-example }
Now that you have seen the basics of an Akka application it is time to dive deeper.
diff --git a/akka-docs/src/main/paradox/guide/tutorial_1.md b/akka-docs/src/main/paradox/scala/guide/tutorial_1.md
similarity index 96%
rename from akka-docs/src/main/paradox/guide/tutorial_1.md
rename to akka-docs/src/main/paradox/scala/guide/tutorial_1.md
index 3690aaf1f6..ff46da3950 100644
--- a/akka-docs/src/main/paradox/guide/tutorial_1.md
+++ b/akka-docs/src/main/paradox/scala/guide/tutorial_1.md
@@ -78,7 +78,7 @@ convenient terminology, and we will stick to it.
Creating a non-top-level actor is possible from any actor, by invoking `context.actorOf()` which has the exact same
signature as its top-level counterpart. This is how it looks like in practice:
-@@snip [Hello.scala](../../../test/scala/tutorial_1/ActorHierarchyExperiments.scala) { #print-refs }
+@@snip [Hello.scala](../../../../test/scala/tutorial_1/ActorHierarchyExperiments.scala) { #print-refs }
We see that the following two lines are printed
@@ -126,7 +126,7 @@ The actor API exposes many lifecycle hooks that the actor implementation can ove
Again, we can try out all this with a simple experiment:
-@@snip [Hello.scala](../../../test/scala/tutorial_1/ActorHierarchyExperiments.scala) { #start-stop }
+@@snip [Hello.scala](../../../../test/scala/tutorial_1/ActorHierarchyExperiments.scala) { #start-stop }
After running it, we get the output
@@ -151,7 +151,7 @@ to the parent, which decides how to handle the exception caused by the child act
stop and restart the child. If you don't change the default strategy all failures result in a restart. We won't change
the default strategy in this simple experiment:
-@@snip [Hello.scala](../../../test/scala/tutorial_1/ActorHierarchyExperiments.scala) { #supervise }
+@@snip [Hello.scala](../../../../test/scala/tutorial_1/ActorHierarchyExperiments.scala) { #supervise }
After running the snippet, we see the following output on the console:
@@ -211,11 +211,11 @@ The first actor happens to be rather simple now, as we have not implemented any
is that we have dropped using `println()` and instead use the `ActorLogging` helper trait which allows us to use the
logging facility built into Akka directly. Furthermore, we are using a recommended creational pattern for actors; define a `props()` method in the [companion object](http://docs.scala-lang.org/tutorials/tour/singleton-objects.html#companions) of the actor:
-@@snip [Hello.scala](../../../test/scala/tutorial_1/IotSupervisor.scala) { #iot-supervisor }
+@@snip [Hello.scala](../../../../test/scala/tutorial_1/IotSupervisor.scala) { #iot-supervisor }
All we need now is to tie this up with a class with the `main` entry point:
-@@snip [Hello.scala](../../../test/scala/tutorial_1/IotApp.scala) { #iot-app }
+@@snip [Hello.scala](../../../../test/scala/tutorial_1/IotApp.scala) { #iot-app }
This application does very little for now, but we have the first actor in place and we are ready to extend it further.
diff --git a/akka-docs/src/main/paradox/guide/tutorial_2.md b/akka-docs/src/main/paradox/scala/guide/tutorial_2.md
similarity index 93%
rename from akka-docs/src/main/paradox/guide/tutorial_2.md
rename to akka-docs/src/main/paradox/scala/guide/tutorial_2.md
index a6ad2a5897..1f50dd82fd 100644
--- a/akka-docs/src/main/paradox/guide/tutorial_2.md
+++ b/akka-docs/src/main/paradox/scala/guide/tutorial_2.md
@@ -29,7 +29,7 @@ The protocol for obtaining the current temperature from the device actor is rath
We need two messages, one for the request, and one for the reply. A first attempt could look like this:
-@@snip [Hello.scala](../../../test/scala/tutorial_2/DeviceInProgress.scala) { #read-protocol-1 }
+@@snip [Hello.scala](../../../../test/scala/tutorial_2/DeviceInProgress.scala) { #read-protocol-1 }
This is a fine approach, but it limits the flexibility of the protocol. To understand why we need to talk
about message ordering and message delivery guarantees in general.
@@ -139,12 +139,12 @@ can be helpful to put an additional query ID field in the message which helps us
Hence, we add one more field to our messages, so that an ID can be provided by the requester:
-@@snip [Hello.scala](../../../test/scala/tutorial_2/DeviceInProgress.scala) { #read-protocol-2 }
+@@snip [Hello.scala](../../../../test/scala/tutorial_2/DeviceInProgress.scala) { #read-protocol-2 }
Our device actor has the responsibility to use the same ID for the response of a given query. Now we can sketch
our device actor:
-@@snip [Hello.scala](../../../test/scala/tutorial_2/DeviceInProgress.scala) { #device-with-read }
+@@snip [Hello.scala](../../../../test/scala/tutorial_2/DeviceInProgress.scala) { #device-with-read }
We maintain the current temperature, initially set to `None`, and we simply report it back if queried. We also
added fields for the ID of the device and the group it belongs to, which we will use later.
@@ -152,7 +152,7 @@ added fields for the ID of the device and the group it belongs to, which we will
We can already write a simple test for this functionality (we use ScalaTest but any other test framework can be
used with the Akka Testkit):
-@@snip [Hello.scala](../../../test/scala/tutorial_2/DeviceSpec.scala) { #device-read-test }
+@@snip [Hello.scala](../../../../test/scala/tutorial_2/DeviceSpec.scala) { #device-read-test }
## The Write Protocol
@@ -162,7 +162,7 @@ As a first attempt, we could model recording the current temperature in the devi
Such a message could possibly look like this:
-@@snip [Hello.scala](../../../test/scala/tutorial_2/DeviceInProgress.scala) { #write-protocol-1 }
+@@snip [Hello.scala](../../../../test/scala/tutorial_2/DeviceInProgress.scala) { #write-protocol-1 }
The problem with this approach is that the sender of the record temperature message can never be sure if the message
was processed or not. We have seen that Akka does not guarantee delivery of these messages and leaves it to the
@@ -172,12 +172,12 @@ Just like in the case of temperature queries and responses, it is a good idea to
Putting read and write protocol together, the device actor will look like this:
-@@snip [Hello.scala](../../../test/scala/tutorial_2/Device.scala) { #full-device }
+@@snip [Hello.scala](../../../../test/scala/tutorial_2/Device.scala) { #full-device }
We are also responsible for writing a new test case now, exercising both the read/query and write/record functionality
together:
-@@snip [Hello.scala](../../../test/scala/tutorial_2/DeviceSpec.scala) { #device-write-read-test }
+@@snip [Hello.scala](../../../../test/scala/tutorial_2/DeviceSpec.scala) { #device-write-read-test }
## What is Next?
diff --git a/akka-docs/src/main/paradox/guide/tutorial_3.md b/akka-docs/src/main/paradox/scala/guide/tutorial_3.md
similarity index 92%
rename from akka-docs/src/main/paradox/guide/tutorial_3.md
rename to akka-docs/src/main/paradox/scala/guide/tutorial_3.md
index dc6c07a421..e1e9c9d861 100644
--- a/akka-docs/src/main/paradox/guide/tutorial_3.md
+++ b/akka-docs/src/main/paradox/scala/guide/tutorial_3.md
@@ -81,7 +81,7 @@ is known up front: device groups and device actors are created on-demand. The st
Now that the steps are defined, we only need to define the messages that we will use to communicate requests and
their acknowledgement:
-@@snip [Hello.scala](../../../test/scala/tutorial_3/DeviceManager.scala) { #device-manager-msgs }
+@@snip [Hello.scala](../../../../test/scala/tutorial_3/DeviceManager.scala) { #device-manager-msgs }
As you see, in this case, we have not included a request ID field in the messages. Since registration is usually happening
once, at the component that connects the system to some network protocol, we will usually have no use for the ID.
@@ -104,7 +104,7 @@ the code looks like:
value. This is achieved by variables included in backticks, like `` `variable` ``, and it means that the pattern
only match if it contains the value of `variable` in that position.
-@@snip [Hello.scala](../../../test/scala/tutorial_3/Device.scala) { #device-with-register }
+@@snip [Hello.scala](../../../../test/scala/tutorial_3/Device.scala) { #device-with-register }
We should not leave features untested, so we immediately write two new test cases, one exercising successful
registration, the other testing the case when IDs don't match:
@@ -114,7 +114,7 @@ and fails if it receives any messages during this period. If no messages are rec
assertion passes. It is usually a good idea to keep these timeouts low (but not too low) because they add significant
test execution time otherwise.
-@@snip [Hello.scala](../../../test/scala/tutorial_3/DeviceSpec.scala) { #device-registration-tests }
+@@snip [Hello.scala](../../../../test/scala/tutorial_3/DeviceSpec.scala) { #device-registration-tests }
## Device Group
@@ -127,18 +127,18 @@ by using `forward` instead of the `!` operator. The only difference between the
sender while `!` always sets the sender to be the current actor. Just like with our device actor, we ensure that we don't
respond to wrong group IDs:
-@@snip [Hello.scala](../../../test/scala/tutorial_3/DeviceGroup.scala) { #device-group-register }
+@@snip [Hello.scala](../../../../test/scala/tutorial_3/DeviceGroup.scala) { #device-group-register }
Just as we did with the device, we test this new functionality. We also test that the actors returned for the two
different IDs are actually different, and we also attempt to record a temperature reading for each of the devices
to see if the actors are responding.
-@@snip [Hello.scala](../../../test/scala/tutorial_3/DeviceGroupSpec.scala) { #device-group-test-registration }
+@@snip [Hello.scala](../../../../test/scala/tutorial_3/DeviceGroupSpec.scala) { #device-group-test-registration }
It might be, that a device actor already exists for the registration request. In this case, we would like to use
the existing actor instead of a new one. We have not tested this yet, so we need to fix this:
-@@snip [Hello.scala](../../../test/scala/tutorial_3/DeviceGroupSpec.scala) { #device-group-test3 }
+@@snip [Hello.scala](../../../../test/scala/tutorial_3/DeviceGroupSpec.scala) { #device-group-test3 }
So far, we have implemented everything for registering device actors in the group. Devices come and go, however, so
we will need a way to remove those from the `Map[String, ActorRef]`. We will assume that when a device is removed, its corresponding device actor
@@ -163,13 +163,13 @@ its ID, which we need to remove it from the map of existing device to device act
need to introduce another placeholder, `Map[ActorRef, String]`, that allow us to find out the device ID corresponding to a given `ActorRef`. Putting
this together the result is:
-@@snip [Hello.scala](../../../test/scala/tutorial_3/DeviceGroup.scala) { #device-group-remove }
+@@snip [Hello.scala](../../../../test/scala/tutorial_3/DeviceGroup.scala) { #device-group-remove }
So far we have no means to get what devices the group device actor keeps track of and, therefore, we cannot test our
new functionality yet. To make it testable, we add a new query capability (message `RequestDeviceList(requestId: Long)`) that simply lists the currently active
device IDs:
-@@snip [Hello.scala](../../../test/scala/tutorial_3/DeviceGroup.scala) { #device-group-full }
+@@snip [Hello.scala](../../../../test/scala/tutorial_3/DeviceGroup.scala) { #device-group-full }
We almost have everything to test the removal of devices. What is missing is:
@@ -183,14 +183,14 @@ We add two more test cases now. In the first, we just test that we get back the
a few devices. The second test case makes sure that the device ID is properly removed after the device actor has
been stopped:
-@@snip [Hello.scala](../../../test/scala/tutorial_3/DeviceGroupSpec.scala) { #device-group-list-terminate-test }
+@@snip [Hello.scala](../../../../test/scala/tutorial_3/DeviceGroupSpec.scala) { #device-group-list-terminate-test }
## Device Manager
The only part that remains now is the entry point for our device manager component. This actor is very similar to
the device group actor, with the only difference that it creates device group actors instead of device actors:
-@@snip [Hello.scala](../../../test/scala/tutorial_3/DeviceManager.scala) { #device-manager-full }
+@@snip [Hello.scala](../../../../test/scala/tutorial_3/DeviceManager.scala) { #device-manager-full }
We leave tests of the device manager as an exercise as it is very similar to the tests we have written for the group
actor.
diff --git a/akka-docs/src/main/paradox/guide/tutorial_4.md b/akka-docs/src/main/paradox/scala/guide/tutorial_4.md
similarity index 91%
rename from akka-docs/src/main/paradox/guide/tutorial_4.md
rename to akka-docs/src/main/paradox/scala/guide/tutorial_4.md
index c895050142..3599949ea2 100644
--- a/akka-docs/src/main/paradox/guide/tutorial_4.md
+++ b/akka-docs/src/main/paradox/scala/guide/tutorial_4.md
@@ -41,7 +41,7 @@ that each device can be in, according to the query:
Summarizing these in message types we can add the following to `DeviceGroup`:
-@@snip [Hello.scala](../../../test/scala/tutorial_4/DeviceGroup.scala) { #query-protocol }
+@@snip [Hello.scala](../../../../test/scala/tutorial_4/DeviceGroup.scala) { #query-protocol }
## Implementing the Query
@@ -87,7 +87,7 @@ until the timeout to mark these as not available.
Putting together all these, the outline of our actor looks like this:
-@@snip [Hello.scala](../../../test/scala/tutorial_4/DeviceGroupQuery.scala) { #query-outline }
+@@snip [Hello.scala](../../../../test/scala/tutorial_4/DeviceGroupQuery.scala) { #query-outline }
The query actor, apart from the pending timer, has one stateful aspect about it: the actors that did not answer so far or,
from the other way around, the set of actors that have replied or stopped. One way to track this state is
@@ -108,7 +108,7 @@ we will discuss later. In the case of timeout, we need to simply take all the ac
(the members of the set `stillWaiting`) and put a `DeviceTimedOut` as the status in the final reply. Then we
reply to the submitter of the query with the collected results and stop the query actor:
-@@snip [Hello.scala](../../../test/scala/tutorial_4/DeviceGroupQuery.scala) { #query-state }
+@@snip [Hello.scala](../../../../test/scala/tutorial_4/DeviceGroupQuery.scala) { #query-state }
What is not yet clear, how we will "mutate" the `answersSoFar` and `stillWaiting` data structures. One important
thing to note is that the function `waitingForReplies` **does not handle the messages directly. It returns a `Receive`
@@ -137,7 +137,7 @@ only the first call will have any effect, the rest is simply ignored.
With all this knowledge, we can create the `receivedResponse` method:
-@@snip [Hello.scala](../../../test/scala/tutorial_4/DeviceGroupQuery.scala) { #query-collect-reply }
+@@snip [Hello.scala](../../../../test/scala/tutorial_4/DeviceGroupQuery.scala) { #query-collect-reply }
It is quite natural to ask at this point, what have we gained by using the `context.become()` trick instead of
just making the `repliesSoFar` and `stillWaiting` structures mutable fields of the actor (i.e. `var`s)? In this
@@ -151,7 +151,7 @@ with the solution we have used here as it helps structuring more complex actor c
Or query actor is now done:
-@@snip [Hello.scala](../../../test/scala/tutorial_4/DeviceGroupQuery.scala) { #query-full }
+@@snip [Hello.scala](../../../../test/scala/tutorial_4/DeviceGroupQuery.scala) { #query-full }
## Testing
@@ -161,27 +161,27 @@ various normal or failure scenarios. Thankfully we took the list of collaborator
to the query actor, so we can easily pass in `TestProbe` references. In our first test, we try out the case when
there are two devices and both report a temperature:
-@@snip [Hello.scala](../../../test/scala/tutorial_4/DeviceGroupQuerySpec.scala) { #query-test-normal }
+@@snip [Hello.scala](../../../../test/scala/tutorial_4/DeviceGroupQuerySpec.scala) { #query-test-normal }
That was the happy case, but we know that sometimes devices cannot provide a temperature measurement. This
scenario is just slightly different from the previous:
-@@snip [Hello.scala](../../../test/scala/tutorial_4/DeviceGroupQuerySpec.scala) { #query-test-no-reading }
+@@snip [Hello.scala](../../../../test/scala/tutorial_4/DeviceGroupQuerySpec.scala) { #query-test-no-reading }
We also know, that sometimes device actors stop before answering:
-@@snip [Hello.scala](../../../test/scala/tutorial_4/DeviceGroupQuerySpec.scala) { #query-test-stopped }
+@@snip [Hello.scala](../../../../test/scala/tutorial_4/DeviceGroupQuerySpec.scala) { #query-test-stopped }
If you remember, there is another case related to device actors stopping. It is possible that we get a normal reply
from a device actor, but then receive a `Terminated` for the same actor later. In this case, we would like to keep
the first reply and not mark the device as `DeviceNotAvailable`. We should test this, too:
-@@snip [Hello.scala](../../../test/scala/tutorial_4/DeviceGroupQuerySpec.scala) { #query-test-stopped-later }
+@@snip [Hello.scala](../../../../test/scala/tutorial_4/DeviceGroupQuerySpec.scala) { #query-test-stopped-later }
The final case is when not all devices respond in time. To keep our test relatively fast, we will construct the
`DeviceGroupQuery` actor with a smaller timeout:
-@@snip [Hello.scala](../../../test/scala/tutorial_4/DeviceGroupQuerySpec.scala) { #query-test-timeout }
+@@snip [Hello.scala](../../../../test/scala/tutorial_4/DeviceGroupQuerySpec.scala) { #query-test-timeout }
Our query works as expected now, it is time to include this new functionality in the `DeviceGroup` actor now.
@@ -190,7 +190,7 @@ Our query works as expected now, it is time to include this new functionality in
Including the query feature in the group actor is fairly simple now. We did all the heavy lifting in the query actor
itself, the group actor only needs to create it with the right initial parameters and nothing else.
-@@snip [Hello.scala](../../../test/scala/tutorial_4/DeviceGroup.scala) { #query-added }
+@@snip [Hello.scala](../../../../test/scala/tutorial_4/DeviceGroup.scala) { #query-added }
It is probably worth to reiterate what we said at the beginning of the chapter. By keeping the temporary state
that is only relevant to the query itself in a separate actor we keep the group actor implementation very simple. It delegates
@@ -202,4 +202,4 @@ would significantly improve throughput.
We close this chapter by testing that everything works together. This test is just a variant of the previous ones,
now exercising the group query feature:
-@@snip [Hello.scala](../../../test/scala/tutorial_4/DeviceGroupSpec.scala) { #group-query-integration-test }
+@@snip [Hello.scala](../../../../test/scala/tutorial_4/DeviceGroupSpec.scala) { #group-query-integration-test }
diff --git a/akka-docs/src/main/paradox/scala/index-network.md b/akka-docs/src/main/paradox/scala/index-network.md
index 0c7ef30707..f1b6449ec3 100644
--- a/akka-docs/src/main/paradox/scala/index-network.md
+++ b/akka-docs/src/main/paradox/scala/index-network.md
@@ -4,7 +4,7 @@
@@@ index
-* [../common/cluster](../common/cluster.md)
+* [../scala/common/cluster](../scala/common/cluster.md)
* [cluster-usage](cluster-usage.md)
* [cluster-singleton](cluster-singleton.md)
* [distributed-pub-sub](distributed-pub-sub.md)
diff --git a/akka-docs/src/main/paradox/scala/index-utilities.md b/akka-docs/src/main/paradox/scala/index-utilities.md
index 45fd046727..296455851a 100644
--- a/akka-docs/src/main/paradox/scala/index-utilities.md
+++ b/akka-docs/src/main/paradox/scala/index-utilities.md
@@ -7,9 +7,9 @@
* [event-bus](event-bus.md)
* [logging](logging.md)
* [scheduler](scheduler.md)
-* [../common/duration](../common/duration.md)
-* [../common/circuitbreaker](../common/circuitbreaker.md)
+* [../scala/common/duration](../scala/common/duration.md)
+* [../scala/common/circuitbreaker](../scala/common/circuitbreaker.md)
* [extending-akka](extending-akka.md)
-* [../intro/deployment-scenarios](../intro/deployment-scenarios.md)
+* [../scala/intro/deployment-scenarios](../scala/intro/deployment-scenarios.md)
@@@
\ No newline at end of file
diff --git a/akka-docs/src/main/paradox/intro/deployment-scenarios.md b/akka-docs/src/main/paradox/scala/intro/deployment-scenarios.md
similarity index 96%
rename from akka-docs/src/main/paradox/intro/deployment-scenarios.md
rename to akka-docs/src/main/paradox/scala/intro/deployment-scenarios.md
index 2176d1f14c..10933be177 100644
--- a/akka-docs/src/main/paradox/intro/deployment-scenarios.md
+++ b/akka-docs/src/main/paradox/scala/intro/deployment-scenarios.md
@@ -32,7 +32,7 @@ Follow the instructions for the `JavaAppPackaging` in the [sbt-native-packager p
You can use both Akka remoting and Akka Cluster inside of Docker containers. But note
that you will need to take special care with the network configuration when using Docker,
-described here: @ref:[Akka behind NAT or in a Docker container](../scala/remoting.md#remote-configuration-nat)
+described here: @ref:[Akka behind NAT or in a Docker container](../../scala/remoting.md#remote-configuration-nat)
For an example of how to set up a project using Akka Cluster and Docker take a look at the
["akka-docker-cluster" sample](https://github.com/muuki88/activator-akka-docker).
\ No newline at end of file
diff --git a/akka-docs/src/main/paradox/intro/getting-started.md b/akka-docs/src/main/paradox/scala/intro/getting-started.md
similarity index 99%
rename from akka-docs/src/main/paradox/intro/getting-started.md
rename to akka-docs/src/main/paradox/scala/intro/getting-started.md
index c1951e7352..bb192db206 100644
--- a/akka-docs/src/main/paradox/intro/getting-started.md
+++ b/akka-docs/src/main/paradox/scala/intro/getting-started.md
@@ -241,4 +241,4 @@ If you have questions you can get help on the [Akka Mailing List](https://groups
You can also ask for [commercial support](https://www.lightbend.com).
-Thanks for being a part of the Akka community.
\ No newline at end of file
+Thanks for being a part of the Akka community.
diff --git a/akka-docs/src/main/paradox/intro/index-java.md b/akka-docs/src/main/paradox/scala/intro/index-java.md
similarity index 82%
rename from akka-docs/src/main/paradox/intro/index-java.md
rename to akka-docs/src/main/paradox/scala/intro/index-java.md
index 52ddd5c3fe..d488a79a31 100644
--- a/akka-docs/src/main/paradox/intro/index-java.md
+++ b/akka-docs/src/main/paradox/scala/intro/index-java.md
@@ -7,7 +7,7 @@
* [what-is-akka](what-is-akka.md)
* [why-akka](why-akka.md)
* [getting-started](getting-started.md)
-* [../java/hello-world](../java/hello-world.md)
+* [../hello-world](../hello-world.md)
* [deployment-scenarios](deployment-scenarios.md)
* [use-cases](use-cases.md)
diff --git a/akka-docs/src/main/paradox/intro/index-scala.md b/akka-docs/src/main/paradox/scala/intro/index-scala.md
similarity index 82%
rename from akka-docs/src/main/paradox/intro/index-scala.md
rename to akka-docs/src/main/paradox/scala/intro/index-scala.md
index 7467a5dc7a..d488a79a31 100644
--- a/akka-docs/src/main/paradox/intro/index-scala.md
+++ b/akka-docs/src/main/paradox/scala/intro/index-scala.md
@@ -7,7 +7,7 @@
* [what-is-akka](what-is-akka.md)
* [why-akka](why-akka.md)
* [getting-started](getting-started.md)
-* [../scala/hello-world](../scala/hello-world.md)
+* [../hello-world](../hello-world.md)
* [deployment-scenarios](deployment-scenarios.md)
* [use-cases](use-cases.md)
diff --git a/akka-docs/src/main/paradox/intro/use-cases.md b/akka-docs/src/main/paradox/scala/intro/use-cases.md
similarity index 100%
rename from akka-docs/src/main/paradox/intro/use-cases.md
rename to akka-docs/src/main/paradox/scala/intro/use-cases.md
diff --git a/akka-docs/src/main/paradox/intro/what-is-akka.md b/akka-docs/src/main/paradox/scala/intro/what-is-akka.md
similarity index 85%
rename from akka-docs/src/main/paradox/intro/what-is-akka.md
rename to akka-docs/src/main/paradox/scala/intro/what-is-akka.md
index f5f5bfd796..9c063f609b 100644
--- a/akka-docs/src/main/paradox/intro/what-is-akka.md
+++ b/akka-docs/src/main/paradox/scala/intro/what-is-akka.md
@@ -31,7 +31,7 @@ Actors give you:
* Asynchronous, non-blocking and highly performant message-driven programming model.
* Very lightweight event-driven processes (several million actors per GB of heap memory).
-See the chapter for @ref:[Scala](../scala/actors.md) or @ref:[Java](../java/actors.md).
+See the chapter for @ref:[Scala](../../scala/actors.md) or @ref:[Java](../../java/actors.md).
### Fault Tolerance
@@ -39,15 +39,15 @@ See the chapter for @ref:[Scala](../scala/actors.md) or @ref:[Java](../java/acto
* Actor systems can span over multiple JVMs to provide truly fault-tolerant systems.
* Excellent for writing highly fault-tolerant systems that self-heal and never stop.
-See @ref:[Fault Tolerance (Scala)](../scala/fault-tolerance.md) and @ref:[Fault Tolerance (Java)](../java/fault-tolerance.md).
+See @ref:[Fault Tolerance (Scala)](../../scala/fault-tolerance.md) and @ref:[Fault Tolerance (Java)](../../java/fault-tolerance.md).
### Location Transparency
Everything in Akka is designed to work in a distributed environment: all
interactions of actors use pure message passing and everything is asynchronous.
-For an overview of the cluster support see the @ref:[Java](../java/cluster-usage.md)
-and @ref:[Scala](../scala/cluster-usage.md) documentation chapters.
+For an overview of the cluster support see the @ref:[Java](../../java/cluster-usage.md)
+and @ref:[Scala](../../scala/cluster-usage.md) documentation chapters.
### Persistence
@@ -55,11 +55,11 @@ State changes experienced by an actor can optionally be persisted and replayed w
restarted. This allows actors to recover their state, even after JVM crashes or when being migrated
to another node.
-You can find more details in the respective chapter for @ref:[Java](../java/persistence.md) or @ref:[Scala](../scala/persistence.md).
+You can find more details in the respective chapter for @ref:[Java](../../java/persistence.md) or @ref:[Scala](../../scala/persistence.md).
## Scala and Java APIs
-Akka has both a @ref:[Scala Documentation](../scala.md) and a @ref:[Java Documentation](../java.md).
+Akka has both a @ref:[Scala Documentation](../../scala.md) and a @ref:[Java Documentation](../../java.md).
## Akka can be used in different ways
diff --git a/akka-docs/src/main/paradox/intro/why-akka.md b/akka-docs/src/main/paradox/scala/intro/why-akka.md
similarity index 100%
rename from akka-docs/src/main/paradox/intro/why-akka.md
rename to akka-docs/src/main/paradox/scala/intro/why-akka.md
diff --git a/akka-docs/src/main/paradox/scala/io.md b/akka-docs/src/main/paradox/scala/io.md
index d068f912d5..c0de86f95d 100644
--- a/akka-docs/src/main/paradox/scala/io.md
+++ b/akka-docs/src/main/paradox/scala/io.md
@@ -101,4 +101,4 @@ A `ByteStringBuilder` can be wrapped in a `java.io.OutputStream` via the `asOutp
## Architecture in-depth
-For further details on the design and internal architecture see @ref:[I/O Layer Design](../dev/io-layer.md).
\ No newline at end of file
+For further details on the design and internal architecture see @ref:[I/O Layer Design](../scala/dev/io-layer.md).
\ No newline at end of file
diff --git a/akka-docs/src/main/paradox/scala/persistence.md b/akka-docs/src/main/paradox/scala/persistence.md
index 9fa290dd95..5d18327a1a 100644
--- a/akka-docs/src/main/paradox/scala/persistence.md
+++ b/akka-docs/src/main/paradox/scala/persistence.md
@@ -11,7 +11,7 @@ communication with at-least-once message delivery semantics.
Akka persistence is inspired by and the official replacement of the [eventsourced](https://github.com/eligosource/eventsourced) library. It follows the same
concepts and architecture of [eventsourced](https://github.com/eligosource/eventsourced) but significantly differs on API and implementation level. See also
-@ref:[migration-eventsourced-2.3](../project/migration-guide-eventsourced-2.3.x.md)
+@ref:[migration-eventsourced-2.3](../scala/project/migration-guide-eventsourced-2.3.x.md)
## Dependencies
@@ -1095,7 +1095,7 @@ When testing Persistence based projects always rely on @ref:[asynchronous messag
## Configuration
There are several configuration properties for the persistence module, please refer
-to the @ref:[reference configuration](../general/configuration.md#config-akka-persistence).
+to the @ref:[reference configuration](../scala/general/configuration.md#config-akka-persistence).
## Multiple persistence plugin configurations
diff --git a/akka-docs/src/main/paradox/project/index.md b/akka-docs/src/main/paradox/scala/project/index.md
similarity index 100%
rename from akka-docs/src/main/paradox/project/index.md
rename to akka-docs/src/main/paradox/scala/project/index.md
diff --git a/akka-docs/src/main/paradox/project/issue-tracking.md b/akka-docs/src/main/paradox/scala/project/issue-tracking.md
similarity index 100%
rename from akka-docs/src/main/paradox/project/issue-tracking.md
rename to akka-docs/src/main/paradox/scala/project/issue-tracking.md
diff --git a/akka-docs/src/main/paradox/project/licenses.md b/akka-docs/src/main/paradox/scala/project/licenses.md
similarity index 100%
rename from akka-docs/src/main/paradox/project/licenses.md
rename to akka-docs/src/main/paradox/scala/project/licenses.md
diff --git a/akka-docs/src/main/paradox/project/links.md b/akka-docs/src/main/paradox/scala/project/links.md
similarity index 100%
rename from akka-docs/src/main/paradox/project/links.md
rename to akka-docs/src/main/paradox/scala/project/links.md
diff --git a/akka-docs/src/main/paradox/project/migration-guide-1.3.x-2.0.x.md b/akka-docs/src/main/paradox/scala/project/migration-guide-1.3.x-2.0.x.md
similarity index 100%
rename from akka-docs/src/main/paradox/project/migration-guide-1.3.x-2.0.x.md
rename to akka-docs/src/main/paradox/scala/project/migration-guide-1.3.x-2.0.x.md
diff --git a/akka-docs/src/main/paradox/project/migration-guide-2.0.x-2.1.x.md b/akka-docs/src/main/paradox/scala/project/migration-guide-2.0.x-2.1.x.md
similarity index 100%
rename from akka-docs/src/main/paradox/project/migration-guide-2.0.x-2.1.x.md
rename to akka-docs/src/main/paradox/scala/project/migration-guide-2.0.x-2.1.x.md
diff --git a/akka-docs/src/main/paradox/project/migration-guide-2.1.x-2.2.x.md b/akka-docs/src/main/paradox/scala/project/migration-guide-2.1.x-2.2.x.md
similarity index 100%
rename from akka-docs/src/main/paradox/project/migration-guide-2.1.x-2.2.x.md
rename to akka-docs/src/main/paradox/scala/project/migration-guide-2.1.x-2.2.x.md
diff --git a/akka-docs/src/main/paradox/project/migration-guide-2.2.x-2.3.x.md b/akka-docs/src/main/paradox/scala/project/migration-guide-2.2.x-2.3.x.md
similarity index 100%
rename from akka-docs/src/main/paradox/project/migration-guide-2.2.x-2.3.x.md
rename to akka-docs/src/main/paradox/scala/project/migration-guide-2.2.x-2.3.x.md
diff --git a/akka-docs/src/main/paradox/project/migration-guide-2.3.x-2.4.x.md b/akka-docs/src/main/paradox/scala/project/migration-guide-2.3.x-2.4.x.md
similarity index 100%
rename from akka-docs/src/main/paradox/project/migration-guide-2.3.x-2.4.x.md
rename to akka-docs/src/main/paradox/scala/project/migration-guide-2.3.x-2.4.x.md
diff --git a/akka-docs/src/main/paradox/project/migration-guide-2.4.x-2.5.x.md b/akka-docs/src/main/paradox/scala/project/migration-guide-2.4.x-2.5.x.md
similarity index 93%
rename from akka-docs/src/main/paradox/project/migration-guide-2.4.x-2.5.x.md
rename to akka-docs/src/main/paradox/scala/project/migration-guide-2.4.x-2.5.x.md
index 96289f8dac..debafacc86 100644
--- a/akka-docs/src/main/paradox/project/migration-guide-2.4.x-2.5.x.md
+++ b/akka-docs/src/main/paradox/scala/project/migration-guide-2.4.x-2.5.x.md
@@ -66,7 +66,7 @@ public class SomeActor extends AbstractActor {
}
```
-See @ref:[Receive messages](../java/actors.md#actors-receive-java) documentation for more advice about how to implement
+See @ref:[Receive messages](../../java/actors.md#actors-receive-java) documentation for more advice about how to implement
`createReceive`.
A few new methods have been added with deprecation of the old. Worth noting is `preRestart`.
@@ -212,7 +212,7 @@ public class SomeActor extends AbstractActor {
}
```
-See @ref:[Receive messages](../java/actors.md#actors-receive-java) documentation for more advice about how to implement
+See @ref:[Receive messages](../../java/actors.md#actors-receive-java) documentation for more advice about how to implement
`createReceive`.
Similar with `UntypedActorWithStash`, `UntypedPersistentActor`, and
@@ -227,7 +227,7 @@ Use plain `system.actorOf` instead of the DSL to create Actors if you have been
### ExtensionKey Deprecation
-`ExtensionKey` is a shortcut for writing @ref:[Akka Extensions](../scala/extending-akka.md) but extensions created with it
+`ExtensionKey` is a shortcut for writing @ref:[Akka Extensions](../../scala/extending-akka.md) but extensions created with it
cannot be used from Java and it does in fact not save many lines of code over directly implementing `ExtensionId`.
Old:
@@ -269,8 +269,8 @@ The change is source compatible and such library should be recompiled and releas
and replaced by `GraphStage` in 2.0-M2. The `GraphStage` API has all features (and even more) as the
previous APIs and is even nicer to use.
-Please refer to the GraphStage documentation @ref:[ for Scala](../scala/stream/stream-customize.md#graphstage-scala) or
-the documentation @ref:[for Java](../scala/stream/stream-customize.md#graphstage-scala), for details on building custom GraphStages.
+Please refer to the GraphStage documentation @ref:[ for Scala](../../scala/stream/stream-customize.md#graphstage-scala) or
+the documentation @ref:[for Java](../../scala/stream/stream-customize.md#graphstage-scala), for details on building custom GraphStages.
`StatefulStage` would be migrated to a simple `GraphStage` that contains some mutable state in its `GraphStageLogic`,
and `PushPullStage` directly translate to graph stages.
@@ -310,7 +310,7 @@ and one would have to validate each implementation of such Actor using the React
The replacement API is the powerful `GraphStage`. It has all features that raw Actors provided for implementing Stream
stages and adds additional protocol and type-safety. You can learn all about it in the documentation:
-:ref:`stream-customize-scala`and @ref:[Custom stream processing in JavaDSL](../java/stream/stream-customize.md).
+:ref:`stream-customize-scala`and @ref:[Custom stream processing in JavaDSL](../../java/stream/stream-customize.md).
You should also read the blog post series on the official team blog, starting with [Mastering GraphStages, part I](http://blog.akka.io/streams/2016/07/30/mastering-graph-stage-part-1),
which explains using and implementing GraphStages in more practical terms than the reference documentation.
@@ -338,7 +338,7 @@ In 2.4 fusing stages together into the same actor could be completely disabled w
`akka.stream.materializer.auto-fusing`. The new materializer introduced in Akka 2.5 does not support disabling fusing,
so this setting does not have any effect any more and has been deprecated. Running each stage in a stream on a separate
actor can be done by adding explicit async boundaries around every stage. How to add asynchronous boundaries can be seen
-in @ref:[Operator Fusion](../java/stream/stream-flows-and-basics.md#operator-fusion-java) (Java) and @ref:[Operator Fusion](../scala/stream/stream-flows-and-basics.md#operator-fusion-scala) (Scala).
+in @ref:[Operator Fusion](../../java/stream/stream-flows-and-basics.md#operator-fusion-java) (Java) and @ref:[Operator Fusion](../../scala/stream/stream-flows-and-basics.md#operator-fusion-scala) (Scala).
## Remote
@@ -437,8 +437,8 @@ to the better. It might also be in conflict with your previous shutdown code so
read the documentation for the Coordinated Shutdown and revisit your own implementations.
Most likely your implementation will not be needed any more or it can be simplified.
-More information can be found in the @ref:[documentation for Scala](../scala/actors.md#coordinated-shutdown-scala) or
-@ref:[documentation for Java](../java/actors.md#coordinated-shutdown-java)
+More information can be found in the @ref:[documentation for Scala](../../scala/actors.md#coordinated-shutdown-scala) or
+@ref:[documentation for Java](../../java/actors.md#coordinated-shutdown-java)
For some tests it might be undesired to terminate the `ActorSystem` via `CoordinatedShutdown`.
You can disable that by adding the following to the configuration of the `ActorSystem` that is
@@ -454,7 +454,7 @@ akka.cluster.run-coordinated-shutdown-when-down = off
### WeaklyUp
-@ref:[weakly_up_scala](../scala/cluster-usage.md#weakly-up-scala) is now enabled by default, but it can be disabled with configuration option:
+@ref:[weakly_up_scala](../../scala/cluster-usage.md#weakly-up-scala) is now enabled by default, but it can be disabled with configuration option:
```
akka.cluster.allow-weakly-up-members = off
@@ -467,8 +467,8 @@ you might need to enable/disable it in configuration when performing rolling upg
### Cluster Sharding state-store-mode
Distributed Data mode is now the default `state-store-mode` for Cluster Sharding. The persistence mode
-is also supported. Read more in the documentation @ref:[for Scala](../scala/cluster-sharding.md#cluster-sharding-mode-scala) or
-the documentation @ref:[for Java](../java/cluster-sharding.md#cluster-sharding-mode-java).
+is also supported. Read more in the documentation @ref:[for Scala](../../scala/cluster-sharding.md#cluster-sharding-mode-scala) or
+the documentation @ref:[for Java](../../java/cluster-sharding.md#cluster-sharding-mode-java).
It's important to use the same mode on all nodes in the cluster, i.e. if you perform a rolling upgrade
from 2.4.16 you might need to change the `state-store-mode` to be the same (`persistence` is default
@@ -478,7 +478,7 @@ in 2.4.x):
akka.cluster.sharding.state-store-mode = persistence
```
-Note that the stored @ref:[cluster_sharding_remembering_java](../java/cluster-sharding.md#cluster-sharding-remembering-java) data with `persistence` mode cannot
+Note that the stored @ref:[cluster_sharding_remembering_java](../../java/cluster-sharding.md#cluster-sharding-remembering-java) data with `persistence` mode cannot
be migrated to the `data` mode. Such entities must be started again in some other way when using
`ddata` mode.
@@ -529,13 +529,13 @@ version of Akka.
### Removal of PersistentView
-After being deprecated for a long time, and replaced by @ref:[Persistence Query Java](../java/persistence-query.md)
-(@ref:[Persistence Query Scala](../scala/persistence-query.md)) `PersistentView` has been removed now removed.
+After being deprecated for a long time, and replaced by @ref:[Persistence Query Java](../../java/persistence-query.md)
+(@ref:[Persistence Query Scala](../../scala/persistence-query.md)) `PersistentView` has been removed now removed.
The corresponding query type is `EventsByPersistenceId`. There are several alternatives for connecting the `Source`
to an actor corresponding to a previous `PersistentView`. There are several alternatives for connecting the `Source`
-to an actor corresponding to a previous `PersistentView` actor which are documented in @ref:[Integration](../scala/stream/stream-integrations.md)
-for Scala and @ref:[Java](../java/stream/stream-integrations.md).
+to an actor corresponding to a previous `PersistentView` actor which are documented in @ref:[Integration](../../scala/stream/stream-integrations.md)
+for Scala and @ref:[Java](../../java/stream/stream-integrations.md).
The consuming actor may be a plain `Actor` or an `PersistentActor` if it needs to store its own state (e.g. `fromSequenceNr` offset).
@@ -543,10 +543,10 @@ Please note that Persistence Query is not experimental/may-change anymore in Akk
### Persistence Plugin Proxy
-A new @ref:[persistence plugin proxy](../scala/persistence.md#persistence-plugin-proxy) was added, that allows sharing of an otherwise
+A new @ref:[persistence plugin proxy](../../scala/persistence.md#persistence-plugin-proxy) was added, that allows sharing of an otherwise
non-sharable journal or snapshot store. The proxy is available by setting `akka.persistence.journal.plugin` or
`akka.persistence.snapshot-store.plugin` to `akka.persistence.journal.proxy` or `akka.persistence.snapshot-store.proxy`,
-respectively. The proxy supplants the @ref:[Shared LevelDB journal](../scala/persistence.md#shared-leveldb-journal).
+respectively. The proxy supplants the @ref:[Shared LevelDB journal](../../scala/persistence.md#shared-leveldb-journal).
## Persistence Query
@@ -623,7 +623,7 @@ separate library outside of Akka.
### JavaLogger
`akka.contrib.jul.JavaLogger` has been deprecated and included in `akka-actor` instead as
-`akka.event.jul.JavaLogger`. See @ref:[documentation](../scala/logging.md#jul-scala).
+`akka.event.jul.JavaLogger`. See @ref:[documentation](../../scala/logging.md#jul-scala).
The `JavaLoggingAdapter` has also been deprecated, but not included in `akka-actor`.
Feel free to copy the source into your project or create a separate library outside of Akka.
@@ -640,7 +640,7 @@ a separate library outside of Akka.
### ReliableProxy
-`ReliableProxy` has been deprecated. Use @ref:[At-Least-Once Delivery](../scala/persistence.md#at-least-once-delivery-scala) instead. `ReliableProxy`
+`ReliableProxy` has been deprecated. Use @ref:[At-Least-Once Delivery](../../scala/persistence.md#at-least-once-delivery-scala) instead. `ReliableProxy`
was only intended as an example and doesn't have full production quality. If there is demand
for a lightweight (non-durable) at-least once delivery mechanism we are open for a design discussion.
@@ -734,4 +734,4 @@ new TestKit(system) {{
final TestKit probe = new TestKit(system);
within(duration("1 second"), () -> probe.expectMsgEquals("hello"));
}};
-```
\ No newline at end of file
+```
diff --git a/akka-docs/src/main/paradox/project/migration-guide-eventsourced-2.3.x.md b/akka-docs/src/main/paradox/scala/project/migration-guide-eventsourced-2.3.x.md
similarity index 100%
rename from akka-docs/src/main/paradox/project/migration-guide-eventsourced-2.3.x.md
rename to akka-docs/src/main/paradox/scala/project/migration-guide-eventsourced-2.3.x.md
diff --git a/akka-docs/src/main/paradox/project/migration-guide-persistence-experimental-2.3.x-2.4.x.md b/akka-docs/src/main/paradox/scala/project/migration-guide-persistence-experimental-2.3.x-2.4.x.md
similarity index 100%
rename from akka-docs/src/main/paradox/project/migration-guide-persistence-experimental-2.3.x-2.4.x.md
rename to akka-docs/src/main/paradox/scala/project/migration-guide-persistence-experimental-2.3.x-2.4.x.md
diff --git a/akka-docs/src/main/paradox/project/migration-guide-stream-1.0-2.x.md b/akka-docs/src/main/paradox/scala/project/migration-guide-stream-1.0-2.x.md
similarity index 100%
rename from akka-docs/src/main/paradox/project/migration-guide-stream-1.0-2.x.md
rename to akka-docs/src/main/paradox/scala/project/migration-guide-stream-1.0-2.x.md
diff --git a/akka-docs/src/main/paradox/project/migration-guide-stream-2.0-2.4.md b/akka-docs/src/main/paradox/scala/project/migration-guide-stream-2.0-2.4.md
similarity index 100%
rename from akka-docs/src/main/paradox/project/migration-guide-stream-2.0-2.4.md
rename to akka-docs/src/main/paradox/scala/project/migration-guide-stream-2.0-2.4.md
diff --git a/akka-docs/src/main/paradox/project/migration-guides.md b/akka-docs/src/main/paradox/scala/project/migration-guides.md
similarity index 100%
rename from akka-docs/src/main/paradox/project/migration-guides.md
rename to akka-docs/src/main/paradox/scala/project/migration-guides.md
diff --git a/akka-docs/src/main/paradox/project/sponsors.md b/akka-docs/src/main/paradox/scala/project/sponsors.md
similarity index 100%
rename from akka-docs/src/main/paradox/project/sponsors.md
rename to akka-docs/src/main/paradox/scala/project/sponsors.md
diff --git a/akka-docs/src/main/paradox/scala/remoting-artery.md b/akka-docs/src/main/paradox/scala/remoting-artery.md
index 8d4d72eef6..dc2cf66a52 100644
--- a/akka-docs/src/main/paradox/scala/remoting-artery.md
+++ b/akka-docs/src/main/paradox/scala/remoting-artery.md
@@ -2,7 +2,7 @@
@@@ note
-This page describes the @ref:[may change](../common/may-change.md) remoting subsystem, codenamed *Artery* that will eventually replace the
+This page describes the @ref:[may change](../scala/common/may-change.md) remoting subsystem, codenamed *Artery* that will eventually replace the
old remoting implementation. For the current stable remoting system please refer to @ref:[Remoting](remoting.md).
@@@
@@ -166,7 +166,7 @@ and automatically reply to with a `ActorIdentity` message containing the
the `ActorSelection`, which returns a `Future` of the matching
`ActorRef`.
-For more details on how actor addresses and paths are formed and used, please refer to @ref:[Actor References, Paths and Addresses](../general/addressing.md).
+For more details on how actor addresses and paths are formed and used, please refer to @ref:[Actor References, Paths and Addresses](../scala/general/addressing.md).
@@@ note
@@ -350,7 +350,7 @@ marking them `PossiblyHarmful` so that a client cannot forge them.
Akka remoting is using Aeron as underlying message transport. Aeron is using UDP and adds
among other things reliable delivery and session semantics, very similar to TCP. This means that
-the order of the messages are preserved, which is needed for the @ref:[Actor message ordering guarantees](../general/message-delivery-reliability.md#message-ordering).
+the order of the messages are preserved, which is needed for the @ref:[Actor message ordering guarantees](../scala/general/message-delivery-reliability.md#message-ordering).
Under normal circumstances all messages will be delivered but there are cases when messages
may not be delivered to the destination:
@@ -359,7 +359,7 @@ may not be delivered to the destination:
* if serialization or deserialization of a message fails (only that message will be dropped)
* if an unexpected exception occurs in the remoting infrastructure
-In short, Actor message delivery is “at-most-once” as described in @ref:[Message Delivery Reliability](../general/message-delivery-reliability.md)
+In short, Actor message delivery is “at-most-once” as described in @ref:[Message Delivery Reliability](../scala/general/message-delivery-reliability.md)
Some messages in Akka are called system messages and those cannot be dropped because that would result
in an inconsistent state between the systems. Such messages are used for essentially two features; remote death
@@ -746,7 +746,7 @@ crashes unexpectedly.
for production systems.
The location of the file can be controlled via the *akka.remote.artery.advanced.flight-recoder.destination* setting (see
-@ref:[akka-remote (artery)](../general/configuration.md#config-akka-remote-artery) for details). By default, a file with the *.afr* extension is produced in the temporary
+@ref:[akka-remote (artery)](../scala/general/configuration.md#config-akka-remote-artery) for details). By default, a file with the *.afr* extension is produced in the temporary
directory of the operating system. In cases where the flight recorder casuses issues, it can be disabled by adding the
setting *akka.remote.artery.advanced.flight-recorder.enabled=off*, although this is not recommended.
@@ -754,7 +754,7 @@ setting *akka.remote.artery.advanced.flight-recorder.enabled=off*, although this
## Remote Configuration
There are lots of configuration properties that are related to remoting in Akka. We refer to the
-@ref:[reference configuration](../general/configuration.md#config-akka-remote-artery) for more information.
+@ref:[reference configuration](../scala/general/configuration.md#config-akka-remote-artery) for more information.
@@@ note
diff --git a/akka-docs/src/main/paradox/scala/remoting.md b/akka-docs/src/main/paradox/scala/remoting.md
index b7727e2faf..1bb5cc03ce 100644
--- a/akka-docs/src/main/paradox/scala/remoting.md
+++ b/akka-docs/src/main/paradox/scala/remoting.md
@@ -100,7 +100,7 @@ the `ActorSelection`, which returns a `Future` of the matching
@@@ note
-For more details on how actor addresses and paths are formed and used, please refer to @ref:[Actor References, Paths and Addresses](../general/addressing.md).
+For more details on how actor addresses and paths are formed and used, please refer to @ref:[Actor References, Paths and Addresses](../scala/general/addressing.md).
@@@
@@ -521,7 +521,7 @@ Creating and working with keystores and certificates is well documented in the
[Generating X.509 Certificates](http://typesafehub.github.io/ssl-config/CertificateGeneration.html#using-keytool)
section of Lightbend's SSL-Config library.
-Since an Akka remoting is inherently @ref:[peer-to-peer](../general/remoting.md#symmetric-communication) both the key-store as well as trust-store
+Since an Akka remoting is inherently @ref:[peer-to-peer](../scala/general/remoting.md#symmetric-communication) both the key-store as well as trust-store
need to be configured on each remoting node participating in the cluster.
The official [Java Secure Socket Extension documentation](http://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/JSSERefGuide.html)
@@ -619,7 +619,7 @@ marking them `PossiblyHarmful` so that a client cannot forge them.
## Remote Configuration
There are lots of configuration properties that are related to remoting in Akka. We refer to the
-@ref:[reference configuration](../general/configuration.md#config-akka-remote) for more information.
+@ref:[reference configuration](../scala/general/configuration.md#config-akka-remote) for more information.
@@@ note
diff --git a/akka-docs/src/main/paradox/security/2017-02-10-java-serialization.md b/akka-docs/src/main/paradox/scala/security/2017-02-10-java-serialization.md
similarity index 93%
rename from akka-docs/src/main/paradox/security/2017-02-10-java-serialization.md
rename to akka-docs/src/main/paradox/scala/security/2017-02-10-java-serialization.md
index 7a9a86d723..f253ccb2bf 100644
--- a/akka-docs/src/main/paradox/security/2017-02-10-java-serialization.md
+++ b/akka-docs/src/main/paradox/scala/security/2017-02-10-java-serialization.md
@@ -20,8 +20,8 @@ Java deserialization is [known to be vulnerable](https://community.hpe.com/t5/Se
Akka Remoting uses Java serialiser as default configuration which makes it vulnerable in its default form. The documentation of how to disable Java serializer was not complete. The documentation of how to enable mutual authentication was missing (only described in reference.conf).
To protect against such attacks the system should be updated to Akka *2.4.17* or later and be configured with
-@ref:[disabled Java serializer](../scala/remoting.md#disable-java-serializer-scala). Additional protection can be achieved when running in an
-untrusted network by enabling @ref:[TLS with mutual authentication](../scala/remoting.md#remote-tls-scala).
+@ref:[disabled Java serializer](../../scala/remoting.md#disable-java-serializer-scala). Additional protection can be achieved when running in an
+untrusted network by enabling @ref:[TLS with mutual authentication](../../scala/remoting.md#remote-tls-scala).
Please subscribe to the [akka-security](https://groups.google.com/forum/#!forum/akka-security) mailing list to be notified promptly about future security issues.
diff --git a/akka-docs/src/main/paradox/security/index.md b/akka-docs/src/main/paradox/scala/security/index.md
similarity index 80%
rename from akka-docs/src/main/paradox/security/index.md
rename to akka-docs/src/main/paradox/scala/security/index.md
index 5dc5a917b3..1e04fe5014 100644
--- a/akka-docs/src/main/paradox/security/index.md
+++ b/akka-docs/src/main/paradox/scala/security/index.md
@@ -18,9 +18,9 @@ to ensure that a fix can be provided without delay.
## Security Related Documentation
- * @ref:[Disabling the Java Serializer](../scala/remoting.md#disable-java-serializer-scala)
- * @ref:[Remote deployment whitelist](../scala/remoting.md#remote-deployment-whitelist-scala)
- * @ref:[Remote Security](../scala/remoting.md#remote-security-scala)
+ * @ref:[Disabling the Java Serializer](../../scala/remoting.md#disable-java-serializer-scala)
+ * @ref:[Remote deployment whitelist](../../scala/remoting.md#remote-deployment-whitelist-scala)
+ * @ref:[Remote Security](../../scala/remoting.md#remote-security-scala)
## Fixed Security Vulnerabilities
diff --git a/akka-docs/src/main/paradox/scala/stream/index.md b/akka-docs/src/main/paradox/scala/stream/index.md
index c47a6edee6..67e543c6a2 100644
--- a/akka-docs/src/main/paradox/scala/stream/index.md
+++ b/akka-docs/src/main/paradox/scala/stream/index.md
@@ -6,7 +6,7 @@
* [stream-introduction](stream-introduction.md)
* [stream-quickstart](stream-quickstart.md)
-* [../../general/stream/stream-design](../../general/stream/stream-design.md)
+* [../../scala/general/stream/stream-design](../../scala/general/stream/stream-design.md)
* [stream-flows-and-basics](stream-flows-and-basics.md)
* [stream-graphs](stream-graphs.md)
* [stream-composition](stream-composition.md)
@@ -20,6 +20,6 @@
* [stream-testkit](stream-testkit.md)
* [stages-overview](stages-overview.md)
* [stream-cookbook](stream-cookbook.md)
-* [../../general/stream/stream-configuration](../../general/stream/stream-configuration.md)
+* [../../scala/general/stream/stream-configuration](../../scala/general/stream/stream-configuration.md)
@@@
\ No newline at end of file
diff --git a/akka-docs/src/main/paradox/scala/stream/stream-introduction.md b/akka-docs/src/main/paradox/scala/stream/stream-introduction.md
index 77788b0ad5..4f94f22bcd 100644
--- a/akka-docs/src/main/paradox/scala/stream/stream-introduction.md
+++ b/akka-docs/src/main/paradox/scala/stream/stream-introduction.md
@@ -65,7 +65,7 @@ and for best results we recommend the following approach:
* Read the @ref:[Quick Start Guide](stream-quickstart.md#stream-quickstart-scala) to get a feel for how streams
look like and what they can do.
- * The top-down learners may want to peruse the @ref:[Design Principles behind Akka Streams](../../general/stream/stream-design.md) at this
+ * The top-down learners may want to peruse the @ref:[Design Principles behind Akka Streams](../../scala/general/stream/stream-design.md) at this
point.
* The bottom-up learners may feel more at home rummaging through the
@ref:[Streams Cookbook](stream-cookbook.md).
diff --git a/akka-docs/src/main/paradox/scala/stream/stream-quickstart.md b/akka-docs/src/main/paradox/scala/stream/stream-quickstart.md
index fe9ca0c447..bd8e9171c3 100644
--- a/akka-docs/src/main/paradox/scala/stream/stream-quickstart.md
+++ b/akka-docs/src/main/paradox/scala/stream/stream-quickstart.md
@@ -3,7 +3,7 @@
# Quick Start Guide
Create a project and add the akka-streams dependency to the build tool of your
-choice as described in @ref:[Using a build tool](../../intro/getting-started.md#build-tool).
+choice as described in @ref:[Using a build tool](../../scala/intro/getting-started.md#build-tool).
A stream usually begins at a source, so this is also how we start an Akka
Stream. Before we create one, we import the full complement of streaming tools:
diff --git a/akka-docs/src/main/paradox/scala/testing.md b/akka-docs/src/main/paradox/scala/testing.md
index 364d3bbff6..2f2dcf5468 100644
--- a/akka-docs/src/main/paradox/scala/testing.md
+++ b/akka-docs/src/main/paradox/scala/testing.md
@@ -368,7 +368,7 @@ within([min, ]max) {
}
```
-The block given to `within` must complete after a @ref:[Duration](../common/duration.md) which
+The block given to `within` must complete after a @ref:[Duration](../scala/common/duration.md) which
is between `min` and `max`, where the former defaults to zero. The
deadline calculated by adding the `max` parameter to the block's start
time is implicitly available within the block to all examination methods, if
@@ -820,4 +820,4 @@ when writing the tests or alternatively the `sequential` keyword.
## Configuration
There are several configuration properties for the TestKit module, please refer
-to the @ref:[reference configuration](../general/configuration.md#config-akka-testkit).
\ No newline at end of file
+to the @ref:[reference configuration](../scala/general/configuration.md#config-akka-testkit).
\ No newline at end of file
diff --git a/akka-docs/src/main/paradox/scala/typed.md b/akka-docs/src/main/paradox/scala/typed.md
index f984b81bcf..3418d5ad94 100644
--- a/akka-docs/src/main/paradox/scala/typed.md
+++ b/akka-docs/src/main/paradox/scala/typed.md
@@ -2,14 +2,14 @@
@@@ warning
-This module is currently marked as @ref:[may change](../common/may-change.md) in the sense
+This module is currently marked as @ref:[may change](../scala/common/may-change.md) in the sense
of being the subject of active research. This means that API or semantics can
change without warning or deprecation period and it is not recommended to use
this module in production just yet—you have been warned.
@@@
-As discussed in @ref:[Actor Systems](../general/actor-systems.md) (and following chapters) Actors are about
+As discussed in @ref:[Actor Systems](../scala/general/actor-systems.md) (and following chapters) Actors are about
sending messages between independent units of computation, but how does that
look like? In all of the following these imports are assumed:
@@ -255,7 +255,7 @@ Akka Typed is the result of many years of research and previous attempts
(including Typed Channels in the 2.2.x series) and it is on its way to
stabilization, but maturing such a profound change to the core concept of Akka
will take a long time. We expect that this module will stay marked
-@ref:[may change](../common/may-change.md) for multiple major releases of Akka and the
+@ref:[may change](../scala/common/may-change.md) for multiple major releases of Akka and the
plain `akka.actor.Actor` will not be deprecated or go away anytime soon.
Being a research project also entails that the reference documentation is not