ハイブリッドのための Runtime Manager エージェントの拡張

可能な場合は、Equality の会社の値に一致するように、含めない用語を変更しました。顧客の実装に対する影響を回避するために、一部の用語は変更されていません。

文字列を元に戻すメソッドを使用して、完全なサービス、外部メッセージハンドラー、内部メッセージハンドラーの実装など、Anypoint Runtime Manager エージェントを拡張できます。

Runtime Manager エージェントの拡張可能なコンポーネント

Runtime Manager エージェントには、次の拡張可能なコンポーネントが含まれています。

  • サービス

  • 外部メッセージハンドラー

  • 内部メッセージハンドラー

Runtime Manager エージェントのカスタムコンポーネントの構造

Runtime Manager エージェントのカスタムコンポーネントは、次の構造に従う必要があります。

  • /lib​ にはコンポーネントの連動関係を含めます。

  • /classes​ にはコンパイルされたクラスを含めます。

カスタムコンポーネントも Java 1.7 でコンパイルする必要があります。それよりも新しいバージョンでコンパイルされたコンポーネントはエージェントによって読み込まれません。

この例では、エージェントを拡張するために必要なライブラリを取得するために、​pom.xml​ に次の連動関係を追加します。

このリポジトリへのアクセスについては、MuleSoft サポートにお問い合わせください。

https://repository-master.mulesoft.org/nexus/content/repositories/releases-ee/
xml

対応する JAR は、Mule インスタンスの ​plugins​ フォルダーにある ​mule-agent​ プラグイン内の ​lib​ フォルダーに追加します。例: $MULE_HOME/plugins/mule-agent/lib/<component name>.jar​。

新しいサービスの追加

新しいサービスを追加するには、​MuleAgentService​ インターフェースを実装します。

カスタムサービスに関する考慮事項

  • サービスは、​@Inject​ アノテーションを使用することによって、Runtime Manager エージェント環境に登録されている任意の内部ハンドラーを実行できます。

  • 新しいサービスを作成するために Runtime Manager エージェントアーキテクチャに従う必要はありません。

サービスの記述

MuleAgentService の実装

@Named("my.company.service")
@Singleton
public class MyService implements MuleAgentService
{

    @Inject
    private Map<String, InternalMessageHandler<List<T>>> handlers;

    @Override
    public java.util.List<com.mulesoft.agent.handlers.InternalMessageHandler> getInternalHandlers()
    {
        // TODO: return List of Internal Handlers
    }

    @Override
    public void enable(boolean state) throws AgentEnableOperationException {
        // TODO: enable the Service
    }

    @Override
    public boolean isEnabled() {
        // TODO: return Service status
    }
}
java

新しいサービスを追加するには、クラスを含む JAR を ​mule-agent​ プラグインフォルダー内の ​lib​ フォルダー (​$MULE_HOME/mule-agent/lib​ など) に置きます。

文字列復元サービスの例

上で説明したように、このドキュメントでは簡単な例を使用して、文字列を元に戻すための完全な拡張を記述する方法を説明します。最初のステップは、この目的のためのサービスを追加することです。

新しい外部メッセージハンドラーの追加

新しい外部メッセージハンドラーを追加するには、Runtime Manager エージェントの​文字列復元の外部メッセージハンドラー​インターフェースを実装する必要があります。

カスタム外部メッセージハンドラーに関する考慮事項

  • 外部メッセージハンドラーは、トランスポートに挿入されます。

  • 外部メッセージハンドラーは、スレッドセーフである必要があります。

  • 外部メッセージハンドラーは、トランスポートによって実行され、Mule とやりとりすることはできません。 サービスのみが Mule とやりとりできます。

外部メッセージハンドラーの記述

REST

@Named("my.external.handler")
@Path("somePath")
@Singleton
public class MyRequestHandler implements ExternalMessageHandler
{
    @Inject
    private MuleService muleServiceInTheAPIModule;

    @Override
    public void enable(boolean state) throws AgentEnableOperationException {
        // TODO: enable the Handler
    }

    @Override
    public boolean isEnabled() {
        // TODO: return Handler status
    }

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public List<Component> someRequest()
    {

    }
}
java

WebSockets

