Packages

t

com.twitter.finatra.httpclient.modules

HttpClientModuleTrait

trait HttpClientModuleTrait extends TwitterModule with StackClientModuleTrait[Request, Response, Client]

Extending this trait allows for configuring an com.twitter.finagle.Http.Client and/or a com.twitter.finatra.httpclient.HttpClient.

Example:
  1. class MyHttpClientModule
      extends HttpClientModuleTrait {
    
      override def dest: String = "/s/my/service"
      override def label: String = "myservice"
    
      override protected def sessionAcquisitionTimeout: Duration = 1.seconds
      override protected def requestTimeout: Duration = 5.seconds
      override protected def retryBudget: RetryBudget = RetryBudget(15.seconds, 5, .1)
    
      // if you want to customize the client configuration
      // you can:
      //
      // override def configureClient(
      //  injector: Injector,
      //  client: Http.Client
      // ): Http.Client =
      //   client.
      //     withTracer(NullTracer)
      //     withStatsReceiver(NullStatsReceiver)
      //
      // You can configure TLS on the client directly
      //
      // override def configureClient(
      //  injector: Injector,
      //  client: Http.Client
      // ): Http.Client = client.withTls("yourSslHostName")
      //
      // depending on your client type, you may want to provide a global instance,
      // otherwise you might want to specify how your consumers can provide a binding
      // for an instance to the client
      //
      // ex:
      // @Provides
      // @Singleton
      // final def provideFinagleClient(
      //   injector: Injector,
      //   statsReceiver: StatsReceiver
      // ): Http.Client = newClient(injector, statsReceiver)
      //
      // Or create a service directly
      //
      // ex:
      // @Provides
      // @Singleton
      // final def provideMyService(
      //   injector: Injector,
      //   statsReceiver: StatsReceiver
      // ): Service[Request, Response] =
      //     myCoolFilter.andThen(newService(injector, statsReceiver))
      //
      // Or provide the `com.twitter.finatra.httpclient.HttpClient`
      //
      // ex:
      // @Provides
      // @Singleton
      // final def provideMyHttpClient(
      //   injector: Injector,
      //   statsReceiver: StatsReceiver,
      //   mapper: ScalaObjectMapper
      // ): HttpClient = newHttpClient(injector, statsReceiver, mapper)
    
    }
Note

This trait does not define any @Provide annotations or bindings.

Linear Supertypes
StackClientModuleTrait[Request, Response, Client], TwitterModule, ScalaModule, InternalModule[Binder], TwitterBaseModule, TwitterModuleLifecycle, Logging, TwitterModuleFlags, AbstractModule, Module, AnyRef, Any
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. HttpClientModuleTrait
  2. StackClientModuleTrait
  3. TwitterModule
  4. ScalaModule
  5. InternalModule
  6. TwitterBaseModule
  7. TwitterModuleLifecycle
  8. Logging
  9. TwitterModuleFlags
  10. AbstractModule
  11. Module
  12. AnyRef
  13. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. Protected

Type Members

  1. class BindingBuilder[T] extends ScalaAnnotatedBindingBuilder[T]
    Definition Classes
    InternalModule

Abstract Value Members

  1. abstract def dest: String

    Destination of Finagle client.

    Destination of Finagle client.

    Definition Classes
    StackClientModuleTrait
    See also

    Names and Naming in Finagle

  2. abstract def label: String

    Finagle client label.

    Finagle client label.

    Definition Classes
    StackClientModuleTrait
    See also

    Clients Observability

