每当我尝试使用Web客户端(在JBoss服务器中)(例如servlet / jsp)访问部署在JBoss 4.2.2应用服务器上的EJB 3有状态会话bean时,我会得到以下异常 java.lang.ClassCastException:$ Proxy123 如果我使用应用程序客户端,相同的代码没有任何异常。 或者,如果我将bean更改为@Stateless,即使是Web客户端也能正常工作。 如果我在外部的tomcat容器上部署.war,那么web客户端也可以正常运行有状态bean。
简而言之:在JBoss 4.2上部署并通过部署在JBoss上的Web客户端访问的有状态bean EJB 3会引发classcastexception
这是我的代码 - 客户端,用servlet编写
属性property = new Properties(); properties.put(Context.INITIAL_CONTEXT_FACTORY,“org.jnp.interfaces.NamingContextFactory”); properties.put(Context.PROVIDER_URL,“jnp:// localhost:1099”);
Context c = new InitialContext(properties);
InvokePOJORemote ref = (InvokePOJORemote) c.lookup("InvokePOJOBean/remote");
out.println("<h1>Servlet ejb ref " + ref + "</h1>");
boolean sts = ref.addEmployee("Mad", (short) 30, new java.math.BigDecimal(12000));
这会在转换时在lookup语句处抛出ClasscastException。不知道出了什么问题!请帮助。
答案 0 :(得分:1)
这有点恶心,但你需要将有状态的ejb接口保留在war文件之外。这既不是作为.class文件的类文件夹(WEB-INF),也不是lib文件夹(WEB-INF)作为.jar文件。
相反,您可以做的是创建有状态ejb接口的jar文件,并且对于servlet编译,将jar添加到ur项目中..比如在Eclipse中使用“add external jars”。
那应该有用..