Groovy はJava実行環境で動作するスクリプト言語のひとつです。
Groovy の紹介については @IT にコラム 「@IT:Groovyに触ってみよう」 があります。


この Groovy を BkJava に組み込んで、Groovy から Becky!プラグインAPIを使用することができるようにする方法をご紹介します。これにより、Becky! へのスクリプトアクセスが可能になります。

BkGroovyアドイン のダウンロード

まず、こちら から BkGroovyアドイン をダウンロードします。
BkGroovyアドインは Becky! で Groovy を動作可能にする BkJava のアドインです。

Groovy のダウンロード

Groovyのホームページ から、Groovy をダウンロードします。

現状の最新版は、groovy-1.0-jsr-02.zip でした。
このファイルを展開したフォルダ配下に embeddable フォルダがありますが、
この中にある groovy-all-1.0-jsr-02.jar を BkJava.ini のクラスパス設定に追加します。


以下のようになります。
(見やすくするため、改行が入っていますが、実際は各エントリは一行に記述してください)

jvm.option.count=4
jvm.option.0=-Djava.compiler=NONE
jvm.option.1=-Djava.class.path=C:\Program Files\RimArts\B2\PlugIns\BkJava\classes;
C:\Program Files\RimArts\B2\PlugIns\BkJava\lib\bkjava.jar;
C:\Program Files\RimArts\B2\PlugIns\BkJava\lib\groovy-all-1.0-jsr-02.jar
jvm.option.2=-Djava.library.path=C:\Program Files\RimArts\B2\PlugIns\BkJava\lib
jvm.option.3=-Djava.util.logging.config.file=C:\Program Files\RimArts\B2
\Plugins\BkJava\conf\logging.properties
jvm.option.4=
jvm.option.5=

config.xml の編集

Groovy のファイルを置く場所を BkJava/conf フォルダの config.xml に設定します。

"lib" パラメーターの値(value属性) には、動的に読み込みたい jar ファイルを置くパスを設定します。
ここに置いた jar ファイルにあるクラスは BkJava.ini ファイルのクラスパス設定に追加しなくても、Groovyファイルから使用することができます。

"groovy" パラメーターの値(value属性) には、Groovy ファイルを置くパスを指定します。
この直下に置かれた BkEventHandler を実装した Groovyファイルは、Becky!プラグインとして動作します。(ファイルは複数配置することが可能です。)

<?xml version="1.0" encoding="Shift_JIS" ?>
<config>
<event_handler>
<!--
 factory 要素:
     class属性:BkEventHandlerFactoryを実装するクラスを指定します。
-->
<factory class="org.becky.bkj.groovy.BkGroovyFactory">
<param name="lib" value="C:\Program Files\RimArts\B2\PlugIns\BkJava\lib" />
<param name="groovy" value="C:\Program Files\RimArts\B2\PlugIns\BkJava\groovy" />
</factory>
</event_handler>
</config>

groovy ファイルを作成する

上で指定したフォルダに BkEventHandler を実装した Groovyファイル を作成します。
ここでは、以下のような GroovyTest01.groovy を作成しました。

import org.becky.bkj.*
import java.util.logging.Logger

class GroovyTest01 extends BkEventAdapter
{
    void start()
    {
        Logger.global.info("GroovyTest01 を開始します。")
    }

    int exit()
    {
        Logger.global.info("GroovyTest01 を終了します。")
        return 0
    }

    void finishRetrieve(int number)
    {
        Logger.global.info(number + "件 受信しました。")
    }
}

動かしてみる

Becky! を起動して、メールを受信後、終了すると、以下のようなログが見れます。

2005/07/16 0:19:22 gjdk.java.util.logging.Logger_GroovyReflector invoke
情報: GroovyTest01 を開始します。
2005/07/16 0:19:28 gjdk.java.util.logging.Logger_GroovyReflector invoke
情報: 0件 受信しました。
2005/07/16 0:20:36 gjdk.java.util.logging.Logger_GroovyReflector invoke
情報: GroovyTest01 を終了します。