Java

Java の上の JavaScript エンジン Nashorn の基本

Nashorn とは Java7 までは JavaScript スクリプティングエンジンとして Rino が同梱されていましたが、Java8 からは Nashorn が同梱されるようになりました。 ナースホルン(Nashorn)はドイツ語でサイを意味します。 Nashorn は ECMAScript-262 に準拠してお…

Java8 で追加された Exact 系メソッド

Java8 の目立たない変更として、Math クラスにオーバーフロー時には例外を投げるExact (正確な) 系メソッドが追加された。 いずれも int または long を引数に取るようにオーバーロードされている。 算術演算の結果がオーバフローする場合には ArithmeticExc…

JSF ライフサイクルはソース見るのが手っ取り早い

JSF のライフサイクルを理解するにはソース見てしまうのが一番早いですねー。 いまさらですが、Mojarra 2.2.13 のソースでライフサイクルを追ってみます。いまさらですが。 大枠を眺めるため、ソースは大幅に削ったり加工したりしたものなのでご注意ください…

Payara Micro clustered CDI Event Bus -インスタンスを跨いだCDIイベント-

Clustered CDI Event Bus Payara Micro は Glassfish を元にしたマイクロサービス向けの JavaEE コンテナです。 Payara Micro の簡単な概要は以下を参照してください。 etc9.hatenablog.com Payara は Hazelcast でクラスタサポートをしており、Payara Micro…

macOS Sierra で NetBeans から GlassFish が起動できない (というか起動はするけど繋がらない)

