2016-06-23 4 views
8

У меня есть опыт работы с ядром Java и Java EE. Я прочитал различный вопрос о SO, чтобы понять, что такое Java EE? И несколько ответов в ТАК: what-exactly-is-java-ee, what-is-java-eeJava EE - кто выполняет спецификацию?

У меня есть некоторые сомнения:

1) Если Java EE просто спецификация, кто их реализации? Используют ли эти серверы приложения (например, JBOSS, GlassFish) эти спецификации?

2) Если я прав, спецификация EJB реализуется контейнером EJB, и я считаю, что EJB Container является частью Application Server. Теперь, когда мы, разработчики, пишем код EJB, что мы на самом деле делаем? У меня есть сомнение, контейнер EJB реализует спецификацию EJB, поэтому мы переопределяем некоторую «часть спецификации» EJB? Почему какая-то часть EJB реализуется контейнером EJB и что-то, что разработчики пишут? ИЛИ что какая-то часть EJB должна быть предоставлена ​​контейнером EJB и какая-то часть, которая должна быть разработана разработчиками? У меня возникают трудности с этим.

Возможно, кто-нибудь поможет в понимании этого?

+2

1) Уже ответили в двух экземплярах. 2) Мы, разработчики Java EE, просто являются сторонниками Java EE API. – BalusC

ответ

8

Любой может реализовать спецификацию java ee (JSR342) или любую ее часть jsr. Когда они это сделают, они могут (после покупки и передачи Compatibility Test Suite) утверждать, что они совместимы со спецификацией.Существует ряд поставщиков со своими серверами приложений, которые являются compatible with java ee, но ни один поставщик не реализует полную спецификацию java ee. Например, Glassfish (эталонная реализация java ee) использует реализацию Red Hat CDI. Иногда поставщик не реализует какую-либо часть спецификации java ee, они захватывают стеклянную рыбку, добавляют свои специфические для конкретного поставщика библиотеки и выпускают ее под своим именем. Чтобы требовать совместимости, им все равно нужно пройти процесс сертификации и запустить CTS.

Чтобы выяснить, все ли поставщики, выполняющие спецификацию, не так просто, поскольку не все они проходят процесс сертификации. Например, Apache CXF не сертифицирован сам по себе, скорее он сертифицирован как часть JBoss от Red Hat.

В каждой спецификации есть API и письменный pdf-файл, оба из которых определяют обязательное поведение каждой реализации. Это то, что вы используете, когда пишете EJB-код. Например, при создании EJB:

import javax.ejb.Singleton; 
@Singleton 
public class MySingleton{ 
    ... 
} 

@Singleton аннотаций является частью спецификации, но MySingleton класс код EJB, это не является частью спецификации. Затем контейнер EJB знает, что делать с классом.

+0

Большое спасибо за ваши комментарии, имеет смысл. – CuriousMind

+0

Отличный ответ – StuPointerException

1

Да, поставщики контейнеров EJB (сервер приложений), такие как RedHat, реализуют спецификацию J2EE в своих продуктах (например, JBoss).

Что они не делают, это реализовать любую бизнес-логику (просто «сантехника», если хотите). Именно там приходят разработчики приложений.

Так же, как Apache HTTPD или nginx реализуют спецификацию протокола HTTP, но это не делает веб-сайт.

1

Любой может реализовать спецификацию J2EE, хотя я бы не рекомендовал вам делать это самостоятельно. Вы правы, это обычно осуществляется серверами приложений, чтобы вы могли запускать приложение в контейнере, совместимом с J2EE. Существуют также библиотеки с открытым исходным кодом, которые при объединении и добавлении в Tomcat будут выполнять спецификацию (см., Например, tomee).

При написании приложения вы используете преимущества среды J2EE, которые позволят вам писать сложные приложения и фокусироваться на потребностях ваших конкретных требований.

1

В случаях спецификаций Java (Java EE, JSF, другие JSR) у вас обычно есть эталонная реализация, созданная при разработке спецификации (Glassfish в случае Java EE), тогда у вас есть другие провайдеры, которые могут создавать свою собственную реализацию spec (часто утверждая, что он «лучше» каким-то образом).

Вы, как разработчик, затем пишете код, который может использовать средства, предоставляемые спецификацией, которые будут работать корректно в любой совместимой реализации.

1

1) Серверы приложений реализуют спецификацию и, освобождая свои серверы, будут предоставлять информацию об их реализации. Для справки ознакомьтесь с этим link, в котором указаны различные JSR, реализованные JBOSS 7.

2) Когда мы просто используем любую реализацию, предоставленную сервером приложений, экземпляр будет взят из реализации, предоставляемой сервером. Если мы переопределием класс, тогда наш переопределенный класс будет предоставлен в наших операциях.

Смежные вопросы