= Apache TomEE 1.7.3 released, Dec 9th 2015
:jbake-type: page
:jbake-status: published

The Apache TomEE community is pleased to announce the release of http://tomee.apache.org/downloads.html[Apache TomEE 1.7.3], which is based on http://tomcat.apache.org/tomcat-7.0-doc/index.html[Apache Tomcat 7.0.65], including numerous fixes and updates.
We know this has been a long time coming, so we thank you for your patience and support.

Please note that the TomEE 1.7.3 drop in WAR file will not work on Apache Tomcat 8.
If you are interested in a Tomcat 8.x version then please feel free to check out and xref:contribute.adoc[contribute to the developer branch] - We are always interested in any help from the community that we can get.

The Apache TomEE 1.7.3 release files can be downloaded from here:

xref:download-ng.adoc[http://tomee.apache.org/downloads.html]

*** Update Maven POM Files

Simply update your existing Maven JavaEE-API, OpenEJB and or TomEE pom.xml entries to point to the latest versions:

....
<dependency>
	<groupId>org.apache.openejb</groupId>
	<artifactId>javaee-api</artifactId>
	<version>6.0-6</version>
	<scope>provided</scope>
</dependency>

<dependency>
	<groupId>org.apache.openejb</groupId>
	<artifactId>openejb-core</artifactId>
	<version>4.7.3</version>
</dependency>

<dependency>
	<groupId>org.apache.openejb</groupId>
	<artifactId>tomee</artifactId>
	<version>1.7.3</version>
</dependency>
....

A complete xref:tomee-1.7.3-release-notes.adoc[Changelog] can be viewed here:

xref:tomee-1.7.3-release-notes.adoc[tomee-1.7.3-release-notes.html]

Please feel free to jump in feet first and xref:docs.adoc[get started with TomEE].
You will nearly always find someone to help you on one of our xref:support.adoc[support channels].

*** Java EE7 and Beyond

From this point on the TomEE community will be focusing most of it's efforts on TomEE 7.0.0, which will be the first TomEE Java EE 7 driven version running on Apache Tomcat 8.x.
It is more than likely that support for Java SE 6 will be dropped so that Java SE 7 features can finally be leveraged during the development process.
We will of course continue to maintain the 1.7.x branch for the foreseeable future.
