EJB 로컬 호출 해결 "java.lang.ClassCastException: $Proxy96 cannot be cannot be cast to com.tgb.ejb.UserManager"이상

4296 단어
EJB 로컬 호출 방식: 웹 클라이언트와 EJB 서버를 같은 JBoss에 배치하고 클라이언트와 서버는 하나의 JVM을 통해 통신합니다.
웹 클라이언트가 로컬로 호출할 때 EJB 서버가 포장한jar를 인용해야 하며, JBoss/client의jar와 src의 jndi를 인용할 필요가 없습니다.properties 파일, 호출 방법은 다음과 같습니다.
<%@ page language="java"
	import="java.util.*,javax.naming.*,com.tgb.ejb.*" pageEncoding="utf-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>
<html>
	<head>
		<base href="<%=basePath%>">
		<title>My JSP 'index.jsp' starting page</title>
	</head>

	<body>
		<%
			InitialContext ctx = new InitialContext();
			UserManager usermanager = (UserManager) ctx
					.lookup("UserManagerBean/local");
			User user = new User();
			user.setUsername("quwenzhe");
			user.setPassword("quwenzhe123");

			usermanager.addUser(user);
			out.println("userId=" + user.getId());
		%>
	</body>
</html>
    
브라우저에서 클라이언트가 게시한 URL 주소를 입력하면 JBoss는 다음과 같은 예외를 보고합니다.
13:02:30,924 ERROR [[jsp]] Servlet.service() for servlet jsp threw exception
java.lang.ClassCastException: $Proxy96 cannot be cast to com.tgb.ejb.UserManager
	at org.apache.jsp.index_jsp._jspService(index_jsp.java:79)
	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:182)
	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:619)
 
해결 방안은 JBoss 서버의 jboss-4.2.3입니다.GA\server\default\deploy\jboss-web.deployer\META-INF 경로에서 jboss-service를 찾습니다.xml 파일, false 의false를true로 바꾸고 JBoss를 다시 시작하여 문제를 해결합니다.
UseJBossWebLoader 속성은true로 설정됩니다. Tomcat은 JBoss의 통일된 클래스 캐리어를 웹 응용 프로그램의 클래스 캐리어로 사용합니다. 이것은 WAR 패키지의 WEB-INF/classes와 WEB-INF/lib 디렉터리의 클래스가 부족한 공유 클래스 캐리어 창고에 불러온다는 것을 의미합니다.이를 통해 클래스와 자원을 웹 응용 프로그램 간에 공유할 수 있다.단, 만약 이것이 당신이 원하는 상황이 아니라면, 이 속성을false로 설정하여 이러한 행위를 피할 수 있습니다.일반적인 상황에서 이런 상황을 피해야 한다. 왜냐하면 서로 다른 응용 프로그램에서 같은 종류와 자원을 가지고 있을 때 JBoss의 서로 다른 응용 프로그램 사이에 충돌이 발생하기 때문이다.예를 들면 다음과 같다. 두 개의 War 응용 프로그램은 WarA, WarB 아래에 모두com이 있다.tgb.User.class 파일;이제 각 War 패키지 아래에 각각의 User를 사용하기를 기대합니다.class 파일, WarA 응용 프로그램을 수정할 때tomcat은 다음 응용 프로그램을 재배치합니다.이때 WarA 앱이 WarB 아래의 사용자를 사용합니다.class, 혼란을 초래하다.
나의 설명이 모두의 진보를 도울 수 있기를 바란다.

좋은 웹페이지 즐겨찾기