/** * Request a service of the given type. * * @param type A service type. * @param <T> Service type. * @return A ready to use object. */ @Nonnull default <T> T require(final Class<T> type) { return require(Key.get(type)); }
/** * Request a service of the given type. * * @param type A service type. * @param <T> Service type. * @return A ready to use object. */ @Nonnull default <T> T require(final TypeLiteral<T> type) { return require(Key.get(type)); }
/** * Request a service of the given type and name. * * @param name A service name. * @param type A service type. * @param <T> Service type. * @return A ready to use object. */ @Nonnull default <T> T require(final String name, final Class<T> type) { return require(Key.get(type, Names.named(name))); }
/** * Request a service of a given type by a given name. * * @param name A service name * @param type A service type. * @param <T> Service type. * @return A ready to use object */ @Nonnull default <T> T require(final String name, final TypeLiteral<T> type) { return require(Key.get(type, Names.named(name))); }
@Override public boolean isAuthorized(WebContext context, List<U> profiles) throws HttpAction { return registry.require(authorizer).isAuthorized(context, profiles); }
@SuppressWarnings("unchecked") private static <T> InjectionTarget<T> createInjectionTarget( final CompletableFuture<Registry> injector, final Class<T> type) { return Reflection.newProxy(InjectionTarget.class, (proxy, method, args) -> { final String name = method.getName(); switch (name) { case "produce": return injector.get().require(type); case "inject": return null; case "postConstruct": return null; case "preDestroy": return null; case "dispose": return null; default: throw new UnsupportedOperationException(method.toString()); } }); }
@Override public <T> T createInstance(final Class<T> clazz, final DBObject dbObj) { if (shouldInject(clazz)) { return injector.require(clazz); } return delegate.createInstance(clazz, dbObj); }
@Override public <T> T createInstance(final Class<T> clazz) { if (shouldInject(clazz)) { return injector.require(clazz); } return delegate.createInstance(clazz); }
@Override public void configure(Env env, Config conf, Binder binder) { EventBus eventbus = factory.apply(conf); binder.bind(EventBus.class).toInstance(eventbus); List<Object> subscribers = new ArrayList<>(initialSubscribers.size()); /** Register subscribers: */ env.onStart(registry -> { initialSubscribers.forEach(candidate -> { Object subscriber = candidate; if (subscriber instanceof Class) { subscriber = registry.require((Class) subscriber); } subscribers.add(subscriber); eventbus.register(subscriber); } ); // free initial subscribers initialSubscribers.clear(); }); /** Unregister subscribers: */ env.onStop(() -> subscribers.forEach(eventbus::unregister)); } }
/** * Register an hibernate event listener. Listener will be created and injected by Guice. * * @param type Event type. * @param listenerType Listener type. * @return This module. */ @SuppressWarnings("unchecked") public <T> Hbm onEvent(final EventType<T> type, final Class<? extends T> listenerType) { bindings.add(b -> b.bind(listenerType).asEagerSingleton()); listeners.add((s, r) -> { ServiceRegistryImplementor serviceRegistry = s.getServiceRegistry(); EventListenerRegistry service = serviceRegistry.getService(EventListenerRegistry.class); T listener = r.require(listenerType); service.appendListeners(type, listener); }); return this; }
static Provider profileProvider(AtomicReference<Registry> registry, Class profile, Function<Request, UserProfile> unauthenticated) { return () -> { Request req = registry.get().require(Request.class); ProfileManager pm = req.require(ProfileManager.class); Object result = pm.getAll(req.ifSession().isPresent()).stream() .filter(profile::isInstance) .findFirst() .orElse(null); if (result == null) { if (unauthenticated == null) { throw new Err(Status.FORBIDDEN, "Not found: " + profile.getSimpleName()); } result = unauthenticated.apply(req); } return result; }; } }
private Route.AssetDefinition configureAssetHandler(final Route.AssetDefinition handler) { onStart(r -> { Config conf = r.require(Config.class); handler .cdn(conf.getString("assets.cdn")) .lastModified(conf.getBoolean("assets.lastModified")) .etag(conf.getBoolean("assets.etag")) .maxAge(conf.getString("assets.cache.maxAge")); }); return handler; }
Set<Route.Definition> routes = r.require(Route.KEY); Set<WebSocket.Definition> sockets = r.require(WebSocket.KEY); attributes.put("registry", r); attributes.put("routes", routes); attributes.put("env", env); Set plugins = Sets.newHashSet(r.require(PLUGINS)); ServiceLoader.load(CRaSHPlugin.class, this.loader).forEach(plugins::add);
@Override public void configure(final Env env, final Config conf, final Binder binder) { // empty metric & checks MapBinder.newMapBinder(binder, String.class, Metric.class); MapBinder.newMapBinder(binder, String.class, HealthCheck.class); Router routes = env.router(); MetricHandler mhandler = new MetricHandler(); routes.use("GET", this.pattern + "/metrics", mhandler); routes.use("GET", this.pattern + "/metrics/:type", mhandler); routes.use("GET", this.pattern + "/healthcheck", new HealthCheckHandler()); Multibinder<Reporter> reporters = Multibinder.newSetBinder(binder, Reporter.class); binder.bind(MetricRegistry.class).toInstance(metricRegistry); this.reporters.forEach(it -> reporters.addBinding().toInstance(it.apply(metricRegistry, conf))); binder.bind(MetricRegistryInitializer.class).asEagerSingleton(); env.onStop(app -> app.require(MetricRegistryInitializer.class).close()); binder.bind(HealthCheckRegistry.class).toInstance(healthCheckRegistry); binder.bind(HealthCheckRegistryInitializer.class).asEagerSingleton(); bindings.forEach(it -> it.bind(binder, routes, conf)); this.routes.forEach(it -> it.accept(routes)); }
@Override public Object createInstance(final Mapper mapper, final MappedField mf, final DBObject dbObj) { Class<?> clazz = mf.getType(); if (shouldInject(clazz)) { return injector.require(clazz); } return delegate.createInstance(mapper, mf, dbObj); }
schema(conf, schema, schema -> new SchemaModifier(dataSource, model).createTables(schema)); states .forEach(t -> builder.addEntityStateListener((EntityStateListener) registry.require(t))); statements .forEach(t -> builder.addStatementListener((StatementListener) registry.require(t))); transactions.forEach(t -> builder .addTransactionListenerFactory(() -> (TransactionListener) registry.require(t))); });
Handle handle = registry.get().require(key); return handle.attach(sqlObject); });
buckets.forEach(n -> Try.apply(() -> r.require(n, Bucket.class).close()) .onFailure(x -> log.debug("bucket {} close operation resulted in exception", n, x)) .orElse(false));
/** * Request a service of the given type. * * @param type A service type. * @param <T> Service type. * @return A ready to use object. */ @Nonnull default <T> T require(final TypeLiteral<T> type) { return require(Key.get(type)); }