Jakarta EE, в миналото известна като Java Platform, Enterprise Edition или Java EE, е изчислителна платформа, използвана най-често за създаването на големи проекти в Java общността. Платформата предоставя API среда за изпълнение, за разработване и управление на бизнес софтуер, включително мрежови и уеб услуги в голям мащаб, които са сигурни и надеждни. Java EE е разширеният вариант на Java Platform Standard Edition (Java SE)[1]. Осигурява API за обектно-релационните планирания, многослойни архитектури и уеб услуги. В платформата се включват главно дизайнерски компоненти, работещи на сървър. Софтуерът за Java EE е написан основно на езика Java. Платформата подчертава конвенцията над конфигурацията[2] и поясненията. XML може да се използва за презаписване на нотациите или да се отклони от началните настройки на платформата.

История на версиите редактиране

Платформата е била позната като Java 2 Platform, Enterprise Edition или J2EE, до момента, в който името е сменено на Java Platform,

Enterprise Edition или Java EE във версия 5. Сегашната версия е наименувана Jakarta EE.

  • J2EE 1.2 (12 декември 1999)
  • J2EE 1.3 (24 септември 2001)
  • J2EE 1.4 (11 ноември 2003)
  • Java EE 5 (11 май 2006)
  • Java EE 6 (10 декември 2009)
  • Java EE 7 (28 май 2013[3], 5 април 2013 според официалния документ)
  • Jakarta EE 8 (10 септември 2019)
  • Jakarta EE 9 (очаквано: 31 август 2020)

Стандарти и спецификации редактиране

Java EE се дефинира чрез нейните спецификации. Java Community Process спецификациите гласят, че разработчиците на софтуер, които допринасят за развитието на Java EE трябва да отговарят на изискванията за съответствие, за да декларират продуктите си.

Java EE включва много на брой API спецификации – RMI, e-mail, JMS, web services, XML, и други, и дефинира критерии за координирането им. Java EE също поддържа някои спецификации, присъщи единствено за компонентите на Java EE. Те включват Enterprise JavaBeans, connectors, servlets, JavaServer Pages и други технологии за Web услуги. Това позволява на разработчиците на софтуер да създават корпоративни приложения(enterprise applications), които са преносими и мащабируеми и се интегрират с утвърдени технологии. Сървърът за апликации на Java EE предлага транзакции, сигурност, едновременност и управление на компонентите, които обслужва, за да позволи на разработчиците да се концентрират върху бизнес логиката на компонентите.

Основни интерфейси (APIs) редактиране

Java EE APIs включва няколко технологии, които разширяват функционалността на базата на Java SE APIs.

  • Java EE 7 Platform Packages
  • Java EE 6 Platform Packages
  • Java EE 5 Platform Packages

javax.servlet.* редактиране

Спецификацията на servlet определя набор от интерфейси, които обслужват главно HTTP заявки. Тя включва JavaServer Pages (JSP) спецификация[4].

javax.websocket.* редактиране

Интерфейсът за спецификация WebSocket определя набор от интерфейси, които обслужват WebSocket връзки[5].

javax.faces.* редактиране

Този пакет дефинира основата на JavaServer Faces (JSF) API. Java Server Faces е технология за изграждане на потребителски интерфейси от компоненти[6].

javax.faces.component.* редактиране

Този пакет определя компонентната част на Java Server Faces API. Тъй като Java Server Faces е предимно компонентно ориентирана технология, това е един от основните ѝ пакети. Прегледът на пакет съдържа UML диаграма на йерархията на компонентите[7].

javax.el.* редактиране

Този пакет определя класовете и интерфейсите за Java EE Expression Language. Expression Language (EL) е език, първоначално проектиран да отговаря на специфичните нужди на разработчиците на уеб приложения. Той се използва специално в Java Server Faces да се свързват компоненти c бийнове и да именуваме бийнове в CDI, но може да се използва по време на цялата платформа[8].

