← Назад к вопросам

Что такое Jakarta EE?

1.3 Junior🔥 121 комментариев
#Основы Java

Комментарии (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 — это:

  1. Переименование javax → jakarta
  2. Перемещение стандартов в Eclipse Foundation
  3. Новая скорость развития
  4. Ориентация на cloud-native и modern Java

Важно в 2024:

  • Если разрабатываешь новое — вероятнее Spring Boot
  • Если поддерживаешь enterprise систему — Jakarta EE
  • Spring Boot 3.0+ уже использует Jakarta под капотом
  • Миграция javax → jakarta простая (найти и заменить)

Будущее: Jakarta EE продолжает развиваться и становиться более современным, но Spring Boot остаётся de facto стандартом в индустрии.

Что такое Jakarta EE? | PrepBro