如何通过外部Servlet调用EJB 3.0

时间:2015-05-21 10:45:44

标签: java java-ee servlets ejb

我正在学习EJB 3并尝试一些简单的东西。

我正在使用eclipse - >带有JBOSS AS 7.1.1的Luna Service Release 1(4.4.1)(最终版)

我在eclipse中使用name创建了一个简单的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中部署它,这是我启动jboss时的JNDI绑定输出:

    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

现在,我希望外部Servlet可以访问此ejb,为此我创建了一个名为 - >的动态Web项目。 SalutationServletProj

以下是简单Servlet的代码:

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注释(或任何其他方法)来获取Servlet中EJB的实例。

由于这两个项目在不同的项目中,我如何实现这一目标?我不能在servlet中使用这个:

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

1)我必须将EJB项目中的文件复制到servlet项目中。

2)它是否可以作为@EJB注释工作,还是需要进行JNDI查找? (因为servlet是远程的)。

3)我在哪里可以找到jboss中生成的类/库?

任何帮助都非常感谢。

1 个答案:

答案 0 :(得分:1)

只需将SalutationBeanRemote添加到您的网络项目的WEB-INF/classes即可。

如果您将以下成员添加到Servlet中,那么它应该可以解决:

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

只有java:global...名称才有效,因为您的servlet在另一个模块和应用程序中作为EJB运行。 我不确定java:jboss/exported...查找名称是否有效,或者它是否仅适用于远程客户端。

祝你好运, 罗伯特