[Seasar-user:4643] Re: 同じクラスに異なるAOPを適応してコンポーネント化する方法

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2006年 9月 20日 (水) 19:34:30 JST


関です。

たかのりさん、ご確認ありがとうございます。
仕事が詰まっていてこちらも遅くなってしまいました。

> > ■ 同じクラスをコンポーネント化しているので、発生する実行時エラー
> > Caused by: org.apache.axis2.AxisFault: org.seasar.framework.container.TooManyRegistrationRuntimeException: [ESSR0045]class HogeServiceImplに複数のコンポーネント(HogeServiceImpl, HogeServiceImpl, HogeServiceImpl, HogeServiceImpl)が登録されています
> 上記例外は、ServiceAで発生している、
> ということで合っていますでしょうか?

はい、ServiceAで発生しておりました。

> > <component name="ChildService01" class="jp.example.service.HogeServiceImpl">
> >        <aspect>work01.ioRemoting</aspect> <!-- IPが違うので、異なるaxisclientの設定を適応 -->
> > </component>
> HogeServiceImplクラスを指定していますが、
> HogeService インタフェースを指定した場合の動作を
> 確認して頂けますでしょうか?
> Implクラスを指定した場合、
> インスタンスがリモートオブジェクトとして生成されないため、
> TooManyRegistrationRuntimeException が発生しているように思えます。

メールの通り、
<component name="ChildService01" class="jp.example.service.HogeService">
       <aspect>work01.ioRemoting</aspect>
</component>
とすることでtomcatを起動させることはできました。

ただし、これではインターフェース相手にインターセプターを適応しているので
実装処理を適用して3つのServerに分割することができません。

サーバー:[Client] → [ServerA] → [ServerB01,ServerB02,ServerB03]
クラス:{main()} → {ServiceXXX.getData()} → {ServiceXXX.getData()}

の構成で、[Client]からは、[ServerA]の[ServiceXXX]を呼び出すと
[ServerA]が同じインターフェースの[ServiceXXX]を実装している
[ServerB]に処理を振り分けて、その後、[ServerA]のスレッド joinで
処理を待てるといいなぁと考えていました。

■NULLの動作
また、新たに一つ質問させて頂きたいのですが
Axisで渡すDtoにnullが入っているとエラーとなってしまうのは
S2Axisの制限でしょうか?

<element name="ID" nillable="true" type="xsd:string"/>
の様に [nillable] 属性をつけることでAxisはNULLを許可するとどこかでみたことがありますが、エラー箇所は「org.apache.axis2」との事ですのでaxis側の問題でしょうか?

現状、NULLを含むargを引数に置いたメソッドは実行できますが、
NULLが帰ってくるメソッドは実行時にエラーとなります。

出力されるエラー −−−−−−−−−−−−−
java.lang.NullPointerException
	at org.apache.axis2.databinding.utils.BeanUtil.deserialize(BeanUtil.java:346)
	at org.seasar.remoting.axis2.connector.AxisInOutConnector.execute(AxisInOutConnector.java:51)
	at org.seasar.remoting.axis2.connector.AbstractAxisConnector.invoke(AbstractAxisConnector.java:107)
	at org.seasar.remoting.common.connector.impl.TargetSpecificURLBasedConnector.invoke(TargetSpecificURLBasedConnector.java:105)
	at org.seasar.remoting.common.interceptor.RemotingInterceptor.invoke(RemotingInterceptor.java:84)
    ・
    ・
    ・

よろしくお願いします。





Seasar-user メーリングリストの案内