Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerDevKit は、Studio 6 および Mule 3 とのみ互換性があります。Mule 4 Connector を作成するには、 「Mule SDK」ドキュメントを参照してください。 |
大量のレコードを処理する場合は、クエリページネーションが必要になります。この主な利点は、Mule Runtime がメモリ内のすべてのレコードを同時に処理する代わりに、一度にまとまったレコードを部分的に処理する場合のパフォーマンスです。
コネクタにページネーションを実装するには、接続するサービスの API でページネーション機能が提供されることを確認してください。 |
コネクタでページネーションを有効にすると、返されるプロセッサの種別が変更される可能性があるため、(Mule Runtime 3.5.x より前の) 古い Mule バージョンとの後方互換性がなくなる可能性があります。 |
コネクタでのページネーションの有効化は非常に簡単です。@Processor
メソッドが満たす必要がある条件は 3 つのみです。
メソッドに @Paged
のアノテーションを付加する
org.mule.api.streaming.PagingConfiguration
型のパラメータを受け取る必要がある
戻り値のデータ型は ProviderAwarePagingDelegate
である必要がある
@Paged
@Processor
public ProviderAwarePagingDelegate query(String query, final PagingConfiguration pagingConfiguration) throws Exception
{
return new CustomPagingDelegate(query,pagingConfiguration);
}
public QueryResult executeQuery(String query, String nextItem) throws Exception {
myServiceClient.query(query,nextItem);
}
注意: @Processor
メソッドと操作 executeQuery
の違い。プロセッサは、後で (ページを取得するときに) すでに接続されているコネクタインスタンスを受け取り、それに応じて executeQuery
を実行する PagingDelegate
を返します。
ProviderAwarePagingDelegate
は、ページネーションが実行される場所です。2 種類の引数 (この場合は T と P) が必要な ProviderAwarePagingDelegate
抽象クラスを見てみましょう。次のクラス定義では、T は返されるデータを表し、P はデータのプロバイダである Anypoint Connector を表します。
public abstract class ProviderAwarePagingDelegate<T, P> implements Closeable
{
/**
* Returns the next page of items. If the return value is
* <code>null</code> or an empty list, then it means
* no more items are available
*
* @param provider The provider to be used to do the query.
* You can assume this provider is already properly initialized
* @return a populated list of elements. <code>null</code>
* or an empty list, then it means no more items are available
* @throws Exception
*/
public abstract List<T> getPage(P provider) throws Exception;
/**
* Returns the total amount of items in the non-paged result set.
* In some scenarios, it might not be possible or
* convenient to actually retrieve this value. -1 is
* returned in such a case.
*
* @param provider The provider to be used to do the query.
* You can assume this provider is already properly initialized.
*/
public abstract int getTotalResults(P provider) throws Exception;
/**
* Close whatever external resource you might use
*/
@Override
public void close() throws MuleException;
}
メソッド getPage(P provider)
および getTotalResults(P provider)
を実行すると、Anypoint Connector DevKit は接続プールから適切なコネクタのインスタンスを選択します。
/**
* Example of Paging Delegate implementation
*/
public class CustomPagingDelegate extends ProviderAwarePagingDelegate<Item,CustomConnector> {
List<Item> cachedPage;
String query;
String nextItem;
int totalItems = -1;
public CustomPagingDelegate(String query, PagingConfiguration pagingConfiguration) {
this.query = query;
}
@Override
public List<Item> getPage(CustomConnector provider) throws Exception {
if (cachedPage != null) return cachedPage;
QueryResult queryResult = provider.executeQuery(query,nextItem);
nextItem = queryResult.nextItem();
return queryResult.items();
}
@Override
public int getTotalResults(CustomConnector provider) throws Exception {
if (totalItems != -1) return totalItems;
QueryResult queryResult = provider.executeQuery(query,nextItem);
nextItem = queryResult.nextItem();
totalItems = queryResult.totalItemsCount();
cachedPage = queryResult.items();
return totalItems;
}
@Override
public void close() throws MuleException {
//Close whatever external resource you might use
}
}
ProviderAwarePagingDelegate
の独自のバージョンを作成するには、それを拡張する必要があります。このクラスの単純な拡張例を次に示します。
次へ: コネクタへのテストの追加方法の学習。
リファレンスドキュメントの作成。