newrelic / newrelic-java-agent

The New Relic Java agent
Apache License 2.0
202 stars 143 forks source link

Some Scala based instrumentation tests fail on Java 11+ with Scala 2.13 #483

Closed jasonjkeller closed 2 years ago

jasonjkeller commented 3 years ago

We’re seeing failures with some of our Scala related instrumentation tests (e.g. com.nr.instrumentation.akka22.test.AkkaTest) that appear to be happening only on Java 11+, which I think are likely due to this bug with Scala 2.13: scala/bug#12340

We’re seeing the same failure:

java.lang.IllegalAccessError: Update to static final field akka.pattern.package$.MODULE$ attempted from a different method (<init>) than the initializer method <clinit> 

This can be repro’d locally against main by running the following if you remove the test annotations (e.g. Java11IncompatibleTest) that were added to prevent them from running on Java 11+:

./gradlew -Ptest11 :instrumentation:akka-2.2:test --tests "com.nr.instrumentation.akka22.test.AkkaTest" --stacktrace

The following PR was submitted to prevent those tests from running on Java 11+ but we should revisit this at some point in the future to see if we can get these instrumentation tests running on Java 11+ again. https://github.com/newrelic/newrelic-java-agent/pull/481

agerauer commented 2 years ago

Seeing the same error message after upgrading the newrelic java agent in an older akka application on java 11. Java Agent 7.2.0 works fine, 7.3.0 throws this error on startup

java.lang.IllegalAccessError: Update to static final field akka.pattern.package$.MODULE$ attempted from a different method (<init>) than the initializer method <clinit> 
    at akka.pattern.package$.<init>(package.scala:43)
    at akka.pattern.package$.<clinit>(package.scala)
    at akka.event.LoggingBus$class.akka$event$LoggingBus$$addLogger(Logging.scala:179)
    at akka.event.LoggingBus$$anonfun$4$$anonfun$apply$4.apply(Logging.scala:114)
    at akka.event.LoggingBus$$anonfun$4$$anonfun$apply$4.apply(Logging.scala:113)
    at scala.util.Success$$anonfun$map$1.apply(Try.scala:236)
...
vijaykramesh commented 2 years ago

this has suddenly become a lot more urgent as everybody needs to upgrade their new relic java agent https://newrelic.com/blog/nerdlog/security-guidance-for-log4j

jinglejengel commented 2 years ago

This has affected using the NR Java agent in certain installations of Bitbucket Data Center. I was able to confirm what @helle saw, in downgrading to the 7.2.0 agent we no longer experience these errors, but that leaves us unpatched, unfortunately ):

chetanmeh commented 2 years ago

One possible temporary workaround is to use lite mode -Dnewrelic.config.lite_mode=true which turns off all instrumentation but still capture JVM level metrics and health

coding-bunny commented 2 years ago

This affected our Scala app as well during the last upgrade for the whole log4j fiasco:

