perlにはplaggerというフレームワークがあって
データの収集、加工、出力をそれぞれモジュール形式でつくっておいて、
設定ファイルだけで、コーディングしなくても実用的なツールを組み立てることができます。

この簡易版でもいいから、Javaでも実現するには、モジュールとして、動的にJARファイルを読み込むことが基礎技術として必要となります。
そのあたりについて、サンプルコードをつくったので、メモとしてはりつけておきます。

public class PlugLoader {
public static void main(String[] args) {
//ロードするjarファイル
File file = new File("c:\\plugin\\MyJar.jar");
try {
//クラスローダの作成
URLClassLoader loader = URLClassLoader.newInstance(new URL[] { file.toURI().toURL() });

//指定したクラスをロード
Class c = loader.loadClass("jp.boy.java.MyJar");
System.out.println(c.getName());

//インスタンス
try {
IMyJar obj = (IMyJar)c.newInstance();
System.out.println(obj.method01("hello"));

} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}


} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
だいたいこんな感じで、クラスの作成、値の受け渡しを行った。
Rubyのインスタンス生成には時間がかかりすぎ(10秒)感があった。

足りないソースは
http://yamarou.at.infoseek.co.jp/javanawake/026.html
のクラスぐらいだが、自分でつくった分だけこのブログにのせとく

import org.jruby.Ruby;
import org.jruby.RubyInstanceConfig;
import org.jruby.runtime.builtin.IRubyObject;
import org.jruby.util.KCode;

public class MyRuby {
public static void main(String[] args) {
System.out.println("MyRuby start");
try {

RubyInstanceConfig config = new RubyInstanceConfig();
config.setOutput(System.out);
config.setError(System.out);

System.out.println("Ruby のインスタンス生成 start");
Ruby ruby = Ruby.newInstance(config);
config.getKCode().kcode(ruby);

System.out.println("Ruby のインスタンス生成 end");
//Ruby ruby = Ruby.newInstance();

ruby.setKCode(KCode.UTF8);
ruby.evalScriptlet("require \"kconv\"");
ruby.evalScriptlet("require \"base64\"");

//Javaと同じ標準出力をつかっているか確認するサンプル
ruby.evalScriptlet("print \"1\\n\"");

//アルファベットや漢字を表示できているか確認
ruby.evalScriptlet("print \"Hello World.\\n\"");
ruby.evalScriptlet("print \"こんにちは 新世界よ。\\n\"");

//グローバル変数の確認 グローバル変数は$がつきます。
ruby.evalScriptlet("$a = 'グローバル変数'");
ruby.evalScriptlet("print $a + \"\n\"");

//メソッド定義の実験
String code = "";
code = code + "\n" + "def printl(message)";
code = code + "\n" + " print message + \"\n\"";
code = code + "\n" + "end";

ruby.evalScriptlet(code);
ruby.evalScriptlet("printl 'メソッド定義'");


//クラス定義の実験 一文字目は大文字で始まらなくてはなりません。
code = "";
code = code + "\n" + "class HelloClass";
code = code + "\n" + " def initialize";
code = code + "\n" + " print 'イニシャライズ' + \"\\n\"";
code = code + "\n" + " end";
code = code + "\n" + " def helloWorld (name)";
//code = code + "\n" + " print 2";
code = code + "\n" + " print \"hello\" + name + \"\\n\"";
code = code + "\n" + " end";
code = code + "\n" + "end";

ruby.evalScriptlet(code);
ruby.evalScriptlet("$newinstance1 = HelloClass.new");
ruby.evalScriptlet("$newinstance1.helloWorld 'Eclipse'");

//ローカル変数は次のように;で区切るなどすると有効であります。
//これは、evalScriptletを実行すると新たにスコープを生成してしまうからです。
ruby.evalScriptlet("newinstance3 = HelloClass.new;newinstance3.helloWorld 'Java'");

//Javaから値の受け渡しテスト
String val1 = "東京特許許可局";
ruby.evalScriptlet("$val1 = \"" + val1 + "\"");
ruby.evalScriptlet("printl '東京'");
ruby.evalScriptlet("printl $val1");
IRubyObject ro = ruby.evalScriptlet("Base64.b64encode($val1)");
val1 = ro.toString();
System.out.println(val1);
val1 = Base64Util.decodeBase64(val1);
System.out.println(val1);

} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("MyRuby end");
}
}






}

JRubyをつかってみると、日本語の文字化けにバグとおもわれる状態であることが判明しました。
それは、evalScriptletをつかってJava側に値を格納する際に、日本語のutf-8とかに設定していても
無視してアスキー文字に変換かけているのです。

そこで、この問題を回避するために、Ruby側で日本語を含む文字をbase64ですべてアスキー文字に変換かけて、おけばJRuby側で文字コードの変換がかからないため、Java側でbase64を復元するということで
対応できました。

ちなみに、JavaでBase64の復元でよさげなクラスは
http://yamarou.at.infoseek.co.jp/javanawake/026.html
に記載されているのが、使い勝手がよかったです。

JavaMailがBase64のクラスをもっているのでダウンロードが必要
ダウンロード先はこちら
http://java.sun.com/products/javamail/
Eclipseの起動がうまくいかない場合
下記の対処で、なんとかうまくいった。
エラーになったら出てくる 画面の-vm の項目をみると、
javacが入っていないJAVAのパスが設定されているのが原因ではないかとおもう。
そこで、コマンドラインから
JAVAのJDKがインストールされているパスを下記のように指定したらうまくいった。

eclipse.exe -vm C:\Java\SDK\jdk\bin

以上


XAMPPというツールで
データベースを修正できるphpMyAdminとかいうツールがあるんだけど
これの設定をせずに実行したら、

下記のエラーがでます。
「エラーが出たためセッションを開始できませんでした。PHP やウェブサーバのログファイルに出ているエラーを確認して、PHP を正しく設定してください。」

解決策はphp.iniの
session.save_path
に存在するパスを指定してやればOKなのでした。

アプリコット-090829_1236~01.jpg
海老のココナッツ煮にちょっとずつ加え味の変化を楽しむと説明がかいてあった