Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerMule Runtime Engine のバージョン 4.3 では、アプリケーションのパフォーマンスが大幅に向上するのに加えて、引き続き Anypoint Platform でのアプリケーション開発を効率化でき、組織の活動に不可欠なユースケースで弾力性のあるランタイムを実現できます。
この新バージョンで実現されたすべての機能強化を活用するために、アプリケーションを Mule 4.3 に移行することをお勧めします。
Mule 4.3 のスレッド処理は Mule 4.2 や 4.1 とは異なります。
以前のバージョンでは、Mule は 3 つの異なるスレッドプールを所有し、管理していました。これらのスレッドプールはそれぞれ異なる処理種別 (CPU_LIGHT、IO、CPU_INTENSIVE) 専用でした。タスクはプロアクター設計パターンを使用してこれらのプールに送信されていました。
Mule 4.3 以降では、引き続きプロアクターパターンが適用されますが、これらのスレッドプールが 1 つの一意のスレッドプールに結合されました。
新しいスレッドモデルおよびアップグレード手順についての詳細は、「実行エンジン」を参照してください。
Mule 4.3.0 リリースには DataWeave 2.3.0 の機能が含まれています。
この機能により、機能の再帰について理解することなく、ネストされたデータ構造で 1 つの値を簡単に更新できるようになります。
次のオブジェクトの配列は、DataWeave ソースに対する入力ペイロードになります。
[
{
"ID" : 4128506,
"name": "Ken",
"age": 30
},
{
"ID" : 1823940,
"name": "Tomo",
"age": 70
},
{
"ID": 9086582,
"name": "Kajika",
"age": 10
}
]
次の DataWeave スクリプトでは、map
関数を使用してオブジェクトの入力配列の要素で反復処理を行います。新しい update
演算子を使用して各オブジェクトの 2 つのキー - 値ペアを変更します: 値が "Tomo"
の場合は "name"
キーの値に文字列 " (Christian)"
を結合 (++
) し、すべての "age"
キーの値を 1
増加させます。
%dw 2.0
output application/json
---
payload map ((user) ->
user update {
case name at .name if(name == "Tomo") -> name ++ " (Christian)"
case age at .age -> age + 1
}
)
JSON 出力により、文字列 " (Christian)"
が値 "Tomo"
に追加され、"age"
値が 1
増加されていることがわかります。"Tomo"
に一致しない "name"
キー値と同じく、"ID"
キーの値は同じままです。
[
{
"ID": 4128506,
"name": "Ken",
"age": 31
},
{
"ID": 1823940,
"name": "Tomo (Christian)",
"age": 71
},
{
"ID": 9086582,
"name": "Kajika",
"age": 11
}
]
詳細なドキュメントについては、「update 演算子」を参照してください。
XML ストリーミング:
XML 形式の DataWeave リーダーでストリーミングがサポートされるようになりました。ストリーミングを有効化するには、collectionPath
および streaming
リーダープロパティを指定する必要があります。
ストリーミングを行う場合、XML パーサーはすべての XML コンテンツがなくてもコンテンツの処理を開始できます。これは、大きなコンテンツを扱うときに特に便利です。
詳細は、「XML 形式」を参照してください。
JSON のストリーミングの改善:
JSON リーダーで配列のみではなく JSON ドキュメント全体のストリーミングがサポートされるようになりました。
詳細は、「JSON 形式」を参照してください。
この機能により、Literal (リテラル) 型に対する DataWeave のサポートが実現されます。Literal (リテラル) 型は、ちょうど 1 つの値を表すデータ型です。つまり、たとえば、DataWeave はデータ型 hello
を使用して String
値 "hello"
を表すことができます。この機能により、関数のオーバーロードがきわめて動的になり、Union
型と組み合わせた場合に、DataWeave でデータ型としてリテラル値の列挙を表せるようになります。たとえば、次のようになります。
type Weekdays = "Monday" | "Tuesday" | "Wednesday" | "Thursday" | "Friday"
type Days = Weekdays | "Saturday" | "Sunday"
fun greeting(day : "Monday") = "Best of luck in this new work week!"
fun greeting(day : "Friday") = "YAY, it's Friday! Have an awesome day!"
fun greeting(day: Weekdays) = "Have a nice day at work!"
fun greeting(day: Days) = "We hope you have a great day!"
greeting
関数によって次のメッセージが表示されます。
週末 (土曜日と日曜日のみ) には一般的なメッセージ ("We hope you have a great day!"
)。
火曜日から木曜日には仕事固有のメッセージ ("Have a nice day at work!"
)。
平日の初日と最終日 (月曜日と金曜日) にはカスタマイズしたメッセージ。
DataWeave は、スクリプトで関数が宣言されている順序に従って、関数コールの引数を受け入れる最初の関数を使用します。
詳細なドキュメントについては、「Literal (リテラル) 型」を参照してください。
この機能により、期間を簡単に操作し、結果を別の単位に変換して、期間を複数の部分に分解できるようになります。
次の例は、Duration
値を分解する方法を示しています。ヘッダーで 1 つの DateTime
値を別の値から減算する period
変数を定義しています。このスクリプトでは、生成された period
値から hours
値、minutes
値、secs
値を選択して、操作の結果を分解しています。
%dw 2.0
output application/json
var period = (|2010-12-10T12:10:12| - |2010-12-10T10:02:10|)
---
{
hours: period.hours,
minutes: period.minutes,
secs: period.secs,
}
JSON 出力では、period
から選択された hours
値、minutes
値、secs
値の生成された数値が表示されます。
{
"hours": 2,
"minutes": 8,
"secs": 2
}
詳細なドキュメントについては、「期間」を参照してください。
この機能により、出力データ形式とは別に出力 MIME タイプを定義できます。また、出力形式と入力形式の定義がよりシンプルになります。
%dw 2.0
output json
---
{
Hello: “there”
}
ドキュメントについては、「MIME タイプの設定」を参照してください。
DataWeave により、このリリースのメモリ使用、関数 (groupBy
など)、内部実行エンジンのパフォーマンスが改善されます。
共通部分式の除去:
共通部分式除去は、スクリプトを最適化するために含まれています。DataWeave では、反復される部分式を表す内部変数を定義し、これによってその部分式の実行の反復を 1 つの式に置き換えることで、スクリプトが最適化されるようになりました。
%dw 2.0
output json
---
{
code: payload.message.code,
message : payload.message.value,
user : payload.message.users[0].name,
contact: payload.message.users[0].email
}
内部的には、上記の例のスクリプトは次の例で示しているように処理されます。ここで、変数は反復される各式について定義されるため、1 回しか実行されません。
%dw 2.0
output json
var fakeVariable1 = payload.message
var fakeVariable2 = fakeVariable1.users[0]
---
{
code: fakeVariable1.code,
message : fakeVariable1.value,
user : fakeVariable2.name,
contact: fakeVariable2.email
}
メモリ管理の改善:
メモリ管理が一元化されました。ダイレクトメモリのプールやヒープメモリの排他的な使用など、いくつかのメモリ管理戦略が含まれています。
DataWeave では、データ型イントロスペクションをサポートするためにデータ型 (dw::core::Types
) モジュールが導入されています。この新しいモジュールには多数の関数と新しいデータ方が含まれます。詳細は、「データ型 (dw::core::Types)」を参照してください。
DataWeave では、既存のモジュールの多数の新しい関数も導入されています。
コア (dw::Core
) モジュール: entriesOf
、keysOf
、namesOf
、valuesOf
。
配列 (dw::core::Arrays
) モジュール: firstWith
。
オブジェクト (dw::core::Objects
) モジュール: everyEntry
、someEntry
、takeWhile
。dropWhile
には、反復処理し、条件が true になるまで配列内の項目を無視する新しい関数も含まれます。
文字列 (dw::core::Strings
) モジュール: withMaxSize
により、特定の値の最大サイズを指定できます。サイズの上限を超えた値は切り捨てられます。サイズが制限より大きくない場合、値は同じままになります。
非推奨:
オブジェクトモジュールの entrySet
関数、keySet
関数、nameSet
関数、valueSet
関数はこのリリースでは非推奨であり、コアモジュールの entriesOf
関数、keysOf
関数、namesOf
関数、valuesOf
関数に置き換えられています。
DataWeave では、Intersection
型が導入されています。Intersection
型は Object
型に追加されます。
Intersection (交差) 型の構文は次のとおりです。
TypeA & TypeB & ...
ドキュメントについては、「Type System (データ型の体系)」を参照してください。
エラーメッセージの解析で、トークンの欠落、不完全な定義などの一般的な問題がより正確に反映されるようになりました。この問題の解決方法に関するヒントと例も含まれています。
DataWeave では、サポートされる DataWeave 形式の新規および強化済みのリーダーとライターのプロパティが多数導入されています。
バイナリ (application/octet-stream
) 形式: encoding
DataWeave (application/dw
) 形式: onlyData
ライタープロパティとすべてのリーダープロパティ (externalResources
、javaModule
、onlyData
)
JSON (application/json
) 形式: writeAttributes
XML (application/xml
) 形式: escapeCR
ライタープロパティといくつかのリーダープロパティ (collectionPath
、maxAttributeSize
、optimizeFor
、supportDtd
、streaming
)
YAML (application/yaml
) 形式: maxEntityCount
リーダープロパティ
説明については、「サポートされるデータ形式」のこれらの形式へのリンクを参照してください。
次のコアコンポーネントは機能強化され、新しい機能が追加されています。
Until Successful コンポーネント:
Max Retries (maxRetries
) と Milliseconds Between Retries (millisBetweenRetries
) で、数値または数値に解決される式がサポートされるようになりました。
詳細なドキュメントについては、「Until Successful スコープ」を参照してください。
Batch Aggregator コンポーネントでは preserveMimeTypes
属性が追加されています。
集約されたレコードは、各レコードのペイロードが含まれる配列としてアグリゲーターに渡されます。ただし、デフォルトではそれらのペイロードに関連付けられている MIME タイプは保持されません。Batch Aggregator の preserveMimeTypes
属性を指定して、レコードの MIME タイプを保持できます。この変更により、JSON や XML など、構造化されたテキスト形式のペイロードからのレコードを処理するのが簡単になりました。
詳細なドキュメントについては、「Batch Step 処理の絞り込み」を参照してください。