javax.enterprise.inject.* редактиране

Тези пакети определят анотациите за вкарване на Contexts and Dependency Injection (CDI) APIs[9].

javax.enterprise.context.* редактиране

Тези пакети определят контекстните анотации и интерфейси за Contexts and Dependency Injection (CDI) API[10].

javax.ejb.* редактиране

Спецификацията Enterprise JavaBean (EJB) определя набор от леки APIs, поддържани от обектния контейнер (EJB container) за да се изпълняват финансови операции (с помощта на JTA), отдалечено извикване на процедури (използвайки RMI и RMI-IIOP), контрол за едновременност, вмъкване на зависимости (dependency injection) и контрол на достъп за бизнес обекти. Този пакет съдържа класовете Enterprise JavaBeans и интерфейсите, които определят договорите между предприятието и неговите клиенти и между предприятието и контейнер EJB[11].

javax.validation.* редактиране

Този пакет съдържа анотациите и интерфейси за поддръжка на декларативно валидиране, предлагани от Bean Validation API. Bean Validation осигурява единен начин за осигуряване на ограничения върху Bean класове (например JPA model classes), които могат да се прилагат с Cross-layer оптимизация. В Java EE, JPA спазва Bean Validation ограниченията в слоя Persistence, докато JSF го прави в слоя View[12].

javax.persistence.* редактиране

Този пакет съдържа договорите между persistence доставчик и управляваните класове и клиентите на Java Persistence (JPA) API[13].

javax.transaction.* редактиране

Този пакет предлага Java Transaction API (JTA), който съдържа интерфейсите и анотациите, които си взаимодействат с поддръжката за финасови операции, предлагана от Java EE. Въпреки че това API се абстрахира от детайлите на наистина ниско ниво, интерфейсите, също се считат донякъде на ниско ниво и се предполага, че обикновения Java EE разработчик на приложения или разчита на прозрачна обработка на финансови операции от по-високо ниво EJB абстракции, или използва анотациите, предоставени от това API в комбинация с CDI, управлявани beans класове[14].

javax.security.auth.message.* редактиране

Този пакет предлага ядрото на Java Authentication SPI (JASPIC), който съдържа интерфейсите и класовете за изграждане на модули за заверка за сигурни Java EE приложения. Authentication модули са отговорни за взаимодействието с потребителя (например пренасочване към форма или към доставчик на OpenID), проверка на входа на потребителя (например чрез LDAP търсене, заявка към база данни) и извличане на набор от групи / роли, в които заверения потребител участва или има (например като отново извършим LDAP търсене или заявка към база данни)[15].

javax.enterprise.concurrent.* редактиране

Този пакет предлага интерфейси за взаимодействие директно с управляваните по подразбиране нишки на Java EE платформата. Обслужване от изпълнител от по-високо ниво работещ на същата нишка, може да се използва по избор. Същите интерфейси могат да бъдат използвани за потребителски дефинирани управлявани нишки, но това зависи от специфичната конфигурация на продавача и не се покрива от спецификацията на Java EE[16].

javax.jms.* редактиране

Този пакет определя Java Message Service (JMS) API. За програмите на Java API JMS осигурява общ начин за създаване, изпращане, получаване и четене на съобщения от системата за съобщения на предприятието[17].

javax.batch.api.* редактиране

Този пакет определя входното API за Java EE Batch приложения. Batch Applications API предвижда средства за изпълнение на продължително изпълняващи се фонови задачи, които вероятно са свързани с голям обем от данни, и които може да се наложи да бъдат периодично изпълнявани[18].

javax.resource.* редактиране

Този пакет дефинира Java EE Connector Architecture (JCA) API. Java EE Connector Architecture (JCA) е Java-базирано технологично решение за свързване на сървъри за приложения и ентърпрайз информационни системи (EIS), като част от корпоративни решения за интегриране на приложения (EAI). Това е API за ниско равнище, насочен към доставчици, с които разработчиците обикновено нямат пряк контакт[19]

