Flex Gateway新着情報
Governance新着情報
Monitoring API Manager
可能な場合は、Equality の会社の値に一致するように、含めない用語を変更しました。顧客の実装に対する影響を回避するために、一部の用語は変更されていません。 |
文字列を元に戻すメソッドを使用して、完全なサービス、外部メッセージハンドラー、内部メッセージハンドラーの実装など、Anypoint Runtime Manager エージェントを拡張できます。
Runtime Manager エージェントには、次の拡張可能なコンポーネントが含まれています。
サービス
外部メッセージハンドラー
内部メッセージハンドラー
Runtime Manager エージェントのカスタムコンポーネントは、次の構造に従う必要があります。
/lib
にはコンポーネントの連動関係を含めます。
/classes
にはコンパイルされたクラスを含めます。
カスタムコンポーネントも Java 1.7 でコンパイルする必要があります。それよりも新しいバージョンでコンパイルされたコンポーネントはエージェントによって読み込まれません。
この例では、エージェントを拡張するために必要なライブラリを取得するために、pom.xml
に次の連動関係を追加します。
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<mule.agent.version>1.6.4-mule-3.x</mule.agent.version>
<jersey.core.version>2.11</jersey.core.version>
<commons.lang.version>2.4</commons.lang.version>
</properties>
<dependencies>
<dependency>
<groupId>com.mulesoft.agent</groupId>
<artifactId>mule-agent-api</artifactId>
<version>${mule.agent.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>${jersey.core.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<scope>provided</scope>
<version>${commons.lang.version}</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>mulesoft-ci-releases</id>
<name>ci releases</name>
<url>https://repository-master.mulesoft.org/nexus/content/repositories/releases-ee/<url>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
このリポジトリへのアクセスについては、MuleSoft サポートにお問い合わせください。
|
対応する JAR は、Mule インスタンスの plugins
フォルダーにある mule-agent
プラグイン内の lib
フォルダーに追加します。例: $MULE_HOME/plugins/mule-agent/lib/<component name>.jar
。
新しいサービスを追加するには、MuleAgentService
インターフェースを実装します。
カスタムサービスに関する考慮事項
サービスは、@Inject
アノテーションを使用することによって、Runtime Manager エージェント環境に登録されている任意の内部ハンドラーを実行できます。
新しいサービスを作成するために Runtime Manager エージェントアーキテクチャに従う必要はありません。
@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
}
}
新しいサービスを追加するには、クラスを含む JAR を mule-agent
プラグインフォルダー内の lib
フォルダー ($MULE_HOME/mule-agent/lib
など) に置きます。
上で説明したように、このドキュメントでは簡単な例を使用して、文字列を元に戻すための完全な拡張を記述する方法を説明します。最初のステップは、この目的のためのサービスを追加することです。
@Named("com.company.service.reverse")
@Singleton
public class ReverseService implements MuleAgentService
{
@Inject
List<InternalMessageHandler<String>> messageHandlerList;
@Override
public List<InternalMessageHandler> getInternalHandlers()
{
return new ArrayList<InternalMessageHandler>(messageHandlerList);
}
@Override
public void enable(boolean b) throws AgentEnableOperationException
{
}
@Override
public boolean isEnabled()
{
return true;
}
public String getConvertedString(String origString)
{
String reverted = StringUtils.reverse(origString);
for (InternalMessageHandler<String> internalMessageHandler : messageHandlerList)
{
internalMessageHandler.handle(reverted);
}
return reverted;
}
}
新しい外部メッセージハンドラーを追加するには、Runtime Manager エージェントの文字列復元の外部メッセージハンドラーインターフェースを実装する必要があります。
カスタム外部メッセージハンドラーに関する考慮事項
外部メッセージハンドラーは、トランスポートに挿入されます。
外部メッセージハンドラーは、スレッドセーフである必要があります。
外部メッセージハンドラーは、トランスポートによって実行され、Mule とやりとりすることはできません。 サービスのみが Mule とやりとりできます。
@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()
{
}
}
@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
}
}
新しい外部メッセージハンドラーを追加するには、クラスを含む 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);
}
}
上記のコードは、<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
}
}
新しい内部メッセージハンドラーを追加するには、クラスを含む JAR を mule-agent
プラグインフォルダー内の lib
フォルダー ($MULE_HOME/mule-agent/lib
など) に置きます。
次のコードは、文字列復元の例の内部メッセージハンドラーを示しています。
@Named("com.mulesoft.agent.test.extension.internalHandler")
@Singleton
public class ReverseInternalHandler extends BufferedHandler<String>
{
@Configurable("true")
protected boolean enabled;
@Configurable
public String host;
@Configurable
public String port;
@Inject
public ReverseInternalHandler()
{
super();
}
@Override
protected boolean canHandle(String t)
{
return true;
}
@Override
protected boolean flush(Collection<String> ts)
{
String tempDir = System.getProperty("java.io.tmpdir");
File revertedStringFile = new File(tempDir, "revertedString.txt");
FileOutputStream fos = null;
BufferedWriter bw = null;
try
{
fos = new FileOutputStream(revertedStringFile);
bw = new BufferedWriter(new OutputStreamWriter(fos));
for (String string : ts)
{
bw.write(string);
bw.newLine();
}
}
catch (IOException e)
{
System.out.println("Error writing reversed string");
return false;
} finally {
if (bw != null){
try {
bw.close();
} catch(IOException x) {
}
}
if (fos != null){
try{
fos.close();
} catch(IOException x) {
}
}
}
return true;
}
@PostConfigure
public void postConfigure()
{
}
@Override
public void enable(boolean b) throws AgentEnableOperationException
{
enabled = b;
}
@Override
public boolean isEnabled()
{
return enabled;
}
}
内部メッセージハンドラーは、サービスによって処理されたメッセージを revertedString.txt
というファイルに書き込みます。
**
* <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();
}
/**
* <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
{
}
/**
* <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);
}
/**
* <p>
* All the classes implementing this interface will be able to enable/disable themselves
* </p>
*
* @since 1.0
*/
public interface Switcher
{
/**
* <p>
* Turn the feature on, the class will be behave as expected
* <br/>
* If the feature is being disabled, any resources it has allocated should be freed and taken again when it is reenabled
* </p>
* @param state true if enabled, false otherwise
* @throws AgentEnableOperationException if the end state is not the requested one
*/
void enable(boolean state) throws AgentEnableOperationException;
/**
* <p>
* Check the state of the class
* </p>
*
* @return true if it is on, false otherwise
*/
boolean isEnabled();
}