Modules¶
There are two kinds of modules in Fathom, fathom.Module
and fathom.ServletsModule
.
Fathom modules are discovered by a Java ServiceLoader.
fathom.Module¶
Subclass this module type to provide injectable services & components to your Fathom application.
Configuration¶
Create a Java ServiceLoader definition file for your module…
META-INF/services/fathom.Module
com.package.MyModule
… and then define it.
public class MyModule extends Module {
@Override
protected void setup() {
// register MyService
bind(MyService.class);
}
}
fathom.ServletsModule¶
Subclass this module type to provide injectable services & components, Filters, and Servlets.
Configuration¶
Create a Java ServiceLoader definition file for your module…
META-INF/services/fathom.ServletsModule
com.package.MyServletsModule
… and then define it.
public class MyServletsModule extends ServletsModule {
@Override
protected void setup() {
// serve all requests with MyServlet
serve("/*").with(MyServlet.class);
// add a debug filter for dev mode
if (getSettings().isDev()) {
filter("/*").through(MyFilter.class);
}
// register MyService
bind(MyService.class);
}
}
Configuration¶
Requiring Settings¶
Your module may need one or more settings to function and you may specify them as annotated requirements.
Each required setting must be present in the runtime profile configuration and must have a non-empty value otherwise the module will not be loaded.
@RequireSetting("myService.url")
@RequireSetting("myService.username")
@RequireSetting("myService.password")
public class MyModule extends Module {
@Override
protected void init() {
// register MyService
bind(MyService.class);
}
}
Requiring Modes¶
You might only want to load your module in a particular runtime mode. This is easily accomplished by using one or more of the mode-specific annotations: @DEV
, @TEST
, and @PROD
.
@DEV @TEST
public class DebugModule extends Module {
@Override
protected void init() {
// register DebugService
bind(DebugService.class);
}
}
Usage¶
Add your module to the classpath of your Fathom application.