Feedback Welcome! We use your feedback to focus efforts, develop new features, and to make TomEE better for everyone. Help us grow!

Web Profile

Apache TomEE Web Profile delivers Servlets, JSP, JSF, JTA, JPA, CDI, Bean Validation and EJB Lite

Comparison »


Apache TomEE JAX-RS delivers the Web Profile plus JAX-RS

Comparison »


Apache TomEE Plus delivers all that is in the Web Profile and JAX-RS, plus EJB Full, Java EE Connector Architecture, JMS and JAX-WS.

Comparison »



An "EJB" Server that can be run as a separate, standalone, server process. Contains EJB Full, CDI, JPA, JMS, JAX-WS, JAX-RS

Comparison »

Drop-in WARs

A version of Apache OpenEJB that can be dropped into any Tomcat 7.x install effectively creating your own Apache TomEE Web Profile or Apache TomEE Plus.



Should you want to build any of the above binaries, this source bundle is the right one covers them all.


Currently, we have over 80 examples of various aspects of Java EE 6 ranging from EJB, CDI, JAX-RS and more. If you're learning Java EE, this is your secret weapon.


We are excited to announce the release of Apache TomEE 1.5. The volume of feedback on the 1.0.0 Final drove such an impressive number of fixes and features into TomEE that the release number has been updated to reflect the changes.

The team is proud to announce certification of a new Apache TomEE stack that includes the Web Profile plus JAX-RS for RESTful Web Services. The new 'TomEE JAXRS' distribution shows TomEE's commitment to progressing its certification efforts beyond the Web Profile and is a great alternative to the TomEE Plus distribution. See the comparison for a view of all Apache TomEE distributions.

Another great feature is the extended support for database connection pools. In addition to the previously supported Apache Commons-DBCP, the 1.5 release adds transaction support to the native Apache Tomcat and BoneCP connection pools. The two additional pools offer great alternatives to applications under heavy load. JMX instrumentation and statistics have also been added generically to all pools and provide a great level of monitoring and management.

Other major features include deploy-time enhancement for JPA Entities via Apache OpenJPA, support including JPA providers in webapps, ability to mock and inject mocks in unit tests and a powerful new TomEE Maven Plugin which can provision servers, install libraries, deploy webapps and more.

We'd like to thank everyone who gave feedback and contibuted to improve Apache TomEE on a daily basis!



