外部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...
查找名称是否有效,或者它是否仅适用于远程客户端。
此致,
罗伯特
我正在学习 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...
查找名称是否有效,或者它是否仅适用于远程客户端。
此致, 罗伯特