Java EE

от Уикипедия, свободната енциклопедия
Направо към: навигация, търсене

Java Platform, Enterprise Edition или Java EE e изчислителна платформа, използвана най-често за създаването на големи проекти в 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.Сегашната версия е наименувана Java EE 7.

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 според официалния документ)

Java EE 8 (е очаквана през първата половина от 2017[4])

Стандарти и спецификации[редактиране | редактиране на кода]

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) спецификация[5].

javax.websocket.*[редактиране | редактиране на кода]

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

javax.faces.*[редактиране | редактиране на кода]

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

javax.faces.component.*[редактиране | редактиране на кода]

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

javax.el.*[редактиране | редактиране на кода]

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

javax.enterprise.inject.*[редактиране | редактиране на кода]

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

javax.enterprise.context.*[редактиране | редактиране на кода]

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

javax.ejb.*[редактиране | редактиране на кода]

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

javax.validation.*[редактиране | редактиране на кода]

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

javax.persistence.*[редактиране | редактиране на кода]

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

javax.transaction.*[редактиране | редактиране на кода]

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

javax.security.auth.message.*[редактиране | редактиране на кода]

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

javax.enterprise.concurrent.*[редактиране | редактиране на кода]

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

javax.jms.*[редактиране | редактиране на кода]

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

javax.batch.api.*[редактиране | редактиране на кода]

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

javax.resource.*[редактиране | редактиране на кода]

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

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

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

Спецификации Java EE 6[21] Java EE 7[22]
Сървлет (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[23] Да v4.0[24] Да v3.x и

нагоре[25]

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

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

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

Примерен код[редактиране | редактиране на кода]

Примерният код по-долу показва как различни технологии в 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. 2012-04-01. Retrieved 2012-07-18
  2. http://jdevelopment.nl/minimal-3tier-java-ee-app-xml-config/
  3. https://jcp.org/en/jsr/detail?id=342
  4. https://blogs.oracle.com/theaquarium/entry/java_ee_8_roadmap_update
  5. javax.servlet.*
  6. javax.websocket.*
  7. javax.faces.*
  8. javax.faces.component.*
  9. javax.el.*
  10. javax.enterprise.inject.*
  11. javax.enterprise.context.*
  12. javax.ejb.*
  13. javax.validation.*
  14. javax.persistence.*
  15. javax.transaction.*
  16. javax.security.auth.message.*
  17. javax.enterprise.concurrent.*
  18. javax.jms.*
  19. javax.batch.api.*
  20. javax.resource.*
  21. https://jcp.org/en/jsr/detail?id=316
  22. https://jcp.org/en/jsr/detail?id=342
  23. http://www.oracle.com/technetwork/java/javaee/overview/compatibility-jsp-136984.html
  24. http://www.oracle.com/technetwork/java/javaee/overview/compatibility-jsp-136984.html
  25. https://glassfish.dev.java.net/public/comparing_v2_and_v3.html
  26. https://glassfish.dev.java.net/public/comparing_v2_and_v3.html
  27. https://en.wikipedia.org/wiki/Java_Platform,_Enterprise_Edition#cite_note-javaee6compatlist-9
  28. http://www.oracle.com/technetwork/java/javaee/overview/oracleweblogic1211-2769862.html
  29. https://blogs.oracle.com/theaquarium/entry/weblogic_now_java_ee_7
  30. http://docs.oracle.com/middleware/1221/wls/NOTES/whatsnew.htm#NOTES379
  31. http://lists.jboss.org/pipermail/wildfly-dev/2013-May/000062.html
  32. https://issues.jboss.org/browse/WFLY-469
  33. http://planet.jboss.org/post/jboss_as_7_1_0_final_thunder_released_java_ee_6_full_profile_certified
  34. http://jbossas.jboss.org/
  35. JBoss AS is now EE5 certified
  36. Java EE Compatibility
  37. 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. Retrieved 2012-07-18.
  38. „What's new in WebSphere Application Server V8“ Ibm.com. Retrieved 2012-07-18.
  39. https://developer.ibm.com/wasdev/blog/2015/06/25/java-ee-7-has-landed-in-was-liberty
  40. oracle.com/technetwork/java/javaee/overview/waslibertyprofile8556-2587134.html
  41. http://www.oracle.com/technetwork/java/javaee/community/ibm-javaee6-web-tested-configs-1961333.html
  42. https://blogs.oracle.com/theaquarium/entry/tmaxsoft_jeus_8_now_java
  43. http://www.oracle.com/technetwork/java/javaee/community/tmax-jeus-8-tested-configuration-1995477.html
  44. „Java EE6 Web Application Server, WAS Software“.Us.tmaxsoft.com. Retrieved2012-07-18.
  45. „Tested Configurations, Java EE 6 – TMAX JEUS 7“.Oracle.com. 2010-09-07. Retrieved 2012-07-18.
  46. https://blogs.oracle.com/theaquarium/entry/hitachi_cosminexus_now_java_ee
  47. http://oracle.com/technetwork/java/javaee/overview/hitachi-91-tested-configurations-2393447.html
  48. „Java EE 6 – Tested Configurations, Java EE 6 – Hitachi uCosminexus Application Server v9.0“. Oracle.com.
  49. „Tested Configurations, Java EE6 – Fujitsu Interstage“.Oracle.com. 2010-09-07. Retrieved 2012-07-18.
  50. http://www.oracle.com/technetwork/java/javaee/community/nec-webotx-v9x-certification-2002719.html
  51. http://www.caucho.com/articles/Caucho_Web%20Profile%20JavaEE6_whitepaper_byRR.pdf
  52. „MarketWatch.com“. MarketWatch.com. Retrieved 2012-07-18.
  53. „Apache TomEE“. Openejb.apache.org. Retrieved 2012-07-18.
  54. „Please Welcome Siwpas as Java EE Certified Option!“.Oracle.com. Retrieved2015-12-07.
  55. http://jonas.ow2.org/xwiki/bin/view/Blog/JOnAS+530+RC1+released
  56. https://blogs.oracle.com/theaquarium/entry/sap_netweaver_cloud_java_ee
  57. EAServer

Външни препратки[редактиране | редактиране на кода]

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

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