= OpenEJB Embedded Configuration
:index-group: Testing Techniques
:jbake-date: 2018-12-05
:jbake-type: page
:jbake-status: published


= Defaults, Overrides and Order

When booting up OpenEJB for testing via the `LocalInitialContextFactory`
or the newer `EJBContainer.createEJBContainer()` API part of EJB 3.1
there is quite a bit of flexibility to how things are configured.

OpenEJB will function fine with no configuration at all and will happily
create things as needed and select defaults for everything. So in a real
sense configuration is all about overriding those defaults. There are
several places to put your overrides and an a specific order how they
are applied. Here they are in order of preference; 1 = highest, 5 =
lowest.

*InitialContext*

. InitialContext properties
. jndi.properties from the classpath
. System properties
. openejb.xml declarations/properties
. service-jar.xml declarations/properties (internal concept) }

*EJBContainer API*

. EJBContainer.createEJBContainer(Map) entries
. System properties
. openejb.xml declarations/properties
. service-jar.xml declarations/properties (internal concept)

It opens up some interesting possibilities in how you configure your
environment. You could do 100% of your configuration in your test case
via InitialContext propertes, or you could do say 80% in a
jndi.properties file or openejb.xml file and 20% in your test case via
InitialContext properties. You can put 100% of your configuration in a
`jndi.properties` or `openejb.xml` file and override them via
`InitialContext` properties.

You can manage the properties how you wish and there is no need for
redundant definitions if you do not want them.

= What is configurable?

Everything you can configure via an openejb.xml (minus the element) can
be configured/overridden via properties. See
link:configuring-containers-in-tests.html[Configuring Containers in
Tests] and link:configuring-datasources-in-tests.html[Configuring
DataSources in Tests].

Everything in your logging.properties can be configured/overridden via
properties. See link:configuring-logging-in-tests.html[Configuring
Logging in Tests].

The properties of persistence units declared in a persistence.xml can be
configured/overridden via properties. See
link:configuring-persistenceunits-in-tests.html[Configuring
PersistenceUnits in Tests].

OpenEJB has many flags that can also be set as properties. See
link:properties-listing.html[OpenEJB Properties] for details on those.

= Example of using InitialContext properties

[source,java]
----
Properties p = new Properties();

// set the initial context factory
p.put("java.naming.factory.initial ", "org.apache.openejb.client.LocalInitialContextFactory");

// change some logging
p.put("log4j.category.OpenEJB.options ", " debug");
p.put("log4j.category.OpenEJB.startup ", " debug");
p.put("log4j.category.OpenEJB.startup.config ", " debug");

// create some resources
p.put("movieDatabase", "new://Resource?type=DataSource");
p.put("movieDatabase.JdbcDriver ", " org.hsqldb.jdbcDriver");
p.put("movieDatabase.JdbcUrl ", " jdbc:hsqldb:mem:moviedb");

// override properties on your "movie-unit" persistence unit
p.put("movie-unit.hibernate.dialect ", "org.hibernate.dialect.HSQLDialect");

// set some openejb flags
p.put("openejb.jndiname.format ", " {ejbName}/{interfaceClass}");
p.put("openejb.descriptors.output ", " true");
p.put("openejb.validation.output.level ", " verbose");

InitialContext initialContext = new InitialContext(p);
----

= Example of using jndi.properties

Here's an example of the same properties being specified via a
`jndi.properties file`. This file just needs to be placed in the
classpath, not in a subdirectory of a path in the classpath such as
META-INF, but at the root of any of the paths in the classpath.

[source,properties]
----
# set the initial context factory
java.naming.factory.initial = org.apache.openejb.client.LocalInitialContextFactory

# change some logging
log4j.category.OpenEJB.options = debug
log4j.category.OpenEJB.startup = debug
log4j.category.OpenEJB.startup.config = debug

# create some resources
movieDatabase = new://Resource?type=DataSource
movieDatabase.JdbcDriver = org.hsqldb.jdbcDriver
movieDatabase.JdbcUrl = jdbc:hsqldb:mem:moviedb

# override properties on your "movie-unit" persistence unit
movie-unit.hibernate.dialect = org.hibernate.dialect.HSQLDialect

# set some openejb flags
openejb.jndiname.format = {ejbName}/{interfaceClass}
openejb.descriptors.output = true
openejb.validation.output.level = verbose
----

Then OpenEJB can be booted via the `InitialContext` as normal.
Properties can still be used to override any of the above properties:

[source,java]
----
Properties p = new Properties();

p.put("openejb.validation.output.level ", " medium");

InitialContext initialContext = new InitialContext(p);
----
