ブローカ拡張は、トランザクション フラグメントがエージェントから受信された後、ブローカによってロードおよび呼び出されます。
ブローカ拡張によって、以下のタスクを実行できます。
ブローカを拡張するには、com.itko.lisa.remote.plumbing.IAssemblyExtension インターフェースを実装します。 このインターフェースは、onTransactionReceived() メソッドを定義します。 詳細については、インストール ディレクトリの doc フォルダで、JavaDocs を参照してください。
public interface IAssemblyExtension {
/**
* アセンブリの前に呼び出されるメソッド
* @param frame: エージェントから受信される部分的なトランザクション ルート
* @return: 標準のアセンブリをバイパスする(拡張によってアセンブリを処理する)場合は true
*/
public boolean onTransactionReceived(TransactionFrame frame);
}
ブローカ拡張を展開するには、拡張をコンパイルして、以下のエントリを含むマニフェストと共に JAR ファイルにパッケージ化します。
Broker-Extension: extension class name
ブローカ(レジストリ)ディレクトリにこの JAR を配置すると、ブローカは自動的にそれを取得します。 ブローカ(レジストリ)が起動した後にファイルを追加した場合、ホット ロード メカニズムによってファイルが確実に適用されます。 ブローカ(レジストリ)の実行中に拡張 JAR を更新した場合、JAR クラスが動的に再ロードされます。 動的な再ロードにより、ブローカ(レジストリ)を再起動せずに、拡張コードをすばやく簡単にテストできます。
例
典型的な使用例は、TCP/IP およびポートを使用する通常のステッチング アルゴリズムが、エージェント間に配置された仮想 IP が割り当てられているロード バランサによって混乱する場合、またはエージェントがネイティブ ライブラリを使用して IO を実行し、使用中の IP およびポートに直接アクセスできない場合です。 その場合、フレームのアドレスおよびポートのフィールドが空白のままか、正しくありません。このため、拡張でフレームをアセンブルする必要があります。
import com.itko.lisa.remote.plumbing.IAssemblyExtension;
import com.itko.lisa.remote.transactions.TransactionFrame;
import com.itko.lisa.remote.utils.Log;
import com.itko.lisa.remote.utils.UUID;
public class LoadBalancerExtension implements IAssemblyExtension {
private TransactionFrame m_lastAgent1Frame;
private TransactionFrame m_lastAgent2Frame;
public boolean onTransactionReceived(TransactionFrame frame) {
if (frame.getClassName().equals("Class1") && frame.getMethod().equals("method1")) {
m_lastAgent2Frame = frame;
if (m_lastAgent1Frame.getFrameId() == m_lastAgent2Frame.getParentId()) {
stitch(m_lastAgent1Frame, m_lastAgent2Frame);
}
}
if (frame.getClassName().equals("Class2") && frame.getMethod().equals("method2")) {
m_lastAgent1Frame = frame;
if (m_lastAgent1Frame.getFrameId() == m_lastAgent2Frame.getParentId()) {
stitch(m_lastAgent1Frame, m_lastAgent2Frame);
}
}
return false;
}
private void stitch(TransactionFrame parent, TransactionFrame child) {
String newFrameId = UUID.newUUID();
parent.setFrameId(newFrameId);
child.setParent(parent);
parent.getChildren().add(child);
}
}
|
Copyright © 2014 CA Technologies.
All rights reserved.
|
|