09:19:24,894 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
09:19:24,995 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.classic.AsyncAppender]
09:19:24,999 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [ASYNCSTDOUT]
09:19:24,999 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to ch.qos.logback.classic.AsyncAppender[ASYNCSTDOUT]
09:19:24,999 |-INFO in ch.qos.logback.classic.AsyncAppender[ASYNCSTDOUT] - Attaching appender named [STDOUT] to AsyncAppender.
09:19:25,000 |-INFO in ch.qos.logback.classic.AsyncAppender[ASYNCSTDOUT] - Setting discardingThreshold to 51
09:19:25,001 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [play] to INFO
09:19:25,001 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [application] to INFO
09:19:25,001 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [smile] to ERROR
09:19:25,001 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.github.fommil] to ERROR
09:19:25,001 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.avaje.ebean.config.PropertyMapLoader] to OFF
09:19:25,001 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.avaje.ebeaninternal.server.core.XmlConfigLoader] to OFF
09:19:25,001 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.avaje.ebeaninternal.server.lib.BackgroundThread] to OFF
09:19:25,001 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.gargoylesoftware.htmlunit.javascript] to OFF
09:19:25,001 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to INFO
09:19:25,001 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [ASYNCSTDOUT] to Logger[ROOT]
09:19:25,001 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
09:19:25,002 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@3070f3e6 - Registering current configuration as safe fallback point
09:19:25,123 |-INFO in ch.qos.logback.classic.AsyncAppender[ASYNCSTDOUT] - Worker thread will flush remaining events before exiting.
09:19:25,191 |-INFO in ch.qos.logback.classic.AsyncAppender[ASYNCSTDOUT] - Queue flush finished successfully within timeout.
09:19:25,197 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
09:19:25,198 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter@2:19 - no applicable action for [releaseStage], current ElementPath  is [[configuration][releaseStage]]
09:19:25,198 |-INFO in ch.qos.logback.core.joran.action.ConversionRuleAction - registering conversion word coloredLevel with class [play.api.Logger$ColoredLevel]
09:19:25,198 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
09:19:25,198 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT]
09:19:25,198 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
09:19:25,199 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.classic.AsyncAppender]
09:19:25,199 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [ASYNCSTDOUT]
09:19:25,199 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to ch.qos.logback.classic.AsyncAppender[ASYNCSTDOUT]
09:19:25,199 |-INFO in ch.qos.logback.classic.AsyncAppender[ASYNCSTDOUT] - Attaching appender named [STDOUT] to AsyncAppender.
09:19:25,199 |-INFO in ch.qos.logback.classic.AsyncAppender[ASYNCSTDOUT] - Setting discardingThreshold to 51
09:19:25,199 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [play] to INFO
09:19:25,199 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [application] to INFO
09:19:25,199 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [smile] to ERROR
09:19:25,199 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.github.fommil] to ERROR
09:19:25,199 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.avaje.ebean.config.PropertyMapLoader] to OFF
09:19:25,199 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.avaje.ebeaninternal.server.core.XmlConfigLoader] to OFF
09:19:25,199 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.avaje.ebeaninternal.server.lib.BackgroundThread] to OFF
09:19:25,199 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.gargoylesoftware.htmlunit.javascript] to OFF
09:19:25,199 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to INFO
09:19:25,199 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [ASYNCSTDOUT] to Logger[ROOT]
09:19:25,199 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
09:19:25,199 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@28831d69 - Registering current configuration as safe fallback point

Exception in thread "main" java.lang.IllegalAccessError: Update to static final field akka.pattern.package$.MODULE$ attempted from a different method (<init>) than the initializer method <clinit>
    at akka.pattern.package$.<init>(package.scala:43)
    at akka.pattern.package$.<clinit>(package.scala)
    at akka.event.LoggingBus$class.akka$event$LoggingBus$$addLogger(Logging.scala:179)
    at akka.event.LoggingBus$$anonfun$4$$anonfun$apply$4.apply(Logging.scala:114)
    at akka.event.LoggingBus$$anonfun$4$$anonfun$apply$4.apply(Logging.scala:113)
    at scala.util.Success$$anonfun$map$1.apply(Try.scala:237)
    at scala.util.Try$.apply(Try.scala:192)
    at scala.util.Success.map(Try.scala:237)
    at akka.event.LoggingBus$$anonfun$4.apply(Logging.scala:113)
    at akka.event.LoggingBus$$anonfun$4.apply(Logging.scala:110)
    at scala.collection.TraversableLike$WithFilter$$anonfun$map$2.apply(TraversableLike.scala:683)
    at scala.collection.Iterator$class.foreach(Iterator.scala:891)
    at scala.collection.AbstractIterator.foreach(Iterator.scala:1334)
    at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
    at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
    at scala.collection.TraversableLike$WithFilter.map(TraversableLike.scala:682)
    at akka.event.LoggingBus$class.startDefaultLoggers(Logging.scala:110)
    at akka.event.EventStream.startDefaultLoggers(EventStream.scala:26)
    at akka.actor.LocalActorRefProvider.init(ActorRefProvider.scala:623)
    at akka.actor.ActorSystemImpl.liftedTree2$1(ActorSystem.scala:620)
    at akka.actor.ActorSystemImpl._start$lzycompute(ActorSystem.scala:617)
    at akka.actor.ActorSystemImpl._start(ActorSystem.scala:617)
    at akka.actor.ActorSystemImpl.start(ActorSystem.scala:634)
    at akka.actor.ActorSystem$.apply(ActorSystem.scala:142)
    at akka.actor.ActorSystem$.apply(ActorSystem.scala:126)
    at play.api.libs.concurrent.ActorSystemProvider$.start(Akka.scala:289)
    at play.api.libs.concurrent.ActorSystemProvider.get$lzycompute(Akka.scala:254)
    at play.api.libs.concurrent.ActorSystemProvider.get(Akka.scala:253)
    at play.api.libs.concurrent.ActorSystemProvider.get(Akka.scala:249)
    at com.google.inject.internal.ProviderInternalFactory.provision(ProviderInternalFactory.java:81)
    at com.google.inject.internal.BoundProviderFactory.provision(BoundProviderFactory.java:72)
    at com.google.inject.internal.ProviderInternalFactory.circularGet(ProviderInternalFactory.java:61)
    at com.google.inject.internal.BoundProviderFactory.get(BoundProviderFactory.java:62)
    at com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38)
    at com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62)
    at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:104)
    at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85)
    at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267)
    at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
    at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103)
    at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
    at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145)
    at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
    at com.google.inject.internal.FactoryProxy.get(FactoryProxy.java:56)
    at com.google.inject.internal.InjectorImpl$2$1.call(InjectorImpl.java:1016)
    at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092)
    at com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1012)
    at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1051)
    at play.api.inject.guice.GuiceInjector.instanceOf(GuiceInjectorBuilder.scala:321)
    at play.api.inject.guice.GuiceInjector.instanceOf(GuiceInjectorBuilder.scala:316)
    at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:98)
    at play.api.inject.guice.GuiceApplicationLoader.load(GuiceApplicationLoader.scala:21)
    at play.core.server.ProdServerStart$.start(ProdServerStart.scala:52)
    at play.core.server.ProdServerStart$.main(ProdServerStart.scala:27)
    at play.core.server.ProdServerStart.main(ProdServerStart.scala)
