> For the complete documentation index, see [llms.txt](https://www.pranaypourkar.co.in/the-programmers-guide/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://www.pranaypourkar.co.in/the-programmers-guide/java/installation-and-setup/java-platform-editions/java-ee.md).

# Java EE

## About

Java EE (Java Platform, Enterprise Edition) is a set of specifications and APIs that extend Java SE to provide a robust, scalable, and secure platform for developing large-scale, distributed, and multi-tier enterprise applications.

Originally developed by Sun Microsystems and later maintained by Oracle, Java EE was transferred to the Eclipse Foundation in 2017 and is now known as Jakarta EE (from version 9 onward).

* **Purpose**: To simplify and standardize the development of enterprise-grade applications.
* **Includes**: APIs for web services, messaging, persistence, transactions, security, and more.
* **Successor**: Jakarta EE (same APIs but under the `jakarta.*` namespace from EE 9)
* **Platform**: Built on top of Java SE

## Version Timeline

<table data-header-hidden><thead><tr><th width="153.62109375"></th><th width="137.296875"></th><th></th></tr></thead><tbody><tr><td>Java EE Version</td><td>Release Year</td><td>Key Features</td></tr><tr><td>J2EE 1.2</td><td>1999</td><td>EJB 1.1, Servlet 2.2, JSP 1.1</td></tr><tr><td>J2EE 1.3</td><td>2001</td><td>Connector Architecture, Enhanced EJB</td></tr><tr><td>J2EE 1.4</td><td>2003</td><td>Web Services, JAX-RPC</td></tr><tr><td>Java EE 5</td><td>2006</td><td>Annotations, JPA, EJB 3.0</td></tr><tr><td>Java EE 6</td><td>2009</td><td>CDI, Servlet 3.0, JAX-RS</td></tr><tr><td>Java EE 7</td><td>2013</td><td>WebSocket, JSON-P, Batch API</td></tr><tr><td>Java EE 8</td><td>2017</td><td>JSON-B, Security improvements, JAX-RS 2.1</td></tr></tbody></table>

## Architecture

* **Presentation Tier**: Servlets, JSP, JSF
* **Business Logic Tier**: Enterprise JavaBeans (EJB), CDI
* **Persistence Tier**: JPA (Java Persistence API)
* **Integration Tier**: JMS (Java Message Service), JCA (Java Connector Architecture)
* **Web Services Tier**: JAX-RS (REST), JAX-WS (SOAP)

## Core APIs and Specifications

#### Web Layer

* **Servlet API**: HTTP request/response handling
* **JavaServer Pages (JSP)**: Template-based HTML rendering
* **JavaServer Faces (JSF)**: Component-based UI framework
* **Expression Language (EL)**: Used in JSP/JSF to bind data

#### Business Logic

* **Enterprise JavaBeans (EJB)**: Declarative transactions, security, remote invocation
* **Context and Dependency Injection (CDI)**: Type-safe dependency injection

#### Persistence and Data Access

* **Java Persistence API (JPA)**: ORM-based database interaction
* **Java Transaction API (JTA)**: Transaction management

#### Messaging and Integration

* **Java Message Service (JMS)**: Asynchronous messaging (queues, topics)
* **JavaMail**: Email handling
* **Java Connector Architecture (JCA)**: Connectors to enterprise information systems

#### Web Services

* **JAX-RS**: RESTful web services
* **JAX-WS**: SOAP web services

#### Other APIs

* **Bean Validation (JSR 303)**: `javax.validation` (integrates with JPA and CDI)
* **Batch API (JSR 352)**: Large-scale batch jobs
* **Concurrency Utilities**: Managed executors, context propagation
* **Security API (JASPIC, JAAS)**: Pluggable authentication mechanisms
* **JSON Processing (JSON-P)** and **JSON Binding (JSON-B)**

## Deployment Model

* **WAR (Web Archive)**: Contains web components (Servlets, JSP, JSF)
* **EAR (Enterprise Archive)**: Contains full enterprise apps (WAR + EJB JARs)
* **JAR (Java Archive)**: Used for reusable modules

## Application Servers

Java EE applications are deployed on fully compliant Java EE Application Servers. Examples:

* **GlassFish** (Reference Implementation)
* **WildFly / JBoss**
* **WebLogic (Oracle)**
* **WebSphere (IBM)**
* **Payara** (fork of GlassFish)
* **Apache TomEE**

## Development Tools and Ecosystem

* **IDEs**: IntelliJ IDEA, Eclipse (with Enterprise plugins), NetBeans
* **Build Tools**: Maven, Gradle, Ant
* **Testing**:
  * Arquillian (integration testing)
  * JUnit/TestNG (unit testing)
  * Mockito/EasyMock (mocking frameworks)

## Jakarta EE Transition

* **Reason**: Oracle donated Java EE to Eclipse Foundation
* **Namespace Change**: From `javax.*` to `jakarta.*`
* **Jakarta EE 9**: Big-bang rename (only breaking change is package rename)
* **Jakarta EE 10+**: Continued enhancements (modularization, native support, cloud focus)

## Benefits

* Standardization
* Vendor neutrality
* Simplified enterprise development
* Built-in dependency injection, transactions, and messaging
* Portable across compliant app servers

## Real-World Usage

* Banking and Financial Applications
* Government and Public Sector
* Telecom and E-commerce
* Legacy enterprise apps still run on Java EE 7/8

## Relationship to Other Editions

* **Java SE**: Foundation platform; Java EE runs on top of it
* **Jakarta EE**: New name and namespace since EE 9
* **MicroProfile**: Cloud-native enhancements for Java EE (now merged into Jakarta ecosystem)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://www.pranaypourkar.co.in/the-programmers-guide/java/installation-and-setup/java-platform-editions/java-ee.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
