Understanding the Codebase

Finatra is divided into three main parts: inject, http, and thrift. The inject part of the framework contains all of the base functionality for integration of the Guice dependency injection framework with the TwitterUtil util-app App and the TwitterServer c.t.server.TwitterServer.

Modules in the inject portion of the Finatra framework constitute the core of the framework, are in the com.twitter.inject package namespace, and only depend on each other or outside dependencies (except in testing). The inject layer can be thought of as dealing with concerns that are common to the framework or that span both http and thrift services.

Everything else in the Finatra codebase is in the com.twitter.finatra package namespace and has dependencies on the inject libraries as well as other libraries.

Note

Classes in internal packages (e.g., com.twitter.finatra.http.internal) are not expected to be used directly and no guarantee is given as to the stability of their interfaces. Please do not use internal package namespaces directly.

Diagram of the Finatra Framework

Inject

Modules in inject include:

  • inject-core - core library which defines the TwitterModule, Injector, and the framework TwitterModuleFlags for defining injectable TwitterUtil Flags.

  • inject-modules - core library which defines framework modules.

  • inject-app - core integration with c.t.app.App

  • inject-server - core integration with c.t.server.TwitterServer.

  • inject-slf4j - core library integration with the SLF4J API. Also provides support for bridging Logback’s Mapped Diagnostic Context with Finagle. See Mapped Diagnostic Context Filter Logback documentation for more information.

  • inject-request-scope - core library for integrating Guice’s Request Scope with TwitterUtil c.t.util.Future. See the Request Scope section for more information.

  • inject-thrift - core library for thrift utilities useful for both clients and server.

  • inject-thrift-client - core library for supporting creation of a Thrift Finagle Client.

  • inject-utils - core library which provides a collection of useful utilities, including implicit conversions, exceptions and futures handling and retries.

Creating an injectable App or TwitterServer

See: Building an injectable c.t.app.App or Building an injectable c.t.server.TwitterServer.

Important

It is important to remember that the Finatra framework establishes an order of the lifecycle of an application or server. See the Application and Server Lifecycle section for more information.

Jackson

Finatra’s integration with jackson-module-scala for JSON support. See the Jackson Integration section for more details.

HttpClient

A simple and barebones Finagle Client for making HTTP requests.

HTTP

Base library for HTTP services. See the HTTP Server Definition section for more information.

Thrift

Base library for Thrift services. See the Thrift Basics and Thrift Server Definition sections for more details.

Utils

A collection of framework utilities that are specifically useful in HTTP or Thrift.

Other

  • inject-thrift-client-http-mapper - a library which bridges inject-thrift-client and http libraries to provide an exception mapper for mapping thrift exceptions to HTTP responses.