ActiveObjectsの操作を楽にする対話型インチキスクリプト

注意事項

完全に環境依存です。使用する場合は、パス等変更して使用してください。

使い方

まず、シェルで./iaoと入力しシェルスクリプトを起動します。
すると、「> 」が表示されるので、実行したいJavaのコードを入力します。
最後に、「go」を入力すると、これまで入力したJavaのコードが実行されます。

使用例1 文字列の出力

$ ./iao
> System.out.println( "hello" );
> System.out.println( "world");
> go
hello
world

使用例2 ActiveObjectsのEnittyの作成

ここでは、スクリプト内でmanager変数にEntityManagerのインスタンスを用意しています。

$ ./iao
> User user = manager.create( User.class );
> user.setName( "nattou" );
> user.setPassword( "nattou" );
> user.setType( 1 );
> user.save();
> go

何のメッセージも出ないので、ひとまずエラーは発生していません。次の例で、結果を確認します。

使用例3 ActiveObjectsのEntityの取得&表示

$ ./iao
> User[] users = manager.find( User.class );
> for ( User user: users ) {
>       System.out.println( "name: " + user.getName() + ", password; " + user.getPassword() + ", type: " + user.getType() );
> }
> go
name: admin, password; admin, type: 1
name: nattou, password; nattou, type: 1

使用例2でユーザが追加できていることが確認できました。

ネタばれ

これらは以下のようなインチキで実現しています。

  1. 対話的に入力された内容を含むJavaソースファイルをechoコマンドで出力する。
  2. ソースファイルをjavacコマンドでコンパイルする。
  3. コンパイル結果のクラスをjavaコマンドで実行する。

シェルスクリプト iao

#!/bin/bash

#依存ライブラリのあるディレクトリ
LIB_DIR=AOStyleWiki/WEB-INF/lib

# 依存ライブラリ
LIBS=$LIB_DIR/slf4j-api-1.5.6.jar
LIBS=$LIBS:$LIB_DIR/slf4j-jdk14-1.5.6.jar
LIBS=$LIBS:$LIB_DIR/wicket-1.3.5.jar
LIBS=$LIBS:$LIB_DIR/activeobjects-0.8.2.jar
LIBS=$LIBS:$LIB_DIR/mysql-connector-java-5.1.0-bin.jar

# クラスパス
CLASSPATH=$LIBS:AOStyleWiki/WEB-INF/classes

# 作業用クラス
CLASS_NAME=Temp
# 作業用ソースファイル
SRC_NAME=Temp.java


# 作業用ソースファイル作成
rm $SRC_NAME
echo 'import net.java.ao.EntityManager;' >> $SRC_NAME
echo >> $SRC_NAME
echo 'public class '$CLASS_NAME' {' >> $SRC_NAME
echo 'public static void main( String args[] ) throws Exception {' >> $SRC_NAME
echo 'EntityManager manager = new EntityManager( "jdbc:mysql://localhost/aotest", "root", null );' >> $SRC_NAME
while true; do
        echo -n '> '
        read LINE
        case $LINE in
                go ) break;;
        esac
        echo $LINE >> $SRC_NAME
done
echo '}' >> $SRC_NAME
echo '}' >> $SRC_NAME

# 作業用クラスのコンパイル&実行
javac -classpath $CLASSPATH $SRC_NAME && java -classpath .:$CLASSPATH $CLASS_NAME