Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
# Jakarta EE: Эволюция Java Enterprise Edition
Jakarta EE — это переименование и эволюция Java EE. Это история о том, как Oracle отдал стандарт сообществу.
История
1998: Enterprise JavaBeans (EJB) создали
1999: Java 2 Platform, Enterprise Edition (J2EE)
2006: Java EE 5 — упрощение, аннотации вместо XML
2009: Java EE 6 — CDI, faces, первый легкий стандарт
2013: Java EE 7 — веб-сокеты, JSON
2017: Java EE 8 — последняя версия от Oracle (javax пакеты)
2018: Oracle передал Java EE фонду Eclipse Foundation
2019: Eclipse Foundation переименовала в JAKARTA EE 8
Переименовал все javax.* в jakarta.*
2021: Jakarta EE 9 и выше (новая эра)
2024: Jakarta EE 10, 11 (активное развитие)
Главное изменение: javax → jakarta
// Java EE 8 (Oracle эпоха)
import javax.servlet.http.HttpServlet;
import javax.inject.Inject;
import javax.persistence.Entity;
import javax.xml.bind.annotation.XmlElement;
public class OldStyleServlet extends HttpServlet {
@Inject
private UserService userService;
}
// Jakarta EE 9+ (Eclipse эпоха)
import jakarta.servlet.http.HttpServlet;
import jakarta.inject.Inject;
import jakarta.persistence.Entity;
import jakarta.xml.bind.annotation.XmlElement;
public class NewStyleServlet extends HttpServlet {
@Inject
private UserService userService;
}
Важно: Это не только переименование! Это привело к новой скорости разработки.
Состав Jakarta EE
Core Components
WebLayer:
├─ Jakarta Servlet (веб приложения)
├─ Jakarta JSP (шаблоны, deprecated в пользу JSF)
├─ Jakarta EL (Expression Language)
└─ Jakarta REST (REST API, бывший JAX-RS)
DataAccessLayer:
├─ Jakarta Persistence (JPA, ORM)
├─ Jakarta Transactions (транзакции)
└─ Jakarta Data (новый стандарт для работы с БД)
Messaging:
├─ Jakarta Messaging (JMS, асинхронные сообщения)
└─ Jakarta WebSocket (двусторонняя коммуникация)
DependencyInjection:
├─ Jakarta Contexts and Dependency Injection (CDI)
└─ Jakarta Interceptors
Enterprise:
├─ Jakarta Enterprise Beans (EJB, контейнер управления)
├─ Jakarta Annotations (стандартные аннотации)
└─ Jakarta XML Web Services (веб сервисы, SOAP)
Опциональные компоненты
├─ Jakarta Batch (batch processing)
├─ Jakarta Connectors (интеграция с legacy системами)
├─ Jakarta Mail (отправка писем)
├─ Jakarta Validation (валидация данных)
├─ Jakarta Security (аутентификация/авторизация)
└─ Jakarta JSON-P & JSON-B (работа с JSON)
Версии и совместимость
Jakarta EE версия | Дата | Java version | Spring Boot
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Java EE 8 | 2017 | Java 8 | 2.x
Jakarta EE 8 | 2019 | Java 8 | 2.3-2.7
Jakarta EE 9 | 2021 | Java 11 | 3.0-3.1
Jakarta EE 9.1 | 2021 | Java 11 | 3.0-3.2
Jakarta EE 10 | 2022 | Java 17 | 3.2+
Jakarta EE 11 | 2024 | Java21+ | 3.2+
Важно: Spring Boot 3.0+ использует jakarta, а не javax!
Практические примеры
Пример 1: REST API (Jakarta REST)
import jakarta.ws.rs.*;
import jakarta.ws.rs.core.MediaType;
import jakarta.inject.Inject;
@Path("/api/users")
@Produces(MediaType.APPLICATION_JSON)
public class UserResource {
@Inject
private UserService userService;
@GET
@Path("{id}")
public User getUser(@PathParam("id") Long id) {
return userService.findById(id);
}
@POST
@Consumes(MediaType.APPLICATION_JSON)
public User createUser(UserDto dto) {
return userService.create(dto);
}
}
// В Spring (более populярно)
@RestController
@RequestMapping("/api/users")
public class UserController { ... }
Пример 2: JPA Entity
import jakarta.persistence.*;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Email;
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
private String name;
@Email
private String email;
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private List<Order> orders = new ArrayList<>();
}
Пример 3: CDI (Contexts and Dependency Injection)
import jakarta.inject.Inject;
import jakarta.inject.Singleton;
import jakarta.enterprise.context.RequestScoped;
// Сервис
@Singleton // Одна инстанция на приложение
public class UserService {
@Inject
private UserRepository repository;
public User findById(Long id) {
return repository.findById(id).orElse(null);
}
}
// Контроллер
@RequestScoped // Новая инстанция на каждый request
public class UserController {
@Inject
private UserService userService;
public void handleRequest(Long userId) {
User user = userService.findById(userId);
}
}
// Custom scope
@WebListener
public class AppLifecycle implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("App started with Jakarta EE");
}
}
Пример 4: Transactions
import jakarta.transaction.Transactional;
import jakarta.persistence.PersistenceContext;
import jakarta.persistence.EntityManager;
@Service
public class TransferService {
@PersistenceContext
private EntityManager em;
@Transactional
public void transfer(Long fromId, Long toId, BigDecimal amount) {
Account from = em.find(Account.class, fromId);
Account to = em.find(Account.class, toId);
from.withdraw(amount);
to.deposit(amount);
// Автоматически коммитится
}
}
Jakarta EE vs Spring Boot
Когда выбрать Jakarta EE
// Правительственные контракты требуют стандартов
// Legacy системы на JBoss, WebLogic, Glassfish
// Большие enterprise приложения со множеством компонентов
// Нужна полная гибкость в выборе сервера приложений
// Типичный стек:
// WildFly / Payara / GlassFish (application server)
// Jakarta EE (стандарты)
// Jakarta Faces (UI фреймворк, есть PrimeFaces)
Когда выбрать Spring Boot
// Большинство нового кода в 2024 году
// Микросервисы
// Cloud-native приложения (Kubernetes)
// Быстрая разработка
// Лучше документация и сообщество
// Типичный стек:
// Spring Boot (all-in-one)
// Spring Data (ORM)
// Spring Security (auth)
// Spring Cloud (микросервисы)
Миграция с Java EE на Jakarta EE
Автоматическая миграция
# IntelliJ IDEA
# Refactor → Run Inspections → Search for javax usage
# Replace all javax.* with jakarta.*
# Maven
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<!-- Замени на: -->
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>6.0.0</version>
</dependency>
Пример миграции
// До (Java EE 8)
import javax.servlet.*;
import javax.persistence.*;
import javax.inject.*;
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
@PersistenceContext
private EntityManager em;
@Inject
private MyService service;
}
// После (Jakarta EE 10+)
import jakarta.servlet.*;
import jakarta.persistence.*;
import jakarta.inject.*;
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
@PersistenceContext
private EntityManager em;
@Inject
private MyService service;
}
Jakarta EE в 2024 году
Текущая активность
Jakarta EE 11 (2024)
├─ Java 21+ LTS
├─ Virtual Threads support
├─ Jakarta Data (новый ORM standard)
├─ Improved async processing
└─ Better cloud-native support
Основные фокусы:
✓ Cloud-native (контейнеры, kubernetes)
✓ Performance (GraalVM, native image)
✓ Modern Java features (records, sealed classes)
✓ Async/reactive programming
Популярные Jakarta EE серверы приложений
1. WildFly (Red Hat) — лучший для Jakarta EE
2. Payara (коммерческий Glassfish)
3. GlassFish (Oracle)
4. TomEE (Apache, lightweight)
5. OpenLiberty (IBM)
Spring Boot adoption of Jakarta
// Spring Boot 2.x (javax)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.7.0</version>
</dependency>
// import javax.servlet.*;
// Spring Boot 3.0+ (jakarta)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>3.0.0</version>
</dependency>
// import jakarta.servlet.*;
Вывод
Jakarta EE — это:
- Переименование javax → jakarta
- Перемещение стандартов в Eclipse Foundation
- Новая скорость развития
- Ориентация на cloud-native и modern Java
Важно в 2024:
- Если разрабатываешь новое — вероятнее Spring Boot
- Если поддерживаешь enterprise систему — Jakarta EE
- Spring Boot 3.0+ уже использует Jakarta под капотом
- Миграция javax → jakarta простая (найти и заменить)
Будущее: Jakarta EE продолжает развиваться и становиться более современным, но Spring Boot остаётся de facto стандартом в индустрии.