= Configuration
:index-group: OpenEJB Standalone Server
:jbake-date: 2018-12-05
:jbake-type: page
:jbake-status: published

= Short Overview

== Configuration Properties

* _openejb.home_ - OpenEJB home (installation) directory path. All
relative paths are resolved against the property unless openejb.base is
set. Unless set, the value is assigned to the _user.dir_ Java property.
* _openejb.base_ - OpenEJB base directory path. If set, the directory
pointed by the property is searched for resources before openejb.home.
* _openejb.configuration_ - OpenEJB configuration file path.
* _openejb.loader_ - OpenEJB loader that's responsible for loading EJBs.
There are 3 different loader types: +
** _tomcat-webapp_ - set it when inside of Tomcat scoped at just the
webapp, aka. link:collapsed-ear.html[Collapsed EAR] ** _tomcat_ - set it
when inside of Tomcat scoped for all webapps to share ** _system_ (also:
bootstrap) ** _embedded_ (also: noload)
* _openejb.configurator_ (default:
_org.openejb.alt.config.ConfigurationFactory_ ) - a class that builds
org.openejb.alt.assembler.classic.OpenEjbConfiguration object;
implements the
org.openejb.alt.assembler.classic.OpenEjbConfigurationFactory interface
* _openejb.descriptors.output_ - possible values: true|false - When set
OpenEJB saves deployment descriptors - `ejb-jar.xml` and `openejb-jar.xml`

== Configuration File

Show a config file with the elements hyperlinked.

[source,xml]
----
<?xml version="1.0"?>
<openejb>
  <Container id="Default CMP Container" ctype="CMP_ENTITY">
    Global_TX_Database  c:/my/app/conf/postgresql.cmp_global_database.xml
    Local_TX_Database   c:/my/app/conf/postgresql.cmp_local_database.xml
  </Container>
  <Connector id="Default JDBC Database">
    JdbcDriver org.postgresql.Driver
    JdbcUrl jdbc:postgresql://localhost/mydb
    UserName username
    Password password
  </Connector>
  <SecurityService id="Default Security Service"/>
  <TransactionService id="Default Transaction Manager"/>
  <Deployments jar="c:/my/app/employee.jar"/>
  <Deployments dir="beans/" />
</openejb>
----

== Basic Layout

Basically, openejb.base is the source for 100% of all configuration
information and third party config files (log4j, castor, instantdb,
whatever). This includes finding where the, possibly many, entries in
the openejb.conf point. The openejb.home is where the code loading
OpenEJB will look for all the OpenEJB libraries. Usually openejb.base is
not explicitly set and defaults to the value of openejb.home, so many
people are used to only dealing with openejb.home.

The point of having and openejb.base and openejb.home was basically to
allow several independently configured instances of OpenEJB running on a
system (perhaps embedded in Swing apps, in Tomcat, running as a
standalone Server, or even in Groovy as Mr. Strachan did!) but without
the need to copy all the OpenEJB system libraries everywhere.

_openejb.home_ * can be set explicitly via a system property. * if not
set it default's to user.dir, which is the current working directory.

_openejb.base_ * can be set explicitly via a system property. * If not
set it default's to openejb.home.

_openejb.configuration_ * can be set to explicitly point to the file
containing your configuration. * If set to a relative path, we first
look in user.dir/your-conf-file, then in openejb.base/your-conf-file *
If not set we check in openejb.base/conf/openejb.conf * If no conf file
is found, we create one in openejb.base/conf/openejb.conf

_relative paths in openejb.conf_ * Deployment entries are resolved
relative to openejb.base. * Containers use openejb.base to resolve their
own config files. For example, Castor JDO to loads the database.xml and
all other files from the openejb.base directory. * Resource adapters
that are embedded usually have config files of their own and are also
loaded from the openeb.base.

_log files_ * The log4.configuration file is resolved relative to
openejb.base. * The properties in the config file that point to files
are also resolved relative to openejb.base.

_OpenEJB libraries_ * The jars in the lib and dist directories under
openejb.home are added to the classpath.

=== Summary

A summary of the above in a different notation:

[source,properties]
----
openejb.home = user.dir (can be set explicitly)
openejb.base = openejb.home (can be set explicitly)
openejb.conf = openejb.base/conf/openejb.conf (can be set explicitly)
logging.conf = openejb.base/conf/logging.conf (can be set explicitly)
deployments  = paths listed in openejb.conf (relative paths resolved from openejb.base)
Classpath includes openejb.home/lib and openejb.home/dist
----

=== Example layout

In this one the openejb.home and openejb.base are set, everything else
is defaulted. The openejb.conf file as been updated to point to the ejb
jars by name (abc-ejbs.jar and xyz-ejbs.jar).

An example layout:

[source,java]
----
/usr/local/openejb  (openejb.home)
/usr/local/openejb/lib  (in classpath)
/usr/local/openejb/dist (in classpath)
/home/jsmith/foo_app  (openejb.base)
/home/jsmith/foo_app/conf/openejb.conf
/home/jsmith/foo_app/conf/logging.conf
/home/jsmith/foo_app/abc-ejbs.jar (Deployment entry in openejb.conf)
/home/jsmith/foo_app/xyz-ejbs.jar (Deployment entry in openejb.conf)
/home/jsmith/foo_app/logs/  
----

=== Another Example layout

In this example openejb.home and openejb.base are set up as well as the
explicit paths for the openejb and log4j configuration files.

An example layout:

[source,java]
----
/usr/local/openejb  (openejb.home)
/usr/local/openejb/lib  (in classpath)
/usr/local/openejb/dist (in classpath)
/home/jsmith/foo_app  (openejb.base)
/home/jsmith/foo_app/openejb.xml  (openejb.configuration)
/home/jsmith/foo_app/abc-ejbs.jar (Deployment entry in openejb.xml)
/home/jsmith/foo_app/xyz-ejbs.jar (Deployment entry in openejb.xml)
/home/jsmith/foo_app/log4j.conf  (log4j.configuration)
/home/jsmith/foo_app/mylogs/  (logging dir as defined in log4j.conf)
----