Sierra にアップデート後、NetBeans のサービスタブから GlassFish を起動しても応答が帰ってこない事象があり、あまり情報が落ちていないので書いておきます。 事象 NetBeans の GlassFish バンドル版をインストール時、インストールにえらい時間がかかる(…

日本人の名字をランダムに抽出する 〜 Alias Method 〜

なにがやりたいか 日本人の名字をランダムに取得したい。 ただし、佐藤さんや鈴木さんはより多く、大柿さんや桑畑さんは低頻度といった具合に、名字の分布に応じた確率で取得したい。 重み付きランダム 発生確率に重み付けされたランダムで、復元抽出(ある特…

Class#getEnumConstants() って初めて使った気がする

Enum#values() ある Enum の値を取得したい場合は Enum の static メソッドである values() を使う。 public enum Fruits { APPLE, ORANGE, BANANA; } Fruits.values(); この values() の実装は、コンパイラが生成してクラスに埋め込む。 言語仕様的には 8.9…

リリース間近 JUnit5 に備えよう

はじめに JUnit5 のリリースが近づいています。現在は M2 で M3 の作業が進んでいます。 今のところの予定は以下のようになってます。 2016/10/21 M3 リリース 2016/11/30 M4 リリース 2016/12/30 M5 リリース JUnit4 とは(中身は)全く別ものです。が普通に…

Payara micro で Hello World

Payara とは Glassfish から fork した JavaEE アプリケーションサーバです。 Glassfish は Oracle による商用サポートの提供が廃止されましたが、Payara は Payara Team による商用サポートが提供されています。 Glassfish 4.1 のコードベースに対してバグ…

遅延初期化とvolatileにまつわるエトセトラ

JSON Processing Java API for JSON Processing (JSR 353) の RI 実装を見ていたらこんなコードがありました。 abstract class JsonNumberImpl implements JsonNumber { // ・・・略 // Optimized JsonNumber impl for int numbers. private static final cl…

ディシジョンテーブルをカルノー図で簡単化するか?

SlideShare でこんなスライドがあった。 エスイーが要件定義でやるべきたったひとつのこと from Yoshitka Kawashima www.slideshare.net ディシジョンテーブルはいいけど、カルノー図かいて整理してロジックに落としましょう。 という至極まっとうなもの。 …

未来を感じずにはいられないクラウドIDE 〜番外編 Codenvy〜

前回は Cloud9 で Java開発環境の構築について見てみました。 etc9.hatenablog.com Cloud9 による Java サポートはまだまだこれからといった感じでした。 今回は Eclipse Che が使えるクラウドIDE である Codenvy を簡単に見ていきましょう。 Eclipse Che と…

未来を感じずにはいられないクラウドIDE 〜Cloud9〜 Java開発編

前回は Cloud9 の導入方法を見てきました。 etc9.hatenablog.com 今回は Cloud9 IDE による Java 開発について見ていきましょう。 Cloud9 IDE の言語サポートは、今のところ PHP, Ruby, Python, JavaScript(Node), Go が手厚くなっています。 Java 向けサポ…

未来を感じずにはいられないクラウドIDE 〜Cloud9〜

Cloud9 IDE とは Webブラウザ上で動作する統合開発環境です。 クライアント環境に依存せず、Docker コンテナ上に構築されたワークスペースを共有でき、GitHub や Heroku などのサービスとの連携もスムーズです。 あらかじめ容易されたワークスペースのテンプ…

JAX-RS でリソースを動的ディスパッチする

Subresource Locator JAX-RS では @Path アノテーションでリクエストURLを、@GET などのアノテーションで HTTPメソッドをマッピングします。 HTTPメソッドを指定するアノテーションを付けず、@Path アノテーションだけを定義し、戻り値としてリソースクラ…

JVMオプションの確認方法

標準オプション -help または -? で標準オプションが確認できる。 $ java -help 使用方法: java [-options] class [args...] (クラスを実行する場合) または java [-options] -jar jarfile [args...] (jarファイルを実行する場合) optionsには次のものがあり…

Jersey Grizzly で始める JAX-RS 入門 〜STEP6〜

前回からの続き。 今回はフィルタについてです。 フィルタ JAX-RS のフィルタは Servlet のフィルタと異なり、リクエストフィルタとレスポンスフィルタが2つに分かれています。 リクエストフィルタとレスポンスフィルタはそれぞれ以下のインターフェースを実…

Jersey Grizzly で始める JAX-RS 入門 〜STEP5〜

前回からの続き。 例外ハンドリング アプリケーションからスローされた WebApplicationException およびそのサブクラスはJAX-RSのコンテナによりキャッチされ、例外に応じたレスポンスが返却されます。 レスポンスは WebApplicationException クラスの getRe…

Jersey Grizzly で始める JAX-RS 入門 〜STEP4〜

前回までで作成したアプリケーションを Customer エンティティの CRUD 操作をできるようにしていきます。 CustomerResource の変更 前回作成した CustomerResource は以下の内容でした。 @Path("customers") public class CustomerResource { @GET @Path("{i…

Jersey Grizzly で始める JAX-RS 入門 〜STEP3〜

前回作成したサンプルに続けてJAX-RS を使った CRUD アプリケーションを作成していきます。 EBean の導入 永続化を行うため、何でもよいですが今回は導入が簡単な EBean を使います。 build.gradle に以下の依存を追加します。 dependencies { // ・・・ // …

Jersey Grizzly で始める JAX-RS 入門 〜STEP2〜

前回作成したサンプルを使って JAX-RS のパスのマッピングについて見ていきます。 Path の指定 JAX-RS では Resource クラスに @Path アノテーションを付けることで URL とのマッピングを指定します。 以下の ExampleResource を作成します。 package exampl…

Jersey & Grizzly で始める JAX-RS 入門 〜STEP1〜

はじめに Jersey と Grizzly を使って簡単な JAX-RS アプリケーションを作っていきます。 Glassfish などの JavaEE アプリケーションサーバに組み込まれている Jersey と Grizzly ですが、単体ライブラリとしても簡単に使うことができます。 これらのライブ…

ArrayList と HashMap の遅延初期化(7u40)

小ネタです。 Java 7u40 で空の ArrayList と HashMap のインスタンス生成が最適化されました。 Bug ID: JDK-8011200 (coll) Optimize empty ArrayList and HashMap ArrayList の初期化 今までは、 new ArrayList<>(); とした時点で、以下のように初期容量10…

Mockito で任意の可変長引数にマッチさせる

anyVararg() マッチャーを使う。よく忘れる。 以下の可変長引数を取るメソッドがあった場合、 Account getAccount(Long id, AccountType...types); 以下のようにすると任意の可変長引数にマッチできる。 AccountService service = mock(AccountService.class…

絶対にはまる SuperCSV(ver2.2.1で解消済み) の罠

2015年1月リリースのSuperCSV 2.2.1 より前のバージョンには、大抵の人がはまる罠があります(長い間放置されてきました)。 新しいバージョンでは修正されていますが、いくつものプロジェクトで誤った使われ方となっているのを見てきましたので、古い SuperCS…

Strategy enum パターンを使う場合の注意点

普通の enum 普通に enum 定義して、 package foo; public enum Operation { PLUS, MINUS, ; } クラス名を取得すると以下となる。 Operation.PLUS.getClass().toString(); // -> "class foo.Operation" Operation.PLUS.getClass().getSimpleName(); // -> "O…

Java の Optional は Serializable ではない

Java の Opional は関数の戻り値として利用することに焦点が当てられているため、Serializable ではない。 よって以下のようにフィールドとして定義したり、 private Optional<String> name; コレクションに入れたり、 List<Optional<String>> list; メソッドの引数で受けたり、 publi</optional<string></string>…

Gradle で weld-se を使う

はじめに Gradle の Applicationプラグインで weld-se を使う場合、CDI管理の Bean の検索が beans.xml のあるファイルシステム上のパスを起点に行われてしまうため注意が必要。 CDI in Java SE (CDI2.0) CDI 2.0 では Java EE 以外に、Java Standard Editio…

CDI(Contexts and Dependency Injection)まとめ

CDI のバージョン 現在 CDI 2.0 仕様はドラフト。 Ver JSR JavaEE RI CDI 1.0 JSR-299 JavaEE6 Weld 1.0 CDI 1.1 JSR-346 JavaEE7 Weld 2.0 CDI 1.2 JSR-346 JavaEE7 Weld 2.2 CDI 2.0 JSR-365 JavaEE8 Weld 3.0 各仕様についてはここにまとまっている。 htt…

CDI の管理対象範囲

CDI 1.0 から CDI 1.2 の間で揺れた CDI 管理対象として扱う範囲の変更について。 CDI 2.0 がそろそろだけど、昔のメモを記念に。。 CDIのバージョン 各種仕様などのバージョン対応。 Ver 対応JSR 対応JavaEE 対応Weld 主な変更 CDI 1.0 JSR-299 JavaEE6 Wel…