opentelemetry-java-instrume.../dd-java-agent/instrumentation/akka-http-10.0/src/lagomTest/java/ServiceTestModule.java

79 lines
3.4 KiB
Java

import com.google.inject.Binder;
import com.google.inject.AbstractModule;
import com.lightbend.lagom.internal.javadsl.BinderAccessor;
import com.lightbend.lagom.internal.javadsl.server.JavadslServicesRouter;
import com.lightbend.lagom.internal.javadsl.server.ResolvedServices;
import com.lightbend.lagom.internal.javadsl.server.ResolvedServicesProvider;
import com.lightbend.lagom.internal.javadsl.server.ServiceInfoProvider;
import com.lightbend.lagom.internal.server.status.MetricsServiceImpl;
import com.lightbend.lagom.javadsl.api.ServiceInfo;
import com.lightbend.lagom.javadsl.server.LagomServiceRouter;
import com.lightbend.lagom.javadsl.server.ServiceGuiceSupport;
import com.lightbend.lagom.javadsl.server.status.MetricsService;
import java.util.Arrays;
public class ServiceTestModule extends AbstractModule implements ServiceGuiceSupport {
@Override
protected void configure() {
bindServices(
serviceBinding(EchoService.class, EchoServiceImpl.class)
// , serviceBinding(HelloService.class, HelloServiceImpl.class)
);
}
// ------------------------------
/**
* This is a copy of {@link com.lightbend.lagom.javadsl.server.ServiceGuiceSupport#bindServices(ServiceGuiceSupport.ServiceBinding[])}
* that should survive deprecation. When removing the method from the superclass this should inherit the removed code.
*
* This method is used in docs/ so that many tests can share a single Guice module.
*/
@Override
public void bindServices(ServiceBinding<?>... serviceBindings) {
Binder binder = BinderAccessor.binder(this);
for (ServiceBinding binding : serviceBindings) {
// First, bind the client implementation. A service should be able to be a client to itself.
bindClient(binding.serviceInterface());
// Now, bind the server implementation to itself as an eager singleton.
if (binding instanceof ClassServiceBinding) {
binder.bind(((ClassServiceBinding<?>) binding).serviceImplementation()).asEagerSingleton();
} else {
Object service = ((InstanceServiceBinding<?>) binding).service();
binder.bind((Class<Object>) service.getClass()).toInstance(service);
}
}
ServiceBinding<?> primaryServiceBinding = serviceBindings[0];
// Bind the service info for the first one passed in
binder.bind(ServiceInfo.class).toProvider(
new ServiceInfoProvider(
primaryServiceBinding.serviceInterface(),
Arrays
.stream(serviceBindings)
.map(ServiceBinding::serviceInterface)
.toArray(Class[]::new)
));
// Bind the metrics
ServiceBinding<MetricsService> metricsServiceBinding = serviceBinding(MetricsService.class, MetricsServiceImpl.class);
binder.bind(((ClassServiceBinding<?>) metricsServiceBinding).serviceImplementation()).asEagerSingleton();
ServiceBinding<?>[] allServiceBindings = new ServiceBinding<?>[serviceBindings.length + 1];
System.arraycopy(serviceBindings, 0, allServiceBindings, 0, serviceBindings.length);
allServiceBindings[allServiceBindings.length - 1] = metricsServiceBinding;
// Bind the resolved services
binder.bind(ResolvedServices.class).toProvider(new ResolvedServicesProvider(allServiceBindings));
// And bind the router
binder.bind(LagomServiceRouter.class).to(JavadslServicesRouter.class);
}
}