Уеб профили редактиране

В опит да се ограничи отпечатъка на уеб контейнерите и във физическо, и в концептуално отношение, уеб профилът е създаден като подразделение на спецификациите на Java EE. Уеб профилът на Java EE съдържа следните спецификации:

Спецификации Java EE 6[20] Java EE 7[21]
Сървлет (Servlet) 3.0 3.1
JavaServer Страници(JSP) 2.2 2.3
Обединен език за изразяване(EL) 2.2 3.0
Поддръжка на отстраняване на грешки за други езици(JSR-45) 1.0 1.0
Стандартен библиотечен таг за JavaServer Страници(JSTL) 1.2 1.2
JavaServer Faces(JSF) 2.0 2.2
Java API за RESTful Уеб Услуги(JAX-RS) 1.1 2.0
Java API за WebSocket(Websocket) няма данни 1.0
Java API за JSON обработка(JSON-P) няма данни 1.0
Общи анотации за Java платформата(JSR-250) 1.1 1.2
Enterprise JavaBeans(EJB) 3.1 Lite 3.2 Lite
Java транзакционно API(JTA) 1.1 1.2
Java Persistence API(JPA) 2.0 2.1
Bean валидиране 1.0 1.1
Управляеми Beans 1.0 1.0
Прехващачи(Interceptors) 1.1 1.2
Контекст и зависимо вмъкване за Java EE платформа 1.0 1.1
Зависимо вмъкване за Java 1.0

Сертифицирани сървъри на приложенията редактиране

Приложения за сървъри Java EE 7

сертифициран

Java EE 7 сертифициран

Уеб

Java EE 6

сертифициран

Java EE 6

Уеб сертифициран

Java EE 5

сертифициран

J2EE 1.4

сертифициран

Лиценз
GlassFish сървър с открит код Да v4.0[22] Да v4.0[23] Да v3.x и

нагоре[24]

Да v3.x Да v2.1.x[25] безплатен софтуер
Oracle GlassFish Сървър Да v3 Да v9.0 Да v8.2 патентован софтуер
Oracle WebLogic Сървър Да v12.2.1[26][27][28] Да v12c Да v10.3.5.0 Да v9.0 патентован софтуер
WildFly Да v8.0.0 Final[29][30] Да v8.0.0 Final Да v7.1[31] Да v7.0 и v6.0[32] Да v5.1[33][34] Да v4.x безплатен софтуер
JBOSS enterprise

платформа за приложения

Да v6.0[35] Да v5 безплатен софтуер
IBM WebSphere сървър на приложения Да v8[36] Да v7 Да патентован софтуер
IBM WebSphere Application Server Liberty Да v8.5.5.6[37] Да v8.5.5[38] патентован софтуер
IBM WebSphere Application Server Свободна версия Да v3 Да v2.1 патентован софтуер
Apache Geronimo Да v3.0-бета Да v2.0 Да v1.0 безплатен софтуер
TmaxSoft JEUS Да v8.0[39][40] Да v7[41][42] Да v6.0 Да v5 патентован софтуер
Hitachi Сървърно приложение Да v10.0[43][44] Да v9[45] патентован софтуер
Fujitsu Interstage сървър на приложения Да v1 Azure[46] Да патентован софтуер
NEC webOTX Да[47] Да патентован софтуер
Caucho Resin Сървър Да v4.0[48] Да патентован софтуер
Apache TomEE[49][50] Да безплатен софтуер
OW2 Silpas Да v6.0[51] безплатен софтуер
OW2 JOnAS Да v5.3[52] Да Да безплатен софтуер
SAP NetWeaver Да v2.x[53] Да Да патентован софтуер
Oracle containers for Java EE Да патентован софтуер
Oracle iPlanet Уеб сървър Да патентован софтуер
Oracle сървър на приложения Да патентован софтуер
Pramati сървър Да v5.0 патентован софтуер
Trifork T4 Да патентован софтуер
Sybase[54] сървър на приложения Да патентован софтуер

