createCall

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

createCall

tohru.akutsu
はじめまして。阿久津と申します。

axis1.1を用いてWebアプリケーションを作成しています。

wsdl2javaで作成されたスタブをハイパースレッド環境で複数newし、
同時にサービスを呼び出すと、スタブのcreateCall内のresisterTypeMappingが同時
に呼ばれてしまい
まれにSOAPメッセージを正しく受信できずにSAXExceptionが発生しました。

発生個所は以下です。
      at
org.apache.axis.encoding.ser.BeanDeserializer.onStartChild(BeanDeserializer.java:260)
      at
org.apache.axis.encoding.DeserializationContextImpl.startElement(DeserializationContextImpl.java:963)
      at
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:198)
      at
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:722)
      at
org.apache.axis.message.RPCElement.deserialize(RPCElement.java:323)
      at org.apache.axis.message.RPCElement.getParams(RPCElement.java:347)
      at org.apache.axis.client.Call.invoke(Call.java:2272)
      at org.apache.axis.client.Call.invoke(Call.java:2171)
      at org.apache.axis.client.Call.invoke(Call.java:1691)

とりあえずcreateCall内の”synchronized(this)”を”synchronized(staticなロック
オブジェクト)”に変更することで、問題は回避できました。

初歩的な話かも知れませんが、スタブはそもそも複数newして使用してはいけないと
いう仕様なのでしょうか?
(axis1.4からスタブを生成しても同様のようでした。)

どなたがご存知のかたがいらっしゃったら教えていただければと思います。

よろしくお願いいたします。






---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: createCall

Toshi
To: 阿久津さん

 はじめまして。
 木村と申します。

> 初歩的な話かも知れませんが、スタブはそもそも複数newして
> 使用してはいけないという仕様なのでしょうか?

 「複数newして使用してはいけない」という仕様がある訳では
ありません。実際、複数インスタンスを生成して動作している
例も報告されているので、不具合があるようであればAxis内の
バグの可能性も考えられます。

 完全に同一のソースである必要は無いのですが、現象が再現
可能なレベルのサンプルを共有することは可能でしょうか?

よろしくお願いします。
---
Toshi <[hidden email]>

On Thu, 27 Jul 2006, [hidden email] wrote:

> はじめまして。阿久津と申します。
>
> axis1.1を用いてWebアプリケーションを作成しています。
>
> wsdl2javaで作成されたスタブをハイパースレッド環境で複数newし、
>
同時にサービスを呼び出すと、スタブのcreateCall内のresisterTypeMappingが同時
> に呼ばれてしまい
> まれにSOAPメッセージを正しく受信できずにSAXExceptionが発生しました。
>
> 発生個所は以下です。
>      at
>
org.apache.axis.encoding.ser.BeanDeserializer.onStartChild(BeanDeserializer.java:260)
>      at
>
org.apache.axis.encoding.DeserializationContextImpl.startElement(DeserializationContextI$
>      at
>
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:198)
>      at
>
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:722)
>      at
> org.apache.axis.message.RPCElement.deserialize(RPCElement.java:323)
>      at
org.apache.axis.message.RPCElement.getParams(RPCElement.java:347)
>      at org.apache.axis.client.Call.invoke(Call.java:2272)
>      at org.apache.axis.client.Call.invoke(Call.java:2171)
>      at org.apache.axis.client.Call.invoke(Call.java:1691)
>
>
とりあえずcreateCall内の”synchronized(this)”を”synchronized(staticなロック
> オブジェクト)”に変更することで、問題は回避できました。
>
>
初歩的な話かも知れませんが、スタブはそもそも複数newして使用してはいけないと
> いう仕様なのでしょうか?
> (axis1.4からスタブを生成しても同様のようでした。)
>
> どなたがご存知のかたがいらっしゃったら教えていただければと思います。
>
> よろしくお願いいたします。
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]