Apache Camel を使用してOutlook のデータと連携
Apache Camel は、データを消費または生成するさまざまなシステムを統合できる、オープンソースの統合フレームワークです。CData JDBC Driver for API と組み合わせることで、リアルタイムOutlook のデータと連携するCamel ルートを使用するJava アプリを作成できます。この記事では、Outlook のデータをJSON ファイルに接続、クエリ、及びルーティングするアプリをNetBeans で作成する方法について説明します。
ビルトインの最適化されたデータ処理により、CData JDBC Driver は、リアルタイムOutlook のデータとやり取りする際に比類のないパフォーマンスを提供します。Outlook に複雑なSQL クエリを発行すると、ドライバーはフィルタや集計などのサポートされているSQL 操作をOutlook に直接プッシュし、組み込まれたSQL エンジンを利用してサポートされていない操作(主にSQL 関数とJOIN 操作)をクライアント側で処理します。組み込みの動的メタデータクエリを使用すると、ネイティブデータソース型を使用してOutlook のデータを操作および分析することができます。
新しいMaven/Java プロジェクトを作成する
以下の手順に従って、新しいJava プロジェクトを作成し、適切な依存関係を追加します。
- NetBeans を開き、新しいプロジェクトを作成します。
- カテゴリリストからMaven を選択し、プロジェクトリストからJava Application を選択して、「Next」をクエリします。
- プロジェクトに名前を付け、他のプロパティを調整して「Finish」をクリックします。
- ソースパッケージで新しいJava クラス(ここではApp.java を使用)を作成し、クラスにmain メソッドを追加します。
プロジェクトの依存関係を追加する
プロジェクトが作成されたら、アプリからリアルタイムOutlook のデータを操作するために必要な依存関係を追加できるようになります。まだMaven を環境にインストールしていない場合、CData JDBC ドライバのJAR ファイルをプロジェクトに追加するのに必要なため、インストールしてください。
Maven を使用してCData JDBC Driver for API をインストールする
- Outlook 用のCData JDBC Driver をダウンロードしてパッケージを解凍し、JAR を実行してドライバーをインストールします。
- Maven を使用し、コネクタとしてJDBC Driver をインストールします。
mvn install:install-file -Dfile="C:\Program Files\CData\CData JDBC Driver for API 2019\lib\cdata.jdbc.api.jar" -DgroupId="org.cdata.connectors" -DartifactId="cdata-api-connector" -Dversion="19" -Dpackaging=jar
JDBC Driver をインストールしたら、プロジェクトに依存関係を追加できます。依存関係を追加するには、pom.xml を編集するか、依存関係にあるフォルダを右クリックして「Add Dependency」をクリックします。各依存関係のプロパティは以下の通りですが、「Add Dependency」ウィザードの「Query」ボックスに依存関係の名前を入力することで使用可能なライブラリを検索できます。
必要な依存関係
| Dependency | Group ID | Artifact ID | Version |
|---|---|---|---|
| camel-core | org.apache.camel | camel-core | 3.0.0 |
| camel-jackson | org.apache.camel | camel-jackson | 3.0.0 |
| camel-jdbc | org.apache.camel | camel-jdbc | 3.0.0 |
| camel-jsonpath | org.apache.camel | camel-jsonpath | 3.0.0 |
| cdata-api-connector | org.cdata.connectors | cdata-salesforce-connector | 19 |
| commons-dbcp2 | org.apache.commons | commons-dbcp2 | 2.7.0 |
| slf4j-log4j12 | org.slf4j | slf4j-log4j12 | 1.7.30 |
| log4j | org.apache.logging.log4j | log4j | 2.12.1 |
Camel を使用してJava アプリでOutlook のデータにアクセスする
必要な依存関係を追加したら、Java DSL(Domain Specific Language)を使用してリアルタイムOutlook のデータにアクセスできるルートを作成できます。以下はコードの一部です。サンプルプロジェクト(zip ファイル)をダウンロードして以下を実行してください。(TODO コメントに注意してください。)
必要なクラスをメインクラスにインポートすることから始めます。
import org.apache.camel.CamelContext; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.support.SimpleRegistry; import org.apache.commons.dbcp2.BasicDataSource; import org.apache.log4j.BasicConfigurator;
次に、main メソッドでロギングを構成し、新しいBasicDataSource を作成してレジストリに追加し、新しいCamelContext を作成して、最後にコンテクストへのルートに追加します。この例では、Outlook のデータをJSON ファイルにルーティングします。
ロギングを構成する
BasicConfigurator.configure();
BasicDataSource を作成する
BasicDataSource を作成し、ドライバークラス名(cdata.jdbc.salesforce.SalesforceDriver)とURL(必要な接続プロパティを使用)を設定します。
OAuth 認証の設定
Microsoft Graph API は認証に OAuth 2.0 を使用します。OAuth 認証情報(Client ID と Client Secret)を取得するには、Microsoft Azure Portal でアプリケーションを登録する必要があります。
OAuth 認証情報の取得
- Azure Portal にログインします。
- Azure Active Directory > App registrations に移動します。
- New registration をクリックして新しいアプリケーションを作成します。
- アプリケーション名を入力し、適切なアカウントの種類を選択します。
- Redirect URI をアプリケーションのコールバック URL に設定します(デスクトップアプリの場合は http://localhost:33333 など)。
- Register をクリックしてアプリケーションを作成します。
- アプリケーションの概要ページで Application (client) ID をコピーします。これが OAuthClientId になります。
- Certificates & secrets に移動して、新しいクライアントシークレットを作成します。
- クライアントシークレットの値をコピーします。これが OAuthClientSecret になります。
- API permissions に移動して、必要な Microsoft Graph API の権限を追加します:
- Mail.Read - メールメッセージへのアクセス用
- Contacts.Read - 連絡先へのアクセス用
- Calendars.Read - カレンダーイベントへのアクセス用
- Tasks.Read - To Do タスクへのアクセス用
- offline_access - リフレッシュトークンの取得用
- Grant admin consent をクリックして、これらの権限を付与します。
OAuth での接続
以下の接続プロパティを設定して接続を確立してください:
- AuthScheme:OAuth に設定します。
- InitiateOAuth:GETANDREFRESH に設定します。CData API Profile for Outlook が OAuth プロセスを自動的に進め、アクセストークンを取得します。
- OAuthClientId:Azure Portal の Application (client) ID に設定します。
- OAuthClientSecret:Azure Portal のクライアントシークレットの値に設定します。
- TenantId:Azure AD のテナント識別子(GUID または 'contoso.onmicrosoft.com' のようなドメイン名)に設定します。
- CallbackURL:アプリ登録で指定したリダイレクト URI に設定します(デスクトップアプリの場合は http://localhost:33333 など)。
接続文字列の例
Profile=C:\profiles\Outlook.apip;AuthScheme=OAuth;InitiateOAuth=GETANDREFRESH;OAuthClientId=your_client_id;OAuthClientSecret=your_client_secret;TenantId=your_tenant_id;CallbackUrl=http://localhost:33333;
BasicDataSource basic = new BasicDataSource();
basic.setDriverClassName("cdata.jdbc.api.APIDriver");
basic.setUrl("jdbc:api:Profile=C:\profiles\Outlook.apip;AuthScheme=OAuth;InitiateOAuth=GETANDREFRESH;OAuthClientId=your_client_id;OAuthClientSecret=your_client_secret;TenantId=your_tenant_id;CallbackUrl=http://localhost:33333;");
CData JDBC ドライバには、接続URL の構成に役立つ組み込みの接続文字列デザイナーが含まれています。
組み込みの接続文字列デザイナ
JDBC URL の構築については、Outlook JDBC Driver に組み込まれている接続文字列デザイナーを使用してください。JAR ファイルをダブルクリックするか、コマンドラインからjar ファイルを実行します。
java -jar cdata.jdbc.api.jar
接続プロパティを入力し、接続文字列をクリップボードにコピーします。
BasicDataSource をレジストリに追加し、CamelContext を作成する
SimpleRegistry reg = new SimpleRegistry();
reg.bind("myDataSource", basic);
CamelContext context = new DefaultCamelContext(reg);
CamelContext にルーティングを追加する
以下のルーティングでは、timer コンポーネントを使用して一度実行し、SQL クエリをJDBC Driver に渡します。結果はJSON として整理され、(きれいに印刷できるようにフォーマットされて)file コンポーネントに渡され、JSON ファイルとしてディスクに書き込まれます。
context.addRoutes(new RouteBuilder() {
@Override
public void configure() {
from("timer://foo?repeatCount=1")
.setBody(constant("SELECT * FROM Account LIMIT 10"))
.to("jdbc:myDataSource")
.marshal().json(true)
.to("file:C:\\Users\\USER\\Documents?fileName=account.json");
}
});
CamelContext ライフサイクルを管理する
ルートを定義したら、CamelContext を開始してライフサイクルを始めます。この例では、10 秒待機してからコンテクストをシャットダウンします。
context.start(); Thread.sleep(10000); context.stop();
無償トライアル、サンプルプロジェクト、テクニカルサポート
これで、Camel を使用してOutlook からJSON ファイルにデータをルーティングするJava アプリケーションを使用できるようになりました。CData JDBC Driver for API の30日の無償評価版と、サンプルプロジェクトをダウンロードして(TODO コメントに注意して)、Apache Camel でリアルタイムOutlook のデータの操作を開始します。ご不明な点があれば、サポートチームにお問い合わせください。