2015-05-21 2 views
0

Я изучаю EJB 3 и пробую некоторые простые вещи на нем.Как вызвать EJB 3.0 внешним сервлетом

Я использую затмение -> Luna Service Release 1 (4.4.1) с JBOSS AS 7.1.1 (конечная)

Я создал простой проект EJB в упадке с именем -> SalutationEJBProj. В рамках этого проекта был создан простой сеанс, без состояния Bean.

код:

package com.vipin.bean.session.stateless; 

import javax.ejb.Stateless; 

@Stateless(mappedName="SalutationBean") 
public class SalutationBean implements SalutationBeanRemote { 

public SalutationBean() { 

} 

@Override 
public String getFormalSalutation(String name) { 

    return "Dear" + name; 
} 

@Override 
public String getInfomalSalutation(String name) { 

    return "Hi" + name; 
} 

} 

Удаленный интерфейс:

package com.vipin.bean.session.stateless; 

import javax.ejb.Remote; 

@Remote 
public interface SalutationBeanRemote { 

public String getFormalSalutation(String name); 

public String getInfomalSalutation(String name); 
} 

Я могу развернуть его в Jboss AS 7.1.1 и вот выход JNDI привязок, когда я начинаю JBoss:

java:global/SalutationEJBProj/SalutationBean!com.vipin.bean.session.stateless.SalutationBeanRemote 
java:app/SalutationEJBProj/SalutationBean!com.vipin.bean.session.stateless.SalutationBeanRemote 
java:module/SalutationBean!com.vipin.bean.session.stateless.SalutationBeanRemot 
java:jboss/exported/SalutationEJBProj/SalutationBean!com.vipin.bean.session.stateless.SalutationBeanRemote 
java:global/SalutationEJBProj/SalutationBean 
java:app/SalutationEJBProj/SalutationBean 
java:module/SalutationBean 

Теперь, я хочу, чтобы этот ejb был доступен внешним сервлетом, для этого я создал динамический веб-проект w Имя Ith -> SalutationServletProj

Вот код простого сервлета:

package com.vipin.servlet; 

@WebServlet(urlPatterns = { "/SalutationServlet" }) 
public class SalutationServlet extends HttpServlet { 
private static final long serialVersionUID = 1L; 

@EJB 
private SalutationBean salutationBean; // <-- How will this be accessible, this is in a different project, how do we import this? 

public SalutationServlet() { 
    super(); 

} 

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

} 

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

} 
} 

Мое намерение состоит в том, чтобы использовать @EJB аннотацию (или любой другой метод), чтобы получить экземпляр EJB в сервлет ,

Как эти два находятся в разных проектах, как я могу это достичь? Я не могу использовать, как это в сервлет:

import com.vipin.bean.session.stateless.SalutationBean 

1) Какие файлы из EJB проекта, который я должен скопировать в сервлет проекта.

2) Будет ли он работать как аннотация @EJB или мне нужно выполнить поиск JNDI? (Потому что сервлет удален).

3) Где я могу найти классы/библиотеки, созданные в jboss?

Любая помощь очень ценится.

ответ

1

его должно быть достаточно, чтобы добавить SalutationBeanRemote в WEB-INF/classes вашего веб-проекта.

Затем он должен работать, если добавить следующий элемент в ваш сервлет:

@EJB(lookup="java:global/SalutationEJBProj/SalutationBean") 
private SalutationBeanRemote salutationBean; 

только java:global... имена будут работать, потому что ваш сервлет работает в другом модуле и применения в качестве EJB. Я не уверен, работает ли имя поиска java:jboss/exported... или если оно предназначено только для удаленных клиентов.

С наилучшими пожеланиями, Роберт

+0

Спасибо так много для ваших входов, я попробую. У меня есть одно сомнение, если вы можете ответить, пожалуйста. В общем, клиентам нужны «классы» для импорта. Как мы генерируем эти классы? Нужно ли предоставлять только интерфейсные классы? Это запутанно, и поиск в google у меня не получил правильного ответа. – CuriousMind

+0

С EJB> 3.0 больше не нужно создавать классы. Это все время выполнения во время выполнения. А также в вашем веб-приложении должно быть достаточно, чтобы иметь «SalutationBeanRemote» в WEB-INF/классах.AppServer будет динамически генерировать прокси. –

+0

Спасибо за информацию. Если у нас есть автономный клиент, в этом случае нам не нужен класс, который реализует интерфейс (будь то прокси-объект). Спасибо за вашу помощь в этом. – CuriousMind

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