= TomEE and Eclipse
:index-group: IDE
:jbake-date: 2018-12-05
:jbake-type: page
:jbake-status: published

NOTE: Licensed to the Apache Software Foundation (ASF) under
one or more contributor license agreements. See the NOTICE file
distributed with this work for additional information regarding
copyright ownership. The ASF licenses this file to you under the Apache
License, Version 2.0 (the "License"); you may not use this file except
in compliance with the License. You may obtain a copy of the License at
. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by
applicable law or agreed to in writing, software distributed under the
License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied. See the License for
the specific language governing permissions and limitations under the
License.

Using TomEE in Eclipse is pretty simple since it uses the existing
Tomcat 7 server adaptor that comes with Eclipse.

== Quick Start

An excellent instructional video with step-by-step instructions on how
to install Eclipse, TomEE and create/deploy your first project is
available on YouTube here:
http://www.youtube.com/watch?v=Lr8pxEACVRI[Getting Started with Apache
TomEE] (Remember to select the 'Generate web.xml descriptor' checkbox
during project setup. Otherwise the ejb does not get injected and you
will get an error.).

[arabic]
. Download and install both Apache TomEE and Eclipse.
. Start Eclipse and from the main menu go to *File* - *New* - *Dynamic
Web Project*
. Enter a new project name
. In the *Target Runtime* section click on the *New Runtime* button.
. Pick *Apache Tomcat v7.0* and click Next
. Change the *Name* field to _TomEE_ to indicate that this is a TomEE
server rather than a Tomcat server.
. Set the *Tomcat installation directory* by clicking the *Browse*
button and selecting the folder where you extracted TomEE
. Click *Finish* to return to the New Project dialog
. Click *Finish* to complete creating your new Project
. When you're ready to deploy your project, right-click your project and
select Run As - Run On Server
. Make sure that the _TomEE_ environment is selected in the *Server
runtime environment*
. On the *Run on Server* dialog, click the *Always use this server when
running this project* checkbox
. Click *Finish* - Eclipse will start TomEE and deploy your project

== Advanced installation

[arabic]
. In Eclipse, click on the *Servers* tab, right click and select New -
Server.
. Select *Apache - Tomcat v7.0 Server* and click *Next*
. Set the *Tomcat installation directory* by clicking the *Browse*
button and selecting the folder where you extracted TomEE
. Add your webapp to the server. Click *Finish*.
. In the *Servers* tab, double click on your server to open up the
*Overview* page. Click on the *Modules* tab
. Click *Add External Web Module*. In the *Add Web Module* dialog, for
document base, browse to `<TomEE>/webapps/tomee`. Set *Path:* to
`/tomee`. Uncheck *Auto reloading enabled*. Click OK.
. Return to the *Overview* tab for the server.
. Deselect the *Modules auto reload by default* checkbox.
. If you do not want Eclipse to take control of your TomEE installation,
select *Use Workspace Metadata* under *Server Locations*. Please review
the _Workspace Metadata Installation_ section below for additional steps
in this scenario. Otherwise, select *Use Tomcat Installation*
. Click the Save button in Eclipse so the server configuration gets
saved.
. Click on your webapp project, then select Project - clean. Hit OK.
This will cause Eclipse to clean and rebuild
. In the *Servers* tab, right click on the server and select *Publish*.
. Start the server.

=== Workspace Metadata Installation

If you used *Use Workspace Metadata* in the *Server Locations*
definition of the TomEE server, you will have to add TomEE specific
configuration files to your Servers project in your workspace in case
you need to change system properties or add containers / resources and
have those reflected in the server running under Eclipse.

[arabic]
. Locate your TomEE server configuration in Workspace / Servers
. Right-click the server project and select *Import*
. Select General - File System and click *Next*
. Browse to your `<TomEE>/conf` folder
. Select the following files for import: `logging.properties`,
`system.properties` and `tomee.xml`
. Click *Finish* to import the files.
. In the *Servers* tab, right-click the TomEE server and select
*Publish* to publish the files to the Eclipse metadata folder

If you need to modify system properties or change your TomEE resources,
containers, etc., you now need to make those changes in the Workspace /
Servers / `<`Your Server`>` location and publish them to the server for
the changes to take effect.

=== JSP Hot Deployment

If jsp changes are not being hot deployed then this is because the jsp
servlet is set to development=false in the web.xml file. To allow jsp
hot deployment alter this value to true and restart Tomee.

This is the relevant snippet of the web.xml file.

[source,xml]
----
<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    ....
    <init-param>
        <param-name>development</param-name>
        <param-value>true</param-value>
    </init-param>
    ....
</servlet>
----

== How to use JULI for TomEE in WTP?

It seems that WTP doesn't manage correctly Tomcat logging configuration
(which needs to be done through system properties). A quick workaround
is to add these properties manually:

[source,properties]
----
-Djava.util.logging.config.file="<tomee>/conf/logging.properties"
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
----

More information on:
http://wiki.eclipse.org/WTP_Tomcat_FAQ#How_do_I_enable_the_JULI_logging_in_a_Tomcat_5.5_Server_instance.3F