Примерен код редактиране

Примерният код по-долу показва как различни технологии в Java EE 7 се използват заедно, за да се създаде уеб форма за редактиране на даден потребител.

В Java EE (web), UI може да бъде изграден с помощта на Servlet, JavaServer Pages (JSP), или JavaServer Faces (JSF) с Facelets. Примерът по-долу използва JSF и Facelets. Не е ясно показано, че входните компонентите използват Java EE Bean Validation API, за да валидира ограничения.

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:f="http://xmlns.jcp.org/jsf/core">

    <f:metadata>
        <f:viewParam name="user_id" value="#{userEdit.user}" converter="#{userConvertor}" />
    </f:metadata>

    <h:body>

        <h:messages />

        <h:form>
            <h:panelGrid columns="2">
                <h:outputLabel for="firstName" value="First name" />
                <h:inputText id="firstName" value="#{userEdit.user.firstName}" label="First name" />

                <h:outputLabel for="lastName" value="Last name" />
                <h:inputText id="lastName" value="#{userEdit.user.lastName}" label="Last name"  />

                <h:commandButton action="#{userEdit.saveUser}" value="Save" />
            </h:panelGrid>
        </h:form>

    </h:body>
</html>

Backing Bean клас редактиране

За да спомогне за визуализацията, Java EE използва понятие, наречено „Backing Bean“. Примерът по-долу използва contexts and Dependency Injection (CDI) и Enterprise JavaBean (EJB).

@Named
@ViewScoped
public class UserEdit {

    private User user;

    @Inject
    private UserDAO userDAO;

    public String saveUser() {
        userDAO.save(this.user);
        addFlashMessage("User " + this.user.getId() + " saved");

        return "users.xhtml?faces-redirect=true";
    }

    public void setUser(User user) {
        this.user = user;
    }

    public User getUser() {
        return user;
    }
}

DAO клас редактиране

В Java EE, Enterprise JavaBean (EJB) технологията е предназначена за изпълнение на бизнес-логика. За действителната персистентност, може да се използва JDBC или Java Persistence API (JPA). Примерът по-долу използва EJB и JPA. Не е ясно показано, че JTA се използва под обвивките от EJB за да контролира поведението при финансови операции.

@Stateless
public class UserDAO {

    @PersistenceContext
    private EntityManager entityManager;

    public void save(User user) {
        entityManager.persist(user);
    }

    public void update(User user) {
        entityManager.merge(user);
    }

    public List<User> getAll() {
        return entityManager.createNamedQuery("User.getAll", User.class)
                           .getResultList();
    }

}

Entity клас редактиране

За дефиниране на Entity / Model класове, Java EE осигурява Java Persistence (JPA) API. За изразяване на ограничения на тези субекти, Java EE предоставя Bean Validation API. Примерът по-долу използва и двете технологии.

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = IDENTITY)
    private Integer id;

    @Size(min = 2, message="First name too short")
    private String firstName;

    @Size(min = 2, message="Last name too short")
    private String lastName;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

}

