您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> 其他语言 >> WEB访问EJB30 有状态bean 的问题

WEB访问EJB30 有状态bean 的问题

来源:网络整理     时间:2016/7/2 10:57:06     关键词:

关于网友提出的“ WEB访问EJB30 有状态bean 的问题”问题疑问,本网通过在网上对“ WEB访问EJB30 有状态bean 的问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: WEB访问EJB30 有状态bean 的问题
描述:

写了一个有状态的会话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"%>

  
    My JSP
  
  
    <%
     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());
     %>
  


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

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)
note The full stack trace of the root cause is available in the JBossWeb/2.0.1.GA logs.

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

解决方案1:

你换个开发环境吧,使用MyEclipse6.5 以及 JBOSS5.0 +JDK6.0用 ,这样就应该不会有什么问题了

解决方案2:

CountNumber cn=(CountNumber)session.getAttribute("cn");
加个断点看看


以上介绍了“ WEB访问EJB30 有状态bean 的问题”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2208454.html

相关图片

相关文章