Packages
x3m_system
0.9.1
0.9.1
0.9.0
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
retired
0.7.20
0.7.19
0.7.18
0.7.17
0.7.16
0.7.15
0.7.14
0.7.13
0.7.12
0.7.11
0.7.10
0.7.9
0.7.8
retired
0.7.7
0.7.6
retired
0.7.5
0.7.4
retired
0.7.3
retired
0.7.2
0.7.1
0.7.0
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
retired
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.1.1
0.1.0
Building blocks for distributed and/or CQRS/ES systems
Current section
Files
Jump to
Current section
Files
lib/aggregate_pid_manager.ex
defmodule X3m.System.AggregatePidManager do
@moduledoc !"""
Internal. Supervises one aggregate module's registry and dynamic supervisor
together (`:one_for_all`) so they restart as a unit.
"""
use Supervisor
alias X3m.System.AggregateRegistry, as: Registry
alias X3m.System.AggregateSup
def start_link([prefix, aggregate_mod]),
do: Supervisor.start_link(__MODULE__, {prefix, aggregate_mod}, name: name(aggregate_mod))
def init({prefix, aggregate_mod}) do
children = [
{Registry, Registry.name(aggregate_mod)},
{AggregateSup, [prefix, aggregate_mod]}
]
Supervisor.init(children, strategy: :one_for_all)
end
def name(aggregate_mod),
do: Module.concat(aggregate_mod, PidManager)
end