jjsを使う
先日まで、java7サーバで作業していたため、jrunscriptを利用していたけれども、
これから使うサーバはjava8。なのでjjsを利用する。
jjsでは新たなメソッドが定義されている。
なお、下記のメソッドを利用するためには、jjsをscriptingモードで実行する必要がある。
scriptingモードで実行するためには、2つの方法がある。
jjsの引数に-scriptingを指定する。
下記の通りスクリプトを呼び出す。
$ jjs -scrpting my-script.js
スクリプトファイルの先頭にShebangを書く。
上記のmy-script.jsの先頭行にShebangを書く。
#!/usr/bin/env jjs
print('my script start!');
//
Shebangが書かれているスクリプトは、jjsの引数に-scriptingを指定しなくても、
自動的にscriptingモードで実行される。
Windowsでjjsを動かす場合も、特に気にせずShebangを書けば良い。
しかし、WindowsではShebangは利用されないので、1行目に#のみ書いておけば良い。
scriptingモードでの便利機能
- ヒア・ドキュメント
- グローバルオブジェクト
- コマンド実行
- readFully()
ヒア・ドキュメント
scriptingモードではヒアドキュメントを利用できる。
sqlを格納したいときなど便利。
var sql = <<"SQL";
SELECT
*
FROM
TAB
SQL
グローバルオブジェクト
$ARG配列を参照することで、スクリプトの引数を参照できる。
なお、argumentsからでも同様に取得することができる。
$ENVオブジェクトを利用することで、環境変数を取得することができる。
print($ENV.ORACLE_HOME);
print($ENV['ORACLE_HOME']);
コマンド実行
$EXEC('ls -l')を利用することで、ls -lを実行できる。
なお、出力される標準出力は$OUTに入っている。戻り値にも標準出力に入っている。エラー出力は$ERRに入る。
終了コードは$EXITに入る。
なお、コマンド呼び出しに失敗すると例外が飛ぶ。
コマンドを呼び出し、$EXITや$OUTを解析することで、ジョブ実行判定などができる。
readFully()
テキストファイルを読み込んで、変数に収めることができる。
var text = readFully('my-data.txt');
print(text);
テキスト読み込みが簡単にできる。当然、java.ioやjava.nioを利用して読み込んでも良い。
java8からnashornなので
java7のRhinoでは、Listをfor eachしても、Listオブジェクトのメソッドが取得できるだけだった。
java8のNashornでは、Listの中身でeachする。
var list = new java.util.ArrayList();
list.add('apple');
list.add('banana');
for (var i in list) {
print(list[i]);
}
// listの中身が欲しいとき
var ite = list.iterator();
while (ite.hasNext()) {
print(ite.next());
};
上記のスクリプトをjava7のjrunscriptで実行すると、forループではArrayListのメソッドリストが出力され、whileループでapple,bananaが出力される。
java8のjjs(jrunscript)では、forループもwhileループもapple,bananaが出力される。
無駄にイテレーターを作らなくても良いので、本来の実装のみに力を注ぐ事ができる。
注意
Nashornになり、importPackage()とimportClass()が廃止されている。
今後は、Java.type()を利用することになる。
var ArrayList = Java.type('java.util.ArrayList');
var list = new ArrayList();
list.add('Apple');
list.add('Banana');
JavaImporterは従来通り利用できる。
どうしてもimportPackage()、importClass()を利用したい場合は、組み込み互換性スクリプトをロードする。
load('nashorn:mozilla_compat.js');
importClass(java.util.ArrayList);
var list = new ArrayList();
list.add('Apple');
list.add('Banana');
- html data-* 属性
- javascriptの配列操作
- jQueryで部分一致検索
- jqueryのバージョンとprop()
- jrunscript
- Template Engine Mustache を使う
- Vue Routerを使ったサイトで404が発生
- vue.jsでテンプレートが一瞬表示されてしまう
コメントを残す