GlassFish4.1リリース!

本日GlassFish4.1がリリースされました。
GlassFish Server Open Source Edition 4.1 Released! (The Aquarium)


同時にNetBeansの8.0.1もリリースされています。
もちろんGlassFish4.1がバンドルされています。
Welcome to NetBeans


GlassFish4.0はかなりバグを含んでいたので
これでかなり改善するんじゃないかと思います。

3ヶ月経ちました

日本オラクルに入社して3ヶ月が経ち、今月から無事正社員となりました。


やっと新しい環境にも慣れてきて、これからはさらに一歩踏み出した活動が出来ればなと思っていたりします。
直近はコンサルスキルの向上と1〜2年で達成する事を明確にするところからですね。


今は製品導入もやりつつJava EE導入のコンサル活動をやっています。
Java EEの導入で問題を抱えてる人がいれば気軽にお声がけ頂ければ相談に乗れると思います。

Java 8でJavaScript。スクリプトエンジンでNashornを試す

やや気が早いですが、Java 8のEarly Access版でお試し。
Nashornネタあまり出てこなそうなのでとりあえずスクリプトエンジンの復習です。


スクリプトエンジンはJava 6で導入された機能で、JavaVM上でJavaScriptRuby等のスクリプト言語が実行出来ます。特にJavaScriptJDKの中に実行エンジンが含まれているため、追加のライブラリ不要で使えるのがポイントです。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行でJavaJavaScriptが動きますね。
うーんやっぱりJavaJavaScriptが動くのは不思議な感じ。
ちなみに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で利用出来るようになるため、使い方によってはとても面白い事が出来ると思います。

Java 8の予習はお済みですか?

とうとう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よりはスムーズに進むんじゃないかと思っています。


リリース待ち遠しいですね。

入社しました

2月1日より日本オラクルにジョインしました。


これからはJavaが出来てちやほやされる人から、Java出来て当たり前の人になりました。


SI業からコンサルタント業への転身になるので、これからどのような形で新しい仕事に貢献できるのかまだはっきりとは見えていませんが、新しい仕事に全力で取り組んで行きたいと思います。