Я использую spring 3.1.0, com.springsource.com.caucho-3.2.1.jar и tomcat-6.0.33 с обеих сторон (клиент/сервер). Все вызовы удаленных служб работают нормально, без каких-либо проблем, за исключением длительного обслуживания (более 9/10 минут).
Я использую Spring-Security для защиты удаленных вызовов.
Я создал новую удаленную службу, которая занимает около 30 минут, чтобы ответить клиенту в реальном сценарии. Служба работает отлично, если время выполнения меньше 9.xx/10 минут, но после достижения 9.xx/10 минут я получаю Сброс соединения на моем клиенте Hessian.
Конфигурация клиента
<bean id="someService" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
<property name="serviceUrl" value="http://hostname:8080/remoting/someService"/>
<property name="serviceInterface" value="com.SomeService"/>
<property name="username" value="${service.username}"/>
<property name="password" value="${service.password}"/>
</bean>
Конфигурация сервера
<bean id="someService" class="com.SomeService" />
<bean name="/someService" class="org.springframework.remoting.caucho.HessianServiceExporter">
<property name="service" ref="someService" />
<property name="serviceInterface" value="com.SomeService" />
</bean>
Клиентская сторона — трассировка стека:
2013-Feb-28 17:48:19 DEBUG [http-8080-1] com.SomeService:85 - Calling Some Service
2013-Feb-28 17:58:16 ERROR [http-8080-1] com.SomeService:113 -
org.springframework.remoting.RemoteConnectFailureException:
Cannot connect to Hessian remote service at [http://hostname:8080/remoting/someService];
nested exception is com.caucho.hessian.client.HessianConnectionException:
500: java.net.SocketException: Connection reset
at org.springframework.remoting.caucho.HessianClientInterceptor.convertHessianAccessException(HessianClientInterceptor.java:262)
На стороне сервера — Tomcat (localhost.log)
SEVERE: Servlet.service() for servlet [remoting] in context with path [/JTService]
threw exception [Hessian skeleton invocation failed; nested exception is
ClientAbortException: java.net.SocketException: Connection reset] with root cause
java.net.SocketException: Connection reset
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:96)
Я попытался установить 30-минутное значение readTimeout, доступное в HessianProxyFactoryBean, но получил такое же исключение через 9.xx/10 минут. Однако, когда я попытался с readTimeout 2 минуты, я получаю Тайм-аут чтения через 2 минуты.
После установки readTimeout на 2 минуты я получаю:
2013-Feb-28 17:44:10 ERROR [http-8080-1] com.SomeService:113 - org.springframework.remoting.RemoteConnectFailureException:
Cannot connect to Hessian remote service at [http://hostname:8080/remoting/someService];
nested exception is com.caucho.hessian.client.HessianConnectionException: 500: java.net.SocketTimeoutException: Read timed out
org.springframework.remoting.RemoteConnectFailureException:
Cannot connect to Hessian remote service at [http://hostname:8080/remoting/someService];
nested exception is com.caucho.hessian.client.HessianConnectionException: 500: java.net.SocketTimeoutException: Read timed out
Как и в случае с readTimeout, я не видел настройки, связанные с временем ожидания соединения в HessianProxyFactoryBean.
Пожалуйста, подскажите, что делать?