实现jpetstore物理上分层--续

由于昨天做了一个远程调用架构的项目工程模板demo,虽然大体上可以跑起来了,但有些地方还是有异常。今天决定找出原因。

在办公室的电脑里,我只有spring1.2.9。可能跟之前的spring2.0有点差距,但在spring1.29上也有一点问题。先把这些问题搞定再说。

问题是这样的,登陆的时候老是抛出异常。见如下:

2008 - 3 - 24   1 : 48 : 26  org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() 
for  servlet remoting threw exception
com.caucho.hessian.io.HessianProtocolException: expected string at z
    at com.caucho.hessian.io.HessianInput.error(HessianInput.java:
1226 )
    at com.caucho.hessian.io.HessianInput.expect(HessianInput.java:
1221 )
    at com.caucho.hessian.io.HessianInput.readString(HessianInput.java:
543 )
    at com.caucho.hessian.io.BasicDeserializer.readObject(BasicDeserializer.java:
166 )
    at com.caucho.hessian.io.HessianInput.readObject(HessianInput.java:
699 )
    at com.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java:
181 )
    at org.springframework.remoting.caucho.HessianServiceExporter.handleRequest(HessianServiceExporter.java:
91 )
    at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:
44 )
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:
740 )
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:
684 )
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:
394 )
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:
358 )
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:
710 )
    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.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:
230 )
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:
175 )
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:
128 )
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:
104 )
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:
109 )
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:
261 )
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:
844 )
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:
581 )
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:
447 )
    at java.lang.Thread.run(Thread.java:
619 )
2008 - 3 - 24   1 : 48 : 26  org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() 
for  servlet petstore threw exception
com.caucho.hessian.io.HessianProtocolException: 
    at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:
171 )
    at $Proxy0.getAccount(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
39 )
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
25 )
    at java.lang.reflect.Method.invoke(Method.java:
597 )
    at org.springframework.remoting.caucho.HessianClientInterceptor.invoke(HessianClientInterceptor.java:
115 )
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:
169 )
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:
169 )
    at $Proxy1.getAccount(Unknown Source)
    at org.springframework.samples.jpetstore.web.spring.OrderFormController.formBackingObject(OrderFormController.java:
45 )
    at org.springframework.web.servlet.mvc.AbstractFormController.getErrorsForNewForm(AbstractFormController.java:
341 )
    at org.springframework.web.servlet.mvc.AbstractFormController.showNewForm(AbstractFormController.java:
322 )
    at org.springframework.web.servlet.mvc.AbstractFormController.handleRequestInternal(AbstractFormController.java:
262 )
    at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:
153 )
    at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:
44 )
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:
740 )
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:
684 )
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:
394 )
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:
348 )
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:
690 )
    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.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:
230 )
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:
175 )
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:
128 )
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:
104 )
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:
109 )
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:
261 )
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:
844 )
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:
581 )
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:
447 )
    at java.lang.Thread.run(Thread.java:
619 )

 百思不得其解!为什么总是执行getAccount(String username, String password)时候抛出异常!?

由于对aop不是很了解,只能是我猜,我猜,我猜猜!是不是代理类出现问题了?再看看源代码,发现方法getAccount被重载了。而且异常信息中有at $Proxy0.getAccount(Unknown Source)。 我想是不是把一个重命名,比如getNewAccount。

一试,果然是这样!

我想,如果存在这样的问题。我们是不是可以参考spring的org.springframework.web.servlet.DispatcherServlet设计,给每个远程业务接口分配一个serviceId,只代理一个叫远程请求分发器的接口RemoteRequestDispatcher,在服务器端RemoteRequestDispatcher的实现类负责根据serviceId将请求转发给相应的类处理。

我的文章列表>>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值