Чтобы позволить сервлету, JSP, JSF и т. Д. Использовать удаленный EJB , необходимо выполнить внедрение ресурсов.JSP, однако, использует для вставки EJB-компонент другой способ, чем остальные.давайте рассмотрим их все на примере.
В JSF удаленный EJB-компонент может быть внедрен очень простым способом, как это можно увидеть в следующем ManagedBean.EJB может быть с состоянием, без состояния или синглтоном.
Предположим, что интерфейс, который реализуется сессионным компонентом, а именно: CustomerBeanRemote
@ManagedBean
@RequestScoped
public class AddSubscription
{
@EJB
private CustomerBeanRemote obj=null;
//Getters and setters.
}
Здесь удаленный EJBможет быть введен только с одной аннотацией @ EJB непосредственно перед объявлением интерфейса.Поскольку EJB внедряется здесь, интерфейс может вызывать методы в сессионном компоненте, даже если ему явно присвоено значение null.здесь значение null не имеет никакого смысла.
Сервлет принимает то же представление, что и показано ниже.
public class Add extends HttpServlet {
{
@EJB
private CustomerBeanRemote obj=null;
//Rest of the elegant Servlet code goes here.
}
JSP (и JSTL / EL), однако принимает другое представлениекак упомянуто ниже.
try
{
obj=(CustomerBeanRemote )new
InitialContext().lookup(CustomerBeanRemote.class.getName());
}
catch(NamingException e)
{
out.println(e.getMessage());
}
obj.someEJBMethod();
или
try
{
obj=(CustomerBeanRemote )new
InitialContext().lookup("Specific JNDI");
}
catch(NamingException e)
{
out.println(e.getMessage());
}
obj.someEJBMethod();
Почему JSP (или JSTL / EL) требуется JNDI (интерфейс именования и каталогов Java) для выполненияВнедрение ресурсов в Servlet и JSF может быть выполнено только с одной аннотацией @ EJB ?