我是 EJB 的新手,我正在尝试让一个简单的无状态会话 Bean 工作。
我正在为此使用glassfish。
我做了什么:
我创建了一个包含接口的 jar 文件:
@Local
public interface SimpleStatelessBeanLocal {
public String getHello();
}
然后,我为我的 EJB 创建了一个 war 文件,其中包含以下类(依赖于带有接口的 jar):
@Stateless
public class SimpleStatelessSessionBean implements SimpleStatelessBeanLocal {
public String getHello() {
return "Hello from stateless session bean";
}
}
然后,我创建了一个带有单个 servlet 和对带有接口的 jar 的依赖项的 Web 应用程序。
@WebServlet("/SimpleServlet")
public class SimpleServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
InitialContext ctx;
try {
ctx = new InitialContext();
Object object = ctx.lookup("java:global/simple-stateless-session-bean/SimpleStatelessSessionBean");
response.getWriter().println(object);
Class c = object.getClass();
for (Class i : c.getInterfaces()) {
response.getWriter().println(i.getName());
}
response.getWriter().println(object instanceof SimpleStatelessBeanLocal);
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
这具有以下输出:
be.sdutry.ejb.tests.stateless.simple.SimpleStatelessBeanLocal_253329002
com.sun.enterprise.container.common.spi.util.IndirectlySerializable
be.sdutry.ejb.tests.stateless.simple.SimpleStatelessBeanLocal
false
所以基本上它找到了Bean,它实现了那个接口,但它不是当前类加载器中那个接口的实例,这意味着我不能转换它。
我在这里做错了什么吗?我很确定除了反射之外必须有其他方法吗?
我已经尝试过的内容:我发现的一篇文章建议将带有接口的 jar 放在提供的接口上,但后来我得到了 ClassNotFoundException。
使用:
- 玻璃鱼4
- EJB 3.1