外部Servlet调用EJB 3.0的方法

How to call EJB 3.0 by external Servlet

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

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

我在 eclipse 中创建了一个简单的 EJB 项目,名称为 -> SalutationEJBProj。本项目下创建了一个简单的session,stateless 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

现在,我希望这个 ejb 可以被外部 Servlet 访问,为此我创建了一个名为 --> SalutationServletProj

的动态 Web 项目

下面是简单 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中生成的classes/libraries?

非常感谢任何帮助。

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

然后,如果您将以下成员添加到您的 Servlet,它应该会成功:

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

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

此致, 罗伯特