New Features

  • TOMEE-347 Allow switching datasource connection pool
  • TOMEE-331 Optimized scanning via exclusions.list in WEB-INF allows
  • TOMEE-266 Internal EJBs can be secured
  • TOMEE-264 Filter APIs we already provide if they are in a webapp
  • TOMEE-399 Expose Quartz through JMX
  • TOMEE-259 Mojarra integration
  • TOMEE-250 Element <Service> for declaring services generically in the tomee.xml
  • TOMEE-386 Support for META-INF/ file and overriding
  • TOMEE-387 Support for META-INF/ file and overriding
  • TOMEE-280 Deploy-time JPA Enhancement
  • TOMEE-187 New TomEE JAX-RS Distribution
  • TOMEE-377 Configuration of CXF Bus
  • TOMEE-421 JMX management of DataSources
  • OPENEJB-1228 ShrinkWrap Deployment Support
  • OPENEJB-1899 Mockito integration


  • TOMEE-235 ability to provide a custom server.xml using arquillian adapters
  • TOMEE-194 managing pathparam at class level
  • TOMEE-346 providing log4j in a webapp needs to set openejb.skip.log4j=false
  • TOMEE-191 can't use DataSourceRealm with a DataSource defined in tomee.xml
  • TOMEE-348 propagate all cxf endpoint properties to the SOAP endpoint
  • TOMEE-190 Duplicate Libraries in distribution
  • TOMEE-146 Trim unused code
  • TOMEE-241 close webappclasslaoder after undeployment
  • TOMEE-336 ability to skip dbcp pool for @DataSourceDefinition
  • TOMEE-130 Improve openejb webapp console to match current site look and feel
  • TOMEE-230 uses old lib folder
  • TOMEE-332 yank tomee version from arquillian adapter config and use LATEST
  • TOMEE-330 more relevant error message when using tomee < tomee+ and webservice injection are done
  • TOMEE-269 use a maven specific logger when running tomee:run from tomee maven plugin
  • TOMEE-328 Re organise Arquillian sub modules versionning
  • TOMEE-4 Example demonstrating Arquillian Adapter
  • TOMEE-262 since TOMEE-261 is done we can check the needed JtaPlatform for hibernate is in the webapp
  • TOMEE-260 Validate: REST Service has no non-public resources
  • TOMEE-398 Unified Executor configuration options (@Asynchronous, @Timeout)
  • TOMEE-397 META-INF/resources.xml always needs qualified names
  • TOMEE-391 config for retry attemps on timer methods
  • TOMEE-257 replace deployment listener and webdeployementlistener by our brand new observer api
  • TOMEE-251 extract jpa provide integration in a jar to be able to use it from a war
  • TOMEE-252 engine name needs to be Catalina
  • TOMEE-253 updatechecker doesn't handle tomee version properly
  • TOMEE-382 configuration for asynch task pool
  • TOMEE-385 Complete application properties scoping
  • TOMEE-205 Create the skeleton of the new Tomee UI
  • TOMEE-208 add servlets to httpcontext (arquillian adapters)
  • TOMEE-204 Don't fail app deployment if a TLD class cannot be loaded
  • TOMEE-203 Ensure all tomee-* jars and archives use the TomEE version number
  • TOMEE-406 Support Duration syntax in all known time related properties
  • TOMEE-282 logging tomee is downloaded from arquillian adapter
  • TOMEE-402 ScriptLoginModule
  • TOMEE-281 ignore endorsed lib for java 7
  • TOMEE-184 using cxf (and not our repackaged version)
  • TOMEE-183 Optimize Arquillian Adapter by avoiding intermediate jar creation
  • TOMEE-189 EAR and CDI is not well integrated
  • TOMEE-372 don't load webapp enrichment classes directly from system classloader even if available
  • TOMEE-374 Embedded TomEE use same defaults as Embedded OpenEJB
  • TOMEE-41 Overzealous class scanning
  • TOMEE-274 allowing the user to override the folder where retrieved tomee are cache in arquillian adapters (by default m2 repo is not used to avoid to corrupt it)
  • TOMEE-277 better model to be able to filter cdi beans
  • TOMEE-276 allow to define the same interceptor/decorator/alternative in multiple beans.xml
  • TOMEE-270 don't stop deployment during deployment if a noclassdeffound if thrown on a field
  • TOMEE-273 solder @Requires doesn't work
  • TOMEE-171 TomEE automatically directs embedded (@DataSourceDefinition) h2 datasource to hsqldb
  • TOMEE-279 using tomcat default host instead of hardcoded "localhost"
  • TOMEE-278 AnnotatedType can be null so dont put it in a map
  • TOMEE-220 revisit runnable tomee-embedded cli
  • TOMEE-361 skip JSF startup even if our internal faces-config.xml is found (but no more)
  • TOMEE-224 Create Servlet that loads the "JNDI" panel data
  • TOMEE-418 ability to use fast session generation for dev environment in arquillian adapters (remote) + tomee mvn plugin
  • TOMEE-225 Create Servlet that loads the "Saved Objects" panel data
  • TOMEE-368 better handling of myfaces container listener
  • TOMEE-369 be sure to not exclude too much in tempclassloader (in particular with myfaces)
  • TOMEE-366 delete temp file in arquillian tomee adapter even if deployer lookup fail
  • TOMEE-367 create webapp classloader even for embedded deployment
  • TOMEE-427 Shortcurt to debug with tomee maven plugin
  • TOMEE-23 Ignore .DS_Store files when deploying in Tomcat
  • TOMEE-350 allow to customize TempClassLoader force skip/load with multiple packages
  • TOMEE-359 taking into account filtering even for fragments
  • TOMEE-213 close webappclassloader after undeployment and not in its middle
  • TOMEE-219 Make jaxrs services managed by cdi when possible
  • TOMEE-358 activating back MyFacesContainerInitializer and adding StartupServletContextListener by default
  • TOMEE-417 ability to provide jaxrs providers, interceptors... in the webapp
  • TOMEE-414 support to provide slf4j in the application
  • TOMEE-415 use by default openejb classloader to create quartz scheduler
  • OPENEJB-1900 @LocalBean package and friendly scoped methods
  • OPENEJB-1901 @LocalClient doesn't work with EJBContainer
  • OPENEJB-1853 expose basicdatasource writable config through jmx
  • OPENEJB-1791 managing a conf.d folder as under unix for services
  • OPENEJB-1843 support @before @after @beforeclass @afterclass in embedded arquillian adapter (classloader is not correct so "BeanManagerProvider" can't work)
  • OPENEJB-1795 support @Inject for synamic EJB (interface only)
  • OPENEJB-1845 look in web-inf/classes/meta-inf for persistence.xml for embedded arquillian adapter and check classloaderasset get a better root url
  • OPENEJB-1863 no need to create a thread we are waiting to create an entitymanagerfactory
  • OPENEJB-1864 remove openejb-javaagent from openejb-core test since it is not mandatory and buggy (due to openjpa-javaagen) with java 7
  • OPENEJB-1576 Example: CDI Decorators
  • OPENEJB-1860 openejb.descriptors.output logging and functional improvements
  • OPENEJB-1858 be more tolerant on the tx manager type for managedconnection factory
  • OPENEJB-1823 allow to undeploy resources linked to an app with the app undeployment
  • OPENEJB-1420 Classloading issue in OSGI
  • OPENEJB-1840 managing request/session scopes in standalone
  • OPENEJB-1734 Shell to query and invoke EJBs through commands interactively
  • OPENEJB-1117 ServiceManager does not work in OSGi environment
  • OPENEJB-1889 when an EJB implements too many interfaces it fails with the message "TODO"
  • OPENEJB-1887 <ServiceProvider> inheritance to reduce redundant config in service-jar.xml files
  • OPENEJB-1888 add a way to hide log messages which are not relevant for openejb/tomee
  • OPENEJB-1896 Slightly reduce memory footprint of EJBs
  • OPENEJB-1892 embedded logging format is not applied to OpenJPA
  • OPENEJB-1891 get duration time of the query when logging sql
  • OPENEJB-1890 make openejb embedded arquillian adapter working with shrinkwrap maven and libraries which are not on classpath
  • OPENEJB-1761 improve default JUL logging
  • OPENEJB-1763 Allow EjbModule to be returned as a part of in-class configuration in ApplicationComposer (@Module)
  • OPENEJB-1271 Add pofiles to allow JPA provider to be changed
  • OPENEJB-1867 ability to configure the default job scheduler
  • OPENEJB-1277 RemoteInitialContextFactory .close() method to logout
  • OPENEJB-1868 allow to set a ejbtimerservice by ejb
  • OPENEJB-1865 add lib folder to classpath in openejb standalone like in tomee
  • OPENEJB-1866 add openejb-jpa-integration to ear libs
  • OPENEJB-1871 don't use webbeanslogger
  • OPENEJB-1870 allow to provide server event listener in apps
  • OPENEJB-1875 New LoginModule based on ServiceProvider
  • OPENEJB-1874 remove openejb-jsf
  • OPENEJB-1872 refactor a bit the way we hide internal beans (Comp) since now we have the structure to do it
  • OPENEJB-1877 refactor datasourcefactory and jdbc package to split it in subpackages for consistency
  • OPENEJB-1878 ability to create an entitymanager at startup
  • OPENEJB-1881 Multipoint "broadcast" attribute
  • OPENEJB-1883 rewrite ScopeHelper to use ContextsService
  • OPENEJB-1780 Application relative EJB WebService addresses
  • OPENEJB-1850 groovy jpa test
  • OPENEJB-1851 groovy spock sample
  • OPENEJB-1849 adding groovy cdi sample
  • OPENEJB-1841 basic console colors
  • OPENEJB-1897 easy way to mock beans injections
  • OPENEJB-1772 maven plugin to be able to dump info tree and avoid to create it when starting the app
  • OPENEJB-1514 Example: @Schedule Methods
  • OPENEJB-1649 Arquillian Tests
  • OWB-695 Cause missing in AnnotationDB$CrossReferenceException
  • OWB-704 use method filter in javassist proxies instead of "manual" filtering
  • OWB-702 Add serialization unit tests to openwebbeans-web to catch future regressions
  • OWB-701 Support ASM for Bean Proxies


  • TOMEE-12 org.apache.openejb.config.AnnotationDeployer throws InstantiationException on com.sun.jersey.api.core.ApplicationAdapter
  • TOMEE-193 soap webservices are now deployed by default in the webapp context but what if the webservice is not in a webapp?
  • TOMEE-199 tomcat deployer doesnt work well for cdi apps
  • TOMEE-197 When running TomEE embedded in Eclipse jsp files do not hot deploy
  • TOMEE-10 JNDI Browser in the openejb.war does not show @LocalBean views as EJBs
  • TOMEE-198 JAX-RS and JAX-WS does not work when together in a single application
  • TOMEE-345 make EjbTimerServiceImpl serializable
  • TOMEE-141 when using OpenEJBListener with dropinwar approach we should try to fnid the war of the webapp too...
  • TOMEE-249 NPE on DatatypeConverter
  • TOMEE-349 ability to use redeploy from tomcat
  • TOMEE-242 @ManagedBean for rest services
  • TOMEE-240 wrap tomcat realm in tomeerealm to manage request.login even in a single request
  • TOMEE-339 @Context Providers is not supported
  • TOMEE-237 New gui is broken in IE
  • TOMEE-434 when using DeployerEjb the JNDI tree is the DeployerEjb one and not the deployed app one
  • TOMEE-267 Default 'type' ignored in and related elements
  • TOMEE-395 TomEEDataSourceCreator.ContantHashCodeHandler will change the Exception throwed by the original method
  • TOMEE-392 EJB properties overriding from, or
  • TOMEE-394 pojo webservice undeployment doesn't clean eveything -> it prevents redeployment
  • TOMEE-258 pojo webservices doesnt get injections
  • TOMEE-383 pojo @WebService deployment without sei fails (NPE)
  • TOMEE-200 CDI injections in Pojo JAXRS webservices can lead to memory leak
  • TOMEE-380 tomeeshutdownport is not respected by tomee maven plugin
  • TOMEE-388 Use case "Faces Request Generates Non-Faces Response" locks conversation forever (-> BusyConversationException)
  • TOMEE-207 postcontruct is called before injections in pojo rest services
  • TOMEE-389 quartz prevent tomee to shutdown properly
  • TOMEE-403 jaxrs subresource are not working
  • TOMEE-401 don't filter http method (PATCH was not valid in rest for instance)
  • TOMEE-185 JAXB context can't be created from package
  • TOMEE-362 service MBeans are not unregistered
  • TOMEE-360 NPE in BeanManagerImpl scope is null
  • TOMEE-222 LocalBean can't be serializable
  • TOMEE-221 IllegalArgumentException: Class 'java.lang.Object' is not annotated with Path
  • TOMEE-419 JAR/WAR module-name not used
  • TOMEE-422 JAXRS @Context for HttpServletResponse and ServletConfig
  • TOMEE-424 [JAXRS] Custom @Context not supported
  • TOMEE-211 tomee:start command (tomee maven plugin) stay up while tomee is up
  • TOMEE-409 JAXRS @Context for HttpServletRequest and ServletRequest
  • TOMEE-212 calling request.login() and ejbcontext.getCallerPrincipal() in the same request is not consistent
  • TOMEE-407 JavaMail javax.mail.Session resources do not work with authentication
  • TOMEE-218 RESOURCE_LOCAL entitymanager shouldn't be injected
  • TOMEE-217 log4j integration issue
  • TOMEE-216 Changes to InjectionTarget in ProcessInjectionTarget event ignored
  • TOMEE-410 web.xml validation rejects load-on-startup values having extraneous white spaces
  • TOMEE-411 Accept spaces in load-on-startup
  • TOMEE-154 Deployment fails in ear when injections are done between ejbmodule and webmodule (classloading exception because the webapp classloader is known later)
  • OPENEJB-1848 Multipoint Automatic Reconnect fails in some situations
  • OPENEJB-1847 When deploying two ear files in openejb only the first one gets deployed correctly
  • OPENEJB-1844 annotatedtype are not usable from processAnnotatedType if not already processed
  • OPENEJB-1720 NPE at at org.apache.openejb.util.AnnotationFinder
  • OPENEJB-1862 boolean type re not well managed in org.apache.openejb.config.AnnotationDeployer.DiscoverAnnotatedBeans#process
  • OPENEJB-1855 LinkageError on Mac OS with "sun/security/pkcs11/SunPKCS11"
  • OPENEJB-1717 When openejb-osgi bundle is restarted, we get an exception (ServiceManager is already initialized)
  • OPENEJB-1727 couldn't start owb context
  • OPENEJB-958 DOS line ends and category instead of logger
  • OPENEJB-1728 Karaf is blocked
  • OPENEJB-1382 Provide interceptor/thread based context for OWB rather than classloader based context
  • OPENEJB-1698 EntityBean conflict when a persistent property exists called "deleted"
  • OPENEJB-1603 InitialContext instantiation fails with ERROR - CDI Beans module deployment failed
  • OPENEJB-1551 ejb-jar.xml should be optional.
  • OPENEJB-1837 WebBeansLogger uses java.util.logging directly and doesn't obey system property openejb.log.factory
  • OPENEJB-967 NullPointerException during injection into a POJO webservice
  • OPENEJB-1397 After upgrade to 3.1.3 web services fail with exception
  • OPENEJB-1643 @Dispose not called
  • OPENEJB-1438 Wrong jar required for remote client in docs
  • OPENEJB-1893 @LocalBean references did not survive passivation
  • OPENEJB-1595 [BUILD FAILED]Compilation error occurs while building openejb trunk
  • OPENEJB-1126 SAAJ-related test cases no longer work with IBM's SDK
  • OPENEJB-1876 id ignored when ejb-jar contains no child elements
  • OPENEJB-1879 usage of OWBInjector shall be reworked
  • OPENEJB-1882 this can't be use in localbeans constructor
  • OPENEJB-1648 persistence.xml files in WEB-INF/classes/META-INF/ incorrect root url
  • OPENEJB-1884 EJBContainer.createEJBContainer(); doesn't register the WebBeansContext correctly
  • OPENEJB-1886 statsinterceptor should be added before starting the timer if necessary
  • OWB-709 webbeans-tomcat6 must honour WEB-INF/classes/META-INF/beans.xml
  • OWB-694 Misleading exception message "Wrong termination object"
  • OWB-708 PrincipalBean doesnt get found
  • OWB-670 ProcessInjectionTarget event fired a bit late
  • OWB-707 tomcat-sample and tomcat7-sample are just broken.
  • OWB-703 getBeans cache key algorithm must be unique
  • OWB-650 ContextFactory#destroy*Context have to reset the proxy cache
  • OWB-559 Method-Injection for methods with more than one parameter fails with OWBInjector
  • OWB-699 Passivation leads to NPE
  • OWB-698 InjectableBeanManager not serializable
  • OWB-697 Non-Static Loggers leads to NonSerizializableException
  • OWB-696 check for unproxyable API types should get moved to the validateBeans phase

Tasks & Sub-Tasks