I try to implement an additional router (with Play Actions), one of the actions calls another lagom service, so I use serviceClient.implement
as a dependency for this router. But ApplicationLoader fails with StackOverflow exception. Is there any way to implement this?
hi @AndreyLadniy,
I don’t see anything wrong on the approach you described but devil is on the details. Can you share some code?
When I wrote example, I found problem in an other place.
class PlayRouter(playController: PlayController) extends SimpleRouter {
override def routes: Routes = {
case GET(p"/index") =>
playController.index()
}
}
lazy val otherService: OtherService = serviceClient.implement[OtherService]
override lazy val lagomServer: LagomServer = {
serverFor[ExampleService](new ExampleServiceImpl())
.additionalRouter(playRouter)
}
lazy val playController: PlayController = new PlayController(controllerComponents, otherService)
lazy val playRouter: Router = new PlayRouter(playController)
but without PlayRouter
class
lazy val playRouter: Router = {
Router.from{
case GET(p"/index") =>
playController.index()
}
}
all is fine
Maybe problem is in
trait LagomServiceRouter extends Router {
final def additionalRouter(router: Router): LagomServiceRouter
router
dependencies instantiation started on additionalRouter
call in contrast to main server service
protected def serverFor[T <: Service](serviceFactory: => T): LagomServer = macro ScaladslServerMacroImpl.simpleBind[T]