从servlet / jsp访问有状态会话bean会在jboss 4.2.2中抛出ClassCast异常

时间:2009-09-17 19:36:26

标签: jboss ejb-3.0

每当我尝试使用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。不知道出了什么问题!请帮助。

1 个答案:

答案 0 :(得分:1)

这有点恶心,但你需要将有状态的ejb接口保留在war文件之外。这既不是作为.class文件的类文件夹(WEB-INF),也不是lib文件夹(WEB-INF)作为.jar文件。

相反,您可以做的是创建有状态ejb接口的jar文件,并且对于servlet编译,将jar添加到ur项目中..比如在Eclipse中使用“add external jars”。

那应该有用..