从servlet/jsp访问有状态会话bean会引发JBoss4.2.2中的ClassCast异常

从servlet/jsp访问有状态会话bean会引发JBoss4.2.2中的ClassCast异常,jboss,ejb-3.0,Jboss,Ejb 3.0,每当我尝试使用web客户机(在JBoss服务器内)如servlet/jsp访问部署在JBoss 4.2.2应用程序服务器上的EJB3有状态会话bean时,我都会遇到以下异常 java.lang.ClassCastException:$Proxy123 如果我使用应用程序客户端,同样的代码毫无例外地工作。 或者,如果我将bean更改为@Stateless,即使web客户端也可以正常工作。 如果我在外部将.war部署到tomcat容器上,那么web客户端也可以很好地用于有状态bean 简而言之:部署

每当我尝试使用web客户机(在JBoss服务器内)如servlet/jsp访问部署在JBoss 4.2.2应用程序服务器上的EJB3有状态会话bean时,我都会遇到以下异常 java.lang.ClassCastException:$Proxy123 如果我使用应用程序客户端,同样的代码毫无例外地工作。 或者,如果我将bean更改为@Stateless,即使web客户端也可以正常工作。 如果我在外部将.war部署到tomcat容器上,那么web客户端也可以很好地用于有状态bean

简而言之:部署在JBoss 4.2上并通过部署在JBoss上的web客户端访问的有状态bean EJB 3抛出classcastexception

这是我的代码客户端,用servlet编写

属性=新属性(); properties.put(Context.INITIAL_Context_FACTORY,“org.jnp.interfaces.NamingContextFactory”); properties.put(Context.PROVIDER\u URL,“jnp://localhost:1099");

Context c=新的初始上下文(属性);
InvokePOJORemote ref=(InvokePOJORemote)c.lookup(“InvokePOJOBean/remote”);
println(“Servlet ejb ref”+ref+”);
布尔sts=ref.addEmployee(“Mad”,(short)30,new java.math.BigDecimal(12000));

这将在强制转换时在lookup语句中抛出ClasscastException。不知道怎么了!请提供帮助。

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

相反,您可以做的是创建一个有状态ejb接口的jar文件,并为servlet编译将jar添加到您的项目中。。在Eclipse中使用“添加外部JAR”


这应该行得通。

您是否试图将EJB引用强制转换到某个对象?
        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));