= openejb.xml
:index-group: EJB
:jbake-date: 2018-12-05
:jbake-type: page
:jbake-status: published


== Overview

The openejb.xml is the main configuration file for the container system
and its services such as transaction, security, and data sources.

The format is a mix of xml and properties inspired by the format of the
httpd configuration file. Basically:

[source,xml]
----
<tag id="">
  ...properties...
</tag>
----

Such as:

[source,xml]
----
<Resource id="MyDataSource" type="DataSource">
  username foo
  password bar
</Resource>
----

_Note the space_. White space is a valid name/value pair separator in
any java properties file (along with semicolon). So the above is
equivalent to:

[source,xml]
----
<Resource id="MyDataSource" type="DataSource">
  username = foo
  password = bar
</Resource>
----

You are free to use white space, ":", or "=" for your name/value pair
separator with no effect on OpenEJB.

== Property Defaults and Overriding

The openejb.xml file itself functions as an override, default values are
specified via other means (service-jar.xml files in the classpath),
therefore you only need to specify property values here for 2 reasons:
1. you wish to for documentation purposes 2. you need to change the
default value

The default openejb.xml file has most of the useful properties for each
component explicitly listed with default values for documentation
purposes. It is safe to delete them and be assured that no behavior will
change if a smaller config file is desired.

Overriding can also be done via the command line or plain Java system
properties. See link:system-properties.html[System Properties] for
details.

== What properties are available?

To know what properties can be overridden the './bin/openejb properties'
command is very useful: see link:properties-tool.html[Properties Tool]

Its function is to connect to a running server and print a canonical
list of all properties OpenEJB can see via the various means of
configuration. When sending requests for help to the users list or jira,
it is highly encouraged to send the output of this tool with your
message.

== Not configurable via openejb.xml

The only thing not yet configurable via this file are ServerServices due
to OpenEJB's embeddable nature and resulting long-standing tradition of
keeping the container system separate from the server layer. This may
change someday, but until then ServerServices are configurable via
conf/.properties files such as conf/ejbd.properties to configure the
main protocol that services EJB client requests.

The format of those properties files is greatly adapted from the xinet.d
style of configuration and even shares similar functionality and
properties such as host-based authorization (HBA) via the 'only_from'
property.

== Restoring openejb.xml to the defaults

To restore this file to its original default state, you can simply
delete it or rename it and OpenEJB will see it's missing and unpack
another openejb.xml into the conf/ directory when it starts.

This is not only handy for recovering from a non-functional config, but
also for upgrading as OpenEJB will not overwrite your existing
configuration file should you choose to unpack a new distro over the
top of an old one -- this style of upgrade is safe provided you move
your old lib/ directory first.
