JavaSE6新機能メモ
JavaSE6をちょっと調べたので貼っておく。
Scripting JSR-223 Scripting for the Java Platform
- スクリプトエンジンを開発するためのフレームワークが追加された。
- Javaコード中にスクリプトをミックスして記述するためのAPIが追加された。
- JavaScriptエンジン(Mozilla Rhino(ライノ) engine)がJDKに含まれる。これは、上記のフレームワークを用いて開発されたもの。
- JavaScriptエンジン以外にも、Groovy, Ruby, Pythonなどのスクリプトエンジンも開発されており、これらは別途scripting.dev.java.netからダウンロードできる。
ScriptEngineManager m = new ScriptEngineManager();//(1) ScriptEngine engine = m.getEngineByName("js");//(2) engine.eval("alert('hello, java!!!')");//(3)
- スクリプトエンジンマネージャを作成。ScriptEngineManagerとかScriptEngineが今回追加されたAPIのクラス
- getEngineByName(<スクリプトの識別子>)で、指定したスクリプト言語用のエンジンが生成できる。この例ではJavaScriptの拡張子である”js”を指定して、JavaScriptのエンジンを取得している。”javascript”を与えても良い。他にもmime-type(text/javascript)を渡す方法などがある。もしRubyのエンジンを取得したければ、”rb”または”ruby”などと指定すればよい。
- evalメソッドの引数に、スクリプトを文字列として渡す。この場合はJavaScriptのコードである alert(‘hello, java!!!’)を文字列として渡しているので、これを実行すればアラートが表示される。外部リソースからスクリプトのコードを読み込んで、それをevalして実行することも可能。
ちなみに以下のようなコードを書いて、これを上記のRhinoエンジンで動作させることもできる。
var fr = new javax.swing.JFrame(); fr.setSize(200,200); fr.title = "hello java"; fr.visible = true;
このとおり、通常のJavaScriptのコードから、JavaのAPIを呼び出すことができる。簡単なGUIプログラムをサッと作成したいときなどに威力を発揮しそうである。
Web Service
- Webサービス開発関連の技術が幾つか追加された。
- Webサービスの開発を容易にするための仕様であるJAX-WSがJavaSE6に取り込まれた(JAX-WSは元々はJavaEE5の一部であった)。
- java-XMLのバインディングの仕様であるJAXB(Java Architecture for XML Binding)2.0がJavaSE6に取り込まれた。
- JAXPがアップートされ、新たにStAXをサポート。StAXとはDOM,SAXと同様、XMlをパーシングするための技術。SAXに似ているが、パースの方法が違う。また、XMLの生成も可能であり、DOMのようにメモリを大量に必要としないため便利。ちなみにスペックリードはBEA
JAX-WSによるWebサービスの実装
Webサービスを実現するクラス(POJO)を作成する
@WebService public class Calculator{ @WebMethod public int add(int x, int y){ return x + y; } }
- Webサービスのサーバーを実行するクラスを作成する
public class WSServer{ public static void main(String[] args){ Calculator calc = new Calculator(); Endpoint.publish("http://localhost:8080/add", calc); } }
- 作成したソースを、wsgenツールに与えて実行すると、Webサービスの公開に必要なWSDL, スキーマ定義、Webサービスでやり取りするデータを格納するクラスなど、サーバー側に必要なクラスやリソースが生成される。
- 生成されたWSDLファイルを、wsimportツールに与えると、Webサービスのプロキシクラスなど、クライアント側で必要なクラスが生成される。
- 生成されたプロキシクラスを使って以下のようなクライアント側のコードを作成する。
public class Client{ public static void main(…){ CalculatorService service = new CalculatorService();// ….(1) Calculator calc = service.getCalculatorPort();//………………(2) int result = calc.add(1,2);//………………………………………(3) System.out.println(result); } }
(1)CalculatorService, Calculatorクラスは生成されたもの。
(2)の処理により、プロキシオブジェクト(calc)が取得できる。このオブジェクトのメソッドを実行すると、サーバー側で処理が行われ、結果を取得できる。
- 作成したサーバーのクラスを実行すると、Webサービスのサーバーが起動する。
$ >java … WSServer
- 5.で作成したクライアントクラスを実行すると、Webサービスを実行できる。
$ >java … Client $ 3
以上のように、アノテーションを使って1,2のような単純なクラスを作り、ツールを実行することで、Webサービスに必要な多くのリソースが生成される。あとは生成されたクライアント側のクラスを使ってクライアントを作成するだけであり、非常に容易にWebサービスを開発できようになる。
JDBC4.0
デスクトップアプリケーション関連
Task Tray
Splash Screen Support
Desktop Class
GroupLayout
- GroupLayoutという新しいSwingのレイアウトマネージャが導入された。
- FlowLayoutやGridBagLayoutなどよりも簡単にレイアウトを調整できる。
Monitoring and Management
- 以下のようなモニタリング・管理のためのツールがバンドルされる
- jconsole:Javaアプリのリソース・パフォーマンス情報を監視するためのツール。従来はアプリ起動時にJMXエージェントを一緒に起動しておく必要があったが、SE6からはエージェントが不要になり、直接アタッチできるようになった。
- jstack:アプリのスタックフレームの情報のスナップショットを表示できるツール。メソッドの呼び出し情報、スレッドの状態などが監視できる。
- jmap:メモリ領域の状態のスナップショットを表示するツール。
- jhat:javaヒープダンプを解析し、Webサーバーを起動し、ヒープダンプをWebブラウザで閲覧するためのツール。
Compiler Access
国際化対応
- 和暦サポート。和暦Localeの導入により、Calender#getメソッドで元号(に対応する定数)を取得できたり、DateFormatクラスで“平成19年11月17日“のような文字列を取得できるようになった。
OutOfMemoryError詳細情報の表示
- OutOfMemoryErrorの詳細が出るようになった。アプリがOutOfMemoryErrorで落ちたときに、どの領域(Cヒープ、スタック、ヒープ領域、パーマネント領域、コードキャッシュなど)が不足しているのかが同時に表示されるようになった。
- 例えば、アプリが落ちたときに「OutOfMemoryError: PermGen space」というメッセージが表示された場合は、javaの起動時オプションに、「-XX:MaxPermSize=NNm」を追加すればよい、などということがわかる。