= How to set up TomEE in production
:jbake-date: 2016-03-16
:jbake-type: page
:jbake-status: published


You can use TomEE as described on link:../../admin/directory-structure.html[Directory Structure] page but in production it is better to
split TomEE and application binaries and configuration.

Idea is to have this kind of layout (the root is the one you prefer):

ifndef::backend-pdf[]

[#filetree.col-md-4]
[{
    label: '/some/path',
    description: 'any location on your file system',
    children: [
        {
            label: 'tomee',
            description: 'all tomee binaries will be there, note: you often do the same for the JVM versions you have',
            children: [
                {
                    label: 'tomee-1.7.1',
                    description: 'a particular tomee version (just unzip it there)',
                    children: [
                        { label: 'bin', description: 'the startup binaries/scripts' },
                        { label: 'conf', description: 'default shared configuration for this version, can be overwritten by instance' },
                        { label: 'lib', description: 'the binaries' }
                    ]
                },
                {
                    label: 'tomee-1.7.2',
                    description: 'a particular tomee version (just unzip it there)',
                    children: [
                        { label: 'bin', description: 'the startup binaries/scripts' },
                        { label: 'conf', description: 'default shared configuration for this version, can be overwritten by instance' },
                        { label: 'lib', description: 'the binaries' }
                    ]
                },
                {
                    label: 'tomee-7.0.0-M3',
                    description: 'a particular tomee version (just unzip it there)',
                    children: [
                        { label: 'bin', description: 'the startup binaries/scripts' },
                        { label: 'conf', description: 'default shared configuration for this version, can be overwritten by instance' },
                        { label: 'lib', description: 'the binaries' }
                    ]
                }
            ]
        },
        {
            label: 'applications',
            description: 'all applications',
            children: [
                {
                    label: 'application1',
                    description: 'any application instance (ie configuration + binaries)',
                    children: [
                        { label: 'bin', description: 'provide scripts for this instance (see under that file layout)' },
                        { label: 'conf', description: 'the instance configuration, typically what is in tomee/conf when used in standalone' },
                        { label: 'lib', description: 'some additional binaries like JDBC drivers' },
                        { label: 'logs', description: 'instances logs location' },
                        { label: 'work', description: 'dedicated work directory' },
                        { label: 'temp', description: 'instance temporary folder' },
                        { label: 'webapps', description: 'instance webapp folder' }
                    ]
                },
                {
                    label: 'application2',
                    description: 'any application instance (ie configuration + binaries)',
                    children: [
                        { label: 'bin', description: 'provide scripts for this instance (see under that file layout)' },
                        { label: 'conf', description: 'the instance configuration, typically what is in tomee/conf when used in standalone' },
                        { label: 'lib', description: 'some additional binaries like JDBC drivers' },
                        { label: 'logs', description: 'instances logs location' },
                        { label: 'work', description: 'dedicated work directory' },
                        { label: 'temp', description: 'instance temporary folder' },
                        { label: 'webapps', description: 'instance webapp folder' }
                    ]
                }
            ]
        }
    ]
}]


[#filetreedetail.col-md-8.bs-callout.bs-callout-primary]
Click on a tree node or open a folder to see the detail there.

[.clearfix]
&nbsp;

endif::[]

== Instance scripts

The idea for instances (applications) scripts is to simply delegate to tomcat ones but customizing the JVM and TomEE versions.

Customizing the version (and locations) is done in `bin/setenv.sh` of instances.

Here are an example for the common scripts (of course you can write helper version like restart etc).

=== setenv.sh

[source,bash]
----
#! /bin/sh

# which java
export JAVA_HOME="/some/path/java/jdk-8u60"
# which tomee
export CATALINA_HOME="/some/path/tomee/tomee-7.0.0-M3"
# where is the application - to let tomcat/tomee finds the configuration
export CATALINA_BASE="/some/path/application1/"
# to let tomee be able to kill the instance if shutdown doesn't work (see shutdown script)
export CATALINA_PID="/some/path/application1/work/tomee.pid"
----

=== startup

[source,bash]
----
#! /bin/bash

proc_script_base="`cd $(dirname $0) && cd .. && pwd`"
source "$proc_script_base/bin/setenv.sh"
nohup "$CATALINA_HOME/bin/startup.sh" "$@" > $proc_script_base/logs/nohup.log &
----

=== shutdown

[source,bash]
----
#! /bin/bash

proc_script_base="`cd $(dirname $0) && cd .. && pwd`"
source "$proc_script_base/bin/setenv.sh"
# we support parameters like timeout and force, typically we would call it this way: ./shutdown 1200 -force
"$CATALINA_HOME/bin/shutdown.sh" "$@"
----
