2012-02-06 26 views
2

分散OSGiとZookeeperを使用して分散アプリケーションを構築しています。アプリケーションはFelixとEquinoxで実行する必要があります。 BundleContext.registerService(...)を使用してJAX-WS Webサービスとしてサービスを登録し、ServiceTracker<S,T>でクエリします。したがって、すべてのサービス処理はOSGiフレームワークによって行われます。各サービスコールはいくつかの計算を行いますので、呼び出し元に応答するまでには時間がかかります。分散OSGi:読み取りタイムアウト

サービスコールに60秒以上かかると、例外としてjava.net.SocketTimeoutException: Read timed outが発生するという問題があります。したがって、60秒のデフォルトのタイムアウトがあるようです。 OSGiフレームワークで使用されるタイムアウトをどのように設定できるかは誰にも分かりますか?

これは、完全なスタックトレースです:

Feb 06, 2012 11:27:02 AM org.apache.cxf.phase.PhaseInterceptorChain doDefaultLogging 
WARNING: Interceptor for {http://test.com/}LB#{http://test.com/}createSession has thrown exception, unwinding now 
org.apache.cxf.interceptor.Fault: Could not send Message. 
    at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:64) 
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:243) 
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:487) 
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:313) 
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:265) 
    at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73) 
    at org.apache.cxf.frontend.ClientProxy.invoke(ClientProxy.java:68) 
    at $Proxy34.createSession(Unknown Source) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.apache.cxf.dosgi.dsw.handlers.ServiceInvocationHandler$1.run(ServiceInvocationHandler.java:65) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at org.apache.cxf.dosgi.dsw.handlers.ServiceInvocationHandler.invoke(ServiceInvocationHandler.java:63) 
    at $Proxy34.createSession(Unknown Source) 
    at test.Consumer$LoadGeneratingThread.run(Consumer.java:122) 
Caused by: java.net.SocketTimeoutException: SocketTimeoutException invoking http://192.168.0.15:9090/LB: Read timed out 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525) 
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.mapException(HTTPConduit.java:2058) 
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:2043) 
    at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66) 
    at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:639) 
    at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62) 
    ... 16 more 
Caused by: java.net.SocketTimeoutException: Read timed out 
    at java.net.SocketInputStream.socketRead0(Native Method) 
    at java.net.SocketInputStream.read(SocketInputStream.java:150) 
    at java.net.SocketInputStream.read(SocketInputStream.java:121) 
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:235) 
    at java.io.BufferedInputStream.read1(BufferedInputStream.java:275) 
    at java.io.BufferedInputStream.read(BufferedInputStream.java:334) 
    at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:641) 
    at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:589) 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1319) 
    at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:468) 
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:2165) 
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:2134) 
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1988) 
    ... 19 more 
+0

他の人のために:私はApache CXFでタイムアウトがまだ設定できていないことを伝えるメーリングリストの回答を得ました。唯一の可能性は、バージョン1.3でサポートされているカスタムCXFインターセプタを使用し、これを使用して各リクエストのHTTPConduitを変更することです。私はCXFでより多くの問題を発見して以来、今までそれを試していなかったので、うまくいくかどうかはわかりません... –

答えて

1

私はこの問題を解決しました。

xmlns:http-conf="http://cxf.apache.org/transports/http/configuration" 
xsi:schemaLocation="...... 
http://cxf.apache.org/transports/http/configuration 
http://cxf.apache.org/schemas/configuration/http-conf.xsd" 

<http-conf:conduit name="*.conduit"> 
    <http-conf:client ConnectionTimeout="10000" ReceiveTimeout="20000"/> 
</http-conf:conduit> 

今大丈夫だ:私が使用しているCXF-dosgiを-RI-singlebundle分布-1.2.jar ファイルを開く/META-INF/cxf/cxf.xmlといくつかのコンテンツを追加!

関連する問題