meiao commented 2 years ago

We are investigating the issue and hopefully will have a fix on the next release. In the meanwhile, you can downgrade to agent 6.5.3. We believe the bug was introduced in 7.3.0. So if you absolutely need a 7.x agent, you can use 7.2.0 and turn off the logs to mitigate the log4j vulnerabilities.

coding-bunny commented 2 years ago

Downscaling to the 6.5.3 client results in exactly the same:

03:04:52,456 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
03:04:52,559 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.classic.AsyncAppender]
03:04:52,563 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [ASYNCSTDOUT]
03:04:52,563 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to ch.qos.logback.classic.AsyncAppender[ASYNCSTDOUT]
03:04:52,563 |-INFO in ch.qos.logback.classic.AsyncAppender[ASYNCSTDOUT] - Attaching appender named [STDOUT] to AsyncAppender.
03:04:52,564 |-INFO in ch.qos.logback.classic.AsyncAppender[ASYNCSTDOUT] - Setting discardingThreshold to 51
03:04:52,569 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [play] to INFO
03:04:52,569 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [application] to INFO
03:04:52,569 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [smile] to ERROR
03:04:52,569 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.github.fommil] to ERROR
03:04:52,569 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.avaje.ebean.config.PropertyMapLoader] to OFF
03:04:52,569 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.avaje.ebeaninternal.server.core.XmlConfigLoader] to OFF
03:04:52,569 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.avaje.ebeaninternal.server.lib.BackgroundThread] to OFF
03:04:52,569 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.gargoylesoftware.htmlunit.javascript] to OFF
03:04:52,569 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to INFO
03:04:52,569 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [ASYNCSTDOUT] to Logger[ROOT]
03:04:52,569 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
03:04:52,570 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@2347b7af - Registering current configuration as safe fallback point
03:04:52,849 |-INFO in ch.qos.logback.classic.AsyncAppender[ASYNCSTDOUT] - Worker thread will flush remaining events before exiting.
03:04:52,850 |-INFO in ch.qos.logback.classic.AsyncAppender[ASYNCSTDOUT] - Queue flush finished successfully within timeout.
03:04:52,856 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
03:04:52,857 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter@2:19 - no applicable action for [releaseStage], current ElementPath  is [[configuration][releaseStage]]
03:04:52,857 |-INFO in ch.qos.logback.core.joran.action.ConversionRuleAction - registering conversion word coloredLevel with class [play.api.Logger$ColoredLevel]
03:04:52,857 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
03:04:52,857 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT]
03:04:52,857 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
03:04:52,858 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.classic.AsyncAppender]
03:04:52,858 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [ASYNCSTDOUT]
03:04:52,858 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to ch.qos.logback.classic.AsyncAppender[ASYNCSTDOUT]
03:04:52,858 |-INFO in ch.qos.logback.classic.AsyncAppender[ASYNCSTDOUT] - Attaching appender named [STDOUT] to AsyncAppender.
03:04:52,858 |-INFO in ch.qos.logback.classic.AsyncAppender[ASYNCSTDOUT] - Setting discardingThreshold to 51
03:04:52,858 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [play] to INFO
03:04:52,858 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [application] to INFO
03:04:52,858 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [smile] to ERROR
03:04:52,858 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.github.fommil] to ERROR
03:04:52,858 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.avaje.ebean.config.PropertyMapLoader] to OFF
03:04:52,858 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.avaje.ebeaninternal.server.core.XmlConfigLoader] to OFF
03:04:52,859 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.avaje.ebeaninternal.server.lib.BackgroundThread] to OFF
03:04:52,859 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.gargoylesoftware.htmlunit.javascript] to OFF
03:04:52,859 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to INFO
03:04:52,859 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [ASYNCSTDOUT] to Logger[ROOT]
03:04:52,859 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
03:04:52,859 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@25109608 - Registering current configuration as safe fallback point