@Named("TYPE_OF_MESSAGE_THAT_MUST_DISPATCH")
@Singleton
public class MyRequestHandler implements ExternalMessageHandler
{
    @Inject
    private MuleService muleServiceInTheAPIModule;

    @Override
    public void enable(boolean state) throws AgentEnableOperationException {
        // TODO: enable the Handler
    }

    @Override
    public boolean isEnabled() {
        // TODO: return Handler status
    }

}
java

新しい外部メッセージハンドラーを追加するには、クラスを含む JAR を ​mule-agent​ プラグインフォルダー内の ​lib​ フォルダー (​$MULE_HOME/mule-agent/lib​ など) に置きます。

文字列復元の外部メッセージハンドラー

文字列復元の例に従った外部ハンドラーの例を次に示します。

@Named("com.company.externalhandler.reverse")
@Path("revert")
@Singleton
public class ReverseExternalHandler implements ExternalMessageHandler
{

    @Inject
    private ReverseService reverseService;

    @Override
    public void enable(boolean b) throws AgentEnableOperationException
    {

    }

    @Override
    public boolean isEnabled()
    {
        return true;
    }

    @GET
    public String getReversedString(@QueryParam("string") String string)
    {
        return reverseService.getConvertedString(string);
    }
}
java

上記のコードは、​<your REST transport host>/mule/revert​ でリソースを公開します。

新しい内部メッセージハンドラーの追加

新しい内部メッセージハンドラーを追加するには、​内部メッセージハンドラー​インターフェースを実装する必要があります。

カスタム内部メッセージハンドラーに関する考慮事項

  • 内部メッセージハンドラーは、処理するメッセージ種別に基づいてサービスに挿入されます。

  • 内部メッセージハンドラーは、スレッドセーフである必要があります。

  • 内部メッセージハンドラーは、サービスによって実行され、Mule とやりとりすることはできません。 サービスのみが Mule とやりとりできます。

内部メッセージハンドラーの記述

@Named("my.company.internal.handler")
@Singleton
public class MyInternalMessageHandler<T> implements InternalMessageHandler<T>{

    boolean handle(T t){
          // TODO handle message
    }

    @Override
    public void enable(boolean state) throws AgentEnableOperationException {
        // TODO: enable the Handler
    }

    @Override
    public boolean isEnabled() {
        // TODO: return Handler status
    }
}
java

新しい内部メッセージハンドラーを追加するには、クラスを含む JAR を ​mule-agent​ プラグインフォルダー内の ​lib​ フォルダー (​$MULE_HOME/mule-agent/lib​ など) に置きます。

文字列復元の内部メッセージハンドラー

次のコードは、文字列復元の例の内部メッセージハンドラーを示しています。

内部メッセージハンドラーは、サービスによって処理されたメッセージを ​revertedString.txt​ というファイルに書き込みます。

Runtime Manager エージェント API インターフェース

Mule サービス

**
 * <p>
 * Implementations of this interface provides new functionality to the Runtime Manager agent. These services handle data from
 * Mule and interact with Mule.
 * </p>
 *
 * @see com.mulesoft.agent.handlers.ExternalMessageHandler , InternalMessageHandler
 * @since 1.0
 */
public interface MuleAgentService extends Switcher
{

    public List<InternalMessageHandler> getInternalHandlers();

}
java

外部メッセージハンドラー

/**
 * <p>
 * Gets  messages coming from an external system and executes {@link com.mulesoft.agent.services.MuleAgentService} based
 * the request.
 * </p>
 * <p>
 * This is just a marker interface for the communication layer to recognize the interface as a External message receiver
 * </p>
 *
 * @since 1.0
 */
public interface ExternalMessageHandler extends Switcher
{

}
java

内部メッセージハンドラー

/**
 * <p>
 * Internal messages come generally from mule side. {@link InternalMessageHandler} are use to handle those messages depending on,
 * for example, the transport.
 * </p>
 *
 * @param <Rq> is the type of the message it must handle
 * @since 1.0
 */
public interface InternalMessageHandler<Rq> extends Switcher
{

    /**
     * <p>
     * Process an internal message
     * </p>
     *
     * @param message The message to be processed
     * @return true if the message could be processed
     */
    boolean handle(@NotNull Rq message);

}
java

スイッチャー