= About the 'tomee' webapp
:index-group: General Information
: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.

There are two forms of the `tomee` webapp to consider:

* from an *tomee-1.x.x.war* that has been downloaded and added to a
Tomcat 7 install. This `tomee` webapp will contain all the necessary
libraries to add the missing Java EE functionality to Tomcat as well as
a small console.
* from an *apache-tomee-1.x.x.zip*. The `tomee` webapp shipped inside a
TomEE zip or tar is the same webapp as above, but with the libraries
moved into the `<tomcat-home>/lib/` directory

The only real difference between a "Tomcat with drop-in tomee.war" and a
"TomEE" install is where the additional libraries live.

== Deleting from plain Tomcat

Deleting the `tomee` webapp from a plain Tomcat install will effectively
uninstall TomEE from Tomcat.

== Deleting from TomEE

Deleting the `tomee` webapp from a TomEE install is safe as the needed
libraries have been moved into `<tomcat-home>/lib/`

The only loss of functionality would be the ability to remotely execute
EJBs over HTTP. However this can easily be added to a different webapp
like so:

[source,xml]
----
<servlet>
  <servlet-name>ServerServlet</servlet-name>
  <servlet-class>org.apache.openejb.server.httpd.ServerServlet</servlet-class>
</servlet>
 
<servlet-mapping>
  <servlet-name>ServerServlet</servlet-name>
  <url-pattern>/myejbs/*</url-pattern>
</servlet-mapping>
----

Then you can create an `InitialContext` that points to that webapp like
so:

[source,java]
----
Properties p = new Properties();
p.put("java.naming.factory.initial", "org.apache.openejb.client.RemoteInitialContextFactory");
p.put("java.naming.provider.url", "http://127.0.0.1:8080/mywebapp/myejbs");
// user and pass optional
p.put("java.naming.security.principal", "myuser");
p.put("java.naming.security.credentials", "mypass");

InitialContext ctx = new InitialContext(p);

MyBean myBean = (MyBean) ctx.lookup("MyBeanRemote");
----
