本日GlassFish4.1がリリースされました。
GlassFish Server Open Source Edition 4.1 Released! (The Aquarium)
同時にNetBeansの8.0.1もリリースされています。
もちろんGlassFish4.1がバンドルされています。
Welcome to NetBeans
GlassFish4.0はかなりバグを含んでいたので
これでかなり改善するんじゃないかと思います。
本日GlassFish4.1がリリースされました。
GlassFish Server Open Source Edition 4.1 Released! (The Aquarium)
同時にNetBeansの8.0.1もリリースされています。
もちろんGlassFish4.1がバンドルされています。
Welcome to NetBeans
GlassFish4.0はかなりバグを含んでいたので
これでかなり改善するんじゃないかと思います。
予定通り米国時間で3月18日(日本では19日)にJava SE 8がリリースされました。
同時にNetBeans 8もリリースされています。
http://www.oracle.com/technetwork/java/javase/downloads/index.html
やや気が早いですが、Java 8のEarly Access版でお試し。
Nashornネタあまり出てこなそうなのでとりあえずスクリプトエンジンの復習です。
スクリプトエンジンはJava 6で導入された機能で、JavaのVM上でJavaScriptやRuby等のスクリプト言語が実行出来ます。特にJavaScriptはJDKの中に実行エンジンが含まれているため、追加のライブラリ不要で使えるのがポイントです。Java 7でインボークダイナミックという機能が導入されJavaの中でスクリプトがより効率よく実行出来るようになりました。そして、Java 8でそのJavaScriptの実装がRhinoからインボークダイナミックを使ったNashornに置き換わります。つまり、よりJavaの中でJavaScriptが効率的に実行出来るようになるという事です。
では、とりあえずmainメソッドにソース書いてみます。
ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("js"); engine.eval("print(1+2);");
実行してみましょう。
3
わずか3行でJavaでJavaScriptが動きますね。
うーんやっぱりJavaでJavaScriptが動くのは不思議な感じ。
ちなみにengineのクラス名をSystem.outで出力してみると。
jdk.nashorn.api.scripting.NashornScriptEngine@6279cee3
確かにNashornになってます。
JavaからJavaScriptのfunctionを呼び出したい場合はScriptEngineクラスをInvocableにキャストすると呼び出せます。JavaScriptの「hoge」ファンクションをJavaから呼び出してみましょう。
engine.eval("function hoge(a,b){return a+b;}"); Invocable invocable = (Invocable) engine; Object object = invocable.invokeFunction("hoge", 1, 2); System.out.println(object); //3
キャストというのが少し微妙ですが、JavaからJavaScriptのfunctionが呼び出せて、JavaScriptからの戻り値もJavaで受け取る事ができます。
また、JavaScript内でJavaのクラスも扱えます。JavaScript内でLocalDateクラスを呼び出してみます。
engine.eval("print(Java.type('java.time.LocalDate').now());"); //2014-03-07
上記を実行すると今日の日付が出力されます。RhinoでimportPackage(またはimportClass)ファンクションを使用していましたが、Nashornは使用出来なくなっているので注意が必要です。どうしても互換性の為に使用する必要がある場合は、互換性スクリプトを事前に読み込む事で対応できます。
engine.eval("load('nashorn:mozilla_compat.js');importPackage(java.time);print(LocalDate.now());"); //2014-03-07
スクリプトエンジンはJavaの内部で簡易に記述出来るスクリプトが利用出来るほか、スクリプトで作成されたライブラリ資産がJavaで利用出来るようになるため、使い方によってはとても面白い事が出来ると思います。
とうとう3/18のJava SE 8のリリースが近づいてきました。
去年あたりからJava界隈ではラムダ式などを中心としてJava SE 8の情報が出回っていますが、実際にはまだ触ってない人も多いのではないでしょうか。
少しでも慣れておく為にそろそろ準備運動でもしておいた方が良いかなと思います。
正式版ではありませんがEarly Access版がリリースされているので既にお試しで触ってみる事ができます。
JDK8 Early Access Releases
https://jdk8.java.net/download.html
IDEも対応は進んでいるようなのでリリース前にもかかわらず実際に試す環境は簡単に作れますね。地味にすごいことだと思います。
では、この辺り触っておいた方がいいよってところをあげてみます。
・ラムダ式
まあ皆さん一番触ってみたいのがラムダ式でしょう。
型が省略出来る辺りがJavaとしてはやや違和感がありますね。
クロージャーじゃないので外の変数書き換え出来ないよとか、
thisの参照も内部クラスの挙動とは差異があるようなので実際試してみると面白いと思います。
ラムダ式とセットでメソッド参照やインターフェースのデフォルト実装なんかも入っているのでその辺りも要確認です。
・Date & Time API
Date & Time APIは今までのjava.util.Dateとはかなり違う上に今後の利用頻度はかなり高くなると思うので積極的に触ってみておいた方がいいですね。
・Nashorn
Java内のJavaScript実装エンジンがRhinoからNashornに変わります。まあどっちもサイですが。
実際速度差とかを試すのはあれですけど、Javaのスクリプトエンジン試したこと無い人は一度試してみるのも良いと思います。
・Java FX
GUI環境としてSwingの代わりにJavaFXが標準ライブラリとなりますね。JavaFXのハンズオン資料とかあるので、興味がある人はそれを参考に触ってみると良いと思います。JavaFXでは無名クラスを多く使うのでラムダ式とはとても相性が良いと思います。
Java 8で追加される機能は他にもありますがこの辺りをみればわかるのかな。
http://openjdk.java.net/projects/jdk8/features
Java EEは仕様がリリースされるので実際に本番利用出来るまでに時間がかかりますが、Java SEは実装がリリースされるので、
会社への適用速度もEEよりはスムーズに進むんじゃないかと思っています。
リリース待ち遠しいですね。