WEB访问EJB3.0 Stateful 的问题

nieliqiang84 2008-10-29 11:23:30
写了一个有状态的会话bean 在main函数中访问没有问题,当我放到JSP中访问就出现问题了
下面是我的相关代码

远程接口

import javax.ejb.Remote;

@Remote
public interface CountNumber {
public int getnum();
}


有状态Bean实现类

import javax.ejb.Stateful;
import com.thr.stateful.CountNumber;

public @Stateful class CountNumberBean implements CountNumber {
private int k=1;
public int getnum() {
k++;
return k ;
}
}


如果在main函数中这样直接访问



Context cx=new InitialContext();
CountNumber cn=(CountNumber)cx.lookup("CountNumberBean/remote");
System.out.println(cn.getnum());
Thread.sleep(2000);
CountNumber cn2=(CountNumber)cx.lookup("CountNumberBean/remote");
System.out.println(cn2.getnum());


就可以获得两个值,都是 2

但我想要在WEB应用中访问,就出错,这里是我的JSP页面

<%@ page language="java" pageEncoding="ISO-8859-1"%>
<%@page import="com.thr.stateful.CountNumber"%>
<%@page import="javax.naming.Context"%>
<%@page import="javax.naming.InitialContext"%>
<html>
<head>
<title>My JSP</title>
</head>
<body>
<%
Context cx=new InitialContext();
CountNumber cn=(CountNumber)session.getAttribute("cn");
if(cn==null){
cn=(CountNumber)cx.lookup("CountNumberBean/remote");
session.setAttribute("cn",cn);
}
out.print(cn.getnum());
%>
</body>
</html>


下面是错误信息
控制台输出的错误信息


11:18:48,453 ERROR [[jsp]] Servlet.service() for servlet jsp threw exception
java.lang.ClassCastException: $Proxy222
at org.apache.jsp.welcome_jsp._jspService(welcome_jsp.java:73)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
at java.lang.Thread.run(Thread.java:595)


这里是页面输出的错误信息


org.apache.jasper.JasperException: An exception occurred processing JSP page /welcome.jsp at line 15

12: Context cx=new InitialContext();
13: CountNumber cn=(CountNumber)session.getAttribute("cn");
14: if(cn==null){
15: cn=(CountNumber)cx.lookup("CountNumberBean/remote");
16: session.setAttribute("cn",cn);
17: }
18:


Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:504)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:415)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)

root cause

java.lang.ClassCastException: $Proxy222
org.apache.jsp.welcome_jsp._jspService(welcome_jsp.java:73)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)




请帮我诊断诊断,是否是EJB容器的问题呢?
PS:我的开发环境是 JDK1.5+JBOSSIDE for eclipse






...全文
151 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
nlq_84 2008-10-31
  • 打赏
  • 举报
回复
你换个开发环境吧,使用MyEclipse6.5 以及 JBOSS5.0 +JDK6.0用 ,这样就应该不会有什么问题了
tiyuzhongxin789 2008-10-30
  • 打赏
  • 举报
回复
你在JSP中使用这个打印一下,看看有没有值
Object cart=cx.lookup("CartBean/remote");
out.print(cart);
cjoy4856 2008-10-29
  • 打赏
  • 举报
回复
你的ps 不会有问题的
就是在你的容器(有问题)
nieliqiang84 2008-10-29
  • 打赏
  • 举报
回复
我的JBOSS版本的JBOSS4.2.2
我做Stateless(无状态会话bean)时这样在WEB中都是没有问题的
nlq_84 2008-10-29
  • 打赏
  • 举报
回复
是不是要设置容器的环境啊,环境有问题?
看看楼下的高手解答
nieliqiang84 2008-10-29
  • 打赏
  • 举报
回复
怎么这个问题还是无人问津啊,来看看,看看就帮顶啊
nieliqiang84 2008-10-29
  • 打赏
  • 举报
回复


Object cart=cx.lookup("CartBean/remote");
out.print(cart);


我在JSP中这样做,所输出的值是这样的:
jboss.j2ee:jar=statefulBean.jar,name=CartBean,service=EJB3:5c4o13g-32gjp5-fmvagdpb-1-fmvkqd97-18
看来还是有值的,那么为啥到转换成Cart时就会出错呢?错误还是在堆中?
nlq_84 2008-10-29
  • 打赏
  • 举报
回复

你在JSP中使用这个打印一下,看看有没有值
Object cart=cx.lookup("CartBean/remote");
out.print(cart);


nieliqiang84 2008-10-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cjoy4856 的回复:]
你的ps 不会有问题的
就是在你的容器(有问题)
[/Quote]

那我使用main函数访问可以得出正确的结果,可是一旦在WEB环境下访问就不行,这是咋回事呢?
就这一点我想不明白,这个很是让人头疼啊。
main只是用来测试的,我们要用EJB那当然是会在WEB中使用它
错误好像是在堆中有问题哦,也就是说生成的对象有问题?

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