Concrete Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##: Int
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  4. def addError(arg0: Message): Unit
    Attributes
    protected[google.inject]
    Definition Classes
    AbstractModule
  5. def addError(arg0: Throwable): Unit
    Attributes
    protected[google.inject]
    Definition Classes
    AbstractModule
  6. def addError(arg0: String, arg1: <repeated...>[AnyRef]): Unit
    Attributes
    protected[google.inject]
    Definition Classes
    AbstractModule
    Annotations
    @transient()
  7. def addFlagConverter[T <: AnyRef](typeMatcher: Matcher[_ >: TypeLiteral[_]], F: Flaggable[T]): Unit

    Binds a type converter derived from a Flaggable, making it possible to inject flags of all kinds.

    Binds a type converter derived from a Flaggable, making it possible to inject flags of all kinds. The injector will use a provided Flaggable to perform type conversion during an injection.

    For example (in Java):

    import java.util.List;
    import com.google.inject.TypeLiteral;
    import com.google.inject.matcher.Matchers;
    import com.twitter.app.Flaggable;
    
    addFlagConverter(
      Matchers.only(new TypeLiteral<List<scala.Tuple2<Integer, Integer>>>() {}),
      Flaggable.ofJavaList(Flaggable.ofTuple(Flaggable.ofJavaInteger(), Flaggable.ofJavaInteger())
    );
    Attributes
    protected
    Definition Classes
    TwitterModule
    See also

    addFlagConverter(Manifest,Flaggable for a variant that's more suitable for Scala.

  8. def addFlagConverter[T <: AnyRef](implicit arg0: Manifest[T], F: Flaggable[T]): Unit

    Binds a type converter derived from a Flaggable, making it possible to inject flags of all kinds.

    Binds a type converter derived from a Flaggable, making it possible to inject flags of all kinds. The injector will use a provided Flaggable to perform type conversion during an injection.

    For example (in Scala):

    addFlagConverter[List[(Int, Int)]] // support injecting flags of type List[(Int, Int)]
    Attributes
    protected
    Definition Classes
    TwitterModule
    See also

    addFlagConverter(Matcher,Flaggable) for variant that's more suitable for Java.

  9. def addTypeConverter[T](converter: TypeConverter)(implicit arg0: Manifest[T]): Unit

    Binds a type converter.

    Binds a type converter. The injector will use the given converter to convert string constants to matching types as needed.

    T

    type to match that the converter can handle

    converter

    converts values

    Attributes
    protected
    Definition Classes
    TwitterModule
  10. def annotatedWith[A <: Annotation](implicit arg0: ClassTag[A]): Matcher[AnnotatedElement]
    Attributes
    protected[this]
    Definition Classes
    InternalModule
  11. def asClosable(client: Client): Closable

    This method should be overridden by implementors IF the ClientType does not extend Closable.

    This method should be overridden by implementors IF the ClientType does not extend Closable. This method should wrap an underlying client as a Closable to ensure that resources are dealt with cleanly upon shutdown.

    client

    The client that does not extend Closable

    returns

    The Closable whose logic cleans up client's resources

    Attributes
    protected
    Definition Classes
    StackClientModuleTrait
    Examples:
    1. override protected def asClosable(client: ClientType): Closable =
        clientType.asClosable
    2. ,
    3. override protected def asClosable(client: ClientType): Closable =
        Closable.make { deadline =>
          // Use a FuturePool to ensure the task is completed asynchronously
          // and allow for enforcing the deadline Time.
          FuturePool
            .unboundedPool {
              clientType.closeSession() // clean-up resources
            }.by(deadline)(DefaultTimer)
        }
  12. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  13. final def baseClient: Client

    Create a base Finagle Stack Client of type ClientType.

    Create a base Finagle Stack Client of type ClientType. This method should not try to do any configuration on the created client.

    returns

    The base ClientType client, without any custom configuration.

    Attributes
    protected
    Definition Classes
    HttpClientModuleTraitStackClientModuleTrait
    Examples:
    1. override def createBaseClient(): Http.Client = Http.client
    2. ,
    3. override def createBaseClient(): ThriftMux.Client = ThriftMux.client
    4. ,
    5. override def createBaseClient(): Memcached.Client =  Memcached.client
  14. def bind[T](implicit arg0: scala.reflect.api.JavaUniverse.TypeTag[T]): BindingBuilder[T]
    Attributes
    protected[this]
    Definition Classes
    InternalModule
  15. def bind[T <: AnyRef](arg0: Class[T]): AnnotatedBindingBuilder[T]
    Attributes
    protected[google.inject]
    Definition Classes
    AbstractModule
  16. def bind[T <: AnyRef](arg0: TypeLiteral[T]): AnnotatedBindingBuilder[T]
    Attributes
    protected[google.inject]
    Definition Classes
    AbstractModule
  17. def bind[T <: AnyRef](arg0: Key[T]): LinkedBindingBuilder[T]
    Attributes
    protected[google.inject]
    Definition Classes
    AbstractModule
  18. def bindAssistedFactory[T]()(implicit arg0: Manifest[T]): Unit

    Provides for installing and building a factory that combines the caller's arguments with injector-supplied values to construct objects.

    Provides for installing and building a factory that combines the caller's arguments with injector-supplied values to construct objects. This is preferable to calling install on the TwitterModule which provides the factory as install is not supported for TwitterModule types.

    T

    type of the assisted injection factory

    Attributes
    protected
    Definition Classes
    TwitterModule
    See also

    com.google.inject.assistedinject.AssistedInject

    com.google.inject.assistedinject.FactoryModuleBuilder

    Assisted Injection

  19. def bindConstant(): AnnotatedConstantBindingBuilder
    Attributes
    protected[google.inject]
    Definition Classes
    AbstractModule
  20. def bindInterceptor[I <: MethodInterceptor](classMatcher: Matcher[_ >: Class[_]], methodMatcher: Matcher[_ >: AnnotatedElement])(implicit arg0: ClassTag[I]): Unit
    Attributes
    protected[this]
    Definition Classes
    InternalModule
  21. def bindInterceptor(arg0: Matcher[_ >: Class[_ <: AnyRef] <: AnyRef], arg1: Matcher[_ >: Method <: AnyRef], arg2: <repeated...>[MethodInterceptor]): Unit
    Attributes
    protected[google.inject]
    Definition Classes
    AbstractModule
    Annotations
    @transient()
  22. def bindListener(arg0: Matcher[_ >: Binding[_ <: AnyRef] <: AnyRef], arg1: <repeated...>[ProvisionListener]): Unit
    Attributes
    protected[google.inject]
    Definition Classes
    AbstractModule
    Annotations
    @transient()
  23. def bindListener(arg0: Matcher[_ >: TypeLiteral[_ <: AnyRef] <: AnyRef], arg1: TypeListener): Unit
    Attributes
    protected[google.inject]
    Definition Classes
    AbstractModule
  24. def bindMultiple[T](annotation: Annotation)(implicit arg0: Manifest[T]): ScalaMultibinder[T]

    Returns a new com.google.inject.multibindings.Multibinder that collects instances of type T in a scala.collection.immutable.Set that is itself bound with a binding annotation.

    Returns a new com.google.inject.multibindings.Multibinder that collects instances of type T in a scala.collection.immutable.Set that is itself bound with a binding annotation.

    An API to bind multiple values separately, only to later inject them as a complete collection. "Multibinding" is intended for use in your application's module:

    class SnacksModule extends TwitterModule {
      override protected def configure(): Unit = {
        bindMultiple[Snack].addBinding.toInstance(new Twix())
        bindMultiple[Snack].addBinding.toProvider[SnickersProvider]
        bindMultiple[Snack].addBinding.to[Skittles]
      }
    }

    With this binding, a Set[Snack] can now be injected:

    class SnackMachine @Inject()(Set[Snack] snacks)

    Contributing multibindings from different modules is also supported. For example, it is okay for both CandyModule and ChipsModule to create their own Multibinder[Snack], and to each contribute bindings to the set of snacks. When that set is injected, it will contain elements from both modules.

    The set's iteration order is consistent with the binding order. This is convenient when multiple elements are contributed by the same module because that module can order its bindings appropriately. Avoid relying on the iteration order of elements contributed by different modules, since there is no equivalent mechanism to order modules.

    The set is unmodifiable. Elements can only be added to the set by configuring the multibinder. Elements can never be removed from the set.

    Elements are resolved at set injection time. If an element is bound to a provider, that provider's get method will be called each time the set is injected (unless the binding is also scoped).

    Annotations can be used to create different sets of the same element type. Each distinct annotation gets its own independent collection of elements.

    Elements MUST be distinct. If multiple bound elements have the same value, set injection will fail.

    Elements MUST be non-null. If any set element is null, set injection will fail.

    Attributes
    protected
    Definition Classes
    TwitterModule
    See also

    com.google.inject.multibindings.Multibinder

  25. def bindMultiple[T, A <: Annotation](implicit arg0: Manifest[T], arg1: Manifest[A]): ScalaMultibinder[T]

    Returns a new com.google.inject.multibindings.Multibinder that collects instances of type T in a scala.collection.immutable.Set that is itself bound with a binding annotation A.

    Returns a new com.google.inject.multibindings.Multibinder that collects instances of type T in a scala.collection.immutable.Set that is itself bound with a binding annotation A.

    An API to bind multiple values separately, only to later inject them as a complete collection. "Multibinding" is intended for use in your application's module:

    class SnacksModule extends TwitterModule {
      override protected def configure(): Unit = {
        bindMultiple[Snack].addBinding.toInstance(new Twix())
        bindMultiple[Snack].addBinding.toProvider[SnickersProvider]
        bindMultiple[Snack].addBinding.to[Skittles]
      }
    }

    With this binding, a Set[Snack] can now be injected:

    class SnackMachine @Inject()(Set[Snack] snacks)

    Contributing multibindings from different modules is also supported. For example, it is okay for both CandyModule and ChipsModule to create their own Multibinder[Snack], and to each contribute bindings to the set of snacks. When that set is injected, it will contain elements from both modules.

    The set's iteration order is consistent with the binding order. This is convenient when multiple elements are contributed by the same module because that module can order its bindings appropriately. Avoid relying on the iteration order of elements contributed by different modules, since there is no equivalent mechanism to order modules.

    The set is unmodifiable. Elements can only be added to the set by configuring the multibinder. Elements can never be removed from the set.

    Elements are resolved at set injection time. If an element is bound to a provider, that provider's get method will be called each time the set is injected (unless the binding is also scoped).

    Annotations can be used to create different sets of the same element type. Each distinct annotation gets its own independent collection of elements.

    Elements MUST be distinct. If multiple bound elements have the same value, set injection will fail.

    Elements MUST be non-null. If any set element is null, set injection will fail.

    Attributes
    protected
    Definition Classes
    TwitterModule
    See also

    com.google.inject.multibindings.Multibinder

  26. def bindMultiple[T](implicit arg0: Manifest[T]): ScalaMultibinder[T]

    Returns a new com.google.inject.multibindings.Multibinder that collects instances of type T in a scala.collection.immutable.Set that is itself bound with no binding annotation.

    Returns a new com.google.inject.multibindings.Multibinder that collects instances of type T in a scala.collection.immutable.Set that is itself bound with no binding annotation.

    An API to bind multiple values separately, only to later inject them as a complete collection. "Multibinding" is intended for use in your application's module:

    class SnacksModule extends TwitterModule {
      override protected def configure(): Unit = {
        bindMultiple[Snack].addBinding.toInstance(new Twix())
        bindMultiple[Snack].addBinding.toProvider[SnickersProvider]
        bindMultiple[Snack].addBinding.to[Skittles]
      }
    }

    With this binding, a Set[Snack] can now be injected:

    class SnackMachine @Inject()(Set[Snack] snacks)

    Contributing multibindings from different modules is also supported. For example, it is okay for both CandyModule and ChipsModule to create their own Multibinder[Snack], and to each contribute bindings to the set of snacks. When that set is injected, it will contain elements from both modules.

    The set's iteration order is consistent with the binding order. This is convenient when multiple elements are contributed by the same module because that module can order its bindings appropriately. Avoid relying on the iteration order of elements contributed by different modules, since there is no equivalent mechanism to order modules.

    The set is unmodifiable. Elements can only be added to the set by configuring the multibinder. Elements can never be removed from the set.

    Elements are resolved at set injection time. If an element is bound to a provider, that provider's get method will be called each time the set is injected (unless the binding is also scoped).

    Annotations can be used to create different sets of the same element type. Each distinct annotation gets its own independent collection of elements.

    Elements MUST be distinct. If multiple bound elements have the same value, set injection will fail.

    Elements MUST be non-null. If any set element is null, set injection will fail.

    Attributes
    protected
    Definition Classes
    TwitterModule
    See also

    com.google.inject.multibindings.Multibinder

  27. def bindOption[T](annotation: Annotation)(implicit arg0: Manifest[T]): ScalaOptionBinder[T]

    Returns a new com.google.inject.multibindings.OptionalBinder that binds an instance of T in a scala.Option that is itself bound with a binding annotation.

    Returns a new com.google.inject.multibindings.OptionalBinder that binds an instance of T in a scala.Option that is itself bound with a binding annotation.

    Calling this method will always supply the bindings: Option[T] and Option[Provider[T]]. If setBinding or setDefault are called, it will also bind T.

    setDefault is intended for use by frameworks that need a default value. User code can call setBinding to override the default.

    Warning: even if setBinding is called, the default binding will still exist in the object graph. If it is a singleton, it will be instantiated in Stage.PRODUCTION.

    If setDefault or setBinding are linked to Providers, the Provider may return null. If it does, the Option bindings will be a None. Binding setBinding to a Provider that returns null will not cause OptionalBinder to fall back to the setDefault binding.

    If neither setDefault nor setBinding are called, it will try to link to a user-supplied binding of the same type. If no binding exists, the options will be absent. Otherwise, if a user-supplied binding of that type exists, or if setBinding or setDefault are called, the options will return Some(T) if they are bound to a non-null value, otherwise None.

    Values are resolved at injection time. If a value is bound to a provider, that provider's get method will be called each time the option is injected (unless the binding is also scoped, or an option of provider is injected).

    Annotations are used to create different options of the same key/value type. Each distinct annotation gets its own independent binding. For example:

    class FrameworkModule extends TwitterModule {
      override protected def configure(): Unit = {
        bindOption[Renamer]
      }
    }

    With this module, an Option[Renamer] can now be injected. With no other bindings, the option will be None. Users can specify bindings in one of two ways:

    Option 1:

    class UserRenamerModule extends TwitterModule {
      override protected def configure(): Unit = {
        bind[Renamer].to[ReplacingRenamer]
      }
    }

    or Option 2:

    class UserRenamerModule extends TwitterModule {
      override protected def configure(): Unit = {
        bindOption[Renamer].setBinding.to[ReplacingRenamer]
      }
    }

    With both options, the Option[Renamer] will be present and supply the ReplacingRenamer.

    Default values can be supplied using:

     class FrameworkModule extends TwitterModule {
      override protected def configure(): Unit = {
        bindOption[String, LookupUrl].setDefault.toInstance(DefaultLookupUrl)
      }
    }

    With the above module, code can inject an @LookupUrl-annotated String and it will supply the DefaultLookupUrl. A user can change this value by binding:

    class UserLookupModule extends TwitterModule {
      override protected def configure(): Unit = {
        bindOption[String, LookupUrl].setBinding.toInstance(CustomLookupUrl)
      }
    }

    which will override the default value.

    If one module uses setDefault the only way to override the default is to use setBinding. It is an error for a user to specify the binding without using com.google.inject.multibindings.OptionalBinder if setDefault or setBinding are called. For example:

     class FrameworkModule extends TwitterModule {
      override protected def configure(): Unit = {
        bindOption[String, LookupUrl].setDefault.toInstance(DefaultLookupUrl)
      }
    }
    class UserLookupModule extends TwitterModule {
      override protected def configure(): Unit = {
        bind[String, LookupUrl].toInstance(CustomLookupUrl);
      }
    }

    would generate an error, because both the framework and the user are trying to bind @LookupUrl String.

    Attributes
    protected
    Definition Classes
    TwitterModule
    See also

    com.google.inject.multibindings.OptionalBinder

  28. def bindOption[T, A <: Annotation](implicit arg0: Manifest[T], arg1: Manifest[A]): ScalaOptionBinder[T]

    Returns a new com.google.inject.multibindings.OptionalBinder that binds an instance of T in a scala.Option that is itself bound with a binding annotation A.

    Returns a new com.google.inject.multibindings.OptionalBinder that binds an instance of T in a scala.Option that is itself bound with a binding annotation A.

    Calling this method will always supply the bindings: Option[T] and Option[Provider[T]]. If setBinding or setDefault are called, it will also bind T.

    setDefault is intended for use by frameworks that need a default value. User code can call setBinding to override the default.

    Warning: even if setBinding is called, the default binding will still exist in the object graph. If it is a singleton, it will be instantiated in Stage.PRODUCTION.

    If setDefault or setBinding are linked to Providers, the Provider may return null. If it does, the Option bindings will be a None. Binding setBinding to a Provider that returns null will not cause OptionalBinder to fall back to the setDefault binding.

    If neither setDefault nor setBinding are called, it will try to link to a user-supplied binding of the same type. If no binding exists, the options will be absent. Otherwise, if a user-supplied binding of that type exists, or if setBinding or setDefault are called, the options will return Some(T) if they are bound to a non-null value, otherwise None.

    Values are resolved at injection time. If a value is bound to a provider, that provider's get method will be called each time the option is injected (unless the binding is also scoped, or an option of provider is injected).

    Annotations are used to create different options of the same key/value type. Each distinct annotation gets its own independent binding. For example:

    class FrameworkModule extends TwitterModule {
      override protected def configure(): Unit = {
        bindOption[Renamer]
      }
    }

    With this module, an Option[Renamer] can now be injected. With no other bindings, the option will be None. Users can specify bindings in one of two ways:

    Option 1:

    class UserRenamerModule extends TwitterModule {
      override protected def configure(): Unit = {
        bind[Renamer].to[ReplacingRenamer]
      }
    }

    or Option 2:

    class UserRenamerModule extends TwitterModule {
      override protected def configure(): Unit = {
        bindOption[Renamer].setBinding.to[ReplacingRenamer]
      }
    }

    With both options, the Option[Renamer] will be present and supply the ReplacingRenamer.

    Default values can be supplied using:

     class FrameworkModule extends TwitterModule {
      override protected def configure(): Unit = {
        bindOption[String, LookupUrl].setDefault.toInstance(DefaultLookupUrl)
      }
    }

    With the above module, code can inject an @LookupUrl-annotated String and it will supply the DefaultLookupUrl. A user can change this value by binding:

    class UserLookupModule extends TwitterModule {
      override protected def configure(): Unit = {
        bindOption[String, LookupUrl].setBinding.toInstance(CustomLookupUrl)
      }
    }

    which will override the default value.

    If one module uses setDefault the only way to override the default is to use setBinding. It is an error for a user to specify the binding without using com.google.inject.multibindings.OptionalBinder if setDefault or setBinding are called. For example:

     class FrameworkModule extends TwitterModule {
      override protected def configure(): Unit = {
        bindOption[String, LookupUrl].setDefault.toInstance(DefaultLookupUrl)
      }
    }
    class UserLookupModule extends TwitterModule {
      override protected def configure(): Unit = {
        bind[String, LookupUrl].toInstance(CustomLookupUrl);
      }
    }

    would generate an error, because both the framework and the user are trying to bind @LookupUrl String.

    Attributes
    protected
    Definition Classes
    TwitterModule
    See also

    com.google.inject.multibindings.OptionalBinder

  29. def bindOption[T](implicit arg0: Manifest[T]): ScalaOptionBinder[T]

    Returns a new com.google.inject.multibindings.OptionalBinder that binds an instance of T in a scala.Option.

    Returns a new com.google.inject.multibindings.OptionalBinder that binds an instance of T in a scala.Option.

    Calling this method will always supply the bindings: Option[T] and Option[Provider[T]]. If setBinding or setDefault are called, it will also bind T.

    setDefault is intended for use by frameworks that need a default value. User code can call setBinding to override the default.

    Warning: even if setBinding is called, the default binding will still exist in the object graph. If it is a singleton, it will be instantiated in Stage.PRODUCTION.

    If setDefault or setBinding are linked to Providers, the Provider may return null. If it does, the Option bindings will be a None. Binding setBinding to a Provider that returns null will not cause OptionalBinder to fall back to the setDefault binding.

    If neither setDefault nor setBinding are called, it will try to link to a user-supplied binding of the same type. If no binding exists, the options will be absent. Otherwise, if a user-supplied binding of that type exists, or if setBinding or setDefault are called, the options will return Some(T) if they are bound to a non-null value, otherwise None.

    Values are resolved at injection time. If a value is bound to a provider, that provider's get method will be called each time the option is injected (unless the binding is also scoped, or an option of provider is injected).

    Annotations are used to create different options of the same key/value type. Each distinct annotation gets its own independent binding. For example:

    class FrameworkModule extends TwitterModule {
      override protected def configure(): Unit = {
        bindOption[Renamer]
      }
    }

    With this module, an Option[Renamer] can now be injected. With no other bindings, the option will be None. Users can specify bindings in one of two ways:

    Option 1:

    class UserRenamerModule extends TwitterModule {
      override protected def configure(): Unit = {
        bind[Renamer].to[ReplacingRenamer]
      }
    }

    or Option 2:

    class UserRenamerModule extends TwitterModule {
      override protected def configure(): Unit = {
        bindOption[Renamer].setBinding.to[ReplacingRenamer]
      }
    }

    With both options, the Option[Renamer] will be present and supply the ReplacingRenamer.

    Default values can be supplied using:

     class FrameworkModule extends TwitterModule {
      override protected def configure(): Unit = {
        bindOption[String, LookupUrl].setDefault.toInstance(DefaultLookupUrl)
      }
    }

    With the above module, code can inject an @LookupUrl-annotated String and it will supply the DefaultLookupUrl. A user can change this value by binding:

    class UserLookupModule extends TwitterModule {
      override protected def configure(): Unit = {
        bindOption[String, LookupUrl].setBinding.toInstance(CustomLookupUrl)
      }
    }

    which will override the default value.

    If one module uses setDefault the only way to override the default is to use setBinding. It is an error for a user to specify the binding without using com.google.inject.multibindings.OptionalBinder if setDefault or setBinding are called. For example:

     class FrameworkModule extends TwitterModule {
      override protected def configure(): Unit = {
        bindOption[String, LookupUrl].setDefault.toInstance(DefaultLookupUrl)
      }
    }
    class UserLookupModule extends TwitterModule {
      override protected def configure(): Unit = {
        bind[String, LookupUrl].toInstance(CustomLookupUrl);
      }
    }

    would generate an error, because both the framework and the user are trying to bind @LookupUrl String.

    Attributes
    protected
    Definition Classes
    TwitterModule
    See also

    com.google.inject.multibindings.OptionalBinder

  30. def bindScope[T <: Annotation](scope: Scope)(implicit arg0: ClassTag[T]): Unit
    Attributes
    protected[this]
    Definition Classes
    InternalModule
  31. def bindScope(arg0: Class[_ <: Annotation], arg1: Scope): Unit
    Attributes
    protected[google.inject]
    Definition Classes
    AbstractModule
  32. def binder(): Binder
    Attributes
    protected[google.inject]
    Definition Classes
    AbstractModule
  33. def binderAccess: Binder
    Attributes
    protected[this]
    Definition Classes
    ScalaModule → InternalModule
  34. def clone(): AnyRef
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.CloneNotSupportedException]) @native()
  35. def configure(): Unit
    Attributes
    protected[google.inject]
    Definition Classes
    AbstractModule
  36. final def configure(arg0: Binder): Unit
    Definition Classes
    AbstractModule → Module
  37. def configureClient(injector: Injector, client: Client): Client

    This method allows for further configuration of the ClientType client for parameters not exposed by this module or for overriding defaults provided herein, e.g.,

    This method allows for further configuration of the ClientType client for parameters not exposed by this module or for overriding defaults provided herein, e.g.,

    override protected def configureClient(client: Example.Client): Example.Client = {
      client
        .withStatsReceiver(someOtherScopedStatsReceiver)
        .withMonitor(myAwesomeMonitor)
        .withTracer(notTheDefaultTracer)
    }
    injector

    the com.twitter.inject.Injector which can be used to help configure the given ClientType client.

    client

    the ClientType client to configure.

    returns

    a configured ClientType client.

    Attributes
    protected
    Definition Classes
    StackClientModuleTrait
  38. def convertToTypes(arg0: Matcher[_ >: TypeLiteral[_ <: AnyRef] <: AnyRef], arg1: TypeConverter): Unit
    Attributes
    protected[google.inject]
    Definition Classes
    AbstractModule
  39. final def createFlag[T](name: String, default: T, help: String, flaggable: Flaggable[T]): Flag[T]

    A Java-friendly method for creating a named Flag.

    A Java-friendly method for creating a named Flag.

    name

    the name of the Flag.

    default

    a default value for the Flag when no value is given as an application argument.

    help

    the help text explaining the purpose of the Flag.

    returns

    the created Flag.

    Definition Classes
    TwitterModuleFlags
  40. final def createMandatoryFlag[T](name: String, help: String, usage: String, flaggable: Flaggable[T]): Flag[T]

    A Java-friendly way to create a "mandatory" Flag.

    A Java-friendly way to create a "mandatory" Flag. "Mandatory" flags MUST have a value provided as an application argument (as they have no default value to be used).

    name

    the name of the Flag.

    help

    the help text explaining the purpose of the Flag.

    usage

    a string describing the type of the Flag, i.e.: Integer.

    returns

    the created Flag.

    Definition Classes
    TwitterModuleFlags
  41. def currentStage(): Stage
    Attributes
    protected[google.inject]
    Definition Classes
    AbstractModule
  42. def debug(marker: Marker, message: => Any, cause: Throwable): Unit
    Attributes
    protected[this]
    Definition Classes
    Logging
  43. def debug(message: => Any, cause: Throwable): Unit
    Attributes
    protected[this]
    Definition Classes
    Logging
  44. def debug(marker: Marker, message: => Any): Unit
    Attributes
    protected[this]
    Definition Classes
    Logging
  45. def debug(message: => Any): Unit
    Attributes
    protected[this]
    Definition Classes
    Logging
  46. def debugResult[T](message: => String)(fn: => T): T
    Attributes
    protected[this]
    Definition Classes
    Logging
  47. def defaultClosableAwaitPeriod: Duration

    Default amount of time to block in Duration) on a Closable to close that is registered in a closeOnExit block.

    Default amount of time to block in Duration) on a Closable to close that is registered in a closeOnExit block.

    returns

    a com.twitter.util.Duration

    Attributes
    protected
    Definition Classes
    StackClientModuleTrait
    See also

    Duration)

  48. def defaultClosableGracePeriod: Duration

    Default amount of time to wait for any Closable being registered in a closeOnExit block.

    Default amount of time to wait for any Closable being registered in a closeOnExit block. Note that this timeout is advisory, as it attempts to give the close function some leeway, for example to drain clients or finish up other tasks.

    returns

    a com.twitter.util.Duration

    Attributes
    protected
    Definition Classes
    StackClientModuleTrait
    See also

    Duration)

  49. def defaultHeaders: Map[String, String]
  50. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  51. def equals(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef → Any
  52. def error(marker: Marker, message: => Any, cause: Throwable): Unit
    Attributes
    protected[this]
    Definition Classes
    Logging
  53. def error(message: => Any, cause: Throwable): Unit
    Attributes
    protected[this]
    Definition Classes
    Logging
  54. def error(marker: Marker, message: => Any): Unit
    Attributes
    protected[this]
    Definition Classes
    Logging
  55. def error(message: => Any): Unit
    Attributes
    protected[this]
    Definition Classes
    Logging
  56. def errorResult[T](message: => String)(fn: => T): T
    Attributes
    protected[this]
    Definition Classes
    Logging
  57. def failfastOnFlagsNotParsed: Boolean

    This is akin to the c.t.inject.app.App#failfastOnFlagsNotParsed and serves a similar purpose but for new com.twitter.app.Flag instances created in this TwitterModule.

    This is akin to the c.t.inject.app.App#failfastOnFlagsNotParsed and serves a similar purpose but for new com.twitter.app.Flag instances created in this TwitterModule. The value is 'true' by default. This is to ensure that the value of a com.twitter.app.Flag instance created in this TwitterModule cannot be incorrectly accessed before the application has parsed any passed command line input. This mirrors the framework default for com.twitter.inject.app.App#failfastOnFlagsNotParsed for Flag instances created within the application container.

    returns

    a Boolean indicating if com.twitter.app.Flag instances created in this TwitterModule should be set with com.twitter.app.Flag.failFastUntilParsed set to 'true' or 'false'. Default: 'true'.

    Attributes
    protected[this]
    Definition Classes
    TwitterModuleFlags
    Note

    This value SHOULD NOT be changed to 'false' without a very good reason.

  58. def finalize(): Unit
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.Throwable])
  59. final def flag[T](name: String, help: String)(implicit arg0: Flaggable[T], arg1: Manifest[T]): Flag[T]

    Create a "mandatory" flag and add it to this Module's flags list."Mandatory" flags MUST have a value provided as an application argument (as they have no default value to be used).

    Create a "mandatory" flag and add it to this Module's flags list."Mandatory" flags MUST have a value provided as an application argument (as they have no default value to be used).

    T

    must be a Flaggable type.

    name

    the name of the Flag.

    help

    the help text explaining the purpose of the Flag.

    returns

    the created Flag.

    Definition Classes
    TwitterModuleFlags
    Note

    Java users: see the more Java-friendly createFlag or createMandatoryFlag.

  60. final def flag[T](name: String, default: T, help: String)(implicit arg0: Flaggable[T]): Flag[T]

    Create a Flag and add it to this Module's flags list.

    Create a Flag and add it to this Module's flags list.

    T

    must be a Flaggable type.

    name

    the name of the Flag.

    default

    a default value for the Flag when no value is given as an application argument.

    help

    the help text explaining the purpose of the Flag.

    returns

    the created Flag.

    Definition Classes
    TwitterModuleFlags
    Note

    Java users: see the more Java-friendly createFlag or createMandatoryFlag.

  61. val flags: ArrayBuffer[Flag[_]]
    Attributes
    protected[inject]
    Definition Classes
    TwitterModuleFlags
  62. def frameworkConfigureClient(injector: Injector, client: Client): Client
    Attributes
    protected[twitter]
    Definition Classes
    StackClientModuleTrait
  63. def frameworkModules: Seq[Module]

    Additional framework modules to be composed into this module.

    Additional framework modules to be composed into this module.

    Attributes
    protected[inject]
    Definition Classes
    StackClientModuleTrait → TwitterBaseModule
  64. final def getClass(): Class[_ <: AnyRef]
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  65. def getMembersInjector[T](implicit arg0: scala.reflect.api.JavaUniverse.TypeTag[T]): MembersInjector[T]
    Attributes
    protected[this]
    Definition Classes
    InternalModule
  66. def getMembersInjector[T <: AnyRef](arg0: TypeLiteral[T]): MembersInjector[T]
    Attributes
    protected[google.inject]
    Definition Classes
    AbstractModule
  67. def getMembersInjector[T <: AnyRef](arg0: Class[T]): MembersInjector[T]
    Attributes
    protected[google.inject]
    Definition Classes
    AbstractModule
  68. def getProvider[T](implicit arg0: ClassTag[T]): Provider[T]
    Attributes
    protected[this]
    Definition Classes
    InternalModule
  69. def getProvider[T <: AnyRef](arg0: Class[T]): Provider[T]
    Attributes
    protected[google.inject]
    Definition Classes
    AbstractModule
  70. def getProvider[T <: AnyRef](arg0: Key[T]): Provider[T]
    Attributes
    protected[google.inject]
    Definition Classes
    AbstractModule
  71. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  72. def hostname: String
  73. def info(marker: Marker, message: => Any, cause: Throwable): Unit
    Attributes
    protected[this]
    Definition Classes
    Logging
  74. def info(message: => Any, cause: Throwable): Unit
    Attributes
    protected[this]
    Definition Classes
    Logging
  75. def info(marker: Marker, message: => Any): Unit
    Attributes
    protected[this]
    Definition Classes
    Logging
  76. def info(message: => Any): Unit
    Attributes
    protected[this]
    Definition Classes
    Logging
  77. def infoResult[T](message: => String)(fn: => T): T
    Attributes
    protected[this]
    Definition Classes
    Logging
  78. def initialClientConfiguration(injector: Injector, client: Client, statsReceiver: StatsReceiver): Client

    Initial configuration of the underlying client.

    Initial configuration of the underlying client. This is exposed to allow for customization of the base client configuration. All user facing extensions should be done via configureClient.

    returns

    The base configured ClientType client, without any custom end-user configuration.

    Attributes
    protected
    Definition Classes
    StackClientModuleTrait
    Example:
    1. override protected final def initialClientConfiguration(
        injector: Injector,
        client: ClientType,
        statsReceiver: StatsReceiver
      ): ThriftMux.Client =
        super.initialClientConfiguration(injector, client, statsReceiver)
          .withClientId(injector.instance[ClientId]
  79. def install(module: Module): Unit

    Uses the given com.google.inject.Module to configure more bindings.

    Uses the given com.google.inject.Module to configure more bindings. This is not supported for instances of type TwitterModule and will throw an UnsupportedOperationException if attempted on an instance of TwitterModule. This is to properly support the TwitterModuleLifecycle for TwitterModule instances.

    Attributes
    protected
    Definition Classes
    TwitterModule → AbstractModule
    Annotations
    @throws(scala.this.throws.<init>$default$1[UnsupportedOperationException])
    Note

    Module) can still be used for non-TwitterModule instances, and is sometimes preferred due to install being deferred until after flag parsing occurs.

  80. def isDebugEnabled(marker: Marker): Boolean
    Attributes
    protected[this]
    Definition Classes
    Logging
  81. def isDebugEnabled: Boolean
    Attributes
    protected[this]
    Definition Classes
    Logging
  82. def isErrorEnabled(marker: Marker): Boolean
    Attributes
    protected[this]
    Definition Classes
    Logging
  83. def isErrorEnabled: Boolean
    Attributes
    protected[this]
    Definition Classes
    Logging
  84. def isInfoEnabled(marker: Marker): Boolean
    Attributes
    protected[this]
    Definition Classes
    Logging
  85. def isInfoEnabled: Boolean
    Attributes
    protected[this]
    Definition Classes
    Logging
  86. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  87. def isTraceEnabled(marker: Marker): Boolean
    Attributes
    protected[this]
    Definition Classes
    Logging
  88. def isTraceEnabled: Boolean
    Attributes
    protected[this]
    Definition Classes
    Logging
  89. def isWarnEnabled(marker: Marker): Boolean
    Attributes
    protected[this]
    Definition Classes
    Logging
  90. def isWarnEnabled: Boolean
    Attributes
    protected[this]
    Definition Classes
    Logging
  91. def javaModules: Collection[Module]

    Additional modules to be composed into this module from Java

    Additional modules to be composed into this module from Java

    Attributes
    protected[inject]
    Definition Classes
    TwitterBaseModule
  92. final def logger: Logger
    Attributes
    protected[this]
    Definition Classes
    Logging
  93. final def loggerName: String
    Attributes
    protected[this]
    Definition Classes
    Logging
  94. def modules: Seq[Module]

    Additional modules to be composed into this module.

    Additional modules to be composed into this module. This list of modules is generally used instead of the TwitterModule.install method to properly support the TwitterModuleLifecycle for TwitterModule instances.

    Attributes
    protected[inject]
    Definition Classes
    TwitterBaseModule
    Note

    Module) can still be used for non-TwitterModule 1 instances, and is sometimes preferred due to install being deferred until after flag parsing occurs.

    ,

    Java users should prefer javaModules.

  95. def monitor: Monitor

    Function to add a user-defined Monitor.

    Function to add a user-defined Monitor. A com.twitter.finagle.util.DefaultMonitor will be installed implicitly which handles all exceptions caught in the stack. Exceptions that are not handled by a user-defined monitor are propagated to the com.twitter.finagle.util.DefaultMonitor.

    NullMonitor has no influence on DefaultMonitor behavior here.

    Attributes
    protected
    Definition Classes
    StackClientModuleTrait
  96. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  97. final def newClient(injector: Injector, statsReceiver: StatsReceiver): Client

    This method will generate a fully configured ClientType

    This method will generate a fully configured ClientType

    injector

    the com.twitter.inject.Injector which can be used to help configure the given ClientType client.

    statsReceiver

    The StatsReceiver to use with the generated ClientType

    returns

    A configured ClientType

    Definition Classes
    HttpClientModuleTraitStackClientModuleTrait
    Note

    The ability to override this method is exposed for Java compatibility purposes, where the type information in this trait can be erased from this trait to a more generic ClientType, which can cause Java compilation failures. See https://issues.scala-lang.org/browse/SI-8905. When overriding this method, it should treat this method as final, outside of providing a more specific return type. For example:

    override protected final def newClient(
      injector: Injector,
      statsReceiver: StatsReceiver
    ): Http.Client = super.newClient(injector, statsReceiver)
  98. final def newHttpClient(injector: Injector, statsReceiver: StatsReceiver, mapper: ScalaObjectMapper): HttpClient
  99. final def newService(injector: Injector, statsReceiver: StatsReceiver): Service[Request, Response]

    This method will generate a Service[Req, Rep] from the configured ClientType generated by calling newClient().

    This method will generate a Service[Req, Rep] from the configured ClientType generated by calling newClient().

    injector

    the com.twitter.inject.Injector which can be used to help configure the given ClientType client.

    statsReceiver

    The StatsReceiver to use with the generated Service[Req, Rep].

    returns

    A Service[Req, Rep] that overlays the ClientType

    Attributes
    protected
    Definition Classes
    StackClientModuleTrait
  100. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  101. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  102. def onExit(f: => Unit): Unit

    Collects functions over a com.twitter.util.Closables.

    Collects functions over a com.twitter.util.Closables. These functions will be passed to the application onExit function to be executed on graceful shutdown of the application.

    f

    A Function0 which returns Unit. It is expected that this function encapsulates awaiting on a com.twitter.util.Closable that the application would like to ensure is closed upon graceful shutdown.

    onExit {
      val closable = ...
      Await.result(
        closable.close(after: Duration), timeout: Duration)
      }
    Attributes
    protected
    Definition Classes
    TwitterModuleLifecycle
    Note

    It is expected that the passed function is a function over a com.twitter.util.Closable.

    See also

    => Unit)

    com.twitter.util.Awaitable

    com.twitter.util.Closable

  103. def requestInjection(arg0: AnyRef): Unit
    Attributes
    protected[google.inject]
    Definition Classes
    AbstractModule
  104. def requestStaticInjection[T]()(implicit arg0: ClassTag[T]): Unit
    Attributes
    protected[this]
    Definition Classes
    InternalModule
  105. def requestStaticInjection(arg0: <repeated...>[Class[_ <: AnyRef]]): Unit
    Attributes
    protected[google.inject]
    Definition Classes
    AbstractModule
    Annotations
    @transient()
  106. def requestTimeout: Duration

    Configures a "global" request timeout on the Finagle client (default: unbounded).

    Configures a "global" request timeout on the Finagle client (default: unbounded). This will set *all* requests to *every* method to have the same total timeout.

    returns

    a Duration which represents the total request timeout

    Attributes
    protected
    Definition Classes
    StackClientModuleTrait
    See also

    com.twitter.finagle.param.CommonParams.withRequestTimeout

    https://twitter.github.io/finagle/guide/Clients.html#timeouts-expiration

  107. def requireBinding(arg0: Class[_ <: AnyRef]): Unit
    Attributes
    protected[google.inject]
    Definition Classes
    AbstractModule
  108. def requireBinding(arg0: Key[_ <: AnyRef]): Unit
    Attributes
    protected[google.inject]
    Definition Classes
    AbstractModule
  109. def retryBudget: RetryBudget

    Default com.twitter.finagle.service.RetryBudget.

    Default com.twitter.finagle.service.RetryBudget. It is highly recommended that budgets be shared between all filters that retry or re-queue requests to prevent retry storms.

    returns

    a default com.twitter.finagle.service.RetryBudget

    Attributes
    protected
    Definition Classes
    StackClientModuleTrait
    See also

    https://twitter.github.io/finagle/guide/Clients.html#retries

  110. def retryPolicy: Option[RetryPolicy[Try[Response]]]
  111. def scopeStatsReceiver(injector: Injector, statsReceiver: StatsReceiver): StatsReceiver

    Provide a customized base scope for the StatsReceiver exposed by this module, e.g., * *

    Provide a customized base scope for the StatsReceiver exposed by this module, e.g., * *

    override protected def scopeStatsReceiver(injector: Injector, statsReceiver: StatsReceiver): StatsReceiver =
     statsReceiver.scope("clnt", "custom_scope")
    Attributes
    protected
    Definition Classes
    StackClientModuleTrait
    Note

    The default scope is "clnt".

    ,

    Changing the default scope can have negative impacts on observability of metrics. Use caution when changing this value.

  112. def sessionAcquisitionTimeout: Duration

    Configures the session acquisition timeout of this client (default: unbounded).

    Configures the session acquisition timeout of this client (default: unbounded).

    returns

    a Duration which represents the acquisition timeout

    Attributes
    protected
    Definition Classes
    StackClientModuleTrait
    See also

    com.twitter.finagle.param.ClientSessionParams.acquisitionTimeout

    https://twitter.github.io/finagle/guide/Clients.html#timeouts-expiration

  113. def singletonPostWarmupComplete(injector: Injector): Unit

    Invoke after external ports are bound and any clients are resolved

    Invoke after external ports are bound and any clients are resolved

    This method should only get singleton instances from the injector.

    Attributes
    protected[inject]
    Definition Classes
    TwitterModuleLifecycle
  114. def singletonShutdown(injector: Injector): Unit

    Invoked on graceful shutdown of the application.

    Invoked on graceful shutdown of the application.

    This method should only get singleton instances from the injector.

    Attributes
    protected[inject]
    Definition Classes
    TwitterModuleLifecycle
  115. def singletonStartup(injector: Injector): Unit

    Invoked after the injector is started.

    Invoked after the injector is started.

    This method should only get singleton instances from the injector.

    Attributes
    protected[inject]
    Definition Classes
    TwitterModuleLifecycle
  116. final def synchronized[T0](arg0: => T0): T0
    Definition Classes
    AnyRef
  117. def toString(): String
    Definition Classes
    AnyRef → Any
  118. def trace(marker: Marker, message: => Any, cause: Throwable): Unit
    Attributes
    protected[this]
    Definition Classes
    Logging
  119. def trace(message: => Any, cause: Throwable): Unit
    Attributes
    protected[this]
    Definition Classes
    Logging
  120. def trace(marker: Marker, message: => Any): Unit
    Attributes
    protected[this]
    Definition Classes
    Logging
  121. def trace(message: => Any): Unit
    Attributes
    protected[this]
    Definition Classes
    Logging
  122. def traceResult[T](message: => String)(fn: => T): T
    Attributes
    protected[this]
    Definition Classes
    Logging
  123. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  124. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  125. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException]) @native()
  126. def warn(marker: Marker, message: => Any, cause: Throwable): Unit
    Attributes
    protected[this]
    Definition Classes
    Logging
  127. def warn(message: => Any, cause: Throwable): Unit
    Attributes
    protected[this]
    Definition Classes
    Logging
  128. def warn(marker: Marker, message: => Any): Unit
    Attributes
    protected[this]
    Definition Classes
    Logging
  129. def warn(message: => Any): Unit
    Attributes
    protected[this]
    Definition Classes
    Logging
  130. def warnResult[T](message: => String)(fn: => T): T
    Attributes
    protected[this]
    Definition Classes
    Logging

Inherited from StackClientModuleTrait[Request, Response, Client]

Inherited from TwitterModule

Inherited from ScalaModule

Inherited from InternalModule[Binder]

Inherited from TwitterBaseModule

Inherited from TwitterModuleLifecycle

Inherited from Logging

Inherited from TwitterModuleFlags

Inherited from AbstractModule

Inherited from Module

Inherited from AnyRef

Inherited from Any

Ungrouped