こんにちは。CData Software Japan リードエンジニアの杉本です。
最近 JRuby というJVM上で動かすことができる Rubyインタプリタ の Java実装を知りました。
以下のWikiでも書かれている通り、JRuby は Javaプラットフォームのクラスを参照して、利用することが可能になっています。面白いですね。
include Java frame = javax.swing.JFrame.new() frame.getContentPane().add(javax.swing.JLabel.new('Hello, World!')) frame.setDefaultCloseOperation(javax.swing.JFrame::EXIT_ON_CLOSE) frame.pack() frame.set_visible(true)
そこで今回はJRuby から CData JDBC Driver を使って、Salesforceに接続するというのをやってみました。
手順
必要なもの
- JRuby
- CData Salesforce JDBC Driver
- Salesforce アカウント(トライアルの取得方法はこちらを参照)
今回は予めJDKがインストールしてあるWindowsマシンで試しています。
jRuby本体の入手
以下からJRuby本体を入手して、任意のフォルダに展開しました。
https://www.jruby.org/download
環境変数でPathを通して実行できる状態にしておきます。
> jruby -version > jruby 9.1.17.0 (2.3.3) 2018-04-20 d8b1ff9 OpenJDK 64-Bit Server VM 11.0.1+13 on 11.0.1+13 +jit ```
Salesforce JDBC Driver のインストール
続いて、CData Salesforce JDBC Driver をインストールします。トライアルは以下のURLから入手できます。
https://www.cdata.com/jp/drivers/salesforce/jdbc/
ダウンロード後、exeファイルを実行し、セットアップを進めます。
インストール完了後「C:\Program Files\CData\CData JDBC Driver for Salesforce 2019J\lib」にDriver本体であるjarファイルが生成されます。
JRuby で CData JDBC Driver へアクセスする
まずシンプルなプログラムでアクセスしてみたいと思います。JRubyはJavaのクラスやメソッドをそのまま呼び出せるので、CData JDBC Driverのヘルプに書かれているコードを参考に実装することができます。
http://cdn.cdata.com/help/RFE/jp/jdbc/pg_JDBCqueries.htm
単純にAccount一覧を取得するプログラムを書いてみました。
実行すると、以下のようにJDBC経由でデータを取得できました。
>jruby -S Sample.rb 0012x000009VGSvAAO GenePoint CDataUpdate 0012x000009VGStAAO United Oil & Gas, UK 0012x000009VGSuAAO United Oil & Gas, Singapore 0012x000009VGSlAAO Edge Communications 0012x000009VGSmAAO Burlington Textiles Corp of America 0012x000009VGSnAAO Pyramid Construction Inc. 0012x000009VGSoAAO Dickenson plc 0012x000009VGSpAAO Grand Hotels & Resorts Ltd 0012x000009VGSrAAO Express Logistics and Transport 0012x000009VGSsAAO University of Arizona 0012x000009VGSqAAO United Oil & Gas Corp. 0012x000009VGSwAAO sForce
システムテーブル参照・プリペアドステートメント・INSERT・UPDATE
JDBC Driverは各種テーブルやカラム情報を取得するためのシステムテーブルや、プリペアドステートメント・INSERT・UPDATEもサポートしています。
ざっといろんな機能を試したソースコードが以下の通りになります。
基本的にはJDBC実行の文法さえおさえておけば、Javaと同様のアプローチで実行できます。
以下のような結果を得ることができました。問題なくJavaからの実行と同等の機能が得られています。
> jruby -S SampleCodeForSalesforce.rb -----------Table List----------- CatalogName SchemaName TableName TableType Description CData Salesforce AcceptedEventRelation TABLE CData Salesforce Account TABLE CData Salesforce AccountCleanInfo TABLE CData Salesforce AccountContactRole TABLE CData Salesforce AccountFeed TABLE CData Salesforce AccountHistory TABLE CData Salesforce AccountPartner TABLE CData Salesforce AccountShare TABLE CData Salesforce ActionLinkGroupTemplate TABLE CData Salesforce ActionLinkTemplate TABLE -----------Table Column List----------- CatalogName SchemaName TableName ColumnName DataType CData Salesforce Account Id 12 CData Salesforce Account IsDeleted 16 CData Salesforce Account MasterRecordId 12 CData Salesforce Account Name 12 CData Salesforce Account Type 12 CData Salesforce Account ParentId 12 CData Salesforce Account BillingStreet 12 CData Salesforce Account BillingCity 12 CData Salesforce Account BillingState 12 CData Salesforce Account BillingPostalCode 12 -----------SELECT Records----------- Id Name AccountNumber 0012x000009VGSvAAO GenePoint CDataUpdate CC978213 0012x000009VGStAAO United Oil & Gas, UK CD355119-A 0012x000009VGSuAAO United Oil & Gas, Singapore CD355120-B 0012x000009VGSlAAO Edge Communications CD451796 0012x000009VGSmAAO Burlington Textiles Corp of America CD656092 0012x000009VGSnAAO Pyramid Construction Inc. CC213425 0012x000009VGSoAAO Dickenson plc CC634267 0012x000009VGSpAAO Update CD439877 0012x000009VGSrAAO Express Logistics and Transport CC947211 0012x000009VGSsAAO University of Arizona CD736025 -----------INSERT Record ----------- affect_count : 1 Id Name AccountNumber 0012x000008uVjSAAU Hello 0012x000009VGSvAAO GenePoint CDataUpdate CC978213 0012x000009VGStAAO United Oil & Gas, UK CD355119-A 0012x000009VGSuAAO United Oil & Gas, Singapore CD355120-B 0012x000009VGSlAAO Edge Communications CD451796 0012x000009VGSmAAO Burlington Textiles Corp of America CD656092 0012x000009VGSnAAO Pyramid Construction Inc. CC213425 0012x000009VGSoAAO Dickenson plc CC634267 0012x000009VGSpAAO Update CD439877 0012x000009VGSrAAO Express Logistics and Transport CC947211 -----------SELECT Records by PreparedStatement ----------- Id Name AccountNumber 0012x000009VGSpAAO Hello CD439877 -----------UPDATE Record ----------- affect_count : 1 Id Name AccountNumber 0012x000009VGSpAAO Update CD439877
おわりに
JRuby面白いですね。
CData では Salesforce 以外にも数多くの JDBC Driver を提供しています。
kintone や Sansan といった日本のクラウドサービスや JIRA、Gmail などKBやナレッジが非定形で蓄積されているようなデータソースにも対応しているので、エンタープライズ検索のデータとして活用できるのではないかなと思います。
https://www.cdata.com/jp/jdbc/
すべて30日間のトライアルがあるので、是非一度試してみてください。