SeedStack provides the ability to inject JNDI resources. Multiple JNDI contexts can be used in an application.

Configuration

The default JNDI context is automatically configured by SeedStack if you provide a jndi.properties file at the root of the classpath. This JNDI context is named default. Additional JNDI contexts can be specified using the following configuration:

jndi:
  # Configured additional JNDI context with the name context as key
  additionalContexts:
    otherContext: other-context.properties

To dump the jndi configuration options:

mvn -q -Dargs="jndi" seedstack:config

The above configuration defines an additional JNDI context, named otherContext. It is defined by the JNDI properties file loaded from the classpath location other-context.properties.

Usage

Declarative API

You can inject a JNDI resource from the default context using the standard @Resource annotation:

public class SomeClass {
    @Resource(name = "some/jndi/name")
    private DataSource datasource;
}

In case you have several JNDI contexts in your application, you can specify the context name using the @JndiContext annotation:

public class SomeClass {
    @Resource(name = "some/jndi/name")
    @JndiContext("otherContext")
    private DataSource datasource;
}

Programmatic API

You can retrieve any JNDI context by injecting the Context interface where required:

public class SomeClass {
    @Inject
    private Context defaultContext;

    public void someMethod(){
       defaultContext.lookup("some/jndi/name");
    }
}

If you need to inject a specific context, qualify the injection point with the @Named annotation:

public class Holder{
    @Inject
    @Named("otherContext")
    private Context otherContext;

    public void someMethod(){
       otherContext.lookup("some/jndi/name");
    }
}