Webサービスレイヤーとして確立されたアプリケーションにゼロから構築されたSOAベースのプロジェクトがあります。
ClientA-> ClientB-> ESB-> Atomic Services->確立されたアプリ(DB / NASなど) ClientC->
ESBによって提供されるサービスが、相互作用で順番に呼び出される複数のアトミック呼び出しで構成されているシナリオがいくつかあります。論理的には、次のようになります。
def composed_service(xmlrequest): output_of_decision_service =decision_service(xmlrequest) if(output_of_decision_service.matches( "foo")): xmlresult = foo_service(xmlrequest) if(output_of_decision_service.matches( "bar")): xmlresult = bar_service(xmlrequest) xmlresultを返す
実際、このロジックはXSLT変換を使用して実装されており、XPathクエリは購入したESB実装に組み込まれています。これは、いくつかの理由で私には問題があるようです。
- ESBの実装は「重すぎ」てローカルに展開できないため、開発者は構成サービス(ビジネスの観点から見た単純な機能)をローカルでテストできません。全体的なテストは統合アクティビティです。
- これらおよび同様の制御ブロックを形成するために使用されるXSLT構文は、一般的なプログラミング言語のコードほど読み取り可能またはアクセス可能ではありません。(もし...なら、そうでなければ最後になど)XSLTは非常に長くて恐ろしいものになっています。
- 特定の複雑なシナリオでは、よりきめ細かい制御が有益です。つまり、補償アトミックサービスを呼び出して以前のアクションをロールバックすることにより、失敗した呼び出しを補償します。
プロジェクトに1年取り組んだ後、アプリケーション機能をアトミックサービスに分解するという概念は良いものだと思います。ただし、Javaのような単純な古いプログラミング言語で作成中のWebサービスを実装したいと思うことがよくあります。
私はこれがこのように見えると思います:
ClientA-> ComposedServiceA-> ClientB->ComposedServiceB->アトミックサービス->アプリ ClientC-> ComposedServiceC->
しかし、ここを読んで、私は次のように参照されていないステートメントを見つけました:
確かに、コードでESBの動作をエミュレートするのは悪いオプションです
悲しいことに、これは裏付けとなる理由もなく、事実の盲目的な声明(意見)として残されました。しかし、それは私をガタガタさせました。なぜ上記が真実である可能性がありますか?私は建築家に上記のすべての懸念を表明する電子メールを作成する準備ができていましたが、このコメントは私がすべきかどうか疑問に思いますか?
確かに、コードでESBの動作をエミュレートするのが最悪のオプションなのはなぜですか?