Java EE - кто реализует спецификацию? [Дубликат]

На этот вопрос уже есть ответ здесь:

Что такое Java EE? 4 ответа

У меня есть некоторый опыт работы с ядром Java и Java EE. Я прочитал различные вопросы о SO, чтобы понять, что такое Java EE? И несколько ответов в SO:какие-именно-это-ява-е-е , то, что-это-ява-е-е

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

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

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

Пожалуйста, кто-нибудь может помочь в понимании этого?

 BalusC23 июн. 2016 г., 09:32
1) Уже ответили в дубликате. 2) Мы, разработчики Java EE, являемся конечными пользователями API Java EE.

Ответы на вопрос(5)

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

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

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

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

Решение Вопроса

JSR342) или любойJSR это часть этого. Когда они это сделают, они могут (после покупки и прохожденияТест на совместимость) заявлять о совместимости со спецификацией. Есть ряд поставщиков со своими серверами приложений, которыесовместим с Java EE, но ни один поставщик не реализует полную спецификацию java ee. Например, glassfish (эталонная реализация java ee) использует Red HatКДИ реализация. Иногда поставщик не реализует какую-либо часть спецификации java ee, он захватывает glassfish, добавляет свои библиотеки, специфичные для поставщика, и выпускает его под своим именем. Чтобы заявить о совместимости, им все равно нужно пройти процесс сертификации и запустить CTS.

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

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

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

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

 StuPointerException24 июн. 2016 г., 07:40
Отличный ответ
 CuriousMind23 июн. 2016 г., 16:26
Большое спасибо за ваши комментарии, имеет смысл.

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

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

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

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

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

Ваш ответ на вопрос