Източници редактиране

  1. „Differences between Java EE and Java SE – Your First Cup: An Introduction to the Java EE Platform“. Docs.oracle.com. 1 април 2012. Посетен на 18 юли 2012
  2. jdevelopment.nl, архив на оригинала от 12 май 2016, https://web.archive.org/web/20160512162811/http://jdevelopment.nl/minimal-3tier-java-ee-app-xml-config/, посетен на 27 април 2016 
  3. jcp.org
  4. javax.servlet.*
  5. javax.websocket.*
  6. javax.faces.*
  7. javax.faces.component.*
  8. javax.el.*
  9. javax.enterprise.inject.*
  10. javax.enterprise.context.*
  11. javax.ejb.*
  12. javax.validation.*
  13. javax.persistence.*
  14. javax.transaction.*
  15. javax.security.auth.message.*
  16. javax.enterprise.concurrent.*
  17. javax.jms.*
  18. javax.batch.api.*
  19. javax.resource.*
  20. jcp.org
  21. jcp.org
  22. www.oracle.com
  23. www.oracle.com
  24. glassfish.dev.java.net, архив на оригинала от 20 декември 2012, https://archive.today/20121220022558/https://glassfish.dev.java.net/public/comparing_v2_and_v3.html, посетен на 27 април 2016 
  25. glassfish.dev.java.net, архив на оригинала от 20 декември 2012, https://archive.today/20121220022558/https://glassfish.dev.java.net/public/comparing_v2_and_v3.html, посетен на 27 април 2016 
  26. www.oracle.com
  27. blogs.oracle.com
  28. docs.oracle.com
  29. lists.jboss.org
  30. issues.jboss.org
  31. planet.jboss.org
  32. jbossas.jboss.org
  33. JBoss AS is now EE5 certified, архив на оригинала от 20 септември 2008, https://web.archive.org/web/20080920223001/http://sacha.labourey.com/2008/09/15/jboss-as-is-now-ee5-certified/, посетен на 27 април 2016 
  34. Java EE Compatibility
  35. Business Wire (2012-06-20). „Red Hat Launches JBoss Enterprise Application Platform 6 to Help Enterprises Move Application Development and Deployment to the Cloud“. Business Wire. Посетен на 18 юли 2012.
  36. „What's new in WebSphere Application Server V8“ Ibm.com. Посетен на 18 юли 2012.
  37. developer.ibm.com
  38. www.oracle.com
  39. blogs.oracle.com
  40. www.oracle.com
  41. „Java EE6 Web Application Server, WAS Software“ Архив на оригинала от 2012-07-02 в Wayback Machine.. Us.tmaxsoft.com. Посетен на 18 юли 2012.
  42. „Tested Configurations, Java EE 6 – TMAX JEUS 7“. Oracle.com. 7 септември 2010. Посетен на 18 юли 2012.
  43. blogs.oracle.com
  44. oracle.com
  45. „Java EE 6 – Tested Configurations, Java EE 6 – Hitachi uCosminexus Application Server v9.0“. Oracle.com.
  46. „Tested Configurations, Java EE6 – Fujitsu Interstage“. Oracle.com. 7 септември 2010. Посетен на 18 юли 2012.
  47. www.oracle.com
  48. www.caucho.com
  49. „MarketWatch.com“. MarketWatch.com. Посетен на 18 юли 2012.
  50. „Apache TomEE“. Openejb.apache.org. Посетен на 18 юли 2012.
  51. „Please Welcome Siwpas as Java EE Certified Option!“. Oracle.com. Посетен на 7 декември 2015.
  52. jonas.ow2.org, архив на оригинала от 15 октомври 2013, https://web.archive.org/web/20131015132408/http://jonas.ow2.org/xwiki/bin/view/Blog/JOnAS+530+RC1+released, посетен на 27 април 2016 
  53. blogs.oracle.com
  54. EAServer

Външни препратки редактиране

Вижте също редактиране

    Тази страница частично или изцяло представлява превод на страницата Java EE в Уикипедия на английски. Оригиналният текст, както и този превод, са защитени от Лиценза „Криейтив Комънс – Признание – Споделяне на споделеното“, а за съдържание, създадено преди юни 2009 година – от Лиценза за свободна документация на ГНУ. Прегледайте историята на редакциите на оригиналната страница, както и на преводната страница, за да видите списъка на съавторите. ​

ВАЖНО: Този шаблон се отнася единствено до авторските права върху съдържанието на статията. Добавянето му не отменя изискването да се посочват конкретни източници на твърденията, които да бъдат благонадеждни.​