Exception in thread "main" java.lang.IllegalAccessError: Update to static final field akka.pattern.package$.MODULE$ attempted from a different method (<init>) than the initializer method <clinit>
    at akka.pattern.package$.<init>(package.scala:43)
    at akka.pattern.package$.<clinit>(package.scala)
    at akka.event.LoggingBus$class.akka$event$LoggingBus$$addLogger(Logging.scala:179)
    at akka.event.LoggingBus$$anonfun$4$$anonfun$apply$4.apply(Logging.scala:114)
    at akka.event.LoggingBus$$anonfun$4$$anonfun$apply$4.apply(Logging.scala:113)
    at scala.util.Success$$anonfun$map$1.apply(Try.scala:237)
    at scala.util.Try$.apply(Try.scala:192)
    at scala.util.Success.map(Try.scala:237)
    at akka.event.LoggingBus$$anonfun$4.apply(Logging.scala:113)
    at akka.event.LoggingBus$$anonfun$4.apply(Logging.scala:110)
    at scala.collection.TraversableLike$WithFilter$$anonfun$map$2.apply(TraversableLike.scala:683)
    at scala.collection.Iterator$class.foreach(Iterator.scala:891)
    at scala.collection.AbstractIterator.foreach(Iterator.scala:1334)
    at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
    at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
    at scala.collection.TraversableLike$WithFilter.map(TraversableLike.scala:682)
    at akka.event.LoggingBus$class.startDefaultLoggers(Logging.scala:110)
    at akka.event.EventStream.startDefaultLoggers(EventStream.scala:26)
    at akka.actor.LocalActorRefProvider.init(ActorRefProvider.scala:623)
    at akka.actor.ActorSystemImpl.liftedTree2$1(ActorSystem.scala:620)
    at akka.actor.ActorSystemImpl._start$lzycompute(ActorSystem.scala:617)
    at akka.actor.ActorSystemImpl._start(ActorSystem.scala:617)
    at akka.actor.ActorSystemImpl.start(ActorSystem.scala:634)
    at akka.actor.ActorSystem$.apply(ActorSystem.scala:142)
    at akka.actor.ActorSystem$.apply(ActorSystem.scala:126)
    at play.api.libs.concurrent.ActorSystemProvider$.start(Akka.scala:289)
    at play.api.libs.concurrent.ActorSystemProvider.get$lzycompute(Akka.scala:254)
    at play.api.libs.concurrent.ActorSystemProvider.get(Akka.scala:253)
    at play.api.libs.concurrent.ActorSystemProvider.get(Akka.scala:249)
    at com.google.inject.internal.ProviderInternalFactory.provision(ProviderInternalFactory.java:81)
    at com.google.inject.internal.BoundProviderFactory.provision(BoundProviderFactory.java:72)
    at com.google.inject.internal.ProviderInternalFactory.circularGet(ProviderInternalFactory.java:61)
    at com.google.inject.internal.BoundProviderFactory.get(BoundProviderFactory.java:62)
    at com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38)
    at com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62)
    at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:104)
    at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:85)
    at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:267)
    at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
    at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103)
    at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
    at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145)
    at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
    at com.google.inject.internal.FactoryProxy.get(FactoryProxy.java:56)
    at com.google.inject.internal.InjectorImpl$2$1.call(InjectorImpl.java:1016)
    at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092)
    at com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1012)
    at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1051)
    at play.api.inject.guice.GuiceInjector.instanceOf(GuiceInjectorBuilder.scala:321)
    at play.api.inject.guice.GuiceInjector.instanceOf(GuiceInjectorBuilder.scala:316)
    at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:98)
    at play.api.inject.guice.GuiceApplicationLoader.load(GuiceApplicationLoader.scala:21)
    at play.core.server.ProdServerStart$.start(ProdServerStart.scala:52)
    at play.core.server.ProdServerStart$.main(ProdServerStart.scala:27)
    at play.core.server.ProdServerStart.main(ProdServerStart.scala)
jasonjkeller commented 2 years ago

Related to #620