Божо действительно дал отличный ответ.Для некоторых дополнительных деталей о Java EE может быть уместен следующий ответ, который я дал на другой вопрос: Каркасы для многоуровневой архитектуры многократного использования
Возможно, вы также захотите прочитать статью, которую я редактировал в Википедии оEJB: http://en.wikipedia.org/wiki/Enterprise_JavaBean
Чтобы добавить немного к подвопросу 3:
Контейнер EJB можно рассматривать как расширенную JVM.«Обычная» JVM предлагает сервис автоматического управления памятью для классов Java.Контейнер EJB предлагает дополнительные сервисы, такие как автоматическое управление транзакциями и объединение в пул.
Сделать обычный класс EJB действительно просто.Вам нужно только добавить аннотацию @Stateless:
@Stateless
public class SomeBean {
// ...
}
После этого все методы в компоненте автоматически становятся транзакционными, и экземпляры SomeBean автоматически объединяются в пул вместо того, чтобы создавать их заново, когда они необходимы.
Важно понимать, что такого рода «управляемые компоненты» нельзя создать с помощью обычного оператора new.Они должны быть введены с помощью аннотации.Если вы снова используете аналогию с обычной JVM, вы можете сказать, что эта аннотация является своего рода «управляемым новым оператором»:
public class SomeOtherManagedBean {
@EJB
SomeBean someBean;
}
Суть в том, что внедрение здесь работает только в других управляемых компонентах.Из неуправляемой среды вы можете загрузить экземпляр с помощью поиска JNDI.
В Java EE EJB-компоненты традиционно должны содержать только чистую бизнес-логику.В последней версии Java EE, Java EE 6, была предпринята попытка донести концепцию управляемого компонента в унифицированной компонентной модели до всех частей приложения.Это делается через спецификацию CDI, которая также определяет тип компонента, называемый просто «управляемый компонент».Вполне возможно, что модель EJB будет в конечном итоге модифицирована как набор аннотаций CDI.