0
我是EJB的新手,我试图让一个简单的无状态会话Bean工作。EJB 3.1 ClassCastException glassfish服务器上的无状态会话Bean
我为此使用了glassfish。
我做了什么:
我创建包含接口的JAR文件:
@Local
public interface SimpleStatelessBeanLocal {
public String getHello();
}
,我已经创建了包含以下类我EJB战争文件(用依赖于与接口的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
所以basicaly它找到的豆,其实现该接口,但它不是从当前类加载器该接口,的一个实例,这意味着我不能投它。
有什么我在这里做错了吗? 我很确定除了反射之外还有其他解决方法吗?
我已经尝试过: 我发现一篇文章建议将jar与接口放在一起提供,但后来我得到了一个ClassNotFoundException。
使用:
- GlassFish4
- EJB 3.1
不直接相关,但我想知道为什么你使用上下文查找而不是@EJB注入?此外,EJB3.1旨在变得简单(只要遵循规则手册:),即使没有接口,您在这里尝试的也应该可以像EJB 3那样工作。1 Lite),我可以推荐最优秀的[Oracle JavaEE教程](http://docs.oracle.com/javaee/7/tutorial/doc/javaeetutorial7.pdf)来帮助您入门吗?和 – fvu
@fvu以下您发布的文档链接,我能够做出成功的SLSB例子。这个例子的缺点是SLSB和实际的代码在同一个war文件中。我真正需要的是ejb在单独的战争中,因为最终我们会有多个使用相同EJB的项目。我的下一步是看看它是否仍然有效,如果我将它们分成两个不同的战争。 –
请参阅本教程的第5.2章,针对您的应用程序,我将打包并部署EJB作为EJB-jar,EJB3样式 - 可选地将WAR与WAR一起包装在EAR中。现在,本教程的第7版似乎将重点放在新的无界面模型上,您会注意到[同一教程的第5版](http://docs.oracle.com/javaee/5/tutorial/doc/)显示一个完整的示例EJB,它公开了明确的本地和远程接口,从这个示例开始可能更容易。 – fvu