Red Hat build of Apache Camel for Quarkus リファレンス
Red Hat が提供する Red Hat build of Apache Camel for Quarkus
概要
はじめに
多様性を受け入れるオープンソースの強化
Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、Red Hat CTO である Chris Wright のメッセージ をご覧ください。
第1章 エクステンションの概要
1.1. サポートレベルの定義
新しい機能、サービス、およびコンポーネントは、いくつかのサポートレベルを通過してから、実稼働環境での使用に適したフルサポート対象の機能として Red Hat build of Apache Camel for Quarkus に組み込まれます。これは、Red Hat の製品に期待されるエンタープライズグレードの安定性と、新しい Red Hat build of Apache Camel for Quarkus テクノロジーをお客様やパートナーにお試しいただき、今後の開発活動の指針となるフィードバックを得る必要性との間の適切なバランスを確保するためです。
型 | 説明 |
---|---|
コミュニティーサポート | Red Hat のアップストリームファーストへの取り組みの一環として、Red Hat build of Apache Camel for Quarkus ディストリビューションへの新しいエクステンションの統合が、アップストリームコミュニティーで始まります。これらのエクステンションはアップストリームでテストされ、文書化されていますが、弊社はこれらのエクステンションの成熟度を確認しておらず、今後の製品リリースで Red Hat によって正式にサポートされない可能性があります。 注記 コミュニティーエクステンションは、Camel Quarkus コミュニティープロジェクトのエクステンションリファレンスページにリストされています。 |
テクノロジープレビュー | テクノロジープレビューの機能は、最新の技術をいち早く提供して、開発段階で機能のテストやフィードバックの収集を可能にするために提供されます。ただし、これらの機能は Red Hat サブスクリプションレベルアグリーメントでは完全にサポートされておらず、機能的に完全でない可能性があり、実稼働環境での使用を目的としていません。Red Hat ではテクノロジープレビュー機能を今後も繰り返し使用することで一般提供に移行できると考えていることから、お客様がこの機能を使用する際に発生する問題の解決に取り組みます。 |
製品サポート | 製品サポートのエクステンションは、Red Hat の公式リリースに含まれており、完全にサポートされます。ドキュメントにギャップはなく、エクステンションはサポートされるすべての設定でテストされます。 |
1.2. サポートされるエクステンション
87 のエクステンションがあります。
エクステンション | アーティファクト | JVM サポートレベル | ネイティブサポートレベル | 説明 |
---|---|---|---|---|
Amqp | 製品サポート | 製品サポート | Apache QPid クライアントを使用した AMQP プロトコルによるメッセージング。 | |
Attachments | 製品サポート | 製品サポート | Camel メッセージでの添付のサポート | |
Aws2-cw | 製品サポート | 製品サポート | AWS SDK バージョン 2.x を使用してメトリクスを AWS CloudWatch に送信します。 | |
Aws2-ddb | 製品サポート | 製品サポート | AWS SDK バージョン 2.x を使用して、AWS DynamoDB サービスからデータを保存および取得したり、AWS DynamoDB Stream からメッセージを受信したりします。 | |
Aws2-kinesis | 製品サポート | 製品サポート | AWS SDK バージョン 2.x を使用して、AWS Kinesis Streams からレコードを消費および作成します。 | |
Aws2-lambda | 製品サポート | 製品サポート | AWS SDK バージョン 2.x を使用して、AWS Lambda 関数を管理および呼び出します。 | |
Aws2-s3 | 製品サポート | 製品サポート | AWS SDK バージョン 2.x を使用して、AWS S3 Storage Service からオブジェクトを保存および取得します。 | |
Aws2-sns | 製品サポート | 製品サポート | AWS SDK バージョン 2.x を使用して AWS Simple Notification Topic にメッセージを送信します。 | |
Aws2-sqs | 製品サポート | 製品サポート | AWS SDK バージョン 2.x を使用して AWS SQS サービスを送信先および送信元としてメッセージを送受信します。 | |
Azure-servicebus | テクノロジープレビュー | なし | Azure Service Bus との間でメッセージを送受信します。 | |
Azure-storage-blob | テクノロジープレビュー | テクノロジープレビュー | SDK v12 を使用して Azure Storage Blob Service からブロブを保存および取得します。 | |
Azure-storage-queue | テクノロジープレビュー | テクノロジープレビュー | azure-storage-queue コンポーネントは、Azure SDK v12 を使用して Azure Storage Queue への/からのメッセージを保存および取得するために使用されます。 | |
Bean | 製品サポート | 製品サポート | Java Bean のメソッドを呼び出します。 | |
Bean-validator | 製品サポート | 製品サポート | Java Bean Validation API を使用してメッセージボディーを検証します。 | |
Browse | 製品サポート | 製品サポート | BrowsableEndpoint をサポートするエンドポイントで受信したメッセージを調べます。 | |
Cassandraql | 製品サポート | 製品サポート | CQL3 API (Thrift API 以外) を使用して Cassandra 2.0 と統合します。DataStax が提供する Cassandra Java Driver をベースにしています。 | |
CLI-connector | 製品サポート | 製品サポート | Camel CLI に接続するランタイムアダプター | |
Controlbus | 製品サポート | 製品サポート | Camel ルートを管理および監視します。 | |
Core | 製品サポート | 製品サポート | Camel コア機能と基本的な Camel 言語/Constant、ExchangeProperty、Header、Ref、Simple および Tokeinze | |
Crypto | 製品サポート | 製品サポート | Java Cryptographic Extension (JCE) の署名サービスを使用してエクスチェンジに署名し、検証します。 | |
Cron | 製品サポート | 製品サポート | Unix cron 構文で指定されたタイミングでイベントをトリガーする汎用インターフェイス。 | |
CXF-soap | 製品サポート | 製品サポート | Apache CXF を使用して SOAP WebServices を公開するか、CXF WS クライアントを使用して外部 WebServices に接続します。 | |
Dataformat | 製品サポート | 製品サポート | Camel Data Format を通常の Camel コンポーネントとして使用します。 | |
Dataset | devSupport | devSupport | Camel アプリケーションの負荷テストおよびソークテスト用のデータを提供します。 | |
Direct | 製品サポート | 製品サポート | 同じ Camel コンテキストから別のエンドポイントを同期的に呼び出します。 | |
Fhir | 製品サポート | 製品サポート | FHIR (Fast Healthcare Interoperability Resources) 規格を使用して、ヘルスケアドメインの情報を交換します。JSON との間で FHIR オブジェクトをマーシャリングおよびアンマーシャリングします。XML との間で FHIR オブジェクトをマーシャリングおよびアンマーシャリングします。 | |
File | 製品サポート | 製品サポート | ファイルの読み取りと書き込みを行います。 | |
Ftp | 製品サポート | 製品サポート | SFTP、FTP、または SFTP サーバーとの間でファイルをアップロードおよびダウンロードする | |
Google-bigquery | 製品サポート | 製品サポート | SQL クエリーまたは Google Client Services API を使用して Google Cloud BigQuery サービスにアクセスする | |
Google-pubsub | 製品サポート | 製品サポート | Google Cloud Platform PubSub サービスとの間でメッセージを送受信します。 | |
Grpc | 製品サポート | 製品サポート | gRPC エンドポイントを公開し、外部 gRPC エンドポイントにアクセスします。 | |
HTTP | 製品サポート | 製品サポート | Apache HTTP Client 5.x を使用して、外部の HTTP サーバーにリクエストを送信します。 | |
Infinispan | 製品サポート | 製品サポート | Infinispan の分散キー/値のストアとデータグリッドの読み取りと書き込みを行います。 | |
Java-joor-dsl | community | community | 実行時の Java ルート定義の解析のサポート | |
Jdbc | 製品サポート | 製品サポート | SQL および JDBC を通じてデータベースにアクセスします。 | |
Jira | 製品サポート | 製品サポート | JIRA 問題トラッカーと対話します。 | |
Jms | 製品サポート | 製品サポート | JMS Queue または Topic との間でメッセージを送受信します。 | |
Jpa | 製品サポート | 製品サポート | Java Persistence API (JPA) を使用して、データベースから Java オブジェクトを保存し、取得します。 | |
Jta | 製品サポート | 製品サポート | Java Transaction API (JTA) および Narayana トランザクションマネージャーを使用して、Camel ルートをトランザクションに含めます。 | |
Kafka | 製品サポート | 製品サポート | Apache Kafka ブローカーとの間でメッセージを送受信します。 | |
Kamelet | 製品サポート | 製品サポート | ルートテンプレートを具体化する | |
Kubernetes | テクノロジープレビュー | テクノロジープレビュー | Kubernetes API に対して操作を実行する | |
言語 | 製品サポート | 製品サポート | Camel がサポートする任意の言語でスクリプトを実行します。 | |
Ldap | 製品サポート | 製品サポート | LDAP サーバーで検索を実行します。 | |
Log | 製品サポート | 製品サポート | 基礎となるロギングメカニズムにメッセージをログとして記録します。 | |
| 製品サポート | 製品サポート | imap、pop3、および smtp プロトコルを使用してメールを送受信します。添付のある Camel メッセージを MIME-Multipart メッセージに、またはその逆にマーシャリングします。 | |
管理 | 製品サポート | 製品サポート | JMX 管理ストラテジーと関連する管理リソース。 | |
Mapstruct | 製品サポート | 製品サポート | Mapstruct を使用した型変換 | |
Master | 製品サポート | 製品サポート | クラスター内の単一のコンシューマーのみが特定のエンドポイントから消費するようにします。JVM が停止した場合に自動的にフェイルオーバーします。 | |
Micrometer | 製品サポート | 製品サポート | Micrometer ライブラリーを使用して、Camel ルートからさまざまなメトリクスを直接収集します。 | |
Microprofile-fault-tolerance | 製品サポート | 製品サポート | Microprofile フォールトトレラン を使用した Circuit Breaker EIP | |
Microprofile-health | 製品サポート | 製品サポート | MicroProfile Health による Camel ヘルスチェックの公開 | |
Minio | 製品サポート | 製品サポート | Minio SDK を使用して、Minio Storage Service からオブジェクトを保存および取得します。 | |
Mllp | 製品サポート | 製品サポート | MLLP プロトコルを使用して外部システムと通信します。 | |
Mybatis | 製品サポート | 製品サポート | MyBatis を使用して、リレーショナルデータベースでクエリー、ポーリング、挿入、更新、または削除を実行します。 | |
Mock | 製品サポート | 製品サポート | モックを使用してルートおよび仲介ルールをテストします。 | |
Mongodb | テクノロジープレビュー | テクノロジープレビュー | MongoDB ドキュメントおよびコレクションの操作を実行します。 | |
Netty | 製品サポート | 製品サポート | Netty 4.x で TCP または UDP を使用するソケットレベルのネットワーク。 | |
Netty-http | 製品サポート | 製品サポート | Netty 4.x を使用する Netty HTTP サーバーおよびクライアント。 | |
Openapi-java | 製品サポート | 製品サポート | Camel REST DSLL で定義された OpenAPI リソースを公開する | |
OpenTelemetry | テクノロジープレビュー | テクノロジープレビュー | OpenTelemetry を使用した分散トレース | |
Quartz | 製品サポート | 製品サポート | Quartz 2.x スケジューラーを使用してメッセージの送信をスケジュールします。 | |
Paho | 製品サポート | 製品サポート | Eclipse Paho MQTT クライアントを使用して MQTT メッセージブローカーと通信します。 | |
Paho-mqtt5 | 製品サポート | 製品サポート | Eclipse Paho MQTT v5 クライアントを使用して MQTT メッセージブローカーと通信します。 | |
Platform-http | 製品サポート | 製品サポート | 現在のプラットフォームで利用可能な HTTP サーバーを使用して HTTP エンドポイントを公開します。 | |
Ref | 製品サポート | 製品サポート | Camel Registry で名前によって動的に検索されたエンドポイントにメッセージをルーティングします。 | |
Rest | 製品サポート | 製品サポート | REST サービスおよび OpenAPI Specification を公開するか、外部の REST サービスを呼び出します。 | |
Rest-openapi | 製品サポート | 製品サポート | RestProducerFactory インターフェイスを実装するコンポーネントに委任する OpenAPI 仕様ドキュメントに基づいて REST プロデューサーを設定します。 | |
Salesforce | 製品サポート | 製品サポート | Java DTO を使用して Salesforce と通信します。 | |
SAP | 製品サポート | なし | SAP Camel コンポーネントを提供します。 | |
Saxon | 製品サポート | 製品サポート | XQuery および Saxon を使用して XML ペイロードをクエリーまたは変換します。 | |
Scheduler | 製品サポート | 製品サポート | java.util.concurrent.ScheduledExecutorService を使用して、指定された間隔でメッセージを生成します。 | |
Seda | 製品サポート | 製品サポート | 同じ JVM の Camel コンテキストから別のエンドポイントを非同期に呼び出します。 | |
Slack | 製品サポート | 製品サポート | Slack との間でメッセージを送受信します。 | |
SNMP | 製品サポート | なし | トラップを受信し、SNMP (Simple Network Management Protocol) 対応デバイスをポーリングします。 | |
Splunk | 製品サポート | 製品サポート | Splunk でイベントを公開または検索します。 | |
Sql | 製品サポート | 製品サポート | SQL クエリーを実行します。 | |
Telegram | 製品サポート | 製品サポート | Telegram Bot API として動作するメッセージを送受信します。 | |
タイマー | 製品サポート | 製品サポート | java.util.Timer を使用して、指定された間隔でメッセージを生成します。 | |
Validator | 製品サポート | 製品サポート | XML スキーマと JAXP 検証を使用してペイロードを検証します。 | |
Velocity | 製品サポート | 製品サポート | Velocity テンプレートを使用してメッセージを変換します。 | |
Vertx-http | 製品サポート | 製品サポート | Vert.x による Camel HTTP クライアントのサポート | |
Vertx-websocket | 製品サポート | 製品サポート | Vert.x による Camel WebSocket のサポート | |
XML IO DSL | 製品サポート | 製品サポート | XML ルート定義を解析するための XML スタック | |
XSLT | 製品サポート | 製品サポート | XSLT テンプレートを使用して XML ペイロードを変換します。 | |
XSLT-Saxon | 製品サポート | 製品サポート | Saxon を使用した XSLT テンプレートを使用して XML ペイロードを変換します。 | |
Yaml-dsl | 製品サポート | 製品サポート | YAML ルート定義を解析するための YAML スタック | |
Zipfile | 製品サポート | 製品サポート | java.util.zip.ZipStream を使用して、ストリームを圧縮および圧縮解除します。 | |
Zip-deflater | 製品サポート | 製品サポート | java.util.zip.Deflater、java.util.zip.Inflater、または java.util.zip.GZIPStream を使用して、ストリームを圧縮および解凍します。 |
1.3. サポート言語
7 つの言語があります。
エクステンション | アーティファクト | JVM サポートレベル | ネイティブサポートレベル | 説明 |
---|---|---|---|---|
Bean | 製品サポート | 製品サポート | Java Bean のメソッドを呼び出します。 | |
Core | 製品サポート | 製品サポート | Camel コア機能と基本的な Camel 言語/Constant、ExchangeProperty、Header、Ref、Simple および Tokeinze | |
Hl7 | 製品サポート | 製品サポート | HL7 MLLP コーデックを使用して、HL7 (Health Care) モデルオブジェクトをマーシャリングおよびアンマーシャリングします。 | |
Jsonpath | 製品サポート | 製品サポート | JSON メッセージのボディーに対して、JSONPath 式を評価します。 | |
Jslt | 製品サポート | 製品サポート | JSLT を使用して JSON ペイロードをクエリーまたは変換します。 | |
Saxon | 製品サポート | 製品サポート | XQuery および Saxon を使用して XML ペイロードをクエリーまたは変換します。 | |
Xpath | 製品サポート | 製品サポート | XML ペイロードに対して XPath 式を評価します。 |
1.4. サポートされるデータフォーマット
データフォーマットは 10 個あります。
エクステンション | アーティファクト | JVM サポートレベル | ネイティブサポートレベル | 説明 |
---|---|---|---|---|
Avro | 製品サポート | 製品サポート | Apache Avro バイナリーデータフォーマットを使用して、メッセージをシリアライズおよびデシリアライズします。 | |
Bindy | 製品サポート | 製品サポート | Camel Bindy を使用して、片側の POJO と、反対側のコンマ区切り値 (CSV)、固定フィールド長、またはキーと値のペア (KVP) 形式の間のマーシャリングとアンマーシャル | |
Crypto (Java Cryptographic Extension) | 製品サポート | 製品サポート | Camel のマーシャルおよびアンマーシャルフォーマットメカニズムを使用した対称 (共有鍵) 暗号化および復号化。 | |
Gson | 製品サポート | 製品サポート | Gson を使用して、POJO を JSON に、およびその逆にマーシャリングします。 | |
Hl7 | 製品サポート | 製品サポート | HL7 MLLP コーデックを使用して、HL7 (Health Care) モデルオブジェクトをマーシャリングおよびアンマーシャリングします。 | |
Jackson | 製品サポート | 製品サポート | Jackson を使用して、POJO を JSON にマーシャリングし、その逆も行います。 | |
Jackson-avro | 製品サポート | 製品サポート | Jackson を使用して、POJO を Avro にマーシャリングし、その逆も行います。 | |
Jackson-protobuf | 製品サポート | 製品サポート | Jackson を使用して、POJO を Protobuf にマーシャリングし、その逆も行います。 | |
Jacksonxml | 製品サポート | 製品サポート | Jackson の XMLMapper エクステンションを使用して、XML ペイロードを POJO にアンマーシャリングし、戻します。 | |
Jaxb | 製品サポート | 製品サポート | JAXB2 XML マーシャリング標準を使用して、XML ペイロードを POJO に、およびその逆にアンマーシャリングします。 | |
Xml-jaxp | 製品サポート | 製品サポート | XML JAXP タイプコンバーターおよびパーサー | |
PGP | 製品サポート | 製品サポート | Camel のマーシャルおよびアンマーシャルフォーマットメカニズムを使用した対称 (共有鍵) 暗号化および復号化。 | |
Soap | 製品サポート | 製品サポート | Java オブジェクトを SOAP メッセージにマーシャリングし、その逆も行います。 | |
Xml-JAXP | 製品サポート | 製品サポート | XML JAXP タイプコンバーターおよびパーサー |
第2章 エクステンションの参照情報
この章では、Red Hat build of Apache Camel for Quarkus に関するリファレンス情報を提供します。
2.1. AMQP
Apache QPid クライアントを使用した AMQP プロトコルによるメッセージング。
2.1.1. 含まれるもの
-
AMQP コンポーネント、URI 構文:
amqp:destinationType:destinationName
使用方法と設定の詳細は、上記リンクを参照してください。
2.1.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-amqp</artifactId> </dependency>
2.1.3. 使用方法
2.1.3.1. org.w3c.dom.Node
を使用したメッセージマッピング
Camel AMQP コンポーネントは、jakarta.jms.Message
および org.apache.camel.Message
間のメッセージマッピングをサポートします。Camel メッセージ本文タイプ org.w3c.dom.Node
を変換する場合は、camel-quarkus-xml-jaxp
エクステンションがクラスパスに存在することを確認する必要があります。
2.1.3.2. jakarta.jms.ObjectMessage のネイティブモードのサポート
JMS メッセージペイロードを jakarta.jms.ObjectMessage
として送信する場合、シリアル化のために登録する関連クラスに @RegisterForReflection(serialization = true)
でアノテーションを付ける必要があります。このエクステンションは、quarkus.camel.native.reflection.serialization-enabled = true
を自動的に設定することに注意してください。詳細は、ネイティブモードのユーザーガイド を参照してください。
2.1.3.3. 接続プール
quarkus-pooled-jms
エクステンションを使用すると、接続のプーリングサポートを取得できます。詳細は、quarkus-pooled-jms エクステンションドキュメントを参照してください。
以下の依存関係を pom.xml
に追加するだけで、接続のプーリングサポートを取得できます。
<dependency> <groupId>io.quarkiverse.messaginghub</groupId> <artifactId>quarkus-pooled-jms</artifactId> </dependency>
プーリングのサポートを有効にするには、以下の設定を application.properties
に追加する必要があります。
quarkus.qpid-jms.wrap=true
2.1.4. ネイティブモードの transferException オプション
ネイティブモードで transferException
オプションを使用するには、オブジェクトのシリアル化のサポートを有効にする必要があります。詳細は、ネイティブモードのユーザーガイド を参照してください。
また、シリアル化する予定の例外クラスのシリアル化を有効にする必要があります。以下に例を示します。
@RegisterForReflection(targets = { IllegalStateException.class, MyCustomException.class }, serialization = true)
2.1.5. 追加の Camel Quarkus 設定
エクステンションは、Quarkus Qpid JMS エクステンションを活用します。ConnectionFactory Bean は自動的に作成され、AMQP コンポーネントに接続されます。接続ファクトリーは、Quarkus Qpid JMS 設定オプション を介して設定できます。
2.2. Attachments
Camel メッセージでの添付のサポート
2.2.1. 含まれるもの
使用方法と設定の詳細は、上記リンクを参照してください。
2.2.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-attachments</artifactId> </dependency>
2.3. Avro
Apache Avro バイナリーデータフォーマットを使用して、メッセージをシリアライズおよびデシリアライズします。
2.3.1. 含まれるもの
使用方法と設定の詳細は、上記リンクを参照してください。
2.3.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-avro</artifactId> </dependency>
2.3.3. 追加の Camel Quarkus 設定
vanilla Camel から知られている標準的な使用方法以外に、Camel Quarkus では、JVM と Native モードの両方でビルド時に Avro スキーマを解析する機能が追加されています。
Avro スキーマファイルから Avro クラスを生成するアプローチは、quarkus-avro
エクステンションによって作成されたものです。以下が必要です。
-
*.avsc
ファイルをsrc/main/avro
またはsrc/test/avro
という名前のフォルダーに保存します quarkus-maven-plugin
の通常のビルド
目標に加えて、generate-code
目標を追加します。<plugin> <groupId>io.quarkus</groupId> <artifactId>quarkus-maven-plugin</artifactId> <executions> <execution> <id>generate-code-and-build</id> <goals> <goal>generate-code</goal> <goal>build</goal> </goals> </execution> </executions> </plugin>
Camel Quarkus Avro 統合テスト および Quarkus Avro 統合テスト の動作設定を参照してください。
2.4. AWS 2 CloudWatch
メトリクスを AWS CloudWatch に送信します。
2.4.1. 含まれるもの
-
AWS CloudWatch コンポーネント、URI 構文:
aws2-cw:namespace
使用方法と設定の詳細は、上記リンクを参照してください。
2.4.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-aws2-cw</artifactId> </dependency>
2.4.3. ネイティブモードの SSL
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true
を application.properties
に追加する必要はありません。Quarkus SSL ガイド も参照してください。
2.5. AWS 2 DynamoDB
AWS DynamoDB サービスからデータを保存および取得したり、AWS DynamoDB Stream からメッセージを受信したりします。
2.5.1. 含まれるもの
-
AWS DynamoDB コンポーネント、URI 構文:
aws2-ddb:tableName
-
AWS DynamoDB Streams コンポーネント、URI 構文:
aws2-ddbstream:tableName
使用方法と設定の詳細については、上記リンクを参照してください。
2.5.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-aws2-ddb</artifactId> </dependency>
2.5.3. ネイティブモードの SSL
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true
を application.properties
に追加する必要はありません。Quarkus SSL ガイド も参照してください。
2.5.4. 追加の Camel Quarkus 設定
2.5.4.1. Quarkus Amazon DynamoDB とのオプションの統合
必要に応じて、Quarkus Amazon DynamoDB エクステンションを Camel Quarkus AWS 2 DynamoDB と組み合わせて使用することができます。これは完全に任意であり、必須ではないことに注意してください。Quarkus のドキュメント に従ってください。ただし、次の注意事項に注意してください。
クライアントタイプ
apache
は、次のプロパティーを設定して選択する必要があります。quarkus.dynamodb.sync-client.type=apache
DynamoDbClient
は、Camel Quarkus が実行時に検索できるように、Quarkus CDI 参照 の意味で削除不可である必要があります。たとえば、DynamoDbClient
を注入するダミー Bean を追加することで、これに到達できます。import jakarta.enterprise.context.ApplicationScoped; import io.quarkus.arc.Unremovable; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; @ApplicationScoped @Unremovable class UnremovableDynamoDbClient { @Inject DynamoDbClient dynamoDbClient; }
2.6. AWS 2 Kinesis
AWS Kinesis Streams からレコードを消費および生成します。
2.6.1. 含まれるもの
-
AWS Kinesis コンポーネント、URI 構文:
aws2-kinesis:streamName
-
AWS Kinesis Firehose コンポーネント、URI 構文:
aws2-kinesis-firehose:streamName
使用方法と設定の詳細については、上記リンクを参照してください。
2.6.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-aws2-kinesis</artifactId> </dependency>
2.6.3. ネイティブモードの SSL
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true
を application.properties
に追加する必要はありません。Quarkus SSL ガイド も参照してください。
2.7. AWS 2 Lambda
AWS Lambda 関数を管理および呼び出します。
2.7.1. 含まれるもの
-
AWS Lambda コンポーネント、URI 構文:
aws2-lambda:function
使用方法と設定の詳細は、上記リンクを参照してください。
2.7.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-aws2-lambda</artifactId> </dependency>
2.7.3. ネイティブモードの SSL
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true
を application.properties
に追加する必要はありません。Quarkus SSL ガイド も参照してください。
2.7.4. 追加の Camel Quarkus 設定
2.7.4.1. Camel aws2-lambda エクステンションによって quarkus-amazon-lambda を活用することはできません
quarkus-amazon-lambda エクステンションを使用すると、Quarkus を使用して AWS Lambda をビルドできますが、Camel コンポーネントは既存の関数を管理 (デプロイ、アンデプロイなど) します。したがって、quarkus-amazon-lambda
を aws2-lambda
エクステンションのクライアントとして使用することはできません。
2.8. AWS 2 S3 Storage Service
AWS S3 Storage Service からオブジェクトを保存および取得します。
2.8.1. 含まれるもの
-
AWS S3 Storage Service コンポーネント、URI 構文:
aws2-s3://bucketNameOrArn
使用方法と設定の詳細は、上記リンクを参照してください。
2.8.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-aws2-s3</artifactId> </dependency>
2.8.3. ネイティブモードの SSL
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true
を application.properties
に追加する必要はありません。Quarkus SSL ガイド も参照してください。
2.8.4. 追加の Camel Quarkus 設定
2.8.4.1. Quarkus Amazon S3 とのオプションの統合
必要に応じて、Quarkus Amazon S3 エクステンションを Camel Quarkus AWS 2 S3 Storage Service と組み合わせて使用することができます。これは完全に任意であり、必須ではないことに注意してください。Quarkus のドキュメント に従ってください。ただし、次の注意事項に注意してください。
クライアントタイプ
apache
は、次のプロパティーを設定して選択する必要があります。quarkus.s3.sync-client.type=apache
S3Client
は、Camel Quarkus が実行時に検索できるように、Quarkus CDI 参照 の意味で削除不可にする必要があります。たとえば、S3Client
を注入するダミー Bean を追加することで、これに到達できます。import jakarta.enterprise.context.ApplicationScoped; import io.quarkus.arc.Unremovable; import software.amazon.awssdk.services.s3.S3Client; @ApplicationScoped @Unremovable class UnremovableS3Client { @Inject S3Client s3Client; }
2.9. AWS 2 Simple Notification System (SNS)
AWS Simple Notification Topic にメッセージを送信します。
2.9.1. 含まれるもの
-
AWS Simple Notification System (SNS) コンポーネント、URI 構文:
aws2-sns:topicNameOrArn
使用方法と設定の詳細は、上記リンクを参照してください。
2.9.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-aws2-sns</artifactId> </dependency>
2.9.3. ネイティブモードの SSL
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true
を application.properties
に追加する必要はありません。Quarkus SSL ガイド も参照してください。
2.9.4. 追加の Camel Quarkus 設定
2.9.4.1. Quarkus Amazon SNS とのオプションの統合
必要に応じて、Quarkus Amazon SNS エクステンションを Camel Quarkus AWS 2 Simple Notification System (SNS) と組み合わせて使用することができます。これは完全に任意であり、必須ではないことに注意してください。Quarkus のドキュメント に従ってください。ただし、次の注意事項に注意してください。
クライアントタイプ
apache
は、次のプロパティーを設定して選択する必要があります。quarkus.sns.sync-client.type=apache
SnsClient
は、Camel Quarkus が実行時に検索できるように、Quarkus CDI 参照 の意味で削除不可にする必要があります。たとえば、SnsClient
を注入するダミー Bean を追加することで、これに到達できます。import jakarta.enterprise.context.ApplicationScoped; import io.quarkus.arc.Unremovable; import software.amazon.awssdk.services.sns.SnsClient; @ApplicationScoped @Unremovable class UnremovableSnsClient { @Inject SnsClient snsClient; }
2.10. AWS 2 Simple Queue Service (SQS)
AWS SQS サービスとの間でメッセージを送受信します。
2.10.1. 含まれるもの
-
AWS Simple Queue Service (SQS) コンポーネント、URI 構文:
aws2-sqs:queueNameOrArn
使用方法と設定の詳細は、上記リンクを参照してください。
2.10.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-aws2-sqs</artifactId> </dependency>
2.10.3. ネイティブモードの SSL
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true
を application.properties
に追加する必要はありません。Quarkus SSL ガイド も参照してください。
2.10.4. 追加の Camel Quarkus 設定
2.10.4.1. Quarkus Amazon SQS とのオプションの統合
必要に応じて、Quarkus Amazon SQS エクステンションを Camel Quarkus AWS 2 Simple Queue Service (SQS) と組み合わせて使用することができます。これは完全に任意であり、必須ではないことに注意してください。Quarkus のドキュメント に従ってください。ただし、次の注意事項に注意してください。
クライアントタイプ
apache
は、次のプロパティーを設定して選択する必要があります。quarkus.sqs.sync-client.type=apache
SqsClient
は、Camel Quarkus が実行時に検索できるように、Quarkus CDI 参照 の意味で削除不可にする必要があります。たとえば、SqsClient
を注入するダミー Bean を追加することで、これに到達できます。import jakarta.enterprise.context.ApplicationScoped; import io.quarkus.arc.Unremovable; import software.amazon.awssdk.services.sqs.SqsClient; @ApplicationScoped @Unremovable class UnremovableSqsClient { @Inject SqsClient sqsClient; }
2.11. Azure ServiceBus
Azure Service Bus との間でメッセージを送受信します。
2.11.1. 含まれるもの
-
Azure ServiceBus コンポーネント、URI 構文:
azure-servicebus:topicOrQueueName
使用方法と設定の詳細は、上記リンクを参照してください。
2.11.2. Maven コーディネート
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-azure-servicebus</artifactId> </dependency>
2.12. Azure Storage Blob Service
SDK v12 を使用して Azure Storage Blob Service からブロブを保存および取得します。
2.12.1. 含まれるもの
-
Azure Storage Blob Service コンポーネント、URI 構文:
azure-storage-blob:accountName/containerName
使用方法と設定の詳細は、上記リンクを参照してください。
2.12.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-azure-storage-blob</artifactId> </dependency>
2.12.3. 使用方法
2.12.3.1. Micrometer メトリクスのサポート
Reactor Netty トランスポートの Micrometer メトリクスのコレクションを有効にする場合は、quarkus-micrometer
の依存関係を宣言して、Quarkus メトリクス HTTP エンドポイント経由で利用できるようにします。
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-micrometer</artifactId> </dependency>
2.12.4. ネイティブモードの SSL
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true
を application.properties
に追加する必要はありません。Quarkus SSL ガイド も参照してください。
2.13. Azure Storage Queue Service
azure-storage-queue コンポーネントは、Azure SDK v12 を使用して Azure Storage Queue への/からのメッセージを保存および取得するために使用されます。
2.13.1. 含まれるもの
-
Azure Storage Queue Service コンポーネント、URI 構文:
azure-storage-queue:accountName/queueName
使用方法と設定の詳細は、上記リンクを参照してください。
2.13.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-azure-storage-queue</artifactId> </dependency>
2.13.3. 使用方法
2.13.3.1. Micrometer メトリクスのサポート
Reactor Netty トランスポートの Micrometer メトリクスのコレクションを有効にする場合は、quarkus-micrometer
の依存関係を宣言して、Quarkus メトリクス HTTP エンドポイント経由で利用できるようにします。
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-micrometer</artifactId> </dependency>
2.13.4. ネイティブモードの SSL
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true
を application.properties
に追加する必要はありません。Quarkus SSL ガイド も参照してください。
2.14. Bean バリデーター
Java Bean Validation API を使用してメッセージボディーを検証します。
2.14.1. 含まれるもの
-
Bean Validator コンポーネント、URI 構文:
bean-validator:label
使用方法と設定の詳細は、上記リンクを参照してください。
2.14.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-bean-validator</artifactId> </dependency>
2.14.3. 使用方法
2.14.3.1. ValidatorFactory の設定
このエクステンションの実装は、Quarkus Hibernate Validator エクステンション を利用します。
そのため、Camel のプロパティー (constraintValidatorFactory
、messageInterpolator
、traversableResolver
、validationProviderResolver
、validatorFactory
) によって ValidatorFactory
を設定することはできません。
デフォルトの ValidatorFactory
(Quarkus によって作成される) に注入される Bean を作成して ValidatorFactory
を設定できます。詳細は、Quarkus CDI のドキュメント を参照してください。
2.14.3.2. ネイティブモードでのカスタム検証グループ
ネイティブモードでカスタム検証グループを使用する場合は、反映するためにすべてのインターフェイスを登録する必要があります (ドキュメント を参照)。
以下に例を示します。
@RegisterForReflection public interface OptionalChecks { }
2.14.4. Camel Quarkus の制限
(META-INF/validation.xml ファイルを指定して) XML として制約を記述することはできません。サポートされているのは Java アノテーションのみです。これは、Quarkus Hibernate Validator エクステンションの制限によって生じます (issue を参照)。
2.15. Bean
Java Bean のメソッドを呼び出します。
2.15.1. 含まれるもの
-
Bean コンポーネント、URI 構文:
bean:beanName
- Bean メソッド言語
-
Class コンポーネント、URI 構文:
class:beanName
使用方法と設定の詳細については、上記リンクを参照してください。
2.15.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-bean</artifactId> </dependency>
2.15.3. 使用方法
Camel レジストリーで使用できる Bean のメソッドを呼び出す場合を除き、Bean コンポーネントおよび Bean メソッド言語は、Quarkus CDI Bean を呼び出することもできます。
2.16. Bindy
Camel Bindy を使用して、片側の POJO と、反対側のコンマ区切り値 (CSV)、固定フィールド長、またはキーと値のペア (KVP) 形式の間のマーシャリングとアンマーシャル
2.16.1. 含まれるもの
使用方法と設定の詳細については、上記リンクを参照してください。
2.16.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-bindy</artifactId> </dependency>
2.16.3. Camel Quarkus の制限
ネイティブモードで camel-quarkus-bindy を使用する場合は、ビルドマシンのロケールのみがサポートされます。
たとえば、ロケールが french のビルドマシンの場合、以下のコード
BindyDataFormat dataFormat = new BindyDataFormat(); dataFormat.setLocale("ar");
は、JVM モードでは期待どおりに数値をアラビア数字にフォーマットします。ただし、ネイティブモードでは数値をフランス語的にフォーマットします。
さらに調整しないと、ビルドマシンのデフォルトロケールが使用されます。別のロケールは、quarkus.native.user-language および quarkus.native.user-country 設定プロパティーで指定できます。
2.17. Browse
BrowsableEndpoint をサポートするエンドポイントで受信したメッセージを調べます。
2.17.1. 含まれるもの
-
Browse コンポーネント、URI 構文:
browse:name
使用方法と設定の詳細は、上記リンクを参照してください。
2.17.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-browse</artifactId> </dependency>
2.18. Cassandra CQL
CQL3 API (Thrift API 以外) を使用して Cassandra 2.0 と統合します。DataStax が提供する Cassandra Java Driver をベースにしています。
2.18.1. 含まれるもの
-
Cassandra CQL コンポーネント、URI 構文:
cql:beanRef:hosts:port/keyspace
使用方法と設定の詳細は、上記リンクを参照してください。
2.18.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-cassandraql</artifactId> </dependency>
2.18.3. 追加の Camel Quarkus 設定
2.18.3.1. ネイティブモードでの Cassandra 集約リポジトリー
ネイティブモードで CassandraAggregationRepository
などの Cassandra 集約リポジトリーを使用するには、ネイティブシリアライズのサポートを有効化 する必要があります。
さらに、エクスチェンジボディがカスタムタイプである場合、クラス宣言に @RegisterForReflection(serialization = true)
のアノテーションを付けてシリアライズ用に登録する必要があります。
2.19. CLI Connector
Camel CLI に接続するランタイムアダプター
2.19.1. 含まれるもの
使用方法と設定の詳細は、上記リンクを参照してください。
2.19.2. Maven コーディネート
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-cli-connector</artifactId> </dependency>
2.20. Control Bus
Camel ルートを管理および監視します。
2.20.1. 含まれるもの
-
Control Bus コンポーネント、URI 構文:
controlbus:command:language
使用方法と設定の詳細は、上記リンクを参照してください。
2.20.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-controlbus</artifactId> </dependency>
2.20.3. 使用方法
2.20.3.1. 言語
2.20.3.1.1. Bean
Bean 言語を使用して、Bean でメソッドを呼び出し、ルートの状態を制御できます。org.apache.camel.quarkus:camel-quarkus-bean
エクステンションをクラスパスに追加する必要があります。Maven ユーザーは、次の依存関係を POM に追加する必要があります。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-bean</artifactId> </dependency>
ネイティブモードでは、Bean クラスに @RegisterForReflection
のアノテーションを付ける必要があります。
2.20.3.1.2. Simple
Simple 言語を使用して、ルートの状態を制御できます。次の例では、ProducerTemplate
を使用して、id foo
のルートを停止します。
template.sendBody( "controlbus:language:simple", "${camelContext.getRouteController().stopRoute('foo')}" );
OGNL 表記を使用するには、依存関係として org.apache.camel.quarkus:camel-quarkus-bean
エクステンションを追加する必要があります。
ネイティブモードでは、OGNL 表記で使用されるクラスをリフレクション用に登録する必要があります。上記のコードスニペットでは、camelContext.getRouteController()
から返される org.apache.camel.spi.RouteController
クラスを登録する必要があります。これはサードパーティークラスであるため、@RegisterForReflection
で直接アノテーションを付けることはできません。代わりに、別のクラスにアノテーションを付けて、登録するターゲットクラスを指定することができます。たとえば、Camel ルートを定義するクラスは、@RegisterForReflection(targets = { org.apache.camel.spi.RouteController.class })
でアノテーションを付けることができます。
または、次の行を src/main/resources/application.properties
に追加します。
quarkus.camel.native.reflection.include-patterns = org.apache.camel.spi.RouteController
2.20.4. Camel Quarkus の制限
2.20.4.1. 統計
2.21. Core
Camel コア機能と基本的な Camel 言語/Constant、ExchangeProperty、Header、Ref、Simple および Tokeinze
2.21.1. 含まれるもの
使用方法と設定の詳細については、上記リンクを参照してください。
2.21.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-core</artifactId> </dependency>
2.21.3. 追加の Camel Quarkus 設定
2.21.3.1. Simple 言語
2.21.3.1.1. OGNL 表記の使用
Simple 言語から OGNL 表記を使用する場合は、camel-quarkus-bean
エクステンションを使用する必要があります。
たとえば、以下の簡易式は、Client
型のメッセージボディーの getAddress()
メソッドにアクセスします。
--- simple("${body.address}") ---
このような場合、ここで説明されているように、camel-quarkus-bean エクステンションで、追加の依存関係を取得する必要があります。ネイティブモードでは、反映するためにいくつかのクラスを登録する必要がある場合があります。上記の例では、Client
クラスを 反映するために登録する 必要があります。
2.21.3.1.2. ネイティブモードでの動的型解決の使用
次のような単純な式から型を動的に解決する場合:
-
simple("${mandatoryBodyAs(TYPE)}")
-
simple("${type:package.Enum.CONSTANT}")
-
from("…").split(bodyAs(TYPE.class))
-
simple("${body} is TYPE")
反映するため、一部のクラスを手動で登録する必要がある場合があります。
たとえば、以下の単純な式は、ランタイム時に java.nio.ByteBuffer
型を動的に解決します。
--- simple("${body} is 'java.nio.ByteBuffer'") ---
したがって、java.nio.ByteBuffer
クラスを 反映するために登録する 必要があります。
2.21.3.1.3. ネイティブモードでのクラスパスリソースと Simple 言語の使用
次の例のように、ルートがクラスパスから Simple スクリプトをロードすることになっている場合
from("direct:start").transform().simple("resource:classpath:mysimple.txt");
次に、Quarkus quarkus.native.resources.includes
プロパティーを使用して、以下に示すようにネイティブ実行可能ファイルにリソースを含める必要があります。
quarkus.native.resources.includes = mysimple.txt
2.21.3.1.4. ネイティブモードのプロパティーを介したカスタム Bean の設定
#class:*
や #type:*
などの設定でネイティブモードのプロパティーを介してカスタム Bean を指定する場合は、リフレクション用にいくつかのクラスを手動で登録する必要がある場合があります。
たとえば、以下のカスタム Bean 定義には、Bean のインスタンス化とセッターの呼び出しにリフレクションを使用することが含まれます。
--- camel.beans.customBeanWithSetterInjection = #class:org.example.PropertiesCustomBeanWithSetterInjection camel.beans.customBeanWithSetterInjection.counter = 123 ---
そのため、クラス PropertiesCustomBeanWithSetterInjection
を リフレクション用に登録 する必要があります。この場合は、フィールドアクセスを省略できることに注意してください。
設定プロパティー | タイプ | デフォルト |
---|---|---|
true に設定すると、 |
|
|
クラスパスの Camel サービス定義ファイルと一致する Ant-path フォーマットのパターンのコンマ区切りリスト。一致するファイルで定義されたサービスは、** 除外は包含よりも優先されます。ここで定義された除外は、Camel Quarkus エクステンションで追加されたサービスの検出性を拒否するのにも使用できます。
値の例: |
| |
クラスパスの Camel サービス定義ファイルと一致する Ant-path フォーマットのパターンのコンマ区切りリスト。指定したファイルが
Camel Quarkus エクステンションには、デフォルトで一部のサービスが含まれる可能性があることに注意してください。ここで選択されそれらのサービスに追加されたサービスおよび
値の例: |
| |
クラスパスの Camel サービス定義ファイルと一致する Ant-path フォーマットのパターンのコンマ区切りリスト。一致するファイルで定義されたサービスは、アプリケーションの静的初期化中に Camel レジストリーに 追加されません。 除外は包含よりも優先されます。ここで定義された除外は、Camel Quarkus エクステンションで追加されたサービスの登録を拒否するのにも使用できます。
値の例: |
| |
クラスパスの Camel サービス定義ファイルと一致する Ant-path フォーマットのパターンのコンマ区切りリスト。指定したファイルが
Camel Quarkus エクステンションには、デフォルトで一部のサービスが含まれる可能性があることに注意してください。ここで選択されそれらのサービスに追加されたサービスおよび
値の例: |
| |
これを |
|
|
これを |
|
|
これを |
|
|
これを |
|
|
静的な初期化時のルートの自動検出を有効にします。 |
|
|
RouteBuilder クラスの除外フィルタースキャンに使用されます。除外フィルタリングは、包含フィルターよりも優先されます。パターンは Ant-path スタイルのパターンを使用しています。複数のパターンをコンマで区切って指定することができます。たとえば、Bar から始まるすべてのクラスを除外するには、**/Bar* を使用します。特定のパッケージからのすべてのルートを除外するには、com/mycompany/bar/* を使用します。特定のパッケージおよびそのサブパッケージからのすべてのルートを除外するには、2 つのワイルドカードを使用します (com/mycompany/bar/**)。特定の 2 つのパッケージからのすべてのルートを除外するには、com/mycompany/bar/*,com/mycompany/stuff/* を使用します。 |
| |
RouteBuilder クラスの包含フィルタースキャンに使用されます。除外フィルタリングは、包含フィルターよりも優先されます。パターンは Ant-path スタイルのパターンを使用しています。複数のパターンをコンマで区切って指定することができます。たとえば、Foo から始まるすべてのクラスを含めるには、**/Foo* を使用します。特定のパッケージからのすべてのルートを含めるには、com/mycompany/foo/* を使用します。特定のパッケージおよびそのサブパッケージからのすべてのルートを含めるには、2 つのワイルドカードを使用します (com/mycompany/foo/**)。特定の 2 つのパッケージからのすべてのルートを含めるには、com/mycompany/foo/*,com/mycompany/stuff/* を使用します。 |
| |
反映のために登録から 除外 されるクラス名に一致する Ant-path スタイルパターンのコンマ区切りリスト。
このオプションは、 このオプションは、Quarkus エクステンションによって内部で登録されたクラスの登録解除には使用できません。 |
| |
反映のために登録されるクラス名に一致する Ant-path フォーマットのパターンのコンマ区切りリスト。
デフォルトでは、クラスは含まれません。このオプションで選択されるセットは、 Quarkus エクステンションは通常、反映のために必要なクラスを登録することに注意してください。このオプションは、組み込みの機能では十分ではない場合に有用です。
このオプションは、コンストラクター、フィールド、およびメソッドの完全な反映アクセスを有効にします。よりきめ細かい制御が必要な場合は、Java コードで このオプションが適切に機能するには、以下の条件のうち少なくとも 1 つが満たされる必要があります。
- パターンにワイルドカード (
ここで、 |
| |
|
|
|
ビルド時にルート定義から式を抽出できない場合の対処方法。 |
|
|
ビルド時にルート定義から式を抽出する必要があるかどうかを示します。無効にすると、式はランタイムにコンパイルされます。 |
|
|
Camel イベントから CDI イベントへのブリッジを有効にするかどうか。
これにより、CDI オブザーバーを Camel イベント用に設定できます。たとえば、 この設定項目は、Camel イベント用に設定されたオブザーバーがアプリケーションに存在する場合にのみ効果があることに注意してください。 |
|
|
camel ソースの場所を有効/無効にするためのビルド時の設定オプション |
|
|
|
|
|
|
|
|
{doc-link-icon-lock}[title=Fixed at build time] 設定プロパティーはビルド時に修正されました。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。
2.22. Cron
Unix cron 構文で指定されたタイミングでイベントをトリガーする汎用インターフェイス。
2.22.1. 含まれるもの
-
Cron コンポーネント、URI 構文:
cron:name
使用方法と設定の詳細は、上記リンクを参照してください。
2.22.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-cron</artifactId> </dependency>
2.22.3. 追加の Camel Quarkus 設定
cron コンポーネントは汎用インターフェイスコンポーネントであるため、Camel Quarkus ユーザーは、実装を提供する別のエクステンションと一緒に cron エクステンションを使用する必要があります。
2.23. Crypto (JCE)
Java Cryptographic Extension (JCE) の署名サービスを使用してエクスチェンジに署名し、検証します。
2.23.1. 含まれるもの
- Crypto (Java Cryptographic Extension) データフォーマット
-
暗号 (JCE) コンポーネント、URI 構文:
crypto:cryptoOperation:name
- PGP データ形式
使用方法と設定の詳細については、上記リンクを参照してください。
2.23.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-crypto</artifactId> </dependency>
2.23.3. ネイティブモードの SSL
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true
を application.properties
に追加する必要はありません。Quarkus SSL ガイド も参照してください。
2.24. CXF
Apache CXF を使用して SOAP WebServices を公開するか、CXF WS クライアントを使用して外部 WebServices に接続します。
2.24.1. 含まれるもの
-
CXF コンポーネント、URI 構文:
cxf:beanId:address
使用方法と設定の詳細は、上記リンクを参照してください。
2.24.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-cxf-soap</artifactId> </dependency>
2.24.3. 使用方法
2.24.3.1. 全般
camel-quarkus-cxf-soap
は、CXF Extensions for Quarkus プロジェクト (quarkus-cxf
) のエクステンションを使用します。
これは、サポートされるユースケースと WS 仕様のセットの大部分が quarkus-cxf
によって提供されることを意味します。
サポート対象のユースケースおよび WS 仕様の詳細は、Quarkus CXF の Reference を参照してください。
2.24.3.2. 依存関係の管理
Red Hat build of Apache Camel for Quarkus は、CXF および quarkus-cxf
のバージョンを 管理 します。これらのプロジェクトと互換性があるバージョンを選択する必要はありません。
2.24.3.3. クライアント
camel-quarkus-cxf-soap
(追加の依存関係は不要) を使用すると、CXF クライアントを Camel ルートでプロデューサーとして使用できます。
import org.apache.camel.builder.RouteBuilder; import jakarta.enterprise.context.ApplicationScoped; import jakarta.enterprise.context.SessionScoped; import jakarta.enterprise.inject.Produces; import jakarta.inject.Named; @ApplicationScoped public class CxfSoapClientRoutes extends RouteBuilder { @Override public void configure() { /* You can either configure the client inline */ from("direct:cxfUriParamsClient") .to("cxf://http://localhost:8082/calculator-ws?wsdlURL=wsdl/CalculatorService.wsdl&dataFormat=POJO&serviceClass=org.foo.CalculatorService"); /* Or you can use a named bean produced below by beanClient() method */ from("direct:cxfBeanClient") .to("cxf:bean:beanClient?dataFormat=POJO"); } @Produces @SessionScoped @Named CxfEndpoint beanClient() { final CxfEndpoint result = new CxfEndpoint(); result.setServiceClass(CalculatorService.class); result.setAddress("http://localhost:8082/calculator-ws"); result.setWsdlURL("wsdl/CalculatorService.wsdl"); // a resource in the class path return result; } }
CalculatorService
は以下のようになります。
import jakarta.jws.WebMethod; import jakarta.jws.WebService; @WebService(targetNamespace = CalculatorService.TARGET_NS) 1 public interface CalculatorService { public static final String TARGET_NS = "http://acme.org/wscalculator/Calculator"; @WebMethod 2 public int add(int intA, int intB); @WebMethod 3 public int subtract(int intA, int intB); @WebMethod 4 public int divide(int intA, int intB); @WebMethod 5 public int multiply(int intA, int intB); }
このサービスエンドポイントインターフェイスを実装する quay.io/l2x6/calculator-ws:1.2 コンテナーに対して、このクライアントアプリケーションをテストできます。
$ docker run -p 8082:8080 quay.io/l2x6/calculator-ws:1.2
quarkus-cxf
は、@io.quarkiverse.cxf.annotation.CXFClient
アノテーションを使用する SOAP クライアントの注入 をサポートします。詳細は、quarkus-cxf
ユーザーガイドの SOAP Clients の章を参照してください。
2.24.3.4. サーバー
camel-quarkus-cxf-soap
を使用すると、SOAP エンドポイントを Camel ルートのコンシューマーとして公開できます。このユースケースには、追加の依存関係は必要ありません。
import org.apache.camel.builder.RouteBuilder; import jakarta.enterprise.context.ApplicationScoped; import jakarta.enterprise.inject.Produces; import jakarta.inject.Named; @ApplicationScoped public class CxfSoapRoutes extends RouteBuilder { @Override public void configure() { /* A CXF Service configured through a CDI bean */ from("cxf:bean:helloBeanEndpoint") .setBody().simple("Hello ${body} from CXF service"); /* A CXF Service configured through Camel URI parameters */ from("cxf:///hello-inline?wsdlURL=wsdl/HelloService.wsdl&serviceClass=org.foo.HelloService") .setBody().simple("Hello ${body} from CXF service"); } @Produces @ApplicationScoped @Named CxfEndpoint helloBeanEndpoint() { final CxfEndpoint result = new CxfEndpoint(); result.setServiceClass(HelloService.class); result.setAddress("/hello-bean"); result.setWsdlURL("wsdl/HelloService.wsdl"); return result; } }
これら 2 つのサービスが提供されるパスは、たとえば application.properties
で設定できる quarkus.cxf.path
設定プロパティー の値によって異なります。
application.properties
quarkus.cxf.path = /soap-services
この設定を適用すると、http://localhost:8080/soap-services/hello-bean
および http://localhost:8080/soap-services/hello-inline
で、2 つのサービスにそれぞれアクセスできます。
WSDL には、上記の URL に ?wsdl
を追加することでアクセスできます。
他のエクステンションが HTTP エンドポイントを公開しないと 100% 確信できない限り、アプリケーションで quarkus.cxf.path = /
を使用しないでください。
quarkus-cxf
2.0.0 より前 (つまり、Red Hat build of Apache Camel for Quarkus 3.0.0 より前)、quarkus.cxf.path
のデフォルト値は /
でした。このデフォルト値は、他の Quarkus エクステンションがさらなる HTTP エンドポイントの公開を阻止していたため、変更されました。とりわけ、RESTEasy、Vert.x、SmallRye Health ( health エンドポイントは公開されていません) がこの影響を受けていました。
quarkus-cxf
は、SOAP エンドポイントを公開する代替方法をサポートします。詳細は、quarkus-cxf
ユーザーガイドの SOAP Services の章を参照してください。
2.24.3.5. 要求および応答のロギング
org.apache.cxf.ext.logging.LoggingFeature
を使用して、クライアントとサーバーの両方の SOAP メッセージの詳細ロギングを有効にできます。
import org.apache.camel.builder.RouteBuilder; import org.apache.cxf.ext.logging.LoggingFeature; import jakarta.enterprise.context.ApplicationScoped; import jakarta.enterprise.context.SessionScoped; import jakarta.enterprise.inject.Produces; import jakarta.inject.Named; @ApplicationScoped public class MyBeans { @Produces @ApplicationScoped @Named("prettyLoggingFeature") public LoggingFeature prettyLoggingFeature() { final LoggingFeature result = new LoggingFeature(); result.setPrettyLogging(true); return result; } @Inject @Named("prettyLoggingFeature") LoggingFeature prettyLoggingFeature; @Produces @SessionScoped @Named CxfEndpoint cxfBeanClient() { final CxfEndpoint result = new CxfEndpoint(); result.setServiceClass(CalculatorService.class); result.setAddress("https://acme.org/calculator"); result.setWsdlURL("wsdl/CalculatorService.wsdl"); result.getFeatures().add(prettyLoggingFeature); return result; } @Produces @ApplicationScoped @Named CxfEndpoint helloBeanEndpoint() { final CxfEndpoint result = new CxfEndpoint(); result.setServiceClass(HelloService.class); result.setAddress("/hello-bean"); result.setWsdlURL("wsdl/HelloService.wsdl"); result.getFeatures().add(prettyLoggingFeature); return result; } }
org.apache.cxf.ext.logging.LoggingFeature
のサポートは、camel-quarkus-cxf-soap
依存関係として io.quarkiverse.cxf:quarkus-cxf-rt-features-logging
によって提供されます。アプリケーションに明示的に追加する必要はありません。
2.24.3.6. WS 仕様
サポートされる WS 仕様の範囲は、Quarkus CXF プロジェクトによって提供されます。
camel-quarkus-cxf-soap
は、io.quarkiverse.cxf:quarkus-cxf
エクステンションを介して、以下の仕様のみをカバーします。
- JAX-WS
- JAXB
- WS-Addressing
- WS-Policy
- MTOM
アプリケーションが WS-Security や WS-Trust などの他の WS 仕様を必要とする場合は、それをカバーする Quarkus CXF 依存関係を追加する必要があります。どの WS 仕様がどの Quarkus CXF エクステンションでカバーされているかを確認するには、Quarkus CXF の Reference ページを参照してください。
2.24.3.7. ツール
quarkus-cxf
は、以下の 2 つの CXF ツールをラップします。
-
wsdl2Java
- WSDL からサービスクラスを生成する 場合 -
java2ws
- Java クラスから WSDL を生成する 場合
wsdl2Java
が適切に機能するためには、アプリケーションは io.quarkiverse.cxf:quarkus-cxf
に直接依存する必要があります。
wsdlvalidator
はサポート対象外ですが、application.properties
で以下の設定を指定し、wsdl2Java
を使用して WSDL を検証できます。
application.properties
quarkus.cxf.codegen.wsdl2java.additional-params = -validate
2.25. Data Format
Camel Data Format を通常の Camel コンポーネントとして使用します。
Red Hat build of Apache Camel for Quarkus でサポートされるデータフォーマットの詳細は、サポートされるデータフォーマット を参照してください。
2.25.1. 含まれるもの
-
Data Format コンポーネント、URI 構文:
dataformat:name:operation
使用方法と設定の詳細は、上記リンクを参照してください。
2.25.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-dataformat</artifactId> </dependency>
2.26. Dataset
Camel アプリケーションの負荷テストおよびソークテスト用のデータを提供します。
2.26.1. 含まれるもの
-
Dataset コンポーネント、URI 構文:
dataset:name
-
DataSet Test コンポーネント、URI 構文:
dataset-test:name
使用方法と設定の詳細については、上記リンクを参照してください。
2.26.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-dataset</artifactId> </dependency>
2.27. Direct
同じ Camel コンテキストから別のエンドポイントを同期的に呼び出します。
2.27.1. 含まれるもの
-
Direct コンポーネント、URI 構文:
direct:name
使用方法と設定の詳細は、上記リンクを参照してください。
2.27.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-direct</artifactId> </dependency>
2.28. FHIR
FHIR (Fast Healthcare Interoperability Resources) 規格を使用して、ヘルスケアドメインの情報を交換します。JSON との間で FHIR オブジェクトをマーシャリングおよびアンマーシャリングします。XML との間で FHIR オブジェクトをマーシャリングおよびアンマーシャリングします。
2.28.1. 含まれるもの
-
FHIR コンポーネント、URI 構文:
fhir:apiName/methodName
- FHIR JSon データフォーマット
- FHIR XML データフォーマット
使用方法と設定の詳細については、上記リンクを参照してください。
2.28.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-fhir</artifactId> </dependency>
2.28.3. ネイティブモードの SSL
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true
を application.properties
に追加する必要はありません。Quarkus SSL ガイド も参照してください。
2.28.4. 追加の Camel Quarkus 設定
デフォルトでは、FHIR コンポーネントと DataFormat のデフォルト値であるため、FHIR バージョン R4
および DSTU3
のみがネイティブモードで有効になっています。
設定プロパティー | タイプ | デフォルト |
---|---|---|
ネイティブモードで FHIR DSTU2 Specs を有効にします。 |
|
|
ネイティブモードで FHIR DSTU2_HL7ORG Specs を有効にします。 |
|
|
ネイティブモードで FHIR DSTU2_1 Specs を有効にします。 |
|
|
ネイティブモードで FHIR DSTU3 Specs を有効にします。 |
|
|
ネイティブモードで FHIR R4 Specs を有効にします。 |
|
|
ネイティブモードで FHIR R5 Specs を有効にします。 |
|
|
{doc-link-icon-lock}[title=Fixed at build time] 設定プロパティーはビルド時に修正されました。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。
2.29. File
ファイルの読み取りと書き込みを行います。
2.29.1. 含まれるもの
-
File コンポーネント、URI 構文:
file:directoryName
使用方法と設定の詳細は、上記リンクを参照してください。
2.29.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-file</artifactId> </dependency>
2.29.3. 追加の Camel Quarkus 設定
2.29.3.1. 特定のエンドポイントから消費するコンシューマがクラスタ内で 1 つだけであること
同じルートが複数の JVM にデプロイされている場合、このエクステンションを マスターのエクステンション と組み合わせて使用すると便利な場合があります。このようなセットアップでは、キャメルマスター namespace 全体で一度に 1 つのコンシューマーがアクティブになります。
たとえば、以下のルートを複数の JVM にデプロイするとします。
from("master:ns:timer:test?period=100").log("Timer invoked on a single JVM at a time");
以下のようなプロパティーを使用して、ファイルクラスターサービスを有効にすることができます。
quarkus.camel.cluster.file.enabled = true quarkus.camel.cluster.file-root = target/cluster-folder-where-lock-file-will-be-held
その結果、1 つのコンシューマーが ns
camel マスター namespace 全体でアクティブになります。これは、ある時点で、1 つのタイマーだけがすべての JVM 間でエクスチェンジを生成することを意味します。つまり、メッセージは一度に 1 つの JVM で 100 ミリ秒ごとにログに記録されます。
ファイルクラスターサービスは、quarkus.camel.cluster.file.*
プロパティーを微調整できます。
設定プロパティー | タイプ | デフォルト |
---|---|---|
quarkus.camel.cluster.file.* 設定に従って、ファイルロッククラスターサービスを自動的に設定するかどうか。 |
|
|
クラスターサービス ID (デフォルトは null)。 |
| |
ルートパス (デフォルトは null)。 |
| |
サービス検索の順序/優先度 (デフォルトは 2147482647)。 |
| |
ロックの取得を開始するまでの待機時間 (デフォルトは 1000 ミリ秒)。 |
| |
ロックの取得を試みるまでの待機時間 (デフォルトは 10000 ミリ秒)。 |
| |
サービスに関連付けられたカスタム属性 (デフォルトは空のマップ)。 |
|
{doc-link-icon-lock}[title=Fixed at build time] 設定プロパティーはビルド時に修正されました。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。
2.30. FTP
SFTP、FTP、または SFTP サーバーとの間でファイルをアップロードおよびダウンロードする
2.30.1. 含まれるもの
-
FTP コンポーネント、URI 構文:
ftp:host:port/directoryName
-
FTPS コンポーネント、URI 構文:
ftps:host:port/directoryName
-
SFTP コンポーネント、URI 構文:
sftp:host:port/directoryName
使用方法と設定の詳細については、上記リンクを参照してください。
2.30.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-ftp</artifactId> </dependency>
2.31. Google BigQuery
SQL クエリーまたは Google Client Services API を使用して Google Cloud BigQuery サービスにアクセスする
2.31.1. 含まれるもの
-
Google BigQuery コンポーネント、URI 構文:
google-bigquery:projectId:datasetId:tableId
-
Google BigQuery Standard SQL コンポーネント、URI 構文:
google-bigquery-sql:projectId:queryString
使用方法と設定の詳細については、上記リンクを参照してください。
2.31.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-google-bigquery</artifactId> </dependency>
2.31.3. 使用方法
ネイティブモードで google-bigquery-sql
を使用してクラスパスから SQL スクリプトを読み取る場合は、それらが quarkus.native.resources.includes
設定プロパティーを介してネイティブイメージに追加されていることを確認する必要があります。詳細については、Quarkus のドキュメント を確認してください。
2.32. Google Pubsub
Google Cloud Platform PubSub サービスとの間でメッセージを送受信します。
2.32.1. 含まれるもの
-
Google Pubsub コンポーネント、URI 構文:
google-pubsub:projectId:destinationName
使用方法と設定の詳細は、上記リンクを参照してください。
2.32.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-google-pubsub</artifactId> </dependency>
2.32.3. Camel Quarkus の制限
デフォルトでは、メッセージ本文が String
または byte[]
以外の場合は常に、Camel PubSub コンポーネントは ObjectOutputStream
を介して JDK オブジェクトのシリアル化を使用します。
このようなシリアル化は GraalVM ではまだサポートされていないため、このエクステンションはカスタムの Jackson ベースのシリアライザーを提供して、複雑なメッセージペイロードを JSON としてシリアル化します。
ペイロードにバイナリーデータが含まれている場合は、カスタムの Jackson シリアライザー/デシリアライザーを作成して処理する必要があります。これを行う方法については、Quarkus Jackson ガイド を参照してください。
2.33. gRPC
gRPC エンドポイントを公開し、外部 gRPC エンドポイントにアクセスします。
2.33.1. 含まれるもの
-
gRPC コンポーネント、URI 構文:
grpc:host:port/service
使用方法と設定の詳細は、上記リンクを参照してください。
2.33.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-grpc</artifactId> </dependency>
2.33.3. 使用方法
2.33.3.1. Protobuf で生成されるコード
Camel Quarkus gRPC は、.proto
ファイルの gRPC サービススタブを生成できます。Maven を使用する場合は、プロジェクトビルドで quarkus-maven-plugin
の generate-code
ゴールが有効になっていることを確認してください。
<build> <plugins> <plugin> <groupId>io.quarkus</groupId> <artifactId>quarkus-maven-plugin</artifactId> <version>${quarkus.platform.version}</version> <extensions>true</extensions> <executions> <execution> <goals> <goal>build</goal> <goal>generate-code</goal> <goal>generate-code-tests</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
この設定を使用すると、サービス定義とメッセージ定義を src/main/proto
ディレクトリーに配置でき、quarkus-maven-plugin
が .proto
ファイルからコードを生成します。
2.33.3.1.1. インポートによる proto
ファイルのスキャン
プロトコルバッファー仕様は、proto ファイルをインポートする方法を提供します。設定プロパティーの quarkus.camel.grpc.codegen.scan-for-imports
プロパティーを application.properties
に追加することで、スキャンする依存関係の範囲を制御できます。利用可能なオプションの概要を以下に示します。
-
all
- すべての依存関係をスキャンします。 -
none
- 依存関係のスキャンを無効にします。src/main/proto
またはsrc/test/proto
で定義された proto 定義のみを使用します。 -
groupId1:artifactId1,groupId2:artifactId2
-groupId
およびartifactId
リストに一致する依存関係のみをスキャンします。
デフォルト値は com.google.protobuf:protobuf-java
です。
2.33.3.1.2. 依存関係からの proto
ファイルのスキャン
複数の依存関係間で共有されている proto ファイルがある場合は、設定プロパティー quarkus.camel.grpc.codegen.scan-for-proto
を application.properties
に追加することで、そのファイルの gRPC サービススタブを生成できます。
まず、proto ファイルを含むアーティファクトの依存関係をプロジェクトに追加します。次に、proto ファイルの依存関係スキャンを有効にします。
quarkus.camel.grpc.codegen.scan-for-proto=org.my.groupId1:my-artifact-id-1,org.my.groupId2:my-artifact-id-2
設定プロパティーを使用して、特定の proto ファイルを依存関係スキャンに追加または除外することができます。
設定プロパティー名の接尾辞は、追加/除外を設定する依存関係の Maven groupId
/artifactId
です。パスは、依存関係に含まれる proto ファイルのクラスパスの場所への相対パスです。パスは、proto ファイルへの明示的なパス、または複数のファイルを追加/除外する glob パターンとして指定できます。
quarkus.camel.grpc.codegen.scan-for-proto-includes."<groupId>\:<artifactId>"=foo/**,bar/**,baz/a-proto.proto quarkus.camel.grpc.codegen.scan-for-proto-excludes."<groupId>\:<artifactId>"=foo/private/**,baz/another-proto.proto
プロパティーキー内の :
文字は \
でエスケープする必要があります。
2.33.3.2. ネイティブモードでのクラスパスリソースへのアクセス
gRPC コンポーネントには、リソースをクラスパスから解決するさまざまなオプションがあります。
-
keyCertChainResource
-
keyResource
-
serviceAccountResource
-
trustCertCollectionResource
これらのオプションをネイティブモードで使用する場合は、そのようなリソースがネイティブイメージに含まれていることを確認する必要があります。
これは、設定プロパティー quarkus.native.resources.includes
を application.properties
に追加することで実現できます。たとえば、SSL/TLS キーと証明書を含めるには、次のように指定します。
quarkus.native.resources.includes = certs/*.pem,certs.*.key
2.33.4. Camel Quarkus の制限
2.33.4.1. Quarkus gRPC との統合はサポート対象外
現時点では、Camel Quarkus gRPC と Quarkus gRPC の統合はサポートされていません。クラスパスに camel-quarkus-grpc
と quarkus-grpc
エクステンションの両方の依存関係がある場合、アプリケーションをコンパイルすると、ビルド時に問題が発生する可能性があります。
2.33.5. 追加の Camel Quarkus 設定
設定プロパティー | タイプ | デフォルト |
---|---|---|
|
|
|
Camel Quarkus gRPC のコード生成が、.proto ファイルのアプリケーションの依存関係をスキャンして、そのファイルから Java スタブを生成できます。このプロパティーは、スキャンする依存関係の範囲を設定します。適用可能な値: - none - デフォルト - 依存関係をスキャンしない - スキャンする groupId:artifactId コーディネートのコンマ区切りのリスト - all - すべての依存関係をスキャンする |
|
|
Camel Quarkus gRPC のコード生成が、このアプリケーションの proto によってインポートできる .proto ファイルの依存関係をスキャンできます。適用可能な値: - none - デフォルト - 依存関係をスキャンしない - スキャンする groupId:artifactId コーディネートのコンマ区切りリスト - all - すべての依存関係をスキャンする (デフォルトは com.google.protobuf:protobuf-java) |
|
|
パッケージパスまたはファイル glob パターンは、追加対象として考慮すべき .proto ファイルを含む依存関係ごとに追加します。 |
| |
パッケージパスまたはファイル glob パターンは、除外対象として考慮すべき .proto ファイルを含む依存関係ごとに追加します。 |
|
{doc-link-icon-lock}[title=Fixed at build time] 設定プロパティーはビルド時に修正されました。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。
2.34. Gson
Gson を使用して、POJO を JSON に、およびその逆にマーシャリングします。
2.34.1. 含まれるもの
使用方法と設定の詳細は、上記リンクを参照してください。
2.34.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-gson</artifactId> </dependency>
2.34.3. 追加の Camel Quarkus 設定
2.34.3.1. ネイティブモードでのオブジェクトのマーシャリング/アンマーシャリング
ネイティブモードでオブジェクトをマーシャリングまたはアンマーシャリングする場合、シリアライズされたクラスはすべて リフレクションのために登録 する必要があります。そのため、GsonDataFormat.setUnmarshalType(…)
、GsonDataFormat.setUnmarshalTypeName(…)
、さらに GsonDataFormat.setUnmarshalGenericType(…)
を使用する場合は、アンマーシャリングタイプとサブフィールドタイプをリフレクション用に登録する必要があります。この インテグレーションテスト で実際の例を参照してください。
2.35. HL7
HL7 MLLP コーデックを使用して、HL7 (Health Care) モデルオブジェクトをマーシャリングおよびアンマーシャリングします。
2.35.1. 含まれるもの
使用方法と設定の詳細については、上記リンクを参照してください。
2.35.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-hl7</artifactId> </dependency>
2.35.3. Camel Quarkus の制限
MLLP と TCP を使用する場合には、Netty が Hl7 MLLP リスナーを実行する唯一のサポートされる手段です。現在、GraalVM ネイティブサポートがないため、Mina はサポートされません。
HL7MLLPNettyEncoderFactory
および HL7MLLPNettyDecoderFactory
コーデックのオプションのサポートは、プロジェクト pom.xml
の依存関係を camel-quarkus-netty
に追加することで取得できます。
2.36. HTTP
Apache HTTP Client 5.x を使用して、外部の HTTP サーバーにリクエストを送信します。
2.36.1. 含まれるもの
-
HTTP コンポーネント、URI 構文:
http://httpUri
-
HTTPS (Secure) コンポーネント、URI 構文:
https://httpUri
使用方法と設定の詳細については、上記リンクを参照してください。
2.36.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-http</artifactId> </dependency>
2.36.3. ネイティブモードの SSL
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true
を application.properties
に追加する必要はありません。Quarkus SSL ガイド も参照してください。
2.36.4. 追加の Camel Quarkus 設定
- アプリケーションがデフォルト以外のエンコーディングを使用してリクエストを送受信することが想定される場合は、ネイティブモードガイドの 文字エンコーディング のセクションを確認してください。
2.37. Infinispan
Infinispan の分散キー/値のストアとデータグリッドの読み取りと書き込みを行います。
2.37.1. 含まれるもの
-
Infinispan コンポーネント、URI 構文:
infinispan:cacheName
使用方法と設定の詳細は、上記リンクを参照してください。
2.37.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-infinispan</artifactId> </dependency>
2.37.3. 追加の Camel Quarkus 設定
2.37.3.1. Infinispan クライアント設定
該当する Camel Infinispan コンポーネントおよびエンドポイントオプションで Infinispan クライアントを設定するか、Quarkus Infinispan エクステンション設定プロパティー を使用できます。
Quarkus Infinispan 設定プロパティーを使用することを選択した場合は、Camel Infinispan コンポーネントで検出できるようにするために、RemoteCacheManager
のインジェクションポイントを 追加する必要がある ことに注意してください。以下に例を示します。
public class Routes extends RouteBuilder { // Injects the default unnamed RemoteCacheManager @Inject RemoteCacheManager cacheManager; // If configured, injects an optional named RemoteCacheManager @Inject @InfinispanClientName("myNamedClient") RemoteCacheManager namedCacheManager; @Override public void configure() { // Route configuration here... } }
2.37.3.2. ネイティブモードの Camel Infinispan InfinispanRemoteAggregationRepository
InfinispanRemoteAggregationRepository
をネイティブモードで使用することを選択した場合は、ネイティブシリアライゼーションサポートを有効 にする必要があります。
2.38. Avro Jackson
Jackson を使用して、POJO を Avro にマーシャリングし、その逆も行います。
2.38.1. 含まれるもの
使用方法と設定の詳細は、上記リンクを参照してください。
2.38.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-jackson-avro</artifactId> </dependency>
2.39. Protobuf Jackson
Jackson を使用して、POJO を Protobuf にマーシャリングし、その逆も行います。
2.39.1. 含まれるもの
使用方法と設定の詳細は、上記リンクを参照してください。
2.39.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-jackson-protobuf</artifactId> </dependency>
2.40. Jackson
Jackson を使用して、POJO を JSON にマーシャリングし、その逆も行います。
2.40.1. 含まれるもの
使用方法と設定の詳細は、上記リンクを参照してください。
2.40.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-jackson</artifactId> </dependency>
2.40.3. 使用方法
2.40.3.1. Jackson ObjectMapper
の設定
JacksonDataFormat
が使用する ObjectMapper
を設定するには、いくつかの方法があります。これらの概要を以下に示します。
2.40.3.1.1. JacksonDataFormat
によって内部的に作成された ObjectMapper
デフォルトでは、JacksonDataFormat
は独自の ObjectMapper
を作成し、DataFormat
のさまざまな設定オプションを使用して、追加の Jackson モジュール、きれいな印刷、およびその他の機能を設定します。
2.40.3.1.2. JacksonDataFormat
のカスタム ObjectMapper
次のように、カスタム ObjectMapper
インスタンスを JacksonDataFormat
に渡すことができます。
import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.jackson.JacksonDataFormat; public class Routes extends RouteBuilder { public void configure() { ObjectMapper mapper = new ObjectMapper(); JacksonDataFormat dataFormat = new JacksonDataFormat(); dataFormat.setObjectMapper(mapper); // Use the dataFormat instance in a route definition from("direct:my-direct").marshal(dataFormat) } }
2.40.3.1.3. JacksonDataFormat
での Quarkus Jackson ObjectMapper
の使用
Quarkus Jackson エクステンションは、JacksonDataFormat
によって検出できる ObjectMapper
CDI Bean を公開します。
import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.jackson.JacksonDataFormat; public class Routes extends RouteBuilder { public void configure() { JacksonDataFormat dataFormat = new JacksonDataFormat(); // Make JacksonDataFormat discover the Quarkus Jackson `ObjectMapper` from the Camel registry dataFormat.setAutoDiscoverObjectMapper(true); // Use the dataFormat instance in a route definition from("direct:my-direct").marshal(dataFormat) } }
Camel REST DSL で JSON バインディングモードを使用していて、Quarkus Jackson ObjectMapper
を使用したい場合は、次のように実現できます。
import org.apache.camel.builder.RouteBuilder; @ApplicationScoped public class Routes extends RouteBuilder { public void configure() { restConfiguration().dataFormatProperty("autoDiscoverObjectMapper", "true"); // REST definition follows... } }
ObjectMapperCustomizer
を使用して、Quarkus ObjectMapper
でカスタマイズを実行できます。
import com.fasterxml.jackson.databind.ObjectMapper; import io.quarkus.jackson.ObjectMapperCustomizer; @Singleton public class RegisterCustomModuleCustomizer implements ObjectMapperCustomizer { public void customize(ObjectMapper mapper) { mapper.registerModule(new CustomModule()); } }
Quarkus ObjectMapper
を @Inject
して、JacksonDataFormat
に渡すこともできます。
import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.jackson.JacksonDataFormat; @ApplicationScoped public class Routes extends RouteBuilder { @Inject ObjectMapper mapper; public void configure() { JacksonDataFormat dataFormat = new JacksonDataFormat(); dataFormat.setObjectMapper(mapper); // Use the dataFormat instance in a route definition from("direct:my-direct").marshal(dataFormat) } }
2.41. JacksonXML
Jackson の XMLMapper エクステンションを使用して、XML ペイロードを POJO にアンマーシャリングし、戻します。
2.41.1. 含まれるもの
使用方法と設定の詳細は、上記リンクを参照してください。
2.41.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-jacksonxml</artifactId> </dependency>
2.42. Java jOOR DSL
実行時の Java ルート定義の解析のサポート
2.42.1. 含まれるもの
使用方法と設定の詳細は、上記リンクを参照してください。
2.42.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-java-joor-dsl</artifactId> </dependency>
2.42.3. Camel Quarkus の制限
コンポーネントによってコンパイルされるクラスに追加されたアノテーションは、Quarkus によって無視されます。このエクステンションで部分的にサポートされている唯一のアノテーションは、ネイティブモードのリフレクションの設定を容易にするアノテーション RegisterForReflection
です。ただし、要素 registerFullHierarchy
はサポートされていないことに注意してください。
2.43. JAXB
JAXB2 XML マーシャリング標準を使用して、XML ペイロードを POJO に、およびその逆にアンマーシャリングします。
2.43.1. 含まれるもの
使用方法と設定の詳細は、上記リンクを参照してください。
2.43.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-jaxb</artifactId> </dependency>
2.43.3. 使用方法
2.43.3.1. 非 JAXB アノテーション付きクラスのネイティブモード ObjectFactory
インスタンス化
JAXB アノテーションを持たない POJO クラスをインスタンス化するために、カスタム ObjectFactory
で JAXB マーシャル操作を行う場合、それらの POJO クラスをネイティブモードでインスタンス化するために、リフレクションに登録する必要があります。たとえば、@RegisterForReflection
アノテーションまたは設定プロパティー quarkus.camel.native.reflection.include-patterns
を介した場合です。
詳細は、ネイティブモード のユーザーガイドを参照してください。
2.44. JDBC
SQL および JDBC を通じてデータベースにアクセスします。
2.44.1. 含まれるもの
-
JDBC コンポーネント、URI 構文:
jdbc:dataSourceName
使用方法と設定の詳細は、上記リンクを参照してください。
2.44.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-jdbc</artifactId> </dependency>
2.44.3. 追加の Camel Quarkus 設定
2.44.3.1. データソースの設定
このエクステンションは、DataSource
のサポートに Quarkus Agroal を活用します。DataSource
の設定は、設定プロパティーを介して実行できます。JDBC エンドポイント URI で参照できるように、データソースの名前は明示的に付けることを推奨します。たとえば、to("jdbc:camel")
のようになります。
quarkus.datasource.camel.db-kind=postgresql quarkus.datasource.camel.username=your-username quarkus.datasource.camel.password=your-password quarkus.datasource.camel.jdbc.url=jdbc:postgresql://localhost:5432/your-database quarkus.datasource.camel.jdbc.max-size=16
データソースに名前を付けないことを選択した場合は、to("jdbc:default")
のようにエンドポイントを定義することでデフォルトの DataSource
を解決できます。
2.44.3.1.1. Quarkus Dev Services によるゼロ設定
開発モードとテストモードでは、Configuration Free Databases を利用できます。必要なのは、ルート内でデフォルトのデータベースを参照することだけです。たとえば、to("jdbc:default")
のようになります。
2.45. Jira
JIRA 問題トラッカーと対話します。
2.45.1. 含まれるもの
-
Jira コンポーネント、URI 構文:
jira:type
使用方法と設定の詳細は、上記リンクを参照してください。
2.45.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-jira</artifactId> </dependency>
2.45.3. ネイティブモードの SSL
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true
を application.properties
に追加する必要はありません。Quarkus SSL ガイド も参照してください。
2.46. JMS
JMS Queue または Topic との間でメッセージを送受信します。
2.46.1. 含まれるもの
-
JMS コンポーネント、URI 構文:
jms:destinationType:destinationName
使用方法と設定の詳細は、上記リンクを参照してください。
2.46.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-jms</artifactId> </dependency>
2.46.3. 使用方法
2.46.3.1. org.w3c.dom.Node
を使用したメッセージマッピング
Camel JMS コンポーネントは、jakarta.jms.Message
および org.apache.camel.Message
間のメッセージマッピングをサポートします。Camel メッセージ本文タイプ org.w3c.dom.Node
を変換する場合は、camel-quarkus-xml-jaxp
エクステンションがクラスパスに存在することを確認する必要があります。
2.46.3.2. jakarta.jms.ObjectMessage のネイティブモードのサポート
JMS メッセージペイロードを jakarta.jms.ObjectMessage
として送信する場合、シリアル化のために登録する関連クラスに @RegisterForReflection(serialization = true)
でアノテーションを付ける必要があります。
このエクステンションは、quarkus.camel.native.reflection.serialization-enabled = true
を自動的に設定します。詳細は、ネイティブモードのユーザーガイド を参照してください。
2.46.3.3. 接続プーリングと X/Open XA 分散トランザクションのサポート
quarkus-pooled-jms
エクステンションを使用して、JMS 接続のプーリングと XAのサポートを得ることができます。詳細は、quarkus-pooled-jms エクステンションドキュメントを参照してください。現在、このエクステンションは、quarkus-artemis-jms
、quarkus-qpid-jms
、および ibmmq-client
で使用できます。依存関係を pom.xml
に追加するだけです。
<dependency> <groupId>io.quarkiverse.messaginghub</groupId> <artifactId>quarkus-pooled-jms</artifactId> </dependency>
プーリングはデフォルトで有効になっています。
プーリング接続では、clientID
と durableSubscriptionName
はサポートされていません。プールから reused
された接続で setClientID
が呼び出されると、IllegalStateException
が出力されます。次のようなエラーメッセージが表示されます。Cause: setClientID can only be called directly after the connection is created
XA を有効にするには、quarkus-narayana-jta
エクステンションを追加する必要があります。
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-narayana-jta</artifactId> </dependency>
続いて、次の設定を application.properties
に追加します。
quarkus.pooled-jms.transaction=xa quarkus.transaction-manager.enable-recovery=true
XA サポートは、quarkus-artemis-jms
および ibmmq-client
でのみ利用可能です。
トランザクションリカバリー を有効にすることを強く推奨します。
現在、ibmmq-client
用の quarkus エクステンションは存在しないため、独自にカスタム ConnectionFactory
を作成してラップする必要があります。
以下に例を示します。
ラッパーの例: ibmmq-client
用の ConnectionFactory
@Produces public ConnectionFactory createXAConnectionFactory(PooledJmsWrapper wrapper) { MQXAConnectionFactory mq = new MQXAConnectionFactory(); try { mq.setHostName(ConfigProvider.getConfig().getValue("ibm.mq.host", String.class)); mq.setPort(ConfigProvider.getConfig().getValue("ibm.mq.port", Integer.class)); mq.setChannel(ConfigProvider.getConfig().getValue("ibm.mq.channel", String.class)); mq.setQueueManager(ConfigProvider.getConfig().getValue("ibm.mq.queueManagerName", String.class)); mq.setTransportType(WMQConstants.WMQ_CM_CLIENT); mq.setStringProperty(WMQConstants.USERID, ConfigProvider.getConfig().getValue("ibm.mq.user", String.class)); mq.setStringProperty(WMQConstants.PASSWORD, ConfigProvider.getConfig().getValue("ibm.mq.password", String.class)); } catch (Exception e) { throw new RuntimeException("Unable to create new IBM MQ connection factory", e); } return wrapper.wrapConnectionFactory(mq); }
2.47. JPA
Java Persistence API (JPA) を使用して、データベースから Java オブジェクトを保存し、取得します。
2.47.1. 含まれるもの
-
JPA コンポーネント、URI 構文:
jpa:entityType
使用方法と設定の詳細は、上記リンクを参照してください。
2.47.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-jpa</artifactId> </dependency>
2.47.3. 追加の Camel Quarkus 設定
このエクステンションは、Quarkus Hibernate ORM を活用して、Hibernate 経由で JPA 実装を提供します。
Hibernate とデータソースを設定する方法については、Quarkus Hibernate ORM のドキュメントを参照してください。
また、Quarkus TX API を活用して TransactionStrategy
実装を提供します。
単一の永続ユニットが使用される場合、Camel Quarkus JPA エクステンションは、自動的に JPA コンポーネントを EntityManagerFactory
および TransactionStrategy
で設定します。
2.47.3.1. JpaMessageIdRepository の設定
CDI コンテナーの EntityManagerFactory
と TransactionStrategy
を使用して、JpaMessageIdRepository
を設定する必要があります。
@Inject EntityManagerFactory entityManagerFactory; @Inject TransactionStrategy transactionStrategy; from("direct:idempotent") .idempotentConsumer( header("messageId"), new JpaMessageIdRepository(entityManagerFactory, transactionStrategy, "idempotentProcessor"));
spring-orm
依存関係が除外されるため、sharedEntityManager
、transactionManager
などの一部のオプションはサポートされません。
2.48. JSLT
JSLT を使用して JSON ペイロードをクエリーまたは変換します。
2.48.1. 含まれるもの
-
JSLT コンポーネント、URI 構文:
jslt:resourceUri
使用方法と設定の詳細は、上記リンクを参照してください。
2.48.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-jslt</artifactId> </dependency>
2.48.3. ネイティブモードの allowContextMapAll オプション
allowContextMapAll
オプションはネイティブモードではサポートされていません。これは、CamelContext
や Exchange
などのセキュリティーに敏感な Camel コアクラスへのリフレクティブアクセスが必要なためです。これはセキュリティーリスクとみなされるため、この機能へのアクセスはデフォルトでは提供されません。
2.48.4. 追加の Camel Quarkus 設定
2.48.4.1. ネイティブモードでクラスパスから JSLT テンプレートをロードする
通常、このコンポーネントはクラスパスからテンプレートをロードします。ネイティブモードでも機能させるには、quarkus.native.resources.includes
プロパティーを使用して、テンプレートファイルをネイティブ実行可能ファイルに明示的に埋め込む必要があります。
たとえば、以下のルートは、transformation.json
という名前のクラスパスリソースから JSLT スキーマを読み込みます。
from("direct:start").to("jslt:transformation.json");
これら (.json
ファイルに保存されている可能性のある他のテンプレート) をネイティブイメージに含めるには、application.properties
ファイルに次のようなものを追加する必要があります。
quarkus.native.resources.includes = *.json
2.48.4.2. ネイティブモードでの JSLT 関数の使用
camel-quarkus の JSLT 関数をネイティブモードで使用する場合、関数をホストするクラスを リフレクションに登録 する必要があります。ターゲット関数を登録できない場合、以下のようにスタブを書いてしまうことがあります。
@RegisterForReflection public class MathFunctionStub { public static double pow(double a, double b) { return java.lang.Math.pow(a, b); } }
ターゲット関数 Math.pow(…)
は、以下のようにコンポーネントに登録できる MathFunctionStub
クラスを介してアクセスできるようになりました。
@Named JsltComponent jsltWithFunction() throws ClassNotFoundException { JsltComponent component = new JsltComponent(); component.setFunctions(singleton(wrapStaticMethod("power", "org.apache.cq.example.MathFunctionStub", "pow"))); return component; }
2.49. JSON Path
JSON メッセージのボディーに対して、JSONPath 式を評価します。
2.49.1. 含まれるもの
使用方法と設定の詳細は、上記リンクを参照してください。
2.49.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-jsonpath</artifactId> </dependency>
2.50. JTA
Java Transaction API (JTA) および Narayana トランザクションマネージャーを使用して、Camel ルートをトランザクションに含めます。
2.50.1. 含まれるもの
使用方法と設定の詳細は、上記リンクを参照してください。
2.50.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-jta</artifactId> </dependency>
2.50.3. 使用方法
このエクステンションは、ルーターで transacted()
EIP を使用する必要がある場合に追加する必要があります。これは、Quarkus の narayana-jta エクステンションによって提供されるトランザクション機能を利用します。
トランザクションサポートの詳細は、Quarkus Transaction guide を参照してください。簡単な使用方法の場合:
from("direct:transaction") .transacted() .to("sql:INSERT INTO A TABLE ...?dataSource=ds1") .to("sql:INSERT INTO A TABLE ...?dataSource=ds2") .log("all data are in the ds1 and ds2")
さまざまなトランザクションポリシーのサポートが提供されます。
ポリシー | 説明 |
---|---|
| 現在のトランザクションをサポートします。現在のトランザクションが存在しない場合は例外が発生します。 |
| 現在のトランザクションをサポートしません。現在のトランザクションが存在する場合は例外が発生します。 |
| 現在のトランザクションはサポートせず、常に非トランザクションを実行します。 |
| 現在のトランザクションをサポートします。存在しない場合は新しいトランザクションを作成します。 |
| 新しいトランザクションを作成し、現在のトランザクションが存在する場合はそれを一時停止します。 |
| 現在のトランザクションをサポートします。存在しない場合は、非トランザクションを実行します。 |
2.51. Kafka
Apache Kafka ブローカーとの間でメッセージを送受信します。
2.51.1. 含まれるもの
-
Kafka コンポーネント、URI 構文:
kafka:topic
使用方法と設定の詳細は、上記リンクを参照してください。
2.51.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-kafka</artifactId> </dependency>
2.51.3. 使用方法
2.51.3.1. Quarkus Kafka Dev Services
Camel Quarkus Kafka は、Quarkus Kafka Dev services を利用して、ローカルのコンテナー化された Kafka ブローカーでの開発およびテストを簡素化できます。
デフォルトで、Kafka Dev Services は開発およびテストモードで有効になっています。Camel Kafka コンポーネントは、brokers
コンポーネントのオプションがローカルのコンテナー化された Kafka ブローカーを参照するように自動的に設定されます。つまり、このオプションを独自に設定する必要はありません。
この機能は、設定プロパティー quarkus.kafka.devservices.enabled=false
を使用して無効にできます。
2.51.4. 追加の Camel Quarkus 設定
設定プロパティー | タイプ | デフォルト |
---|---|---|
|
|
|
{doc-link-icon-lock}[title=Fixed at build time] 設定プロパティーはビルド時に修正されました。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。
2.52. Kamelet
ルートテンプレートを具体化する
2.52.1. 含まれるもの
-
Kamelet コンポーネント、URI 構文:
kamelet:templateId/routeId
使用方法と設定の詳細は、上記リンクを参照してください。
2.52.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-kamelet</artifactId> </dependency>
2.52.3. 使用方法
2.52.3.1. ビルド時に Kamelets をプリロードします
このエクステンションを使用すると、quarkus.camel.kamelet.identifiers
プロパティーを使用して、ビルド時に一連の Kamelet をプリロードできます。
2.52.3.2. Kamelet Catalog の使用
/camel-kamelets/latest[Kamelet Catalog] には事前に設定された Kamelets のセットがあります。カタログから Kamelet を使用するには、クラスパスのプロジェクトの yaml 定義 (camel-kamelet リポジトリー にあります) をコピーする必要があります。または、camel-kamelets-catalog
アーティファクトを pom.xml
に追加できます。
<dependency> <groupId>org.apache.camel.kamelets</groupId> <artifactId>camel-kamelets-catalog</artifactId> </dependency>
このアーティファクトは、カタログで使用可能なすべての kamelets を Camel Quarkus アプリケーションに追加してビルドタイム処理を行います。アーティファクトがランタイムではなくビルドタイムクラスパスの一部でなければならないという条件 (provided
) でスコープに含める場合、quarkus.camel.kamelet.identifiers
プロパティーを介してリストされたすべての kamelets を事前にロードする必要があります。
2.52.4. 追加の Camel Quarkus 設定
設定プロパティー | タイプ | デフォルト |
---|---|---|
ビルド時にプリロードする kamelets 識別子のリスト。
個々の識別子は、関連する |
|
{doc-link-icon-lock}[title=Fixed at build time] 設定プロパティーはビルド時に修正されました。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。
2.53. Kubernetes
Kubernetes API に対して操作を実行する
2.53.1. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-kubernetes</artifactId> </dependency>
2.53.2. 追加の Camel Quarkus 設定
2.53.2.1. Kubernetes クライアントインスタンスの自動登録
エクステンションは、kubernetesClient
という名前の Kubernetes クライアント Bean を自動的に登録します。次のように、ルートで Bean を参照できます。
from("direct:pods") .to("kubernetes-pods:///?kubernetesClient=#kubernetesClient&operation=listPods")
デフォルトでは、クライアントはローカルの kubeconfig ファイルから設定されます。application.properties
内のプロパティーを使用して、クライアント設定をカスタマイズできます。
quarkus.kubernetes-client.master-url=https://my.k8s.host quarkus.kubernetes-client.namespace=my-namespace
設定オプションの完全なセットは、Quarkus Kubernetes Client ガイド に記載されています。
2.53.2.2. 特定のエンドポイントから消費するコンシューマがクラスタ内で 1 つだけであること
同じルートが複数の Pod にデプロイされている場合、このエクステンションを マスターのエクステンション と組み合わせて使用すると便利な場合があります。このようなセットアップでは、キャメルマスター namespace 全体で一度に 1 つのコンシューマーがアクティブになります。
たとえば、以下のルートを複数の Pod にデプロイするとします。
from("master:ns:timer:test?period=100").log("Timer invoked on a single pod at a time");
以下のようなプロパティーを使用して、kubernetes クラスターサービスを有効にすることができます。
quarkus.camel.cluster.kubernetes.enabled = true
その結果、1 つのコンシューマーが ns
camel マスター namespace 全体でアクティブになります。これは、特定の時点で、単一のタイマーのみがクラスター全体でエクスチェンジを生成することを意味します。つまり、メッセージは一度に 1 つの Pod で 100 ミリ秒ごとにログに記録されます。
kubernetes クラスターサービスは、quarkus.camel.cluster.kubernetes.*
プロパティーをさらに微調整できます。
設定プロパティー | タイプ | デフォルト |
---|---|---|
quarkus.camel.cluster.kubernetes.* 設定に従って、Kubernetes クラスターサービスを自動的に設定する必要があるかどうか。 |
|
|
クラスターサービス ID (デフォルトは null)。 |
| |
Kubernetes マスターの URL (デフォルトでは Kubernetes クライアントプロパティーから読み取られます)。 |
| |
Kubernetes API サーバーにリクエストを送信するときに使用する接続タイムアウト (ミリ秒単位)。 |
| |
Pod と configmap を含む Kubernetes namespace の名前 (デフォルトで自動検出)。 |
| |
現在の Pod の名前 (デフォルトではコンテナーのホスト名から自動検出されます)。 |
| |
すべての Pod が同じ瞬間に Kubernetes API を呼び出さないようにするために適用するジッター係数 (デフォルトは 1.2)。 |
| |
現在のリーダーのデフォルトのリース期間 (デフォルトは 15000)。 |
| |
リーダーシップを失った可能性があるため、リーダーがサービスを停止しなければならない期限 (デフォルトは 10000)。 |
| |
リーダーシップを確認して獲得するための後続の 2 つの試みの間の時間。ジッター係数を使用してランダム化されます (デフォルトは 2000)。 |
| |
サービス検索の順序/優先度 (デフォルトは 2147482647)。 |
| |
楽観的ロックを行うために使用されるリースリソースの名前 (デフォルトは leaders)。リソース名は、基になる Kubernetes リソースが単一のロックを管理できる場合に接頭辞として使用されます。 |
| |
Kubernetes で使用されるリースリソースタイプ。config-map または lease のいずれかです (デフォルトは lease)。 |
| |
camel マスター namespace リーダーをクラスター内のすべての camel コンテキストに均等に分散する必要があるかどうか。 |
|
|
クラスターを設定する Pod を識別するために使用されるラベルのキー/値。デフォルトは空のマップです。 |
|
{doc-link-icon-lock}[title=Fixed at build time] 設定プロパティーはビルド時に修正されました。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。
2.54. 言語
Camel がサポートする任意の言語でスクリプトを実行します。
2.54.1. 含まれるもの
-
Language コンポーネント、URI 構文:
language:languageName:resourceUri
使用方法と設定の詳細は、上記リンクを参照してください。
2.54.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-language</artifactId> </dependency>
2.54.3. 使用方法
2.54.3.1. 必要な依存関係
言語エクステンションは、実行するスクリプトに Exchange を渡すことのみを処理します。言語を実装するエクステンションは依存関係として追加する必要があります。次のリストの言語が Core に実装されています。
- Constant
- ExchangeProperty
- File
- Header
- Ref
- Simple
- Tokenize
他の言語を使用するには、対応する依存関係を追加する必要があります。詳細は、言語ガイド を参照してください。
2.54.3.2. ネイティブモード
ネイティブモードでクラスパスからスクリプトをロードする場合、スクリプトファイルへのパスを application.properties
ファイルの quarkus.native.resources.includes
プロパティーで指定する必要があります。以下に例を示します。
quarkus.native.resources.includes=script.txt
2.54.4. ネイティブモードの allowContextMapAll オプション
allowContextMapAll
オプションはネイティブモードではサポートされていません。これは、CamelContext
や Exchange
などのセキュリティーに敏感な Camel コアクラスへのリフレクティブアクセスが必要なためです。これはセキュリティーリスクとみなされるため、この機能へのアクセスはデフォルトでは提供されません。
2.55. LDAP
LDAP サーバーで検索を実行します。
2.55.1. 含まれるもの
-
LDAP コンポーネント、URI 構文:
ldap:dirContextName
使用方法と設定の詳細は、上記リンクを参照してください。
2.55.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-ldap</artifactId> </dependency>
2.55.3. 使用方法
2.55.3.1. ネイティブモードでの SSL の使用
カスタム SSLSocketFactory
(Configuring SSL セクションにあるものなど) をネイティブモードで使用する場合は、クラスをリフレクション用に登録する必要があります。そうしないと、クラスがクラスパスで使用可能になりません。次のように、クラス定義の上に @RegisterForReflection
アノテーションを追加します。
@RegisterForReflection public class CustomSSLSocketFactory extends SSLSocketFactory { // The class definition is the same as in the above link. }
2.56. Log
基礎となるロギングメカニズムにメッセージをログとして記録します。
2.56.1. 含まれるもの
-
Log コンポーネント、URI 構文:
log:loggerName
使用方法と設定の詳細は、上記リンクを参照してください。
2.56.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-log</artifactId> </dependency>
2.57. Mail
imap、pop3、および smtp プロトコルを使用してメールを送受信します。添付のある Camel メッセージを MIME-Multipart メッセージに、またはその逆にマーシャリングします。
2.57.1. 含まれるもの
-
IMAP コンポーネント、URI 構文:
imap:host:port
-
IMAPS (Secure) コンポーネント、URI 構文:
imaps:host:port
- MIME Multipart データ形式
-
POP3 コンポーネント、URI 構文:
pop3:host:port
-
POP3S コンポーネント、URI 構文:
pop3s:host:port
-
SMTP コンポーネント、URI 構文:
smtp:host:port
-
SMTPS コンポーネント、URI 構文:
smtps:host:port
使用方法と設定の詳細については、上記リンクを参照してください。
2.57.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-mail</artifactId> </dependency>
2.58. 管理
JMX 管理ストラテジーと関連する管理リソース。
2.58.1. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-management</artifactId> </dependency>
2.58.2. 使用方法
Camel で管理対象 Bean を使用する方法については、Camel Manual の JMX セクション を参照してください。
2.58.2.1. JMX の有効化と無効化
JMX は、次のいずれかの方法で Camel-Quarkus で有効または無効にすることができます。
-
camel-quarkus-management
エクステンションを追加または削除する。 -
camel.main.jmxEnabled
設定プロパティーをブール値に設定する。 -
システムプロパティー
-Dorg.apache.camel.jmx.disabled
をブール値に設定する。
2.58.2.2. ネイティブモード
JDK 17/20/Mandrel 23.0 の GraalVM のネイティブ実行可能ファイルに 実験的な JMX サポートが追加されました。この機能を有効にするには、以下の設定プロパティーを application.properties
に追加します。
quarkus.native.monitoring=jmxserver
詳細は、Quarkus native guide を参照してください。
2.59. MapStruct
Mapstruct を使用した型変換
2.59.1. 含まれるもの
-
MapStruct コンポーネント、URI 構文:
mapstruct:className
使用方法と設定の詳細は、上記リンクを参照してください。
2.59.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-mapstruct</artifactId> </dependency>
2.59.3. 使用方法
2.59.3.1. アノテーションプロセッサー
MapStruct を使用するには、アノテーションプロセッサーを使用するようにビルドを設定する必要があります。
2.59.3.1.1. Maven
<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <annotationProcessorPaths> <path> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>{mapstruct-version}</version> </path> </annotationProcessorPaths> </configuration> </plugin> </plugins>
2.59.3.1.2. Gradle
dependencies { annotationProcessor 'org.mapstruct:mapstruct-processor:{mapstruct-version}' testAnnotationProcessor 'org.mapstruct:mapstruct-processor:{mapstruct-version}' }
2.59.3.2. マッパー定義の検出
デフォルトでは、Red Hat build of Apache Camel for Quarkus は、@Mapper
アノテーション付きインターフェイスまたは抽象クラスのパッケージパスを自動的に検出し、それらを Camel MapStruct コンポーネントに渡します。
スキャンされる特定のパッケージをより細かく制御する必要がある場合は、application.properties
で設定プロパティーを設定できます。
camel.component.mapstruct.mapper-package-name = com.first.package,org.second.package
2.60. Master
クラスター内の単一のコンシューマーのみが特定のエンドポイントから消費するようにします。JVM が停止した場合に自動的にフェイルオーバーします。
2.60.1. 含まれるもの
-
Master コンポーネント、URI 構文:
master:namespace:delegateUri
使用方法と設定の詳細は、上記リンクを参照してください。
2.60.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-master</artifactId> </dependency>
2.60.3. 追加の Camel Quarkus 設定
このエクステンションは、以下のエクステンションと組み合わせて使用できます。
2.61. Micrometer
Micrometer ライブラリーを使用して、Camel ルートからさまざまなメトリクスを直接収集します。
2.61.1. 含まれるもの
-
Micrometer コンポーネント、URI 構文:
micrometer:metricsType:metricsName
使用方法と設定の詳細は、上記リンクを参照してください。
2.61.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-micrometer</artifactId> </dependency>
2.61.3. 使用方法
このエクステンションは Quarkus Micrometer を活用しています。Quarkus は、さまざまな Micrometer メトリクスレジストリー実装をサポートしています。
アプリケーションでは、使用する監視ソリューションに応じて、以下の依存関係、または quarkiverse ドキュメント に記載されている依存関係の 1 つを宣言する必要があります。
<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency>
依存関係が宣言されていない場合、Micrometer エクステンションは主にテストに適した SimpleMeterRegistry
インスタンスを作成します。
2.61.4. Camel Quarkus の制限
2.61.4.1. JMX での Micrometer 統計情報の公開
quarkus-micrometer-registry-jmx
には現在ネイティブサポートがないため、JMX での Micrometer 統計の公開はネイティブモードでは利用できません。
2.61.4.2. Counter のデクリメントヘッダーは Prometheus によって無視されます
Prometheus バックエンドは、Counter メトリクスのインクリメント中に負の値を無視します。
2.61.4.3. JMX での統計の公開
Red Hat build of Apache Camel for Quarkus では、JmxMeterRegistry
の登録が簡素化されています。io.quarkiverse.micrometer.registry:quarkus-micrometer-registry-jmx
の依存関係を追加すると、JmxMeterRegistry
が自動的に作成されます。
2.61.5. 追加の Camel Quarkus 設定
設定プロパティー | タイプ | デフォルト |
---|---|---|
ルート処理時間のメトリクスをキャプチャーするために MicrometerRoutePolicyFactory を有効化するかどうかを設定します。 |
|
|
個々のルートノード処理時間のメトリクスをキャプチャーするために、MicrometerMessageHistoryFactory を有効化するかどうかを設定します。設定されたルートノードの数によっては、大量のメトリクスが作成される可能性があります。したがって、このオプションはデフォルトで無効になります。 |
|
|
エクスチェンジ処理時間のメトリクスをキャプチャーするために、MicrometerExchangeEventNotifier を有効化するかどうかを設定します。 |
|
|
ルートの合計数と実行中のルートの合計数のメトリクスをキャプチャーするために、MicrometerRouteEventNotifier を有効化するかどうかを設定します。 |
|
|
InstrumentedThreadPoolFactory を注入して Camel Thread Pool に関するパフォーマンス情報を収集するかどうかを設定します。 |
|
|
{doc-link-icon-lock}[title=Fixed at build time] 設定プロパティーはビルド時に修正されました。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。
2.62. MicroProfile フォールトトレランス
Microprofile フォールトトレラン を使用した Circuit Breaker EIP
2.62.1. 含まれるもの
使用方法と設定の詳細は、上記リンクを参照してください。
2.62.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-microprofile-fault-tolerance</artifactId> </dependency>
2.63. MicroProfile Health
MicroProfile Health による Camel ヘルスチェックの公開
2.63.1. 含まれるもの
使用方法と設定の詳細は、上記リンクを参照してください。
2.63.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-microprofile-health</artifactId> </dependency>
2.63.3. 使用方法
デフォルトでは、AbstractHealthCheck
を拡張するクラスは liveness および readiness チェックの両方として登録されます。isReadiness
メソッドを上書きして、この動作を制御できます。
アプリケーションによって提供されるチェックは自動的に検出され、Camel レジストリーにバインドされます。これらは、Quarkus ヘルスエンドポイント /q/health/live
および /q/health/ready
から利用できます。
カスタムの HealthCheckRepository
実装も提供でき、これらの実装も自動的に検出され、Camel レジストリーにバインドされます。
詳細は、Quarkus health guide を参照してください。
2.63.3.1. 提供されるヘルスチェック
一部のチェックはアプリケーションに自動的に登録されます。
2.63.3.1.1. Camel Context Health
Camel Context のステータスを検査して、ステータスが Started 以外の場合にヘルスチェックのステータスを DOWN
にします。
2.63.3.1.2. Camel Route Health
各ルートのステータスを検査して、いずれかのルートのステータスが Started 以外の場合にヘルスチェックのステータスを DOWN
にします。
2.63.4. 追加の Camel Quarkus 設定
設定プロパティー | タイプ | デフォルト |
---|---|---|
Camel ヘルスチェックを有効にするかどうかを設定します |
|
|
{doc-link-icon-lock}[title=Fixed at build time] 設定プロパティーはビルド時に修正されました。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。
2.64. Minio
Minio SDK を使用して、Minio Storage Service からオブジェクトを保存および取得します。
2.64.1. 含まれるもの
-
Minio コンポーネント、URI 構文:
minio:bucketName
使用方法と設定の詳細は、上記リンクを参照してください。
2.64.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-minio</artifactId> </dependency>
2.64.3. 追加の Camel Quarkus 設定
Minio の設定によっては、このエクステンションでは接続に SSL 暗号化が必要になる場合があります。このような場合、quarkus.ssl.native=true
を application.properties
に追加する必要があります。Quarkus native SSL guide および Camel Quarkus ユーザーガイドの ネイティブモード セクションも参照してください。
次の 2 つの異なる設定アプローチがあります。
- Minio クライアントは、Quarkiverse Minio を利用する quarkus プロパティーを通じて定義できます (ドキュメント を参照)。Camel はクライアントを Minio コンポーネントに自動接続します。この設定では、minio クライアントを 1 つだけ定義できるため、一緒に実行される、異なる minio エンドポイントを複数定義できません。
- Camel レジストリーのクライアント (CDI プロデューサ/Bean など) を提供し、エンドポイントから参照します。
minio:foo?minioClient=#minioClient
2.65. MLLP
MLLP プロトコルを使用して外部システムと通信します。
2.65.1. 含まれるもの
-
MLLP コンポーネント、URI 構文:
mllp:hostname:port
使用方法と設定の詳細は、上記リンクを参照してください。
2.65.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-mllp</artifactId> </dependency>
2.65.3. 追加の Camel Quarkus 設定
-
defaultCharset
コンポーネントオプションを使用する場合は、ネイティブモードガイドの 文字エンコーディング のセクションを確認してください。
2.66. Mock
モックを使用してルートおよび仲介ルールをテストします。
2.66.1. 含まれるもの
-
Mock コンポーネント、URI 構文:
mock:name
使用方法と設定の詳細は、上記リンクを参照してください。
2.66.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-mock</artifactId> </dependency>
2.66.3. 使用方法
テストで camel-mock 機能を使用するには、MockEndpoint インスタンスへのアクセスを取得する必要があります。
CDI の注入は、インスタンスへのアクセスに使用できます (Quarkus ドキュメント を参照してください)。@Inject
アノテーションを使用して camelContext をテストに注入できます。その後、Camel コンテキストを使用してモックエンドポイントを取得できます。以下の例を参照してください。
import jakarta.inject.Inject; import org.apache.camel.CamelContext; import org.apache.camel.ProducerTemplate; import org.apache.camel.component.mock.MockEndpoint; import org.junit.jupiter.api.Test; import io.quarkus.test.junit.QuarkusTest; @QuarkusTest public class MockJvmTest { @Inject CamelContext camelContext; @Inject ProducerTemplate producerTemplate; @Test public void test() throws InterruptedException { producerTemplate.sendBody("direct:start", "Hello World"); MockEndpoint mockEndpoint = camelContext.getEndpoint("mock:result", MockEndpoint.class); mockEndpoint.expectedBodiesReceived("Hello World"); mockEndpoint.assertIsSatisfied(); } }
サンプルテストに使用するルート:
import jakarta.enterprise.context.ApplicationScoped; import org.apache.camel.builder.RouteBuilder; @ApplicationScoped public class MockRoute extends RouteBuilder { @Override public void configure() throws Exception { from("direct:start").to("mock:result"); } }
2.66.4. Camel Quarkus の制限
(使用法で説明した) CDI Bean の注入は、ネイティブモードでは機能しません。
ネイティブモードでは、テストとテスト中のアプリケーションが 2 つの異なるプロセスで実行され、それらの間でモック Bean を共有することはできません (Quarkus ドキュメント を参照)。
2.67. MongoDB
MongoDB ドキュメントおよびコレクションの操作を実行します。
2.67.1. 含まれるもの
-
MongoDB コンポーネント、URI 構文:
mongodb:connectionBean
使用方法と設定の詳細は、上記リンクを参照してください。
2.67.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-mongodb</artifactId> </dependency>
2.67.3. 追加の Camel Quarkus 設定
エクステンションは Quarkus MongoDB Client エクステンションを活用します。Mongo クライアントは、Quarkus MongoDB Client の 設定オプション を使用して設定できます。
Camel Quarkus MongoDB エクステンションは、camelMongoClient
という名前の MongoDB クライアント Bean を自動的に登録します。これは、mongodb エンドポイント URI の connectionBean
パスパラメーターで参照できます。以下に例を示します。
from("direct:start") .to("mongodb:camelMongoClient?database=myDb&collection=myCollection&operation=findAll")
アプリケーションが複数の MongoDB サーバーと連携する必要がある場合は、Quarkus MongoDB extension client injection で説明するように、特定の名前のクライアントを作成し、クライアントおよび関連する設定を注入することで、ルートで参照できます。以下に例を示します。
//application.properties quarkus.mongodb.mongoClient1.connection-string = mongodb://root:example@localhost:27017/
//Routes.java @ApplicationScoped public class Routes extends RouteBuilder { @Inject @MongoClientName("mongoClient1") MongoClient mongoClient1; @Override public void configure() throws Exception { from("direct:defaultServer") .to("mongodb:camelMongoClient?database=myDb&collection=myCollection&operation=findAll") from("direct:otherServer") .to("mongodb:mongoClient1?database=myOtherDb&collection=myOtherCollection&operation=findAll"); } }
指定されたクライアントを使用する場合、デフォルトの camelMongoClient
Bean は引き続き生成されます。詳細は、複数の MongoDB クライアント に関する Quarkus ドキュメントを参照してください。
2.68. MyBatis
MyBatis を使用して、リレーショナルデータベースでクエリー、ポーリング、挿入、更新、または削除を実行します。
2.68.1. 含まれるもの
-
MyBatis コンポーネント、URI 構文:
mybatis:statement
-
MyBatis Bean コンポーネント、URI 構文:
mybatis- bean :beanName:methodName
使用方法と設定の詳細については、上記リンクを参照してください。
2.68.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-mybatis</artifactId> </dependency>
2.68.3. 追加の Camel Quarkus 設定
設定については、Quarkus MyBatis を参照してください。以下のオプションを有効にする必要があります。
quarkus.mybatis.xmlconfig.enable=true quarkus.mybatis.xmlconfig.path=SqlMapConfig.xml
quarkus.mybatis.xmlconfig.path
は mybatis エンドポイントの configurationUri
パラメーターと同じである必要があります。
2.69. Netty HTTP
Netty HTTP エクステンションは、Netty エクステンションに加えて HTTP トランスポートを提供します。
2.69.1. 含まれるもの
-
Netty HTTP コンポーネント、URI 構文:
netty-http:protocol://host:port/path
使用方法と設定の詳細は、上記リンクを参照してください。
2.69.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-netty-http</artifactId> </dependency>
2.69.3. ネイティブモードの transferException オプション
ネイティブモードで transferException
オプションを使用するには、オブジェクトのシリアル化のサポートを有効にする必要があります。詳細は、ネイティブモードのユーザーガイド を参照してください。
また、シリアル化する予定の例外クラスのシリアル化を有効にする必要があります。以下に例を示します。
@RegisterForReflection(targets = { IllegalStateException.class, MyCustomException.class }, serialization = true)
2.69.4. 追加の Camel Quarkus 設定
- アプリケーションがデフォルト以外のエンコーディングを使用してリクエストを送受信することが想定される場合は、ネイティブモードガイドの 文字エンコーディング のセクションを確認してください。
2.70. Netty
Netty 4.x で TCP または UDP を使用するソケットレベルのネットワーク。
2.70.1. 含まれるもの
-
Netty コンポーネント、URI 構文:
netty:protocol://host:port
使用方法と設定の詳細は、上記リンクを参照してください。
2.70.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-netty</artifactId> </dependency>
2.71. OpenAPI Java
Camel REST DSLL で定義された OpenAPI リソースを公開する
2.71.1. 含まれるもの
使用方法と設定の詳細は、上記リンクを参照してください。
2.71.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-openapi-java</artifactId> </dependency>
2.71.3. 使用方法
このエクステンションを使用して、REST DSL サービスを Quarkus OpenAPI に公開できます。quarkus-smallrye-openapi
を使用すると、/q/openapi?format=json
でアクセスできます。
詳細については、Quarkus OpenAPI ガイド を参照してください。
これは実験的な機能です。それを有効にすることができます
quarkus.camel.openapi.expose.enabled=true
@RegisterForReflection
を使用してすべてのモデルクラスをリフレクションに登録するのは、ユーザーの責任です。
現在、org.apache.camel.builder.LambdaRouteBuilder
で使用されている残りのサービスはサポートされていません。また、CDI が利用できない間にビルド時に残りの定義を取得するため、RouteBuilder の configure()
で CDI 注入を使用することはできません。
2.72. OpenTelemetry
OpenTelemetry を使用した分散トレース
2.72.1. 含まれるもの
使用方法と設定の詳細は、上記リンクを参照してください。
2.72.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-opentelemetry</artifactId> </dependency>
2.72.3. 使用方法
エクステンションは Camel OpenTelemetryTracer
を自動的に作成し、それを Camel レジストリーにバインドします。
キャプチャされたトレースをトレースシステムに送信するには、以下のような application.properties
内のいくつかのプロパティーを設定する必要があります。
# Identifier for the origin of spans created by the application quarkus.application.name=my-camel-application # OTLP exporter endpoint quarkus.opentelemetry.tracer.exporter.otlp.endpoint=http://localhost:4317
設定オプションの完全なリストは、Quarkus OpenTelemetry ガイド を参照してください。
application.properties
で quarkus.camel.opentelemetry.exclude-patterns
という名前のプロパティーを設定することで、ルートエンドポイントをトレースから除外できます。以下に例を示します。
# Exclude all direct & netty-http endpoints from tracing quarkus.camel.opentelemetry.exclude-patterns=direct:*,netty-http:*
2.72.3.1. エクスポーター
Quarkus OpenTelemetry のデフォルトは、OpenTelemetry で定義された標準の OTLP エクスポーターです。追加のエクスポーターは、Quarkiverse quarkus-opentelemetry-exporter プロジェクトで利用可能になります。
2.72.3.2. CDI Bean メソッドの実行の追跡
Camel ルートから CDI Bean メソッドの実行をインストルメント化する場合、そのようなメソッドに io.opentelemetry.extension.annotations.WithSpan
のアノテーションを付ける必要があります。@WithSpan
アノテーションが付けられたメソッドは、新しい Span を作成し、現在のトレースコンテキストと必要な関係を確立します。
たとえば、Camel ルートから CDI Bean をインストルメント化するには、まず適切なメソッドに @WithTrace
のアノテーションが付けられていることを確認します。
@ApplicationScoped @Named("myBean") public class MyBean { @WithSpan public String greet() { return "Hello World!"; } }
次に、Camel ルートで Bean を使用します。
録画したスパンのシーケンスが正しいことを確認するには、短縮された .bean()
EIP DSL メソッドではなく、完全な to("bean:")
エンドポイント URI を使用する必要があります。
public class MyRoutes extends RouteBuilder { @Override public void configure() throws Exception { from("direct:executeBean") .to("bean:myBean?method=greet"); } }
CDI インストルメンテーションの詳細は、Quarkus OpenTelemetry ガイドを参照してください。
2.72.4. 追加の Camel Quarkus 設定
設定プロパティー | タイプ | デフォルト |
---|---|---|
ヘッダー名をエンコードする必要があるかどうかを設定します。OpenTelemetry プロパゲーターが、ターゲットシステムと互換性のない形式でヘッダー名の値を設定する可能性がある状況で役立ちます。たとえば、JMS の場合、仕様ではヘッダー名が有効な Java 識別子であることが義務付けられています。 |
|
|
指定されたパターンに一致するエンドポイント URI のトレースを無効にするかどうかを設定します。パターンは次の形式を取ることができます。 1.エンドポイント URI の完全一致。例: platform-http:/some/path 2.ワイルドカードマッチ。E.g platform-http:* 3.エンドポイント URI に一致する正規表現。例: platform-http:/prefix/.* |
|
{doc-link-icon-lock}[title=Fixed at build time] 設定プロパティーはビルド時に修正されました。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。
2.73. Paho MQTT5
Eclipse Paho MQTT v5 クライアントを使用して MQTT メッセージブローカーと通信します。
2.73.1. 含まれるもの
-
Paho MQTT 5 コンポーネント、URI 構文:
paho-mqtt5:topic
使用方法と設定の詳細は、上記リンクを参照してください。
2.73.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-paho-mqtt5</artifactId> </dependency>
2.74. Paho
Eclipse Paho MQTT クライアントを使用して MQTT メッセージブローカーと通信します。
2.74.1. 含まれるもの
-
Paho コンポーネント、URI 構文:
paho:topic
使用方法と設定の詳細は、上記リンクを参照してください。
2.74.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-paho</artifactId> </dependency>
2.75. Platform HTTP
このエクステンションにより、HTTP リクエストを使用するために HTTP エンドポイントを作成できます。
これは、quarkus-vertx-http
エクステンションによって提供される Eclipse Vert.x HTTP サーバー上にビルドされます。
2.75.1. 含まれるもの
-
Platform HTTP コンポーネント、URI 構文:
platform-http:path
使用方法と設定の詳細は、上記リンクを参照してください。
2.75.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-platform-http</artifactId> </dependency>
2.75.3. 使用方法
2.75.3.1. 基本的な使用方法
/hello
エンドポイントですべての HTTP メソッドを提供します。
from("platform-http:/hello").setBody(simple("Hello ${header.name}"));
/hello
エンドポイントで GET リクエストのみを提供します。
from("platform-http:/hello?httpMethodRestrict=GET").setBody(simple("Hello ${header.name}"));
2.75.3.2. Camel REST DSL 経由の platform-http
の使用
platform-http
コンポーネントで Camel REST DSL を使用できるようにするには、pom.xml
に camel-quarkus-rest
を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-rest</artifactId> </dependency>
その後、Camel REST DSL を使用できます。
rest() .get("/my-get-endpoint") .to("direct:handleGetRequest"); .post("/my-post-endpoint") .to("direct:handlePostRequest");
2.75.3.3. multipart/form-data
ファイルのアップロードの処理
ホワイトリストに登録して、アップロードを特定のファイル拡張子に制限することができます。
from("platform-http:/upload/multipart?fileNameExtWhitelist=html,txt&httpMethodRestrict=POST") .to("log:multipart") .process(e -> { final AttachmentMessage am = e.getMessage(AttachmentMessage.class); if (am.hasAttachments()) { am.getAttachments().forEach((fileName, dataHandler) -> { try (InputStream in = dataHandler.getInputStream()) { // do something with the input stream } catch (IOException ioe) { throw new RuntimeException(ioe); } }); } });
2.75.3.4. platform-http
エンドポイントのセキュリティー保護
Quarkus は、platform-http
エンドポイントのセキュリティー保護に使用できるさまざまなセキュリティーおよび認証メカニズムを提供します。詳細は、Quarkus Security のドキュメント を参照してください。
ルート内で、認証されたユーザーとその関連する SecurityIdentity
および Principal
を取得できます。
from("platform-http:/secure") .process(e -> { Message message = e.getMessage(); QuarkusHttpUser user = message.getHeader(VertxPlatformHttpConstants.AUTHENTICATED_USER, QuarkusHttpUser.class); SecurityIdentity securityIdentity = user.getSecurityIdentity(); Principal principal = securityIdentity.getPrincipal(); // Do something useful with SecurityIdentity / Principal. E.g check user roles etc. });
Quarkus ドキュメント で quarkus.http.body.*
設定オプション (特に次の項目) も確認してください。quarkus.http.body.handle-file-uploads
、quarkus.http.body.uploads-directory
および quarkus.http.body.delete-uploaded-files-on-end
。
2.75.3.5. リバースプロキシーの実装
プラットフォーム HTTP コンポーネントはリバースプロキシーとして機能できます。その場合、Exchange.HTTP_URI
、Exchange.HTTP_HOST
ヘッダーは、HTTP 要求のリクエスト行で受信した絶対 URL から入力されます。
エクスチェンジを元のサーバーに単純にリダイレクトする HTTP プロキシーの例を次に示します。
from("platform-http:proxy") .toD("http://" + "${headers." + Exchange.HTTP_HOST + "}");
2.75.4. 追加の Camel Quarkus 設定
2.75.4.1. プラットフォーム HTTP サーバー設定
プラットフォーム HTTP サーバーの設定は Quarkus によって管理されます。設定オプションの完全なリストについては、Quarkus HTTP 設定ガイド を参照してください。
Platform HTTP サーバーの SSL を設定するには 、SSL ガイドを使用した安全な接続 に従ってください。SSLContextParameters
を使用した SSL 用のサーバーの設定は現在サポートされていないことに注意してください。
2.75.4.2. 文字エンコーディング
アプリケーションがデフォルト以外のエンコーディングを使用してリクエストを送受信することが想定される場合は、ネイティブモードガイドの 文字エンコーディング のセクションを確認してください。
2.76. Quartz
Quartz 2.x スケジューラーを使用してメッセージの送信をスケジュールします。
2.76.1. 含まれるもの
-
Quartz コンポーネント、URI 構文:
quartz:groupName/triggerName
使用方法と設定の詳細は、上記リンクを参照してください。
2.76.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-quartz</artifactId> </dependency>
2.76.3. 使用方法
2.77. Ref
Camel Registry で名前によって動的に検索されたエンドポイントにメッセージをルーティングします。
2.77.1. 含まれるもの
-
Ref コンポーネント、URI 構文:
ref:name
使用方法と設定の詳細は、上記リンクを参照してください。
2.77.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-ref</artifactId> </dependency>
2.77.3. 使用方法
CDI プロデューサーメソッドを利用してエンドポイントを Camel レジストリーにバインドできるため、Camel ルートで ref
URI スキームを使用してエンドポイントを解決できます。
たとえば、エンドポイント Bean を生成するには、次のようにします。
@ApplicationScoped public class MyEndpointProducers { @Inject CamelContext context; @Singleton @Produces @Named("endpoint1") public Endpoint directStart() { return context.getEndpoint("direct:start"); } @Singleton @Produces @Named("endpoint2") public Endpoint logEnd() { return context.getEndpoint("log:end"); } }
ref:
を使用して、Camel レジストリーにバインドされた CDI Bean の名前を参照します。
public class MyRefRoutes extends RouteBuilder { @Override public void configure() { // direct:start -> log:end from("ref:endpoint1") .to("ref:endpoint2"); } }
2.78. REST OpenApi
RestProducerFactory インターフェイスを実装するコンポーネントに委任する OpenAPI 仕様ドキュメントに基づいて REST プロデューサーを設定します。
2.78.1. 含まれるもの
-
REST OpenApi コンポーネント、URI 構文:
rest-openapi:specificationUri#operationId
使用方法と設定の詳細は、上記リンクを参照してください。
2.78.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-rest-openapi</artifactId> </dependency>
2.78.3. 使用方法
2.78.3.1. 必要な依存関係
rest-openapi エクステンションを使用する場合は、RestProducerFactory
実装が使用可能である必要があります。現在知られている拡張子は次のとおりです。
- camel-quarkus-http
Maven ユーザーは、これらの依存関係のいずれかを pom.xml
に追加する必要があります。次に例を示します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-http</artifactId> </dependency>
OpenApi 仕様の読み込みに使用されるメカニズムによっては、追加の依存関係が必要になる場合があります。file
リソースロケーターを使用する場合、org.apache.camel.quarkus:camel-quarkus-file
拡張子をプロジェクトの依存関係として追加する必要があります。ref
または Bean
を使用して仕様をロードする場合、org.apache.camel.quarkus:camel-quarkus-bean
依存関係を追加するだけでなく、Bean 自体に @RegisterForReflection
のアノテーションを付ける必要があります。
ネイティブコードで classpath
リソースロケーターを使用する場合、OpenAPI 仕様へのパスを application.properties
ファイルの quarkus.native.resources.includes
プロパティーで指定する必要があります。以下に例を示します。
quarkus.native.resources.includes=openapi.json
2.79. Rest
REST サービスおよび OpenAPI Specification を公開するか、外部の REST サービスを呼び出します。
2.79.1. 含まれるもの
-
REST コンポーネント、URI 構文:
rest:method:path:uriTemplate
-
REST API コンポーネント、URI 構文:
rest-api:path
使用方法と設定の詳細については、上記リンクを参照してください。
2.79.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-rest</artifactId> </dependency>
2.79.3. 追加の Camel Quarkus 設定
このエクステンションは、Platform HTTP エクステンションに依存し、REST トランスポートを提供するコンポーネントとして設定します。
2.79.3.1. platform-http 付きの特殊文字を含むパスパラメーター
platform-http
REST トランスポートを使用する場合、一部の文字はパスパラメーター名内で許可されません。これには、- および $ 文字が含まれます。
以下の例の REST /dashed/param
ルートを正しく機能させるには、システムプロパティーを io.vertx.web.route.param.extended-pattern=true
にする必要があります。
import org.apache.camel.builder.RouteBuilder; public class CamelRoute extends RouteBuilder { @Override public void configure() { rest("/api") // Dash '-' is not allowed by default .get("/dashed/param/{my-param}") .to("direct:greet") // The non-dashed path parameter works by default .get("/undashed/param/{myParam}") .to("direct:greet"); from("direct:greet") .setBody(constant("Hello World")); } }
Vert.x Web ドキュメント には、これに関するいくつかの背景があります。
2.79.3.2. 代替 REST トランスポートプロバイダーの設定
netty-http
や servlet
等の別の REST トランスポートプロバイダーを使用するには、それぞれのエクステンションを依存関係としてプロジェクトへの追加し、RouteBuilder
でプロバイダーを設定する必要があります。たとえば、servlet
の場合、org.apache.camel.quarkus:camel-quarkus-servlet
依存関係を追加し、プロバイダーを次のように設定する必要があります。
import org.apache.camel.builder.RouteBuilder; public class CamelRoute extends RouteBuilder { @Override public void configure() { restConfiguration() .component("servlet"); ... } }
2.80. Salesforce
Java DTO を使用して Salesforce と通信します。
2.80.1. 含まれるもの
-
Salesforce コンポーネント、URI 構文:
salesforce:operationName:topicName
使用方法と設定の詳細は、上記リンクを参照してください。
2.80.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-salesforce</artifactId> </dependency>
2.80.3. 使用方法
2.80.3.1. salesforce-maven-plugin
を使用した Salesforce DTO の生成
プロジェクトの Salesforce DTO を生成するには、salesforce-maven-plugin
を使用します。以下のサンプルコードスニペットは、Account
オブジェクトの単一の DTO を作成します。
<plugin> <groupId>org.apache.camel.maven</groupId> <artifactId>camel-salesforce-maven-plugin</artifactId> <version>{camel-version}</version> <executions> <execution> <goals> <goal>generate</goal> </goals> <configuration> <clientId>${env.SALESFORCE_CLIENTID}</clientId> <clientSecret>${env.SALESFORCE_CLIENTSECRET}</clientSecret> <userName>${env.SALESFORCE_USERNAME}</userName> <password>${env.SALESFORCE_PASSWORD}</password> <loginUrl>https://login.salesforce.com</loginUrl> <packageName>org.apache.camel.quarkus.component.salesforce.generated</packageName> <outputDirectory>src/main/java</outputDirectory> <includes> <include>Account</include> </includes> </configuration> </execution> </executions> </plugin>
2.80.4. ネイティブモードの SSL
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true
を application.properties
に追加する必要はありません。Quarkus SSL ガイド も参照してください。
2.81. SAP
SAP Camel コンポーネントを提供します。
2.81.1. 含まれるもの
SAP エクステンションは、10 個の異なる SAP コンポーネントで構成されるパッケージです。sRFC、tRFC、および qRFC プロトコルをサポートするリモートファンクションコール (RFC) コンポーネントがあります。また、IDoc 形式のメッセージを使用して通信を容易にする IDoc コンポーネントがあります。このコンポーネントは、SAP Java Connector (SAP JCo) ライブラリーを使用して SAP との双方向通信を促進し、SAP IDoc ライブラリーを使用してドキュメントを中間ドキュメント (IDoc) 形式で送信します。
詳細は以下を参照してください。
2.81.2. Maven コーディネート
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-sap</artifactId> </dependency>
2.81.2.1. SAP コンポーネントの追加のプラットフォーム制限
SAP コンポーネントはサードパーティーの JCo 3 および IDoc 3 ライブラリーに依存しているため、これらのライブラリーがサポートするプラットフォームにのみインストールできます。
2.81.2.2. SAP JCo および SAP IDoc ライブラリー
SAP コンポーネントを使用するための前提条件は、SAP Java Connector (SAP JCo) ライブラリーと SAP IDoc ライブラリーが Java ランタイムの lib/
ディレクトリーにインストールされていることです。ターゲットオペレーティングシステムに適した SAP ライブラリーのセットを SAP Service Marketplace からダウンロードしていることを確認する必要があります。
ライブラリーファイルの名前は、次に示すように、対象のオペレーティングシステムによって異なります。
SAP コンポーネント | Linux と UNIX | Windows |
---|---|---|
SAP JCo 3 |
|
|
SAP IDoc |
|
|
2.81.3. URI 形式
SAP コンポーネントによって提供されるエンドポイントには、リモートファンクションコール (RFC) エンドポイントと中間ドキュメント (IDoc) エンドポイントの 2 種類があります。
RFC エンドポイントの URI 形式は次のとおりです。
sap-srfc-destination:destinationName:rfcName sap-trfc-destination:destinationName:rfcName sap-qrfc-destination:destinationName:queueName:rfcName sap-srfc-server:serverName:rfcName[?options] sap-trfc-server:serverName:rfcName[?options]
IDoc エンドポイントの URI 形式は次のとおりです。
sap-idoc-destination:destinationName:idocType[:idocTypeExtension[:systemRelease[:applicationRelease]]] sap-idoclist-destination:destinationName:idocType[:idocTypeExtension[:systemRelease[:applicationRelease]]] sap-qidoc-destination:destinationName:queueName:idocType[:idocTypeExtension[:systemRelease[:applicationRelease]]] sap-qidoclist-destination:destinationName:queueName:idocType[:idocTypeExtension[:systemRelease[:applicationRelease]]] sap-idoclist-server:serverName:idocType[:idocTypeExtension[:systemRelease[:applicationRelease]]][?options]
sap- endpointKind -destination で始まる URI 形式は、宛先エンドポイント (つまり、Camel producer エンドポイント) を定義するために使用され、destinationName は SAP インスタンスへの特定のアウトバウンド接続の名前です。アウトバウンド接続は、コンポーネントレベルで名前が付けられ、設定されます。
sap- endpointKind -server で始まる URI 形式は、サーバーエンドポイント (つまり、Camel consumer エンドポイント) を定義するために使用され、serverName は SAP インスタンスからの特定のインバウンド接続の名前です。インバウンド接続は、コンポーネントレベルで名前が付けられ、設定されます。
RFC エンドポイント URI のその他のコンポーネントは次のとおりです。
- rfcName
- (必須) 宛先エンドポイント URI では、接続された SAP インスタンスのエンドポイントによって呼び出される RFC の名前です。サーバーエンドポイント URI では、接続された SAP インスタンスから呼び出されたときにエンドポイントによって処理される RFC の名前です。
- queueName
- このエンドポイントが SAP リクエストを送信するキューを指定します。
IDoc エンドポイント URI のその他のコンポーネントは次のとおりです。
- idocType
- (必須) このエンドポイントによって生成される IDoc の基本 IDoc タイプを指定します。
- idocTypeExtension
- このエンドポイントによって生成された IDoc の IDoc タイプ拡張 (存在する場合) を指定します。
- systemRelease
- このエンドポイントによって生成された IDoc に関連付けられている SAP Basis Release がある場合は、それを指定します。
- applicationRelease
- このエンドポイントによって生成された IDoc の関連付けられたアプリケーションリリースがある場合は、それを指定します。
- queueName
- このエンドポイントが SAP リクエストを送信するキューを指定します。
2.81.3.1. RFC 宛先エンドポイントのオプション
RFC 宛先エンドポイント (sap-srfc-destination
、sap-trfc-destination
、および sap-qrfc-destination
) は、次の URI オプションをサポートしています。
名前 | デフォルト | 説明 |
---|---|---|
|
|
|
|
|
|
2.81.3.2. RFC サーバーエンドポイントのオプション
SAP RFC サーバーエンドポイント (sap-srfc-server
および sap-trfc-server
) は、次の URI オプションをサポートしています。
名前 | デフォルト | 説明 |
---|---|---|
|
|
|
|
|
(sap-trfc-server エンドポイントのみ) |
2.81.3.3. IDoc List Server エンドポイントのオプション
SAP IDoc List Server エンドポイント (sap-idoclist-server
) は、次の URI オプションをサポートしています。
名前 | デフォルト | 説明 |
---|---|---|
|
|
|
|
|
|
2.81.3.4. RFC および IDoc エンドポイントの概要
SAP コンポーネントパッケージは、次の RFC および IDoc エンドポイントを提供します。
sap-srfc-destination
Camel SAP Synchronous Remote Function Call Destination Camel コンポーネント。このエンドポイントは、Camel ルートが SAP システムへのリクエストと SAP システムからのレスポンスの同期配信を必要とする場合に使用する必要があります。
注記このコンポーネントで使用される sRFC プロトコルは、SAP システムとの間でリクエストとレスポンスを ベストエフォート で配信します。リクエストの送信中に通信エラーが発生した場合、受信側の SAP システムでのリモート関数呼び出しの完了ステータスは 不明 のままです。
sap-trfc-destination
Camel SAP Transactional Remote Function Call Destination Camel コンポーネント。このエンドポイントは、リクエストを受信側の SAP システムに 最大 1 回 配信する必要がある場合に使用する必要があります。これを達成するために、コンポーネントはトランザクション ID
tid
を生成します。この ID は、ルートのエクスチェンジでコンポーネントを介して送信されるすべてのリクエストに付随します。受信側の SAP システムは、リクエストを配信する前に、リクエストに付随するtid
を記録します。SAP システムが同じtid
のリクエストを再度受信した場合、リクエストは配信されません。したがって、このコンポーネントのエンドポイントを介してリクエストを送信するときにルートで通信エラーが発生した場合、ルートは同じリクエスト内でリクエストの送信を再試行できますが、配信と実行は 1 回だけです。注記このコンポーネントで使用される tRFC プロトコルは非同期であり、レスポンスを返しません。したがって、このコンポーネントのエンドポイントはレスポンスメッセージを返しません。
注記このコンポーネントは、エンドポイントを介した一連のリクエストの順序を保証しません。これらのリクエストの配信および実行順序は、通信エラーやリクエストの再送信により、受信側の SAP システムで異なる場合があります。配送順序の保証については、Camel SAP Queued Remote Function Call Destination Camel コンポーネントを参照してください。
sap-qrfc-destination
Camel SAP Queued Remote Function Call Destination Camel コンポーネント。このコンポーネントは、Transactional Remote Function Call Destination camel コンポーネントの機能を、そのエンドポイントを介したリクエストの配信に 順番に 配信保証を追加することで拡張します。このエンドポイントは、一連のリクエストが相互に依存しており、受信側の SAP システムに 最大 1 回、順番に 配信する必要がある場合に使用する必要があります。このコンポーネントは、Camel SAP Transactional Remote Function Call Destination Camel コンポーネントと同じメカニズムを使用して、最大 1 回の 配信保証を実現します。順序の保証は、SAP システムが受信した順序でリクエストを 受信キュー にシリアル化することによって実現されます。受信キューは、SAP 内の QIN スケジューラー によって処理されます。インバウンドキューが アクティブ化される と、QIN スケジューラーはキューリクエストを順番に実行します。
注記このコンポーネントで使用される qRFC プロトコルは非同期であり、レスポンスを返しません。したがって、このコンポーネントのエンドポイントはレスポンスメッセージを返しません。
sap-srfc-server
- Camel SAP Synchronous Remote Function Call Server Camel コンポーネント。このコンポーネントとそのエンドポイントは、SAP システムからの要求と SAP システムへの応答を同期的に処理するために Camel ルートが必要な場合に使用する必要があります。
sap-trfc-server
-
Camel SAP Transactional Remote Function Call Server Camel コンポーネント。このエンドポイントは、送信側の SAP システムがリクエストを Camel ルートに 最大 1 回 配信する必要がある場合に使用する必要があります。これを実現するために、送信側の SAP システムは、コンポーネントのエンドポイントに送信するすべてのリクエストに付随するトランザクション ID
tid
を生成します。送信側の SAP システムは、tid
に関連付けられた一連のリクエストを送信する前に、コンポーネントが特定のtid
を受信したかどうかを最初にチェックします。コンポーネントは、保持している受信tid
のリストをチェックし、送信されたtid
がそのリストにない場合は記録し、送信 SAP システムに応答して、tid
がすでに記録されているかどうかを示します。送信側の SAP システムは、tid
が以前に記録されていない場合にのみ、一連のリクエストを送信します。これにより、送信側の SAP システムは一連のリクエストを確実に camel ルートに 1 回送信できます。 sap-idoc-destination
- Camel SAP IDoc Destination Camel コンポーネント。このエンドポイントは、Camel ルートが Intermediate Documents (IDoc) のリストを SAP システムに送信する場合に使用する必要があります。
sap-idoclist-destination
- Camel SAP IDoc List Destination Camel コンポーネント。このエンドポイントは、Camel ルートが Intermediate Documents (IDoc) リストのリストを SAP システムに送信する場合に使用する必要があります。
sap-qidoc-destination
- Camel SAP Queued IDoc Destination Camel コンポーネント。このコンポーネントとそのエンドポイントは、中間ドキュメント (IDoc) のリストを順番に SAP システムに送信するために Camel ルートが必要な場合に使用する必要があります。
sap-qidoclist-destination
- Camel SAP Queued IDoc List Destination Camel コンポーネント。このコンポーネントとそのエンドポイントは、キャメルルートが Intermediate Documents (IDoc) リストを順番に SAP システムに送信する場合に使用されます。
sap-idoclist-server
-
Camel SAP IDoc List Server Camel コンポーネント。このエンドポイントは、送信側の SAP システムが中間ドキュメントリストを Camel ルートに配信する必要がある場合に使用する必要があります。このコンポーネントは、
sap-trfc-server-standalone
クイックスタートで説明されているように、tRFC プロトコルを使用して SAP と通信します。
2.81.3.5. SAP RFC 宛先エンドポイント
RFC 宛先エンドポイントは、SAP へのアウトバウンド通信をサポートします。これにより、これらのエンドポイントは、SAP の ABAP 関数モジュールへの RFC 呼び出しを行うことができます。RFC 宛先エンドポイントは、SAP インスタンスへの特定の接続を介して特定の ABAP 関数への RFC 呼び出しを行うように設定されています。RFC 宛先は、アウトバウンド接続の論理的な指定であり、一意の名前を持っています。RFC 宛先は、宛先データ と呼ばれる一連の接続パラメーターによって指定されます。
RFC 宛先エンドポイントは、受信した IN-OUT エクスチェンジの入力メッセージから RFC リクエストを抽出し、そのリクエストを関数呼び出しで SAP にディスパッチします。関数呼び出しからのレスポンスは、エクスチェンジの出力メッセージで返されます。SAP RFC 宛先エンドポイントはアウトバウンド通信のみをサポートするため、RFC 宛先エンドポイントは producer の作成のみをサポートします。
2.81.3.6. SAP RFC サーバーエンドポイント
RFC サーバーエンドポイントは、SAP からのインバウンド通信をサポートします。これにより、SAP の ABAP アプリケーションがサーバーエンドポイントに対して RFC 呼び出しを行うことができます。ABAP アプリケーションは、リモート関数モジュールであるかのように RFC サーバーエンドポイントと対話します。RFC サーバーエンドポイントは、SAP インスタンスから特定の接続を介して特定の RFC 関数への RFC 呼び出しを受信するように設定されています。RFC サーバーは、インバウンド接続の論理的な指定であり、一意の名前を持っています。RFC サーバーは、サーバーデータ と呼ばれる一連の接続パラメーターによって指定されます。
RFC サーバーエンドポイントは、入力 RFC リクエストを処理し、それを IN-OUT エクスチェンジの入力メッセージとしてディスパッチします。エクスチェンジの出力メッセージは、RFC 呼び出しのレスポンスとして返されます。SAP RFC サーバーエンドポイントはインバウンド通信のみをサポートするため、RFC サーバーエンドポイントは consumer の作成のみをサポートします。
2.81.3.7. SAP IDoc および IDoc リストの宛先エンドポイント
IDoc 宛先エンドポイントは、SAP へのアウトバウンド通信をサポートします。SAP は、IDoc メッセージに対してさらに処理を実行できます。IDoc ドキュメントはビジネストランザクションを表し、非 SAP システムと簡単にエクスチェンジできます。IDoc 宛先は、宛先データ と呼ばれる一連の接続パラメーターによって指定されます。
IDoc リスト宛先エンドポイントは、処理するメッセージが IDoc ドキュメントの リスト で構成されていることを除けば、IDoc 宛先エンドポイントと似ています。
2.81.3.8. SAP IDoc リストサーバーエンドポイント
IDoc リストサーバーエンドポイントは、SAP からのインバウンド通信をサポートし、Camel ルートが SAP システムから IDoc ドキュメントのリストを受信できるようにします。IDoc リストサーバーは、サーバーデータ と呼ばれる一連の接続パラメーターによって指定されます。
2.81.3.9. メタデータリポジトリー
メタデータリポジトリーは、次の種類のメタデータを格納するために使用されます。
- 汎用モジュールのインタフェース説明
- このメタデータは、JCo および ABAP ランタイムによって使用され、RFC 呼び出しをチェックして、それらの呼び出しをディスパッチする前に、通信パートナー間でタイプセーフなデータ転送を保証します。リポジトリーには、リポジトリーデータが取り込まれます。リポジトリーデータは、名前付き関数テンプレートのマップです。関数テンプレートには、関数モジュールとの間で渡されるすべてのパラメーターとその入力情報を記述するメタデータが含まれており、関数テンプレートが説明する関数モジュールの一意の名前が付けられています。
- IDoc タイプの説明
- このメタデータは、IDoc ランタイムによって使用され、IDoc ドキュメントが通信パートナーに送信される前に正しくフォーマットされていることを確認します。基本的な IDoc タイプは、名前、許可されたセグメントのリスト、およびセグメント間の階層関係の説明で構成されます。いくつかの追加の制約をセグメントに課すことができます。セグメントは必須またはオプションにすることができます。また、各セグメントの最小/最大範囲を指定することができます (そのセグメントの許容反復回数を定義します)。
したがって、SAP 宛先およびサーバーエンドポイントは、RFC 呼び出しを送受信し、IDoc ドキュメントを送受信するために、リポジトリーへのアクセスを必要とします。RFC 呼び出しの場合、エンドポイントによって呼び出されて処理されるすべての機能モジュールのメタデータは、リポジトリー内に存在する必要があります。IDoc エンドポイントの場合、エンドポイントによって処理されるすべての IDoc タイプおよび IDoc タイプ拡張のメタデータは、リポジトリー内に存在する必要があります。宛先およびサーバーエンドポイントによって使用されるリポジトリーの場所は、それぞれの接続の宛先データおよびサーバーデータで指定されます。
SAP 宛先エンドポイントの場合、使用するリポジトリーは通常、SAP システムに存在し、接続先の SAP システムにデフォルト設定されます。このデフォルトでは、宛先データに明示的な設定は必要ありません。さらに、宛先エンドポイントが行うリモート関数呼び出しのメタデータは、それが呼び出す既存の関数モジュールのリポジトリーにすでに存在します。したがって、宛先エンドポイントによって行われる呼び出しのメタデータは、SAP コンポーネントで設定する必要はありません。
一方、サーバーエンドポイントによって処理される関数呼び出しのメタデータは、通常、SAP システムのリポジトリーには存在せず、代わりに SAP コンポーネントに存在するリポジトリーによって提供される必要があります。SAP コンポーネントは、名前付きメタデータリポジトリーのマップを維持します。リポジトリーの名前は、メタデータを提供するサーバーの名前に対応しています。
2.81.4. 設定
SAP コンポーネントは、宛先データ、サーバーデータ、およびリポジトリーデータを格納する 3 つのマップを維持します。宛先データストア と サーバーデータストア は、SAP コンポーネントに自動的に注入される特別な設定オブジェクト SapConnectionConfiguration
で設定されます。リポジトリーデータストア は、関連する SAP コンポーネントで直接設定する必要があります。
2.81.4.1. 設定の概要
SAP コンポーネントは、宛先データ、サーバーデータ、およびリポジトリーデータを格納する 3 つのマップを維持します。コンポーネントのプロパティー destinationDataStore
は宛先名をキーとする宛先データを格納し、プロパティー serverDataStore
はサーバー名をキーとするサーバーデータを格納し、プロパティー repositoryDataStore
はリポジトリー名をキーとするリポジトリーデータを格納します。これらの設定は、初期化中にコンポーネントに渡す必要があります。
例
次の例は、サンプルの宛先データストアとサンプルのサーバーデータストアを設定する方法を示しています。sap-configuration
Bean (SapConnectionConfiguration
型) は、このアプリケーションで使用される SAP コンポーネントに自動的に注入されます。
public class SAPRouteBuilder extends RouteBuilder { @BindToRegistry("sap-configuration") public SapConnectionConfiguration sapConfiguration() { SapConnectionConfiguration configuration = new SapConnectionConfiguration(); configuration.setDestinationDataStore(destinationData()); configuration.setServerDataStore(serverData()); return configuration; } /** * Configures an Inbound SAP Connection * Please enter the connection property values for your environment */ private Map<String, ServerData> serverData() { ServerData data = new ServerDataImpl(); data.setGwhost("example.com"); data.setGwserv("3300"); data.setProgid("QUICKSTART"); data.setRepositoryDestination("quickstartDest"); data.setConnectionCount("2"); return Map.of("quickstartServer", data); } /** * Configures an Outbound SAP Connection * Please enter the connection property values for your environment */ private Map<String, DestinationData> destinationData() { DestinationData data = new DestinationDataImpl(); data.setAshost("example.com"); data.setSysnr("00"); data.setClient("000"); data.setUser("username"); data.setPasswd("password"); data.setLang("en"); return Map.of("quickstartDest", data); } @Override public void configure() throws Exception { // Routes definitions } }
値は、application.properties
ファイルから指定できます。その場合、ハードコードされた値の代わりにプロパティー名を使用できます。
以下に例を示します。
ConfigProvider.getConfig().getValue("<property name>", String.class)
2.81.4.2. 宛先設定
宛先の設定は、SAP コンポーネントの destinationDataStore
プロパティーで維持されます。このマップの各エントリーは、SAP インスタンスへの個別のアウトバウンド接続を設定します。各エントリーのキーはアウトバウンド接続の名前であり、URI 形式のセクションで説明されているように、宛先エンドポイント URI の destinationName コンポーネントで使用されます。
各エントリーの値は、アウトバウンド SAP 接続の設定を指定する宛先データ設定オブジェクト (org.fusesource.camel.component.sap.model.rfc.impl.DestinationDataImpl
) です。
サンプル宛先設定
次のコードは、quickstartDest
という名前のサンプルの宛先を設定する方法を示しています。
@BindToRegistry("sap-configuration") public SapConnectionConfiguration sapConfiguration() { SapConnectionConfiguration configuration = new SapConnectionConfiguration(); configuration.setDestinationDataStore(destinationData()); return configuration; } private Map<String, DestinationData> destinationData() { DestinationData data = new DestinationDataImpl(); data.setAshost("example.com"); data.setSysnr("00"); data.setClient("000"); data.setUser("username"); data.setPasswd("password"); data.setLang("en"); return Map.of("quickstartDest", data); } @Override public void configure() throws Exception { ((DefaultCamelContext) getCamelContext()).addInterceptStrategy(new CurrentProcessorDefinitionInterceptStrategy()); // Routes definitions }
上記のように宛先を設定した後、次の URI を使用して、quickstartDest
宛先で BAPI_FLCUST_GETLIST
リモート関数呼び出しを呼び出すことができます。
sap-srfc-destination:quickstartDest:BAPI_FLCUST_GETLIST
2.81.4.2.1. tRFC および qRFC 宛先のインターセプター
前のサンプル宛先設定は、CurrentProcessorDefinitionInterceptStrategy
オブジェクトのインスタンス化を示しています。このオブジェクトは、Camel ランタイムにインターセプターをインストールします。これにより、Camel SAP コンポーネントは、RFC トランザクションの処理中に Camel ルート内の位置を追跡できます。
このインターセプターは、トランザクション RFC 宛先エンドポイント (sap-trfc-destination
や sap-qrfc-destination
など) にとって非常に重要であり、アウトバウンドトランザクション RFC 通信を適切に管理するには、Camel ランタイムにインストールする必要があります。ストラテジーが実行時に見つからない場合、Destination RFC Transaction Handlers は Camel ログに警告を発行します。この状況では、アウトバウンドのトランザクション RFC 通信を適切に管理するために、Camel ランタイムを再プロビジョニングして再起動する必要があります。
2.81.4.2.2. ログオンと認証オプション
次の表に、SAP 宛先データストアで宛先を設定するための ログオンオプションと認証 オプションを示します。
名前 | デフォルト値 | 説明 |
| SAP クライアント、必須ログオンパラメーター | |
| ログオンユーザー、パスワードベースの認証用のログオンパラメーター。 | |
| ログオンユーザーエイリアスは、ログオンユーザーの代わりに使用できます。 | |
| ABAP AS へのログオンに使用されるユーザー ID。宛先設定が認証に SSO/アサーションチケット、証明書、現在のユーザー、または SNC 環境を使用する場合、JCo ランタイムによって使用されます。ユーザーもユーザー別名も設定されていない場合、ユーザー ID は必須です。この ID は SAP バックエンドに送信されることはなく、JCo ランタイムによってローカルで使用されます。 | |
| ログオンパスワード、パスワードベースの認証用のログオンパラメーター。 | |
| ログオン言語。定義されていない場合は、デフォルトのユーザー言語が使用されます。 | |
| 指定された SAP Cookie バージョン 2 を、SSO ベースの認証のログオンチケットとして使用します。 | |
| 指定された X509 証明書を証明書ベースの認証に使用します。 | |
| 最初の呼び出しまで認証を延期する - 1 (有効)。特別な場合にのみ使用されます。 | |
| 表示または非表示の SAP GUI を使用するか、SAP GUI を使用しません。 | |
| ログオンパラメーターの変換に使用されるコードページを定義する追加のログオンパラメーター。特別な場合にのみ使用されます。 | |
| ログオン後に SSO チケットを注文すると、取得したチケットは宛先属性で使用できます。 | |
|
|
2.81.4.2.3. 接続オプション
次の表に、SAP 宛先データストアで宛先を設定するための 接続 オプションを示します。
名前 | デフォルト値 | 説明 |
|
SAP ルーターの背後にあるシステムに接続するための SAP ルーター文字列。SAP ルーター文字列には、一連の SAP ルーターとそのポート番号が含まれており、 | |
| SAP ABAP アプリケーションサーバーのシステム番号、直接接続に必須。 | |
| SAP ABAP アプリケーションサーバー、直接接続に必須。 | |
| SAP メッセージサーバー、負荷分散接続の必須プロパティー。 | |
|
SAP メッセージサーバーポート。負荷分散接続のオプションプロパティー。サービス名 sapmsXXX を解決するために、 | |
| アプリケーションサーバーへの接続を確立するために使用する具体的なゲートウェイを指定できます。指定しない場合、アプリケーションサーバーのゲートウェイが使用されます。 | |
| gwhost を使用する場合に設定する必要があります。そのゲートウェイで使用されるポートを指定できます。指定しない場合、アプリケーションサーバーのゲートウェイのポートが使用されます。サービス名 sapgwXXX を解決するために、etc/services のルックアップがオペレーティングシステムのネットワーク層によって実行されます。シンボリックサービス名の代わりにポート番号を使用する場合、ルックアップは実行されず、追加のエントリーは必要ありません。 | |
| SAP システムのシステム ID。負荷分散接続の必須プロパティー。 | |
| SAP アプリケーションサーバーのグループ、負荷分散接続の必須プロパティー。 | |
|
|
パフォーマンスを最適化するには、JCo とターゲットシステム間のネットワーク品質に応じてこの値を設定します。有効な値は |
|
|
有効な値は、 |
2.81.4.2.4. 接続プールのオプション
次の表に、SAP 宛先データストアで宛先を設定するための 接続プール オプションを示します。
名前 | デフォルト値 | 説明 |
|
|
宛先に対して同時に作成できるアクティブなアウトバウンド接続の最大数。値を |
|
|
宛先によって開いたままのアイドル状態のアウトバウンド接続の最大数。値 |
| 宛先によって内部的に保持されている空き接続を閉じることができるまでの時間 (ミリ秒)。 | |
| 宛先が解放された接続の有効期限をチェックするまでのミリ秒単位の期間。 | |
| アプリケーションによって最大許容数の接続がすでに割り当てられている場合に、接続を待機する最大時間 (ミリ秒)。 |
2.81.4.2.5. 安全なネットワーク接続オプション
次の表に、SAP 宛先データストアで宛先を設定するための セキュアなネットワーク オプションを示します。
名前 | デフォルト値 | 説明 |
|
セキュアなネットワーク接続 (SNC) モード、 | |
|
SNC パートナー、例: | |
|
セキュリティーの SNC レベル、 | |
| 独自の SNC 名。環境設定をオーバーライドします。 | |
| SNC サービスを提供するライブラリーへのパス。 |
2.81.4.2.6. リポジトリーオプション
次の表に、SAP 宛先データストアで宛先を設定するための リポジトリー オプションを示します。
名前 | デフォルト値 | 説明 |
| リポジトリーとして使用される宛先を指定します。 | |
| リポジトリーの宛先が設定されておらず、このプロパティーが設定されている場合、リポジトリー呼び出しのユーザーとして使用されます。これにより、リポジトリーの検索に別のユーザーを使用できます。 | |
| リポジトリーユーザーのパスワード。リポジトリーユーザーを使用する場合は必須です。 | |
|
(オプション) この宛先に SNC が使用されている場合、このプロパティーが | |
|
プロパティーが設定されていない場合、宛先は最初にリモート呼び出しを実行して、 注記: リポジトリーがすでに初期化されている場合 (たとえば、他の宛先で使用されているため)、このプロパティーは効果がありません。通常、このプロパティーは ABAP システムに関連しており、同じ ABAP システムを指すすべての宛先で同じ値を持つ必要があります。バックエンドの前提条件については、ノート 1456826 を参照してください。 |
2.81.4.2.7. トレース設定オプション
次の表に、SAP 宛先データストアで宛先を設定するための トレース設定 オプションを示します。
名前 | デフォルト値 | 説明 |
|
RFC トレースを有効/無効にする ( | |
|
CPIC トレースを有効/無効にする |
2.81.4.3. サーバー設定
サーバーの設定は、SAP コンポーネントの serverDataStore
プロパティーで維持されます。このマップの各エントリーは、SAP インスタンスからの個別のインバウンド接続を設定します。各エントリーのキーはアウトバウンド接続の名前であり、URI 形式のセクションで説明されているように、サーバーエンドポイント URI の serverName
コンポーネントで使用されます。
各エントリーの値は、インバウンド SAP 接続の設定を定義する サーバーデータ設定オブジェクト、org.fusesource.camel.component.sap.model.rfc.impl.ServerDataImpl
です。
サンプルサーバー設定
次のコードは、quickstartServer
という名前のサンプルのサーバー設定を作成する方法を示しています。
@BindToRegistry("sap-configuration") public SapConnectionConfiguration sapConfiguration() { SapConnectionConfiguration configuration = new SapConnectionConfiguration(); configuration.setDestinationDataStore(destinationData()); configuration.setServerDataStore(serverData()); return configuration; } /** * Configures an Inbound SAP Connection * Please enter the connection property values for your environment */ private Map<String, ServerData> serverData() { ServerData data = new ServerDataImpl(); data.setGwhost("example.com"); data.setGwserv("3300"); data.setProgid("QUICKSTART"); data.setRepositoryDestination("quickstartDest"); data.setConnectionCount("2"); return Map.of("quickstartServer", data); } /** * Configures an Outbound SAP Connection * Please enter the connection property values for your environment */ private Map<String, DestinationData> destinationData() { DestinationData data = new DestinationDataImpl(); data.setAshost("example.com"); data.setSysnr("00"); data.setClient("000"); data.setUser("username"); data.setPasswd("password"); data.setLang("en"); return Map.of("quickstartDest", data); }
この例では、サーバーがリモート SAP インスタンスからメタデータを取得するために使用する宛先接続 quickstartDest
も設定します。この宛先は、repositoryDestination
オプションを介してサーバーデータで設定されます。このオプションを設定しない場合は、代わりにローカルメタデータリポジトリーを作成する必要があります。
上記のように宛先を設定した後、次の URI を使用して、呼び出し元クライアントからの quickstartDest
リモート関数呼び出しで BAPI_FLCUST_GETLIST
リモート関数呼び出しを処理できます。
sap-srfc-server:quickstartServer:BAPI_FLCUST_GETLIST
2.81.4.3.1. 必須オプション
サーバーデータ設定オブジェクトに必要なオプションは次のとおりです。
名前 | デフォルト値 | 説明 |
| サーバー接続を登録するゲートウェイホスト。 | |
|
登録を行うことができるポートであるゲートウェイサービス。サービス名 | |
| 登録が行われたプログラム ID。ゲートウェイおよび ABAP システムの宛先で ID として機能します。 | |
| リモート SAP サーバーでホストされているメタデータリポジトリーからメタデータを取得するためにサーバーが使用できる宛先名を指定します。 | |
| ゲートウェイに登録する必要がある接続の数。 |
2.81.4.3.2. 安全なネットワーク接続オプション
サーバーデータ設定オブジェクトの安全なネットワーク接続オプションは次のとおりです。
名前 | デフォルト値 | 説明 |
|
セキュアなネットワーク接続 (SNC) モード、 | |
|
セキュリティーの SNC レベル、 | |
|
サーバーの SNC 名。デフォルトの SNC 名を上書きします。通常、 | |
|
SNC サービスを提供するライブラリーへのパス。このプロパティーが指定されていない場合は、代わりに |
2.81.4.3.3. その他のオプション
サーバーデータ設定オブジェクトのその他のオプションは次のとおりです。
名前 | デフォルト値 | 説明 |
|
その ABAP システムのゲートウェイでサーバーを登録するときに、ファイアウォールによって保護されているため、SAProuter を介してのみアクセスできるシステムに使用する SAP ルーター文字列。一般的なルーター文字列は | |
| 失敗した場合の 2 回の起動試行間の最大時間 (秒単位)。待機時間は、起動に失敗するたびに最初の 1 秒から 2 倍になり、最大値に達するか、サーバーが正常に起動できるようになります。 | |
|
RFC トレースを有効/無効にする ( | |
|
サーバー接続で使用されるスレッドの最大数。設定されていない場合、 | |
|
サーバー接続で使用されるスレッドの最小数。設定されていない場合、 |
2.81.4.4. リポジトリーの設定
リポジトリーの設定は、SAP コンポーネントの repositoryDataStore
プロパティーで維持されます。このマップの各エントリーは、個別のリポジトリーを設定します。各エントリーのキーはリポジトリーの名前であり、このキーはこのリポジトリーが接続されているサーバーの名前にも対応しています。
各エントリーの値は、メタデータリポジトリーのコンテンツを定義するリポジトリーデータ設定オブジェクト org.fusesource.camel.component.sap.model.rfc.impl.RepositoryDataImpl
です。リポジトリーデータオブジェクトは、機能テンプレート設定オブジェクト org.fuesource.camel.component.sap.model.rfc.impl.FunctionTemplateImpl
のマップです。このマップの各エントリーは汎用モジュールのインタフェースを指定し、各エントリーのキーは指定された汎用モジュールの名前です。
リポジトリーデータの例
次のコードは、メタデータリポジトリーを設定する簡単な例を示しています。
@BindToRegistry("sap-configuration") public SapConnectionConfiguration sapConfiguration() { SapConnectionConfiguration configuration = new SapConnectionConfiguration(); configuration.setRepositoryDataStore(repositoryData()); return configuration; } private Map<String, RepositoryData> repositoryData() { RepositoryData data = new RepositoryDataImpl(); FunctionTemplate bookFlightFunctionTemplate = new FunctionTemplateImpl(); data.setFunctionTemplates(Map.of("BOOK_FLIGHT", bookFlightFunctionTemplate)); return Map.of("nplServer", data); }
2.81.4.4.1. 関数テンプレートのプロパティー
汎用モジュールのインタフェースは、RFC コールでデータが汎用モジュールとの間でやり取りされる 4 つのパラメーターリストで構成されています。各パラメーターリストは 1 つ以上のフィールドで構成され、それぞれが RFC コールで転送される名前付きパラメーターです。次のパラメーターリストと例外リストがサポートされています。
- インポートパラメーターリスト には、RFC コールで汎用モジュールに送信されるパラメーター値が含まれています。
- エクスポートパラメーターリスト には、RFC コールで汎用モジュールによって返されるパラメーター値が含まれています。
- 変更パラメーター一覧 には、RFC コールで汎用モジュールとの間で送受信されるパラメーター値が含まれています。
- テーブルパラメーター一覧 には、RFC コールで汎用モジュールとの間で送受信される内部テーブル値が含まれています。
- 汎用モジュールのインタフェースは、モジュールが RFC コールで呼び出されたときに発生する可能性のある ABAP 例外の 例外リスト からも設定されます。
関数テンプレートは、関数インターフェイスの各パラメーターリスト内のパラメーターの名前と型、および関数によって出力される ABAP 例外を記述します。関数テンプレートオブジェクトは、次の表に示すように、メタデータオブジェクトの 5 つのプロパティーリストを保持します。
プロパティー | 説明 |
|
リストフィールドメタデータオブジェクトのリスト、 |
|
リストフィールドメタデータオブジェクトのリスト、 |
|
リストフィールドメタデータオブジェクトのリスト、 |
|
リストフィールドメタデータオブジェクトのリスト、 |
|
ABAP 例外メタデータオブジェクトのリスト、 |
関数テンプレートの例
次の例は、関数テンプレートを設定する方法の概要を示しています。
FunctionTemplate bookFlightFunctionTemplate = new FunctionTemplateImpl(); List<ListFieldMetaData> metaDataList = new ArrayList<>(); ListFieldMetaData metaData = new ListFieldMetaDataImpl(); // configure values metaData.setName("example"); metaDataList.add(metaData); bookFlightFunctionTemplate.setImportParameterList(metaDataList); // in the same way you can configure other parameters bookFlightFunctionTemplate.setExportParameterList(...); bookFlightFunctionTemplate.setChangingParameterList(...); bookFlightFunctionTemplate.setExceptionList(...); bookFlightFunctionTemplate.setTableParameterList(...);
2.81.4.4.2. リストフィールドのメタデータプロパティー
リストフィールドメタデータオブジェクト org.fusesource.camel.component.sap.model.rfc.impl.ListFieldMeataDataImpl
は、パラメーターリスト内のフィールドの名前とタイプを指定します。基本パラメーターフィールド (CHAR
、DATE
、BCD
、TIME
、BYTE
、NUM
、FLOAT
、INT
、INT1
、INT2
、DECF16
、DECF34
、STRING
、XSTRING
) の場合、リストフィールドメタデータオブジェクトに設定できる設定プロパティーを次の表に示します。
名前 | デフォルト値 | 説明 |
| - | パラメーターフィールドの名前。 |
| - | フィールドのパラメータータイプ。 |
| - | 非 Unicode レイアウトのバイト単位のフィールド長。この値は、パラメーターのタイプによって異なります。 |
| - | Unicode レイアウトのバイト単位のフィールド長。この値は、パラメーターのタイプによって異なります。 |
|
| フィールド値の 10 進数の数。パラメータータイプ BCD および FLOAT の場合は必須です。 |
|
|
|
すべての基本パラメーターフィールドでは、フィールドメタデータオブジェクトで name
、type
、byteLength
、および unicodeByteLength
プロパティーを指定する必要があることに注意してください。さらに、BCD
、FLOAT
、DECF16
、および DECF34
フィールドでは、フィールドメタデータオブジェクトで decimal プロパティーを指定する必要があります。
タイプ TABLE
または STRUCTURE
の複雑なパラメーターフィールドの場合、次の表に、リストフィールドメタデータオブジェクトに設定できる設定プロパティーを示します。
名前 | デフォルト値 | 説明 |
| - | パラメーターフィールドの名前。 |
| - | フィールドのパラメータータイプ。 |
| - |
構造またはテーブルのメタデータ。レコードメタデータオブジェクト |
|
|
|
すべての複合パラメーターフィールドでは、フィールドメタデータオブジェクトで name
、type
、および recordMetaData
プロパティーを指定する必要があります。recordMetaData
プロパティーの値は、レコードフィールドメタデータオブジェクト org.fusesource.camel.component.sap.model.rfc.impl.RecordMetaDataImpl で
あり、ネストされた構造の構造またはテーブル行の構造を指定します。
基本リストフィールドのメタデータの例
次のメタデータ設定では、オプションの TICKET_PRICE
という名前の小数点以下 2 桁の 24 桁のパックされた BCD 数値パラメーターを指定します。
ListFieldMetaData metaData = new ListFieldMetaDataImpl(); metaData.setName("TICKET_PRICE"); metaData.setType(DataType.BCD); metaData.setByteLength(12); metaData.setUnicodeByteLength(24); metaData.setDecimals(2); metaData.setOptional(true);
複雑なリストフィールドのメタデータの例
次のメタデータ設定では、connectionInfo
レコードメタデータオブジェクトによって行構造が指定された、CONNINFO
という名前の必須の TABLE
パラメーターを指定します。
ListFieldMetaData metaData = new ListFieldMetaDataImpl(); metaData.setName("CONNINFO"); metaData.setType(DataType.TABLE); RecordMetaData connectionInfo = new RecordMetaDataImpl(); metaData.setRecordMetaData(connectionInfo);
2.81.4.4.3. レコードのメタデータのプロパティー
レコードメタデータオブジェクト org.fusesource.camel.component.sap.model.rfc.impl.RecordMetaDataImpl
は、ネストされた STRUCTURE
または TABLE
パラメーターの行の名前と内容を指定します。レコードメタデータオブジェクトは、レコードフィールドメタデータオブジェクトのリスト org.fusesource.camel.component.sap.model.rfc.impl.FieldMetaDataImpl
を維持します。これは、ネストされた構造またはテーブル行に存在するパラメーターを指定します。
次の表に、レコードメタデータオブジェクトに設定できる設定プロパティーを示します。
名前 | デフォルト値 | 説明 |
| - | レコードの名前。 |
| - |
レコードフィールドメタデータオブジェクトのリスト、 |
レコードメタデータオブジェクトのすべてのプロパティーが必要です。
レコードメタデータの例
次の例は、レコードメタデータオブジェクトを設定する方法を示しています。
RecordMetaData connectionInfo = new RecordMetaDataImpl(); connectionInfo.setName("CONNECTION_INFO"); connectionInfo.setRecordFieldMetaData(...);
2.81.4.4.4. レコードフィールドのメタデータプロパティー
レコードフィールドメタデータオブジェクト org.fusesource.camel.component.sap.model.rfc.impl.FieldMetaDataImpl
は、構造体でパラメーターフィールドの名前とタイプを指定します。
レコードフィールドメタデータオブジェクトは、ネストされた構造またはテーブル行内の個々のフィールド位置のオフセットを追加で指定する必要があることを除いて、パラメーターフィールドメタデータオブジェクトに似ています。個々のフィールドの非 Unicode オフセットと Unicode オフセットは、構造体または行内の前のフィールドの非 Unicode バイト長と Unicode バイト長の合計から計算して指定する必要があります。
ネストされた構造およびテーブル行のフィールドのオフセットを適切に指定しないと、基礎となる JCo および ABAP ランタイムのパラメーターのフィールドストレージが重複し、RFC コールでの値の適切な転送が妨げられるます。
基本パラメーターフィールド (CHAR
、DATE
、BCD
、TIME
、BYTE
、NUM
、FLOAT
、INT
、INT1
、INT2
、DECF16
、DECF34
、STRING
、XSTRING
) の場合、レコードフィールドメタデータオブジェクトに設定できる設定プロパティーを次の表に示します。
名前 | デフォルト値 | 説明 |
| - | パラメーターフィールドの名前。 |
| - | フィールドのパラメータータイプ。 |
| - | 非 Unicode レイアウトのバイト単位のフィールド長。この値は、パラメーターのタイプによって異なります。 |
| - | Unicode レイアウトのバイト単位のフィールド長。この値は、パラメーターのタイプによって異なります。 |
| - | 非 Unicode レイアウトのフィールドオフセット (バイト単位)。このオフセットは、囲んでいる構造内のフィールドのバイト位置です。 |
| - | Unicode レイアウトのフィールドオフセット (バイト単位)。このオフセットは、囲んでいる構造内のフィールドのバイト位置です。 |
|
|
フィールド値の小数点以下の桁数。パラメータータイプ |
タイプ TABLE
または STRUCTURE
の複雑なパラメーターフィールドの場合、次の表に、レコードフィールドメタデータオブジェクトに設定できる設定プロパティーを示します。
名前 | デフォルト値 | 説明 |
| - | パラメーターフィールドの名前。 |
| - | フィールドのパラメータータイプ。 |
| - | 非 Unicode レイアウトのフィールドオフセット (バイト単位)。このオフセットは、囲んでいる構造内のフィールドのバイト位置です。 |
| - | Unicode レイアウトのフィールドオフセット (バイト単位)。このオフセットは、囲んでいる構造内のフィールドのバイト位置です。 |
| - |
構造またはテーブルのメタデータ。レコードメタデータオブジェクト |
基本レコードフィールドのメタデータの例
次のメタデータ設定は、ARRDATE
という名前の DATE
フィールドパラメーターを指定します。これは、非 Unicode レイアウトの場合は囲んでいる構造の 85 バイト、Unicode レイアウトの場合は囲んでいる構造の 170 バイトに配置されています。
FieldMetaData fieldMetaData = new FieldMetaDataImpl(); fieldMetaData.setName("FLTINFO"); fieldMetaData.setType(DataType.STRUCTURE); fieldMetaData.setByteOffset(0); fieldMetaData.setUnicodeByteOffset(0); RecordMetaData flightInfo = new RecordMetaDataImpl(); fieldMetaData.setRecordMetaData(flightInfo);
複雑なレコードフィールドのメタデータの例
次のメタデータ設定は、flightInfo
レコードメタデータオブジェクトによって指定された構造を持つ FLTINFO
という名前の STRUCTURE
フィールドパラメーターを指定します。パラメーターは、非 Unicode レイアウトと Unicode レイアウトの両方の場合に、囲んでいる構造の先頭に配置されます。
FieldMetaData fieldMetaData = new FieldMetaDataImpl(); fieldMetaData.setName("FLTINFO"); fieldMetaData.setType(DataType.STRUCTURE); fieldMetaData.setByteOffset(0); fieldMetaData.setUnicodeByteOffset(0); RecordMetaData flightInfo = new RecordMetaDataImpl(); fieldMetaData.setRecordMetaData(flightInfo);
2.81.5. メッセージヘッダー
SAP コンポーネントは、次のメッセージヘッダーをサポートしています。
ヘッダー | 説明 |
|
メッセージを処理する最後のエンドポイントの URI スキーム。次の値のいずれかを使用します。
|
| メッセージを処理する最後の宛先エンドポイントの宛先名。 |
| メッセージを処理する最後のサーバーエンドポイントのサーバー名。 |
| メッセージを処理する最後のキューエンドポイントのキュー名。 |
| メッセージを処理する最後の RFC エンドポイントの RFC 名。 |
| メッセージを処理する最後の IDoc エンドポイントの IDoc タイプ。 |
| メッセージを処理する最後の IDoc エンドポイントの IDoc タイプ拡張 (存在する場合)。 |
| メッセージを処理する最後の IDoc エンドポイントのシステムリリース (存在する場合)。 |
| メッセージを処理する最後の IDoc エンドポイントのアプリケーションリリース (存在する場合)。 |
2.81.6. エクスチェンジプロパティー
SAP コンポーネントは、次のエクスチェンジプロパティーを追加します。
プロパティー | 説明 |
|
エクスチェンジによって検出された各 SAP 宛先のプロパティーを含むマップ。マップは宛先名によってキー付けされ、各エントリーはその宛先の設定プロパティーを含む |
|
エクスチェンジによって検出された各 SAP サーバーのプロパティーを含むマップ。マップはサーバー名でキー付けされ、各エントリーはそのサーバーの設定プロパティーを含む |
2.81.7. RFC のメッセージボディー
2.81.7.1. リクエストおよびレスポンスオブジェクト
SAP エンドポイントは、SAP リクエストオブジェクトを含むメッセージボディーを含むメッセージを受信することを想定しており、SAP レスポンスオブジェクトを含むメッセージボディーを含むメッセージを返します。SAP のリクエストとレスポンスは、各フィールドが事前定義されたデータ型を持つ名前付きフィールドを含む固定マップデータ構造です。
SAP リクエストとレスポンスの名前付きフィールドは、SAP エンドポイントに固有であり、各エンドポイントが受け入れる SAP リクエストとレスポンスのパラメーターを定義することに注意してください。SAP エンドポイントは、それに固有のリクエストとレスポンスオブジェクトを作成するファクトリーメソッドを提供します。
public class SAPEndpoint ... { ... public Structure getRequest() throws Exception; public Structure getResponse() throws Exception; ... }
2.81.7.2. 構造物オブジェクト
SAP 要求オブジェクトと応答オブジェクトは両方とも、org.fusesource.camel.component.sap.model.rfc.Structure
インターフェイスをサポートする構造オブジェクトとして Java で表されます。このインターフェイスは、java.util.Map
インターフェイスと org.eclipse.emf.ecore.EObject
インターフェイスの両方を拡張します。
public interface Structure extends org.eclipse.emf.ecore.EObject, java.util.Map<String, Object> { <T> T get(Object key, Class<T> type); }
構造体オブジェクトのフィールド値には、マップインターフェイスのフィールドの getter メソッドを介してアクセスします。さらに、構造体インターフェイスは、フィールド値を取得するための型制限されたメソッドを提供します。
構造オブジェクトは、Eclipse モデリングフレームワーク (EMF) を使用してコンポーネントランタイムに実装され、そのフレームワークの EObject
インターフェイスをサポートします。構造オブジェクトのインスタンスには、それが提供するフィールドのマップの構造と内容を定義および制限するメタデータが添付されています。このメタデータには、EMF が提供する標準的な方法を使用してアクセスし、イントロスペクションすることができます。詳細については、EMF のドキュメントを参照してください。
構造体オブジェクトで定義されていないパラメーターを取得しようとすると、null が返されます。構造体で定義されていないパラメーターを設定しようとすると、例外が出力され、パラメーターの値を正しくない型で設定しようとします。
次のセクションで説明するように、構造体オブジェクトには、複合フィールド型 STRUCTURE
および TABLE
の値を含むフィールドを含めることができます。
これらの型のインスタンスを作成して構造体に追加する必要はありません。これらのフィールド値のインスタンスは、必要に応じて、囲んでいる構造にアクセスするときにオンデマンドで作成されます。
2.81.7.3. フィールドの種類
SAP リクエストまたはレスポンスの構造オブジェクト内に存在するフィールドは、基本 または 複合 のいずれかです。基本フィールドには単一のスカラー値が含まれますが、複合フィールドには基本タイプまたは複合タイプのフィールドが 1 つ以上含まれます。
2.81.7.3.1. 基本フィールドの種類
基本フィールドは、文字、数値、16 進数、または文字列のフィールドタイプです。次の表は、構造体オブジェクトに存在する可能性のある基本フィールドのタイプをまとめたものです。
フィールドタイプ | 対応 Java 型 | Byte Length | Unicode バイト長 | 数 小数 桁 | 説明 |
|
| 1 から 65535 | 1 から 65535 | - | ABAP タイプ 'C': 固定サイズの文字列。 |
|
| 8 | 16 | - | ABAP タイプ 'D': 日付 (形式: YYYYMMDD)。 |
|
| 1 から 16 | 1 から 16 | 0 から 14 | ABAP タイプ 'P': パックされた BCD 番号。BCD 番号には、1 バイトあたり 2 桁が含まれます。 |
|
| 6 | 12 | - | ABAP タイプ 'T': 時間 (形式: HHMMSS)。 |
|
| 1 から 65535 | 1 から 65535 | - | ABAP タイプ 'X': 固定サイズのバイト配列。 |
|
| 1 から 65535 | 1 から 65535 | - | ABAP タイプ 'N': 固定サイズの数値文字列。 |
|
| 8 | 8 | 0 から 15 | ABAP タイプ 'F': 浮動小数点数。 |
|
| 4 | 4 | - | ABAP タイプ 'I': 4 バイト整数。 |
|
| 2 | 2 | - | ABAP タイプ 'S': 2 バイト整数。 |
|
| 1 | 1 | - | ABAP タイプ 'B': 1 バイト整数。 |
|
| 8 | 8 | 16 | ABAP タイプ 'decfloat16': 8 バイトの 10 進浮動小数点数。 |
|
| 16 | 16 | 34 | ABAP タイプ 'decfloat34': 16 バイトの 10 進浮動小数点数。 |
|
| 8 | 8 | - | ABAP タイプ 'G': 可変長文字列。 |
|
| 8 | 8 | - | ABAP タイプ 'Y': 可変長バイト配列。 |
2.81.7.3.2. 文字フィールドの種類
文字フィールドには、基礎となる JCo および ABAP ランタイムで非 Unicode または Unicode 文字エンコーディングを使用できる固定サイズの文字列が含まれます。非 Unicode 文字列は、1 バイトあたり 1 文字をエンコードします。Unicode 文字列は、UTF-16 エンコーディングを使用して 2 バイトでエンコードされます。文字フィールドの値は、Java では java.lang.String
オブジェクトとして表され、基礎となる JCo ランタイムが ABAP 表現への変換を担当します。
文字フィールドは、関連する byteLength
および unicodeByteLength
プロパティーでそのフィールド長を宣言します。これらのプロパティーは、各エンコーディングシステムでのフィールドの文字列の長さを決定します。
CHAR
-
CHAR
文字項目は、英数字を含むテキスト項目であり、ABAP タイプ C に対応します。 NUM
-
NUM
文字フィールドは、数字のみを含む数値テキストフィールドであり、ABAP タイプ N に対応します。 DATE
-
DATE
文字フィールドは、年、月、日がYYYYMMDD
としてフォーマットされた 8 文字の日付フィールドであり、ABAP タイプ D に対応します。 TIME
-
TIME
文字フィールドは、時、分、および秒がHHMMSS
としてフォーマットされた 6 文字の時間フィールドであり、ABAP タイプ T に対応します。
2.81.7.3.3. 数値フィールドの種類
数値フィールドには数値が含まれています。次の数値フィールドタイプがサポートされています。
INT
-
INT
数値フィールドは、基礎となる JCo および ABAP ランタイムで 4 バイトの整数値として格納される整数フィールドであり、ABAP タイプ I に対応します。INT
フィールド値は、Java ではjava.lang.Integer
オブジェクトとして表されます。 INT2
-
INT2
数値フィールドは、基礎となる JCo および ABAP ランタイムに 2 バイトの整数値として格納される整数フィールドであり、ABAP タイプ S に対応します。INT2
フィールド値は、Java ではjava.lang.Integer
オブジェクトとして表されます。 INT1
-
INT1
フィールドは、基になる JCo および ABAP ランタイム値に 1 バイトの整数値として格納される整数フィールドであり、ABAP タイプ B に対応します。INT1
フィールド値は、Java ではjava.lang.Integer
オブジェクトとして表されます。 FLOAT
-
FLOAT
フィールドは、基礎となる JCo および ABAP ランタイムに 8 バイトの double 値として格納される 2 進浮動小数点数フィールドであり、ABAP タイプ F に対応します。FLOAT
フィールドは、フィールドの値が関連する小数プロパティー。FLOAT
フィールドの場合、この 10 進プロパティーは 1 ~ 15 桁の値を持つことができます。FLOAT
フィールド値は、Java ではjava.lang.Double
オブジェクトとして表されます。 BCD
-
BCD
フィールドは、基礎となる JCo および ABAP ランタイムで 1 から 16 バイトのパック数として保管される 2 進化 10 進フィールドであり、ABAP タイプ P に対応します。パック数は、1 バイトあたり 2 桁の 10 進数を保管します。BCD
フィールドは、関連するbyteLength
およびunicodeByteLength
プロパティーでフィールド長を宣言します。BCD
フィールドの場合、これらのプロパティーは 1 ~ 16 バイトの値を持つことができ、両方のプロパティーが同じ値になります。BCD
フィールドは、関連付けられた decimal プロパティーで、フィールドの値に含まれる 10 進数の桁数を宣言します。BCD
フィールドの場合、この 10 進プロパティーは 1 ~ 14 桁の値を持つことができます。BCD
フィールド値は、Java ではjava.math.BigDecimal
として表されます。 DECF16
-
DECF16
フィールドは、基礎となる JCo および ABAP ランタイムで 8 バイトの IEEE 754 decimal64 浮動小数点値として格納される 10 進浮動小数点であり、ABAP タイプdecfloat16
に対応します。DECF16
フィールドの値は、10 進数で 16 桁です。DECF16
フィールドの値は、Java ではjava.math.BigDecimal
として表されます。 DECF34
-
DECF34
フィールドは、基礎となる JCo および ABAP ランタイムで 16 バイトの IEEE 754 decimal128 浮動小数点値として格納される 10 進浮動小数点であり、ABAP タイプdecfloat34
に対応します。DECF34
フィールドの値には、34 桁の 10 進数があります。DECF34
フィールドの値は、Java ではjava.math.BigDecimal
として表されます。
2.81.7.3.4. 16 進フィールドタイプ
16 進数フィールドには生のバイナリーデータが含まれます。次の 16 進数フィールドタイプがサポートされています。
BYTE
-
BYTE
フィールドは、基礎となる JCo および ABAP ランタイムにバイト配列として格納される固定サイズのバイト文字列であり、ABAP タイプ X に対応します。BYTE
フィールドは、関連するbyteLength
およびunicodeByteLength
プロパティーでフィールド長を宣言します。BYTE
フィールドの場合、これらのプロパティーは 1 ~ 65535 バイトの値を持つことができ、両方のプロパティーが同じ値になります。BYTE
フィールドの値は、Java ではbyte
オブジェクトとして表されます。
2.81.7.3.5. 文字列フィールドの種類
文字列フィールドは、可変長の文字列値を参照します。その文字列値の長さは実行時まで固定されません。文字列値のストレージは、基礎となる JCo および ABAP ランタイムで動的に作成されます。文字列フィールド自体のストレージは固定されており、文字列ヘッダーのみが含まれています。
STRING
-
STRING
フィールドは、基礎となる JCo および ABAP ランタイムに 8 バイト値として格納された文字列を参照します。ABAP タイプ G に対応します。STRING
項目の値は、Java ではjava.lang.String
オブジェクトとして表されます。 XSTRING
-
XSTRING
フィールドは、基礎となる JCo および ABAP ランタイムに 8 バイト値として格納されたバイト文字列を参照します。ABAP タイプ Y に対応します。STRING
項目の値は、Java ではbyte
オブジェクトとして表されます。
2.81.7.3.6. 複雑なフィールドタイプ
複合フィールドは、構造体またはテーブルフィールドタイプのいずれかです。次の表は、これらの複雑なフィールドタイプをまとめたものです。
フィールドタイプ | 対応 Java 型 | Byte Length | Unicode バイト長 | 数 小数 桁 | 説明 |
|
| 個々のフィールドのバイト長の合計 | 個々のフィールドの Unicode バイト長の合計 | - | ABAP タイプ 'u' & 'v': 異種構造 |
|
| 行構造体のバイト長 | 行構造体の Unicode バイト長 | - | ABAP タイプ 'h': テーブル |
2.81.7.3.7. 構造体フィールドタイプ
STRUCTURE
項目には構造オブジェクトが含まれ、基礎となる JCo および ABAP ランタイムに ABAP 構造レコードとして格納されます。ABAP タイプ u
または v
のいずれかに対応します。STRUCTURE
項目の値は、Java ではインターフェイス org.fusesource.camel.component.sap.model.rfc.Structure
を持つ構造オブジェクトとして表されます。
2.81.7.3.8. テーブルフィールドタイプ
TABLE
フィールドにはテーブルオブジェクトが含まれ、基礎となる JCo および ABAP ランタイムに ABAP 内部テーブルとして格納されます。ABAP タイプ h
に対応します。フィールドの値は、インタフェース org.fusesource.camel.component.sap.model.rfc.Table
を持つテーブルオブジェクトによって Java で表されます。
2.81.7.3.9. テーブルオブジェクト
テーブルオブジェクトは、同じ構造を持つ構造オブジェクトの行を含む同種のリストデータ構造です。このインターフェイスは、java.util.List
インターフェイスと org.eclipse.emf.ecore.EObject
インターフェイスの両方を拡張します。
public interface Table<S extends Structure> extends org.eclipse.emf.ecore.EObject, java.util.List<S> { /** * Creates and adds a table row at the end of the row list */ S add(); /** * Creates and adds a table row at the index in the row list */ S add(int index); }
テーブルオブジェクト内の行のリストは、リストインターフェイスで定義された標準メソッドを使用してアクセスおよび管理されます。さらに、テーブルインターフェイスは、構造体オブジェクトを作成して行リストに追加するための 2 つのファクトリーメソッドを提供します。
テーブルオブジェクトは、Eclipse Modeling Framework (EMF) を使用してコンポーネントランタイムに実装され、そのフレームワークの EObject インターフェイスをサポートします。テーブルオブジェクトのインスタンスには、それが提供する行の構造と内容を定義および制限するメタデータが添付されています。このメタデータには、EMF が提供する標準的な方法を使用してアクセスし、イントロスペクションすることができます。詳細は、EMF のドキュメントを参照してください。
間違った型の行構造値を追加または設定しようとすると、例外が出力されます。
2.81.8. IDoc のメッセージ本文
2.81.8.1. IDoc メッセージタイプ
IDoc Camel SAP エンドポイントの 1 つを使用する場合、メッセージ本文のタイプは、使用している特定のエンドポイントによって異なります。
sap-idoc-destination
エンドポイントまたは sap-qidoc-destination
エンドポイントの場合、メッセージ本文は Document
タイプです。
org.fusesource.camel.component.sap.model.idoc.Document
sap-idoclist-destination
エンドポイント、sap-qidoclist-destination
エンドポイント、または sap-idoclist-server
エンドポイントの場合、メッセージボディーは DocumentList
タイプです。
org.fusesource.camel.component.sap.model.idoc.DocumentList
2.81.8.2. IDoc 文書モデル
Camel SAP コンポーネントの場合、IDoc ドキュメントは、基礎となる SAP IDoc API のラッパー API を提供する Eclipse Modeling Framework (EMF) を使用してモデル化されます。このモデルで最も重要なタイプは次のとおりです。
org.fusesource.camel.component.sap.model.idoc.Document org.fusesource.camel.component.sap.model.idoc.Segment
Document
タイプは、IDoc ドキュメントインスタンスを表します。概説すると、Document
インターフェイスは次のメソッドを公開します。
// Java package org.fusesource.camel.component.sap.model.idoc; ... public interface Document extends EObject { // Access the field values from the IDoc control record String getArchiveKey(); void setArchiveKey(String value); String getClient(); void setClient(String value); ... // Access the IDoc document contents Segment getRootSegment(); }
次の種類のメソッドが Document
インターフェイスによって公開されます。
- 制御レコードにアクセスする方法
- ほとんどのメソッドは、IDoc 制御レコードのフィールド値にアクセスまたは変更するためのものです。これらのメソッドの形式は AttributeName です。ここで、AttributeName はフィールド値の名前です。
- ドキュメントコンテンツへのアクセス方法
getRootSegment
メソッドは、ドキュメントコンテンツ (IDoc データレコード) へのアクセスを提供し、コンテンツをSegment
オブジェクトとして返します。各Segment
オブジェクトには任意の数の子セグメントを含めることができ、セグメントは任意の程度にネストできます。ただし、セグメント階層の正確なレイアウトは、文書の特定の IDoc タイプ によって定義されることに注意してください。したがって、セグメント階層を作成 (または読み取り) するときは、IDoc タイプによって定義された正確な構造に従う必要があります。
Segment
タイプは、IDoc ドキュメントのデータレコードにアクセスするために使用されます。セグメントは、ドキュメントの IDoc タイプによって定義された構造に従って配置されます。概説すると、Segment
インターフェイスは次のメソッドを公開します。
// Java package org.fusesource.camel.component.sap.model.idoc; ... public interface Segment extends EObject, java.util.Map<String, Object> { // Returns the value of the '<em><b>Parent</b></em>' reference. Segment getParent(); // Return an immutable list of all child segments <S extends Segment> EList<S> getChildren(); // Returns a list of child segments of the specified segment type. <S extends Segment> SegmentList<S> getChildren(String segmentType); EList<String> getTypes(); Document getDocument(); String getDescription(); String getType(); String getDefinition(); int getHierarchyLevel(); String getIdocType(); String getIdocTypeExtension(); String getSystemRelease(); String getApplicationRelease(); int getNumFields(); long getMaxOccurrence(); long getMinOccurrence(); boolean isMandatory(); boolean isQualified(); int getRecordLength(); <T> T get(Object key, Class<T> type); }
getChildren (String segmentType)
メソッドは、新しい (ネストされた) 子をセグメントに追加する場合に特に便利です。次のように定義されているタイプ SegmentList
のオブジェクトを返します。
// Java package org.fusesource.camel.component.sap.model.idoc; ... public interface SegmentList<S extends Segment> extends EObject, EList<S> { S add(); S add(int index); }
したがって、E1SCU_CRE
タイプのデータレコードを作成するには、次のような Java コードを使用できます。
Segment rootSegment = document.getRootSegment(); Segment E1SCU_CRE_Segment = rootSegment.getChildren("E1SCU_CRE").add();
2.81.9. ドキュメント属性
IDoc ドキュメント属性の表に、Document
オブジェクトに設定できる制御レコード属性を示します。
属性 | 長さ | SAP フィールド | 説明 |
---|---|---|---|
| 70 |
| EDI アーカイブキー |
| 3 |
| クライアント |
| 8 |
| IDoc が作成された日付 |
| 6 |
| IDoc が作成された時間 |
| 1 |
| 方向 |
| 14 |
| メッセージ参照 |
| 14 |
| メッセージグループへの参照 |
| 6 |
| EDI メッセージタイプ |
| 1 |
| EDI 規格 |
| 6 |
| EDI 規格のバージョン |
| 14 |
| エクスチェンジファイルへの参照 |
| 8 |
| IDoc タイプ |
| 16 |
| IDoc 番号 |
| 4 |
| IDoc の SAP リリース |
| 30 |
| 基本 IDoc タイプの名前 |
| 30 |
| 拡張タイプの名前 |
| 3 |
| 論理メッセージコード |
| 3 |
| 論理メッセージ機能 |
| 30 |
| 論理メッセージタイプ |
| 1 |
| 出力モード |
| 10 |
| 受信者アドレス (SADR) |
| 70 |
| 受信者の論理アドレス |
| 2 |
| 受信者のパートナー機能 |
| 10 |
| 受信機のパートナー番号 |
| 2 |
| 受信者のパートナータイプ |
| 10 |
| 受信側ポート (SAP システム、EDI サブシステム) |
|
| 送信者アドレス (SADR) | |
| 70 |
| 送信者の論理アドレス |
| 2 |
| 差出人のパートナー機能 |
| 10 |
| 送信者のパートナー番号 |
| 2 |
| 送信者のパートナータイプ |
| 10 |
| 送信側ポート (SAP システム、EDI サブシステム) |
| 20 |
| EDI/ALE: シリアル化フィールド |
| 2 |
| IDoc のステータス |
| 1 |
| テストフラグ |
2.81.9.1. Java でドキュメント属性を設定する
Java で制御レコード属性を設定する場合、Java Bean プロパティーの通常の規則に従います。つまり、属性値を取得および設定するために、getName
および setName
メソッドを介して name
属性にアクセスできます。たとえば、iDocType
、iDocTypeExtension
、および messageType
属性は、Document
オブジェクトで次のように設定できます。
// Java document.setIDocType("FLCUSTOMER_CREATEFROMDATA01"); document.setIDocTypeExtension(""); document.setMessageType("FLCUSTOMER_CREATEFROMDATA");
2.81.9.2. XML でドキュメント属性を設定する
XML で制御レコード属性を設定する場合、idoc:Document
要素に属性を設定する必要があります。たとえば、iDocType
、iDocTypeExtension
および messageType
属性は次のように設定できます。
<?xml version="1.0" encoding="ASCII"?> <idoc:Document ... iDocType="FLCUSTOMER_CREATEFROMDATA01" iDocTypeExtension="" messageType="FLCUSTOMER_CREATEFROMDATA" ... > ... </idoc:Document>
2.81.10. トランザクションサポート
2.81.10.1. BAPI トランザクションモデル
SAP コンポーネントは、SAP とのアウトバウンド通信用に BAPI トランザクションモデルをサポートしています。true
に設定されたトランザクションオプションを含む URL を持つ宛先エンドポイントは、必要に応じて、エンドポイントのアウトバウンド接続でステートフルセッションを開始し、Camel Synchronization オブジェクトをエクスチェンジに登録します。この Synchronization オブジェクトは、BAPI サービスメソッド BAPI_TRANSACTION_COMMIT
を呼び出し、メッセージエクスチェンジの処理が完了するとステートフルセッションを終了します。メッセージエクスチェンジの処理が失敗した場合、Synchronization オブジェクトは BAPI サーバーメソッド BAPI_TRANSACTION_ROLLBACK
を呼び出し、ステートフルセッションを終了します。
2.81.10.2. RFC トランザクションモデル
tRFC プロトコルは、一意のトランザクション識別子 (TID) で各トランザクション要求を識別することにより、AT-MOST-ONCE の配信と処理の保証を実現します。TID は、プロトコルで送信される各要求に付随します。tRFC プロトコルを使用する送信側アプリケーションは、要求を送信するときに、要求の各インスタンスを一意の TID で識別する必要があります。アプリケーションは、特定の TID を持つリクエストを複数回送信できますが、プロトコルは、リクエストが受信側システムで配信され、処理されるのは多くても 1 回であることを保証します。アプリケーションは、要求の送信時に通信エラーまたはシステムエラーが発生した場合に、指定された TID を使用してリクエストを再送信することを選択できます。したがって、そのリクエストが受信側システムで配信および処理されたかどうかは不明です。通信エラーが発生したときにリクエストを再送信することにより、tRFC プロトコルを使用するクライアントアプリケーションは、そのリクエストの配信と処理を確実に 1 回だけ保証できます。
2.81.10.3. どのトランザクションモデルを使用するか?
BAPI トランザクションは、SAP データベースで BAPI メソッドまたは RFC 関数によって実行される永続的なデータ変更に ACID 保証を課すという意味で、アプリケーションレベルのトランザクションです。RFC トランザクションは、BAPI メソッドや RFC 機能への要求に対して配信保証 (AT-MOST-ONCE、EXACTLY-ONCE、EXACTLY-ONCE-IN-ORDER) を課すという意味で、通信トランザクションです。
2.81.10.4. トランザクション RFC 宛先エンドポイント
次の宛先エンドポイントは、RFC トランザクションをサポートしています。
-
sap-trfc-destination
-
sap-qrfc-destination
単一の Camel ルートには、複数のトランザクション RFC 宛先エンドポイントを含めることができ、複数の RFC 宛先にメッセージを送信したり、同じ RFC 宛先に複数回メッセージを送信したりすることもできます。これは、Camel SAP コンポーネントが、ルートを通過する各 Exchange
オブジェクトの 多くの トランザクション ID (TID) を追跡する必要がある可能性があることを意味します。ルート処理が失敗し、再試行する必要がある場合、状況は非常に複雑になります。RFC トランザクションセマンティクスは、ルート上の各 RFC 宛先が、最初に使用されたのと 同じ TID を使用して呼び出されることを要求します (各宛先の TID が互いに異なる場合)。つまり、Camel SAP コンポーネントは、ルート上のどのポイントでどの TID が使用されたかを追跡し、この情報を記憶して、TID を正しい順序で再生できるようにする必要があります。
デフォルトでは、Camel は Exchange
がルートのどこにいるかを知ることができるメカニズムを提供しません。このようなメカニズムを提供するには、CurrentProcessorDefinitionInterceptStrategy
インターセプターを Camel ランタイムにインストールする必要があります。Camel SAP コンポーネントがルート内の TID を追跡するには、このインターセプターを Camel ランタイムにインストールする必要があります。
2.81.10.5. トランザクション RFC サーバーエンドポイント
次のサーバーエンドポイントは、RFC トランザクションをサポートしています。
-
sap-trfc-server
トランザクションリクエストを処理する Camel エクスチェンジで処理エラーが発生すると、Camel は標準のエラー処理メカニズムを通じて処理エラーを処理します。エクスチェンジを処理する Camel ルートがエラーを呼び出し元に伝播するように設定されている場合、エクスチェンジを開始した SAP サーバーエンドポイントは失敗を記録し、送信側の SAP システムにエラーが通知されます。送信側の SAP システムは、同じ TID を持つ別のトランザクションリクエストを送信して応答し、リクエストを再度処理できます。
2.81.11. RFC の XML シリアライゼーション
SAP 要求および応答オブジェクトは、これらのオブジェクトを XML ドキュメントとの間でシリアル化できるようにする XML シリアル化形式をサポートしています。
2.81.11.1. XML 名前空間
リポジトリー内の各 RFC は、リクエストオブジェクトとレスポンスオブジェクトのシリアル化された形式を設定する要素に対して、特定の XML 名前空間を定義します。この名前空間 URL の形式は次のとおりです。
http://sap.fusesource.org/rfc>/<Repository Name>/<RFC Name>
RFC 名前空間 URL には、共通の http://sap.fusesource.org/rfc
接頭辞があり、その後に RFC のメタデータが定義されているリポジトリーの名前が続きます。URL の最後のコンポーネントは、RFC 自体の名前です。
2.81.11.2. リクエストとレスポンスの XML ドキュメント
SAP リクエストオブジェクトは XML ドキュメントにシリアル化され、そのドキュメントのルート要素は Request という名前で、リクエストの RFC の名前空間によってスコープが設定されます。
<?xml version="1.0" encoding="ASCII"?> <BOOK_FLIGHT:Request xmlns:BOOK_FLIGHT="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT"> ... </BOOK_FLIGHT:Request>
SAP レスポンスオブジェクトは XML ドキュメントにシリアル化され、そのドキュメントのルート要素は Response という名前で、レスポンス応答の RFC の名前空間によってスコープが設定されます。
<?xml version="1.0" encoding="ASCII"?> <BOOK_FLIGHT:Response xmlns:BOOK_FLIGHT="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT"> ... </BOOK_FLIGHT:Response>
2.81.11.3. 構造体フィールド
パラメーターリストまたはネストされた構造体の構造体フィールドは、要素としてシリアル化されます。シリアル化された構造体の要素名は、それが含まれるパラメーターリスト、構造体、またはテーブルの行エントリー内の構造体のフィールド名に対応します。
<BOOK_FLIGHT:FLTINFO xmlns:BOOK_FLIGHT="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT"> ... </BOOK_FLIGHT:FLTINFO>
次の例のように、RFC 名前空間の構造要素の型名は、構造を定義するレコードメタデータオブジェクトの名前に対応することに注意してください。
<xs:schema targetNamespace="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT"> xmlns:xs="http://www.w3.org/2001/XMLSchema"> ... <xs:complexType name="FLTINFO_STRUCTURE”> ... </xs:complexType> ... </xs:schema>
この区別は、JAXB Bean を指定して構造をマーシャリングおよびアンマーシャリングする場合に重要になります。
2.81.11.4. テーブルフィールド
パラメーターリストまたはネストされた構造のテーブルフィールドは、要素としてシリアル化されます。シリアル化された構造体の要素名は、それが存在する外側のパラメーターリスト、構造体、またはテーブル行エントリー内のテーブルのフィールド名に対応します。テーブル要素には、テーブルの行エントリーのシリアル化された値を保持する一連の行要素が含まれます。
<BOOK_FLIGHT:CONNINFO xmlns:BOOK_FLIGHT="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT"> <row ... > ... </row> ... <row ... > ... </row> </BOOK_FLIGHT:CONNINFO>
RFC 名前空間の table 要素の型名は、_TABLE
の接尾辞が付いたテーブルの行構造を定義するレコードメタデータオブジェクトの名前に対応することに注意してください。次の例のように、RFC 名のテーブル行要素の型名は、テーブルの行構造を定義するレコードメタデータオブジェクトの名前に対応します。
<xs:schema targetNamespace="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT" xmlns:xs="http://www.w3.org/2001/XMLSchema"> ... <xs:complextType name="CONNECTION_INFO_STRUCTURE_TABLE”> <xs:sequence> <xs:element name="row” minOccures="0” maxOccurs="unbounded” type="CONNECTION_INFO_STRUCTURE”/> ... <xs:sequence> </xs:sequence> </xs:complexType> <xs:complextType name="CONNECTION_INFO_STRUCTURE”> ... </xs:complexType> ... </xs:schema>
この区別は、JAXB Bean を指定して構造をマーシャリングおよびアンマーシャリングする場合に重要になります。
2.81.11.5. Elementary フィールド
パラメーターリストまたはネストされた構造体の Elementary フィールドは、囲んでいるパラメーターリストまたは構造体の要素の属性としてシリアル化されます。シリアル化されたフィールドの属性名は、次の例のように、それが存在する囲んでいるパラメーターリスト、構造体、またはテーブル行エントリー内のフィールドのフィールド名に対応します。
<?xml version="1.0" encoding="ASCII"?> <BOOK_FLIGHT:Request xmlns:BOOK_FLIGHT="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT" CUSTNAME="James Legrand" PASSFORM="Mr" PASSNAME="Travelin Joe" PASSBIRTH="1990-03-17T00:00:00.000-0500" FLIGHTDATE="2014-03-19T00:00:00.000-0400" TRAVELAGENCYNUMBER="00000110" DESTINATION_FROM="SFO" DESTINATION_TO="FRA"/>
2.81.11.6. 日付と時刻の形式
日付と時刻のフィールドは、次の形式を使用して属性値にシリアル化されます。
yyyy-MM-dd'T'HH:mm:ss.SSSZ
日付フィールドは、年、月、日、およびタイムゾーンのコンポーネントセットのみでシリアル化されます。
DEPDATE="2014-03-19T00:00:00.000-0400"
時間フィールドは、時、分、秒、ミリ秒、およびタイムゾーンコンポーネントセットのみでシリアル化されます。
DEPTIME="1970-01-01T16:00:00.000-0500"
2.81.12. IDoc の XML シリアル化
IDoc メッセージ本文は、組み込み型コンバーターを使用して、XML 文字列形式にシリアル化できます。
2.81.12.1. XML 名前空間
シリアル化された各 IDoc は、次の一般的な形式を持つ XML 名前空間に関連付けられています。
http://sap.fusesource.org/idoc/repositoryName/idocType/idocTypeExtension/systemRelease/applicationRelease
repositoryName (リモート SAP メタデータリポジトリーの名前) と idocType (IDoc ドキュメントタイプ) の両方が必須ですが、名前空間の他のコンポーネントは空白のままにすることができます。たとえば、次のような XML 名前空間を持つことができます。
http://sap.fusesource.org/idoc/MY_REPO/FLCUSTOMER_CREATEFROMDATA01///
2.81.12.2. 組み込み型コンバーター
Camel SAP コンポーネントには組み込み型コンバーターがあり、Document
オブジェクトまたは DocumentList
オブジェクトを String 型に変換したり、String
型から変換したりできます。
たとえば、Document
オブジェクトを XML 文字列にシリアル化するには、次の行を XML DSL のルートに追加するだけです。
<convertBodyTo type="java.lang.String">;
このアプローチを使用して、シリアライズされた XML メッセージを Document
オブジェクトにすることもできます。たとえば、現在のメッセージ本文がシリアル化された XML 文字列である場合、XML DSL のルートに次の行を追加することで、それを Document
オブジェクトに戻すことができます。
<convertBodyTo type="org.fusesource.camel.component.sap.model.idoc.Document">
2.81.12.3. XML 形式のサンプル IDoc メッセージ本文
IDoc メッセージを String
に変換すると、ルート要素が idoc:Document
(単一のドキュメントの場合) または idoc:DocumentList
(ドキュメントのリストの場合) のいずれかである XML ドキュメントにシリアライズされます。これは、idoc:Document
要素にシリアライズされた単一の IDoc ドキュメントであることを示しています。
例2.2 XML の IDoc メッセージボディー
<?xml version="1.0" encoding="ASCII"?> <idoc:Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:FLCUSTOMER_CREATEFROMDATA01---="http://sap.fusesource.org/idoc/XXX/FLCUSTOMER_CREATEFROMDATA01///" xmlns:idoc="http://sap.fusesource.org/idoc" creationDate="2015-01-28T12:39:13.980-0500" creationTime="2015-01-28T12:39:13.980-0500" iDocType="FLCUSTOMER_CREATEFROMDATA01" iDocTypeExtension="" messageType="FLCUSTOMER_CREATEFROMDATA" recipientPartnerNumber="QUICKCLNT" recipientPartnerType="LS" senderPartnerNumber="QUICKSTART" senderPartnerType="LS"> <rootSegment xsi:type="FLCUSTOMER_CREATEFROMDATA01---:ROOT" document="/"> <segmentChildren parent="//@rootSegment"> <E1SCU_CRE parent="//@rootSegment" document="/"> <segmentChildren parent="//@rootSegment/@segmentChildren/@E1SCU_CRE.0"> <E1BPSCUNEW parent="//@rootSegment/@segmentChildren/@E1SCU_CRE.0" document="/" CUSTNAME="Fred Flintstone" FORM="Mr." STREET="123 Rubble Lane" POSTCODE="01234" CITY="Bedrock" COUNTR="US" PHONE="800-555-1212" EMAIL="fred@bedrock.com" CUSTTYPE="P" DISCOUNT="005" LANGU="E"/> </segmentChildren> </E1SCU_CRE> </segmentChildren> </rootSegment> </idoc:Document>
2.81.13. 例 1: SAP からのデータの読み取り
この例は、SAP から FlightCustomer
ビジネスオブジェクトデータを読み取るルートを示しています。ルートは、データを取得するために SAP 同期 RFC 宛先エンドポイントを使用して、FlightCustomer
BAPI メソッド BAPI_FLCUST_GETLIST
を呼び出します。
2.81.13.1. ルートの Java DSL
サンプルルートの Java DSL は次のとおりです。
from("direct:getFlightCustomerInfo") .to("bean:createFlightCustomerGetListRequest") .to("sap-srfc-destination:nplDest:BAPI_FLCUST_GETLIST") .to("bean:returnFlightCustomerInfo");
2.81.13.2. ルートの XML DSL
また、同じルートの Spring DSL は次のとおりです。
<route> <from uri="direct:getFlightCustomerInfo"/> <to uri="bean:createFlightCustomerGetListRequest"/> <to uri="sap-srfc-destination:nplDest:BAPI_FLCUST_GETLIST"/> <to uri="bean:returnFlightCustomerInfo"/> </route>
2.81.13.3. createFlightCustomerGetListRequest
bean
createFlightCustomerGetListRequest
Bean は、後続の SAP エンドポイントの RFC 呼び出しで使用される exchange メソッドで SAP 要求オブジェクトを構築するロールを果たします。次のコードスニペットは、リクエストオブジェクトを作成する一連の操作を示しています。
public void create(Exchange exchange) throws Exception { // Get SAP Endpoint to be called from context. SapSynchronousRfcDestinationEndpoint endpoint = exchange.getContext().getEndpoint("sap-srfc-destination:nplDest:BAPI_FLCUST_GETLIST", SapSynchronousRfcDestinationEndpoint.class); // Retrieve bean from message containing Flight Customer name to // look up. BookFlightRequest bookFlightRequest = exchange.getIn().getBody(BookFlightRequest.class); // Create SAP Request object from target endpoint. Structure request = endpoint.getRequest(); // Add Customer Name to request if set if (bookFlightRequest.getCustomerName() != null && bookFlightRequest.getCustomerName().length() > 0) { request.put("CUSTOMER_NAME", bookFlightRequest.getCustomerName()); } } else { throw new Exception("No Customer Name"); } // Put request object into body of exchange message. exchange.getIn().setBody(request); }
2.81.13.4. returnFlightCustomerInfo
bean
returnFlightCustomerInfo
Bean は、前の SAP エンドポイントから受け取った exchange メソッドで、SAP レスポンスオブジェクトからデータを展開するロールを果たします。次のコードスニペットは、レスポンスオブジェクトからデータを抽出する一連の操作を示しています。
public void createFlightCustomerInfo(Exchange exchange) throws Exception { // Retrieve SAP response object from body of exchange message. Structure flightCustomerGetListResponse = exchange.getIn().getBody(Structure.class); if (flightCustomerGetListResponse == null) { throw new Exception("No Flight Customer Get List Response"); } // Check BAPI return parameter for errors @SuppressWarnings("unchecked") Table<Structure> bapiReturn = flightCustomerGetListResponse.get("RETURN", Table.class); Structure bapiReturnEntry = bapiReturn.get(0); if (bapiReturnEntry.get("TYPE", String.class) != "S") { String message = bapiReturnEntry.get("MESSAGE", String.class); throw new Exception("BAPI call failed: " + message); } // Get customer list table from response object. @SuppressWarnings("unchecked") Table<? extends Structure> customerList = flightCustomerGetListResponse.get("CUSTOMER_LIST", Table.class); if (customerList == null || customerList.size() == 0) { throw new Exception("No Customer Info."); } // Get Flight Customer data from first row of table. Structure customer = customerList.get(0); // Create bean to hold Flight Customer data. FlightCustomerInfo flightCustomerInfo = new FlightCustomerInfo(); // Get customer id from Flight Customer data and add to bean. String customerId = customer.get("CUSTOMERID", String.class); if (customerId != null) { flightCustomerInfo.setCustomerNumber(customerId); } ... // Put bean into body of exchange message. exchange.getIn().setHeader("flightCustomerInfo", flightCustomerInfo); }
2.81.14. 例 2: SAP へのデータの書き込み
この例は、SAP で FlightTrip
ビジネスオブジェクトインスタンスを作成するルートを示しています。ルートは、FlightTrip
BAPI メソッド BAPI_FLTRIP_CREATE
を呼び出し、宛先エンドポイントを使用してオブジェクトを作成します。
2.81.14.1. ルートの Java DSL
サンプルルートの Java DSL は次のとおりです。
from("direct:createFlightTrip") .to("bean:createFlightTripRequest") .to("sap-srfc-destination:nplDest:BAPI_FLTRIP_CREATE?transacted=true") .to("bean:returnFlightTripResponse");
2.81.14.2. ルートの XML DSL
また、同じルートの Spring DSL は次のとおりです。
<route> <from uri="direct:createFlightTrip"/> <to uri="bean:createFlightTripRequest"/> <to uri="sap-srfc-destination:nplDest:BAPI_FLTRIP_CREATE?transacted=true"/> <to uri="bean:returnFlightTripResponse"/> </route>
2.81.14.3. トランザクションサポート
SAP エンドポイントの URL では、transacted
オプションが true
に設定されていることに注意してください。このオプションを有効にすると、エンドポイントは、RFC 呼び出しを呼び出す前に SAP トランザクションセッションが開始されていることを確認します。このエンドポイントの RFC は SAP で新しいデータを作成するため、ルートの変更を SAP で永続的にするには、このオプションが必要です。
2.81.14.4. リクエストパラメーターの設定
createFlightTripRequest
および returnFlightTripResponse
Bean は、前の例で示したのと同じ一連の操作に従って、リクエストパラメーターを SAP リクエストに入力し、SAP レスポンスからレスポンスパラメーターをそれぞれ展開します。
2.81.15. 例 3: SAP からのリクエストの処理
この例では、SAP から BOOK_FLIGHT
RFC へのリクエストを処理するルートを示します。これは、ルートによって実装されます。さらに、JAXB を使用して SAP リクエストオブジェクトとレスポンスオブジェクトをカスタム Bean にアンマーシャリングおよびマーシャリングする、コンポーネントの XML シリアライゼーションサポートを示します。
このルートは、旅行代理店 FlightCustomer
に代わって FlightTrip
ビジネスオブジェクトを作成します。ルートは、最初に、SAP サーバーエンドポイントによって受信された SAP リクエストオブジェクトをカスタム JAXB Bean に非整列化します。次に、このカスタム Bean はエクスチェンジで 3 つのサブルートにマルチキャストされ、フライト旅行の作成に必要な旅行代理店、フライト接続、乗客情報が収集されます。最後のサブルートは、前の例で示したように、SAP でフライトトリップオブジェクトを作成します。最後のサブルートは、SAP レスポンスオブジェクトにマーシャリングされ、サーバーエンドポイントによって返されるカスタム JAXB Bean も作成して返します。
2.81.15.1. ルートの Java DSL
サンプルルートの Java DSL は次のとおりです。
DataFormat jaxb = new JaxbDataFormat("org.fusesource.sap.example.jaxb"); from("sap-srfc-server:nplserver:BOOK_FLIGHT") .unmarshal(jaxb) .multicast() .to("direct:getFlightConnectionInfo", "direct:getFlightCustomerInfo", "direct:getPassengerInfo") .end() .to("direct:createFlightTrip") .marshal(jaxb);
2.81.15.2. ルートの XML DSL
同じルートの XML DSL は次のとおりです。
<route> <from uri="sap-srfc-server:nplserver:BOOK_FLIGHT"/> <unmarshal> <jaxb contextPath="org.fusesource.sap.example.jaxb"/> </unmarshal> <multicast> <to uri="direct:getFlightConnectionInfo"/> <to uri="direct:getFlightCustomerInfo"/> <to uri="direct:getPassengerInfo"/> </multicast> <to uri="direct:createFlightTrip"/> <marshal> <jaxb contextPath="org.fusesource.sap.example.jaxb"/> </marshal> </route>
2.81.15.3. BookFlightRequest bean
次のリストは、シリアライズされた形式の SAP BOOK_FLIGHT
リクエストオブジェクトからアンマーシャリングする JAXB Bean を示しています。
@XmlRootElement(name="Request", namespace="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT") @XmlAccessorType(XmlAccessType.FIELD) public class BookFlightRequest { @XmlAttribute(name="CUSTNAME") private String customerName; @XmlAttribute(name="FLIGHTDATE") @XmlJavaTypeAdapter(DateAdapter.class) private Date flightDate; @XmlAttribute(name="TRAVELAGENCYNUMBER") private String travelAgencyNumber; @XmlAttribute(name="DESTINATION_FROM") private String startAirportCode; @XmlAttribute(name="DESTINATION_TO") private String endAirportCode; @XmlAttribute(name="PASSFORM") private String passengerFormOfAddress; @XmlAttribute(name="PASSNAME") private String passengerName; @XmlAttribute(name="PASSBIRTH") @XmlJavaTypeAdapter(DateAdapter.class) private Date passengerDateOfBirth; @XmlAttribute(name="CLASS") private String flightClass; ... }
2.81.15.4. BookFlightResponse Bean
次のリストは、シリアライズされた形式の SAP BOOK_FLIGHT
レスポンスオブジェクトにマーシャリングする JAXB Bean を示しています。
@XmlRootElement(name="Response", namespace="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT") @XmlAccessorType(XmlAccessType.FIELD) public class BookFlightResponse { @XmlAttribute(name="TRIPNUMBER") private String tripNumber; @XmlAttribute(name="TICKET_PRICE") private BigDecimal ticketPrice; @XmlAttribute(name="TICKET_TAX") private BigDecimal ticketTax; @XmlAttribute(name="CURRENCY") private String currency; @XmlAttribute(name="PASSFORM") private String passengerFormOfAddress; @XmlAttribute(name="PASSNAME") private String passengerName; @XmlAttribute(name="PASSBIRTH") @XmlJavaTypeAdapter(DateAdapter.class) private Date passengerDateOfBirth; @XmlElement(name="FLTINFO") private FlightInfo flightInfo; @XmlElement(name="CONNINFO") private ConnectionInfoTable connectionInfo; ... }
レスポンスオブジェクトの複雑なパラメーターフィールドは、応答の子要素としてシリアル化されます。
2.81.15.5. FlightInfo ビーン
次のリストは、複雑な構造体パラメーター FLTINFO
のシリアル化された形式にマーシャリングする JAXB Bean を示しています。
@XmlRootElement(name="FLTINFO", namespace="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT") @XmlAccessorType(XmlAccessType.FIELD) public class FlightInfo { @XmlAttribute(name="FLIGHTTIME") private String flightTime; @XmlAttribute(name="CITYFROM") private String cityFrom; @XmlAttribute(name="DEPDATE") @XmlJavaTypeAdapter(DateAdapter.class) private Date departureDate; @XmlAttribute(name="DEPTIME") @XmlJavaTypeAdapter(DateAdapter.class) private Date departureTime; @XmlAttribute(name="CITYTO") private String cityTo; @XmlAttribute(name="ARRDATE") @XmlJavaTypeAdapter(DateAdapter.class) private Date arrivalDate; @XmlAttribute(name="ARRTIME") @XmlJavaTypeAdapter(DateAdapter.class) private Date arrivalTime; ... }
2.81.15.6. ConnectionInfoTable Bean
次のリストは、複雑なテーブルパラメーター CONNINFO
のシリアル化された形式にマーシャリングする JAXB Bean を示しています。JAXB Bean のルート要素タイプの名前は、接尾辞 _TABLE
が付いた行構造体タイプの名前に対応し、Bean には行要素のリストが含まれていることに注意してください。
@XmlRootElement(name="CONNINFO_TABLE", namespace="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT") @XmlAccessorType(XmlAccessType.FIELD) public class ConnectionInfoTable { @XmlElement(name="row") List<ConnectionInfo> rows; ... }
2.81.15.7. ConnectionInfo
bean
次のリストは、上記のテーブルの行要素のシリアル化された形式にマーシャリングする JAXB Bean を示しています。
@XmlRootElement(name="CONNINFO", namespace="http://sap.fusesource.org/rfc/nplServer/BOOK_FLIGHT") @XmlAccessorType(XmlAccessType.FIELD) public class ConnectionInfo { @XmlAttribute(name="CONNID") String connectionId; @XmlAttribute(name="AIRLINE") String airline; @XmlAttribute(name="PLANETYPE") String planeType; @XmlAttribute(name="CITYFROM") String cityFrom; @XmlAttribute(name="DEPDATE") @XmlJavaTypeAdapter(DateAdapter.class) Date departureDate; @XmlAttribute(name="DEPTIME") @XmlJavaTypeAdapter(DateAdapter.class) Date departureTime; @XmlAttribute(name="CITYTO") String cityTo; @XmlAttribute(name="ARRDATE") @XmlJavaTypeAdapter(DateAdapter.class) Date arrivalDate; @XmlAttribute(name="ARRTIME") @XmlJavaTypeAdapter(DateAdapter.class) Date arrivalTime; ... }
2.82. XQuery
XQuery および Saxon を使用して XML ペイロードをクエリーまたは変換します。
2.82.1. 含まれるもの
-
XQuery コンポーネント、URI 構文:
xquery:resourceUri
- XQuery 言語
使用方法と設定の詳細については、上記リンクを参照してください。
2.82.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-saxon</artifactId> </dependency>
2.82.3. 追加の Camel Quarkus 設定
このコンポーネントは、クラスパスから XQuery 定義をロードできます。ネイティブモードでも機能させるには、quarkus.native.resources.includes
プロパティーを使用して、クエリーをネイティブ実行可能ファイルに明示的に埋め込む必要があります。
たとえば、以下の 2 つのルートは、それぞれ myxquery.txt
および another-xquery.txt
という名前の 2 つのクラスパスリソースから XQuery スクリプトをロードします。
from("direct:start").transform().xquery("resource:classpath:myxquery.txt", String.class); from("direct:start").to("xquery:another-xquery.txt");
これら (.txt
ファイルに保存されている可能性のある他のクエリー) をネイティブイメージに含めるには、application.properties
ファイルに次のようなものを追加する必要があります。
quarkus.native.resources.includes = *.txt
2.83. Scheduler
java.util.concurrent.ScheduledExecutorService を使用して、指定された間隔でメッセージを生成します。
2.83.1. 含まれるもの
-
Scheduler コンポーネント、URI 構文:
scheduler:name
使用方法と設定の詳細は、上記リンクを参照してください。
2.83.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-scheduler</artifactId> </dependency>
2.84. SEDA
同じ JVM の Camel コンテキストから別のエンドポイントを非同期に呼び出します。
2.84.1. 含まれるもの
-
SEDA コンポーネント、URI 構文:
seda:name
使用方法と設定の詳細は、上記リンクを参照してください。
2.84.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-seda</artifactId> </dependency>
2.85. Slack
Slack との間でメッセージを送受信します。
2.85.1. 含まれるもの
-
Slack コンポーネント、URI 構文:
slack:channel
使用方法と設定の詳細は、上記リンクを参照してください。
2.85.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-slack</artifactId> </dependency>
2.85.3. ネイティブモードの SSL
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true
を application.properties
に追加する必要はありません。Quarkus SSL ガイド も参照してください。
2.86. SNMP
トラップを受信し、SNMP (Simple Network Management Protocol) 対応デバイスをポーリングします。
2.86.1. 含まれるもの
-
SNMP コンポーネント、URI 構文:
snmp:host:port
使用方法と設定の詳細は、上記リンクを参照してください。
2.86.2. Maven コーディネート
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-snmp</artifactId> </dependency>
2.87. SOAP dataformat
Java オブジェクトを SOAP メッセージにマーシャリングし、その逆も行います。
2.87.1. 含まれるもの
使用方法と設定の詳細は、上記リンクを参照してください。
2.87.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-soap</artifactId> </dependency>
2.88. Splunk
Splunk でイベントを公開または検索します。
2.88.1. 含まれるもの
-
Splunk コンポーネント、URI 構文:
splunk:name
使用方法と設定の詳細は、上記リンクを参照してください。
2.88.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-splunk</artifactId> </dependency>
2.88.3. ネイティブモードの SSL
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true
を application.properties
に追加する必要はありません。Quarkus SSL ガイド も参照してください。
2.89. SQL
SQL クエリーを実行します。
2.89.1. 含まれるもの
-
SQL コンポーネント、URI 構文:
sql:query
-
SQL Stored Procedure コンポーネント、URI 構文:
sql-stored:template
使用方法と設定の詳細については、上記リンクを参照してください。
2.89.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-sql</artifactId> </dependency>
2.89.3. 追加の Camel Quarkus 設定
2.89.3.1. データソースの設定
このエクステンションは、DataSource
のサポートに Quarkus Agroal を活用します。DataSource
の設定は、設定プロパティーを介して実行できます。
quarkus.datasource.db-kind=postgresql quarkus.datasource.username=your-username quarkus.datasource.password=your-password quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/your-database quarkus.datasource.jdbc.max-size=16
Camel SQL コンポーネントは、レジストリーから DataSource
Bean を自動的に解決します。複数のデータソースを設定する場合、URI オプション datasource
または dataSourceRef
を使用して、SQL エンドポイントで使用するデータソースを指定できます。詳細については、SQL コンポーネントのドキュメントを参照してください。
2.89.3.1.1. Quarkus Dev Services によるゼロ設定
開発モードとテストモードでは、Configuration Free Databases を利用できます。Camel SQL コンポーネントは、選択した JDBC ドライバータイプに一致するデータベースのローカルコンテナー化インスタンスを指す DataSource
を使用するように自動的に設定されます。
2.89.3.2. SQL スクリプト
クラスパスからスクリプトファイルを参照するために sql
または sql-stored
エンドポイントを設定する場合は、以下の設定プロパティーを設定して、それらがネイティブモードで利用できるようにします。
quarkus.native.resources.includes = queries.sql, sql/*.sql
2.89.3.3. ネイティブモードでの SQL 集約リポジトリー
ネイティブモードで JdbcAggregationRepository
などの SQL 集約リポジトリーを使用するには、ネイティブのシリアライズサポートを有効化 する必要があります。
さらに、エクスチェンジボディがカスタムタイプである場合、クラス宣言に @RegisterForReflection(serialization = true)
のアノテーションを付けてシリアライズ用に登録する必要があります。
2.90. Telegram
Telegram Bot API として動作するメッセージを送受信します。
2.90.1. 含まれるもの
-
Telegram コンポーネント、URI 構文:
telegram:type
使用方法と設定の詳細は、上記リンクを参照してください。
2.90.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-telegram</artifactId> </dependency>
2.90.3. 使用方法
2.90.4. Webhook モード
Telegram エクステンションは、Webhook モードでの使用をサポートしています。
webhook モードを有効化するには、アプリケーションに REST 実装を追加する必要があります。たとえば、Maven ユーザーは、pom.xml
ファイルに camel-quarkus-rest エクステンションを追加できます。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-rest</artifactId> </dependency>
2.90.5. ネイティブモードの SSL
このエクステンションは、ネイティブモードでの SSL サポートを自動的に有効にします。したがって、自分で quarkus.ssl.native=true
を application.properties
に追加する必要はありません。Quarkus SSL ガイド も参照してください。
2.91. タイマー
java.util.Timer を使用して、指定された間隔でメッセージを生成します。
2.91.1. 含まれるもの
-
Timer コンポーネント、URI 構文:
timer:timerName
使用方法と設定の詳細は、上記リンクを参照してください。
2.91.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-timer</artifactId> </dependency>
2.92. Validator
XML スキーマと JAXP 検証を使用してペイロードを検証します。
2.92.1. 含まれるもの
-
Validator コンポーネント、URI 構文:
validator:resourceUri
使用方法と設定の詳細は、上記リンクを参照してください。
2.92.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-validator</artifactId> </dependency>
2.93. Velocity
Velocity テンプレートを使用してメッセージを変換します。
2.93.1. 含まれるもの
-
Velocity コンポーネント、URI 構文:
velocity:resourceUri
使用方法と設定の詳細は、上記リンクを参照してください。
2.93.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-velocity</artifactId> </dependency>
2.93.3. 使用方法
2.93.3.1. ネイティブモードのドメインオブジェクトとしてのカスタムボディ
カスタムオブジェクトをメッセージ本文として使用し、ネイティブモードのテンプレートでそのプロパティーを参照する場合、すべてのクラスをリフレクション用に登録する必要があります (ドキュメント を参照)。
以下に例を示します。
@RegisterForReflection public interface CustomBody { }
2.93.4. ネイティブモードの allowContextMapAll オプション
allowContextMapAll
オプションはネイティブモードではサポートされていません。これは、CamelContext
や Exchange
などのセキュリティーに敏感な Camel コアクラスへのリフレクティブアクセスが必要なためです。これはセキュリティーリスクとみなされるため、この機能へのアクセスはデフォルトでは提供されません。
2.93.5. 追加の Camel Quarkus 設定
通常、このコンポーネントはクラスパスから Velocity テンプレートをロードします。ネイティブモードでも機能させるには、quarkus.native.resources.includes
プロパティーを使用して、テンプレートをネイティブ実行可能ファイルに明示的に埋め込む必要があります。
たとえば、以下のルートは、template/simple.vm
という名前のクラスパスリソースから Velocity テンプレートをロードします。
from("direct:start").to("velocity://template/simple.vm");
これ (template
ディレクトリーの .vm
ファイルに保存されている可能性のある他のテンプレート) をネイティブイメージに含めるには、次のようなものを application.properties
ファイルに追加する必要があります。
quarkus.native.resources.includes = template/*.vm
2.94. Vert.x HTTP クライアント
Vert.x による Camel HTTP クライアントのサポート
2.94.1. 含まれるもの
-
Vert.x HTTP Client コンポーネント、URI 構文:
vertx-http:httpUri
使用方法と設定の詳細は、上記リンクを参照してください。
2.94.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-vertx-http</artifactId> </dependency>
2.94.3. ネイティブモードの transferException オプション
ネイティブモードで transferException
オプションを使用するには、オブジェクトのシリアル化のサポートを有効にする必要があります。詳細は、ネイティブモードのユーザーガイド を参照してください。
また、シリアル化する予定の例外クラスのシリアル化を有効にする必要があります。以下に例を示します。
@RegisterForReflection(targets = { IllegalStateException.class, MyCustomException.class }, serialization = true)
2.94.4. 追加の Camel Quarkus 設定
2.94.5. ネイティブモードの allowJavaSerializedObject オプション
ネイティブモードで allowJavaSerializedObject
オプションを使用する場合、シリアル化のサポートを有効にする必要がある場合があります。詳細は、ネイティブモードのユーザーガイド を参照してください。
2.94.5.1. 文字エンコーディング
アプリケーションがデフォルト以外のエンコーディングを使用してリクエストを送受信することが予想される場合は、ネイティブモードガイドの 文字エンコーディング のセクションを確認してください。
2.95. Vert.x WebSocket
このエクステンションを使用すると、WebSocket サーバーとして、または既存の WebSocket に接続するクライアントとして機能する WebSocket エンドポイントを作成できます。
これは、quarkus-vertx-http
エクステンションによって提供される Eclipse Vert.x HTTP サーバー上にビルドされます。
2.95.1. 含まれるもの
-
Vert.x WebSocket コンポーネント、URI 構文:
vertx-websocket:host:port/path
使用方法と設定の詳細は、上記リンクを参照してください。
2.95.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-vertx-websocket</artifactId> </dependency>
2.95.3. 使用方法
2.95.3.1. Vert.x WebSocket コンシューマー
Vert.x WebSocket コンシューマーを (from ("vertx-websocket")
などを使用して) 作成する場合 、WebSocket は常に Quarkus HTTP サーバー上でホストされるため、URI 内のホストとポートの設定が冗長になります。
コンシューマーの設定は、簡素化して WebSocket のリソースパスだけを含めることができます。例:
from("vertx-websocket:/my-websocket-path") .setBody().constant("Hello World");
vertx-websocket コンシューマーでホスト/ポートを明示的に設定する必要はありません。設定する場合、ホストとポートが、quarkus.http.host
および quarkus.http.port
の Quarkus HTTP サーバー設定値の値と正確に一致する必要があります。一致しないと、実行時に例外が出力されます。
2.95.3.2. Vert.x WebSocket プロデューサー
上記と同様に、内部 Vert.x WebSocket コンシューマーへのメッセージを生成する場合は、エンドポイント URI からホストとポートを省略できます。
from("vertx-websocket:/my-websocket-path") .log("Got body: ${body}"); from("direct:sendToWebSocket") .log("vertx-websocket:/my-websocket-path");
あるいは、Quarkus HTTP サーバーのホストとポートの完全な設定を参照することもできます。
from("direct:sendToWebSocket") .log("vertx-websocket:{{quarkus.http.host}}:{{quarkus.http.port}}/my-websocket-path");
外部 WebSocket サーバーへのメッセージを生成する場合は、常にホスト名とポート (必要な場合) を指定する必要があります。
2.95.4. 追加の Camel Quarkus 設定
2.95.4.1. Vert.x WebSocket サーバーの設定
Vert.x WebSocket サーバーの設定は Quarkus によって管理されます。設定オプションの完全なリストについては、Quarkus HTTP 設定ガイド を参照してください。
Vert.x WebSocket サーバーの SSL を設定するには、SSL によるセキュアな接続に関するガイド に従ってください。SSLContextParameters
を使用した SSL 用のサーバーの設定は現在サポートされていないことに注意してください。
2.95.4.2. 文字エンコーディング
アプリケーションがデフォルト以外のエンコーディングを使用してリクエストを送受信することが想定される場合は、ネイティブモードガイドの 文字エンコーディング のセクションを確認してください。
2.96. XML IO DSL
XML ルート定義を解析するための XML スタック
2.96.1. 含まれるもの
使用方法と設定の詳細は、上記リンクを参照してください。
2.96.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-xml-io-dsl</artifactId> </dependency>
2.96.3. 追加の Camel Quarkus 設定
2.96.3.1. XML ファイルのエンコーディング
デフォルトでは、一部の XML ファイルエンコーディングはそのままではネイティブモードで機能しない場合があります。修正方法は、文字エンコーディング のセクションを確認してください。
2.97. XML JAXP
XML JAXP タイプコンバーターおよびパーサー
2.97.1. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-xml-jaxp</artifactId> </dependency>
2.98. XPath
XML ペイロードに対して XPath 式を評価します。
2.98.1. 含まれるもの
使用方法と設定の詳細は、上記リンクを参照してください。
2.98.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-xpath</artifactId> </dependency>
2.98.3. 追加の Camel Quarkus 設定
このコンポーネントは、クラスパスリソースから xpath 式をロードできます。ネイティブモードでも機能させるには、quarkus.native.resources.includes
プロパティーを使用して、式ファイルをネイティブ実行可能ファイルに明示的に埋め込む必要があります。
たとえば、以下のルートは、myxpath.txt
という名前のクラスパスリソースから XPath 表現を読み込みます。
from("direct:start").transform().xpath("resource:classpath:myxpath.txt");
これら (.txt
ファイルに保存されている可能性のある他の式) をネイティブイメージに含めるには、application.properties
ファイルに次のようなものを追加する必要があります。
quarkus.native.resources.includes = *.txt
2.99. XSLT Saxon
Saxon を使用した XSLT テンプレートを使用して XML ペイロードを変換します。
2.99.1. 含まれるもの
-
XSLT Saxon コンポーネント、URI 構文:
xslt-saxon:resourceUri
使用方法と設定の詳細は、上記リンクを参照してください。
2.99.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-xslt-saxon</artifactId> </dependency>
2.100. XSLT
XSLT テンプレートを使用して XML ペイロードを変換します。
2.100.1. 含まれるもの
-
XSLT コンポーネント、URI 構文:
xslt:resourceUri
使用方法と設定の詳細は、上記リンクを参照してください。
2.100.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-xslt</artifactId> </dependency>
2.100.3. 追加の Camel Quarkus 設定
XSLT 処理を最適化するには、ビルド時に XSLT テンプレートの場所をエクステンションが認識している必要があります。XSLT ソース URI は、quarkus.camel.xslt.sources
プロパティーを介して渡す必要があります。複数の URI はコンマで区切ることができます。
quarkus.camel.xslt.sources = transform.xsl, classpath:path/to/my/file.xsl
スキームのない URI は classpath:
URI として解釈されます。
classpath:
のみ: URI は Quarkus ネイティブモードでサポートされます。file:
、http:
、およびその他の種類の URI は、JVM モードでのみ使用できます。
<xsl:include>
および <xsl:messaging>
XSLT 要素も、現在 JVM モードでのみサポートされています。
aggregate
DSL を使用する場合は、次のように XsltSaxonAggregationStrategy
を使用する必要があります。
from("file:src/test/resources?noop=true&sortBy=file:name&antInclude=*.xml") .routeId("aggregate").noAutoStartup() .aggregate(new XsltSaxonAggregationStrategy("xslt/aggregate.xsl")) .constant(true) .completionFromBatchConsumer() .log("after aggregate body: ${body}") .to("mock:transformed");
また、JVM モードでのみサポートされています。
2.100.3.1. 設定
TransformerFactory 機能は、次のプロパティーを使用して設定できます。
quarkus.camel.xslt.features."http\://javax.xml.XMLConstants/feature/secure-processing"=false
2.100.3.2. エクステンション機能のサポート
Xalan のエクステンション機能 は、次の場合にのみ正しく機能します。
- 安全な処理が無効になっています
- 関数は別の jar で定義されています
- 関数は、ネイティブビルドフェーズ中に拡張されます。たとえば、リフレクション用に登録できます。
@RegisterForReflection(targets = { my.Functions.class }) public class FunctionsConfiguration { }
XSLT ソース URI のコンテンツは、ビルド時に解析され、Java クラスにコンパイルされます。これらの Java クラスは、実行時の XSLT 情報の唯一のソースです。XSLT ソースファイルは、アプリケーションアーカイブにまったく含まれていない場合があります。
設定プロパティー | タイプ | デフォルト |
---|---|---|
コンパイルするテンプレートのコンマ区切りリスト。 |
| |
生成されたクラスのパッケージ名。 |
|
|
TransformerFactory の機能。 |
|
{doc-link-icon-lock}[title=Fixed at build time] 設定プロパティーはビルド時に修正されました。その他の設定プロパティーはすべて、ランタイム時にオーバーライドが可能です。
2.101. YAML DSL
YAML ルート定義を解析するための YAML スタック
2.101.1. 含まれるもの
使用方法と設定の詳細は、上記リンクを参照してください。
2.101.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-yaml-dsl</artifactId> </dependency>
2.101.3. 使用方法
2.101.3.1. ネイティブモード
以下の構造を Camel YAML DSL マークアップ内で定義する場合は、リフレクション用のクラスを登録する必要があります。詳細は、ネイティブモード のガイドを参照してください。
2.101.3.1.1. Bean 定義
YAML DSL は、次のように Bean を定義する機能を提供します。
- beans: - name: "greetingBean" type: "org.acme.GreetingBean" properties: greeting: "Hello World!" - route: id: "my-yaml-route" from: uri: "timer:from-yaml?period=1000" steps: - to: "bean:greetingBean"
この例では、GreetingBean
クラスをリフレクション用に登録する必要があります。これは、YAML ルートの beans
キーで参照するすべての型に適用されます。
@RegisterForReflection public class GreetingBean { }
2.101.3.1.2. 例外処理
Camel は、例外を処理するさまざまな方法を提供します。これらの一部では、DSL 定義で参照されている例外クラスがリフレクション用に登録されていることが必要です。
on-exception
- on-exception: handled: constant: "true" exception: - "org.acme.MyHandledException" steps: - transform: constant: "Sorry something went wrong"
@RegisterForReflection public class MyHandledException { }
throw-exception
- route: id: "my-yaml-route" from: uri: "direct:start" steps: - choice: when: - simple: "${body} == 'bad value'" steps: - throw-exception: exception-type: "org.acme.ForcedException" message: "Forced exception" otherwise: steps: - to: "log:end"
@RegisterForReflection public class ForcedException { }
do-catch
- route: id: "my-yaml-route2" from: uri: "direct:tryCatch" steps: - do-try: steps: - to: "direct:readFile" do-catch: - exception: - "java.io.FileNotFoundException" steps: - transform: constant: "do-catch caught an exception"
@RegisterForReflection(targets = FileNotFoundException.class) public class MyClass { }
2.102. Zip デフレート圧縮
java.util.zip.Deflater、java.util.zip.Inflater、または java.util.zip.GZIPStream を使用して、ストリームを圧縮および解凍します。
2.102.1. 含まれるもの
使用方法と設定の詳細については、上記リンクを参照してください。
2.102.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-zip-deflater</artifactId> </dependency>
2.103. Zip ファイル
java.util.zip.ZipStream を使用して、ストリームを圧縮および圧縮解除します。
2.103.1. 含まれるもの
使用方法と設定の詳細は、上記リンクを参照してください。
2.103.2. Maven コーディネート
code.quarkus.redhat.com でこのエクステンションを使用して新しいプロジェクトの作成
または、既存のプロジェクトに座標を追加します。
<dependency> <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-zipfile</artifactId> </dependency>