JRuby を使って Salesforce のデータを操作する:CData JDBC Driver

こんにちは。CData Software Japan リードエンジニアの杉本です。

最近 JRuby というJVM上で動かすことができる Rubyインタプリタ の Java実装を知りました。

https://www.jruby.org/

以下のWikiでも書かれている通り、JRuby は Javaプラットフォームのクラスを参照して、利用することが可能になっています。面白いですね。

ja.wikipedia.org

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

f:id:sugimomoto:20200703155114p:plain

環境変数で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/

f:id:sugimomoto:20200116122206p:plain

ダウンロード後、exeファイルを実行し、セットアップを進めます。

f:id:sugimomoto:20200116122213p:plain

インストール完了後「C:\Program Files\CData\CData JDBC Driver for Salesforce 2019J\lib」にDriver本体であるjarファイルが生成されます。

f:id:sugimomoto:20200703155121p:plain

JRuby で CData JDBC Driver へアクセスする

まずシンプルなプログラムでアクセスしてみたいと思います。JRubyはJavaのクラスやメソッドをそのまま呼び出せるので、CData JDBC Driverのヘルプに書かれているコードを参考に実装することができます。

http://cdn.cdata.com/help/RFE/jp/jdbc/pg_JDBCqueries.htm

単純にAccount一覧を取得するプログラムを書いてみました。

gist.github.com

実行すると、以下のように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と同様のアプローチで実行できます。

gist.github.com

以下のような結果を得ることができました。問題なくJavaからの実行と同等の機能が得られています。

> jruby -S SampleCodeForSalesforce.rb



                                
                                

                                

                                

トライアル・お問い合わせ

関連コンテンツ