| Title: |
| Notice: 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. |
| |
| #Deploying in TomEE |
| |
| Deploying applications in TomEE is as simple as deploying them in Tomcat. |
| |
| You could deploy your application in Eclipse just like how you would deploy with Tomcat. For an example, [tomee-and-eclipse](tomee-and-eclipse.html) shows how to use TomEE with Eclipse. |
| |
| Or you can simply package your application as a standard **WAR** file and copy it to the **[TomEE]/webapps** folder, or as an **EAR** file and copy it to the **[TomEE]/apps** folder. |
| |
| Read on to learn more about packaging EJBs in a WAR file. |
| |
| |
| ### Packaging |
| |
| <a name="CollapsedEAR-Onearchive"></a> |
| #### One archive |
| |
| The basic idea of this approach is that your Servlets and EJBs are together in your WAR file as one application. |
| |
| - No classloader boundaries between Servlets and EJBs |
| |
| - EJBs and Servlets can share all third-party libraries (like Spring\!) |
| |
| - No EAR required. |
| |
| - Can put the web.xml and ejb-jar.xml in the same archive (the WAR file) |
| |
| - EJBs can see Servlet classes and vice versa |
| |
| <a name="CollapsedEAR-NotquiteJ2EE(itistrulyJava EE6)"></a> |
| #### Not quite J2EE (But it is Java EE 6) |
| |
| This is very different than J2EE or Java EE 5 as there are not several levels of separation and classloader hierarchy any more. |
| This may take some getting used to and it is important to understand that this style of packaging is **not** J2EE compliant. |
| You should not worry though, as it is an accepted feature of Java EE 6. |
| |
| #### J2EE classloading rules: |
| - You cannot ever have EJBs and Servlets in the same classloader. |
| |
| - Three classloader minimum; a classloader for the ear, one for each |
| ejb-jar, and one for each WAR file. |
| |
| - Servlets can see EJBs, but EJBs cannot see Servlets. |
| |
| To pull that off, J2EE has to kill you on packaging: |
| - You cannot have EJB classes and Servlet classes in the same archive. |
| |
| - You need at least three archives to combine Servlets and EJBs; 1 EAR containing 1 EJB jar and 1 Servlet WAR. |
| |
| - Shared libraries must go in the EAR and be included in a specially formatted 'Class-Path' entry in the EAR's MANIFEST file. |
| |
| Critically speaking, forcing more than one classloader on an application is where J2EE "jumps the shark" for a large majority of people's needs. |