/
LiveCore.scala
89 lines (72 loc) · 2.58 KB
/
LiveCore.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/*
* Copyright © 2015-2019 the contributors (see Contributors.md).
*
* This file is part of Knora.
*
* Knora is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Knora is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public
* License along with Knora. If not, see <http://www.gnu.org/licenses/>.
*/
package org.knora.webapi
import akka.actor._
import akka.stream.Materializer
import org.knora.webapi.app._
import org.knora.webapi.util.StringFormatter
import scala.concurrent.ExecutionContext
import scala.language.postfixOps
import scala.languageFeature.postfixOps
/**
* Knora Core abstraction.
*/
trait Core {
implicit val system: ActorSystem
implicit val settings: SettingsImpl
implicit val materializer: Materializer
implicit val executionContext: ExecutionContext
val appActor: ActorRef
}
/**
* The applications actor system.
*/
trait LiveCore extends Core {
/**
* The application's actor system.
*/
implicit lazy val system: ActorSystem = ActorSystem("webapi")
/**
* The application's configuration.
*/
implicit lazy val settings: SettingsImpl = Settings(system)
/**
* Provides the actor materializer (akka-http)
*/
implicit val materializer: Materializer = Materializer.matFromSystem(system)
/**
* Provides the default global execution context
*/
implicit val executionContext: ExecutionContext = system.dispatchers.lookup(KnoraDispatchers.KnoraActorDispatcher)
// Initialise StringFormatter with the system settings. This must happen before any responders are constructed.
StringFormatter.init(settings)
// #supervisor
/**
* The main application supervisor actor which is at the top of the actor
* hierarchy. All other actors are instantiated as child actors. Further,
* this actor is responsible for the execution of the startup and shutdown
* sequences.
*/
lazy val appActor: ActorRef = system.actorOf(
Props(new ApplicationActor with LiveManagers)
.withDispatcher(KnoraDispatchers.KnoraActorDispatcher),
name = APPLICATION_MANAGER_ACTOR_NAME
)
// #supervisor
}