読者です 読者をやめる 読者になる 読者になる

JavaEE Model-View-Controller API 1.0 - JSR 371 の基礎

Java EE の MVC1.0 (Model-View-Controller API 1.0 - JSR 371)、Early Draft Review 2 時点のまとめです。 Jersey MVC と同じように JAX-RS の上に乗っかる形となっているため、ほとんどは JAX-RS と同じで、コントローラメソッドに @Controller 付けて戻り…

Windows でハウスキーピング

Linux でハウスキーピング find で -mtime で最終更新日N日前でフィルタして rm できます。 find /log/*.log -type f -mtime +10 | xargs rm -rf BSD系などで -delete アクションがあれば以下でも可です。 find /log/*.log -type f -mtime +10 -delete cront…

JavaEE8 - MVC 1.0 (Ozark M2) で Thymeleaf を使う

JavaEE8 で仕様検討が進んでいる MVC1.0 (Model-View-Controller API 1.0 - JSR 371) の参照実装である Ozark は既に M2 が出ていて簡単に試すことができます。 テンプレートエンジンも Extension として、Mustache、Freemarker、Velocity、Thymeleaf などが…

Java 上の JavaScript エンジン Nashorn で Java ライブラリを使う

Nashorn スクリプトから外部 Java ライブラリを使うのは意外と面倒です。 Nashorn の基本的な使い方は以下を参照ください。 etc9.hatenablog.com ここでは、Nashorn スクリプトから Ivy を使い、外部の Java ライブラリを使う方法を紹介します。 クラスパス …

JUL を少しマシにする

JUL に対する不満 Java でログ出力する場合は、大抵 SLF4J + logback を使いますが、なるべく外部ライブラリに依存したくない時もあります(ちなみに SLF は Simple Logging Facade の略です)。 そんな時には Java 標準のログAPI Java.util.logger に手を出し…

Windows でファイル日付を変更する

Linux では touch Linux でファイルのタイムスタンプを変更するには touch でサクッとできます。 最終アクセス時刻を変更(2017年07月23日12時30分) $ touch -at 20170723123000 hoge.txt 最終更新日時を変更 $ touch -mt 20170723123000 hoge.txt -t は日時…

MXBean から取得できる情報あれこれ

Java Management Extensions の主要どころの簡単なまとめです。 RuntimeMXBean ランタイム関連情報の取得。 RuntimeMXBean runtimeMx = ManagementFactory.getRuntimeMXBean(); 以下のような情報が取得できます。 メソッド 出力例 説明 getVmName() Java Hot…

RebelLabs による Java ツール & テクノロジ 調査レポート 2016

RebelLabs による 2016年度の Java ツール & テクノロジの調査結果が公開されました。 2,040名の Geeks に対する調査結果ということで、気になった箇所をピックアップ。 Intellij IDEA が首位に Eclipseが過半数割れてIDEAが首位になりました。 JavaEEはどの…

2003年に IEEE から出された Michael Cusumano らによる国際的 Survey

前回のプロジェクトの成功率についての Survey に続き、国際的な Survey の結果紹介です。 etc9.hatenablog.com 2003年に IEEE から出された Michael Cusumano らによる国際的 Survey 2001年から2002年の間に以下の組織を対象に調査。 インド Motorola India…

ソフトウェア開発プロジェクトの成功率

Scott W. Ambler の Survey スコット・アンブラー(Scott W. Ambler)氏は定期的にITプロジェクトの Survey を出してくれています。 アンブラー・スコット と言えば、ディシプリンド・アジャイル・デリバリー(DAD)、アジャイルモデリング(AM)、アジャイル統一…

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

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

Amazon RDS(Oracle) の rdsadmin パッケージ

etc

RDS はマネージド・サービスなので、OSにログインしたり、sysdba でDBに接続することはできない。 その代わり rdsadmin という PL/SQLパッケージで必要な操作ができるようになっている。 よく使いそうなものは以下かなぁ。 Oracle RDS セッションの強制終了a…

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 〜

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

JSF で JQueryUI Sortable を使う

最近すぐに忘れてしまうので、細かいことでも書いておこう。 テーブルの一覧画面の並び順や項目名、表示/非表示などをユーザが自由にカスタマイズする機能追加の対応があった。 ユーザ独自のビューとして画面で見たり、ダウンロードして他のシステムに投入し…

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…

Docker for mac 正式版が公開されたので改めて導入手順を見てみましょう

2016年7月28日 「Docker For Mac And Windows Is Now Generally Available And Ready For Production」というポストで Docker For Mac と Docker For Windows の正式リリースが発表されました。 2016年3月に公開された限定ベータ、パブリックベータを経た い…

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

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 などのサービスとの連携もスムーズです。 あらかじめ容易されたワークスペースのテンプ…

サーバサイドエンジニアのためのフロントエンド入門 〜ECMAScript編〜

フロントエンドの移り変わりが激しすぎてついていけない。 というサーバサイドエンジニア向けのフロントエンドの概要第3回目です。 より深い話題については他を当たってください。。 前回は CSS について見ました。 etc9.hatenablog.com 今回は ECMAScript …

サーバサイドエンジニアのためのフロントエンド入門 〜Sass編〜

フロントエンドの移り変わりが激しすぎてついていけない。 というサーバサイドエンジニア向けのフロントエンドの概要第2回目です。 より深い話題については他を当たってください。。 前回までで、node と gulp を導入しました。 etc9.hatenablog.com 今回は …

サーバサイドエンジニアのためのフロントエンド入門 〜環境編〜

フロントエンドの移り変わりが激しすぎてついていけない。 というサーバサイドエンジニア向けのフロントエンドの概要です。 より深い話題については他を当たってください。。 node とは 近年のフロントエンド開発は node が無くては始まりません。 説明の必…

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

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

これぐらいでイイ これぐらいがイイ Riot.js

Riot.js(ライオット) とは React と Polymer のコンセプトをすごくシンプルに体現したUIライブラリです(Riot 2.0)。 公式サイトでは大きく以下が挙げられています。 CUSTOM TAGS ENJOYABLE SYNTAX VIRTUAL DOM TINY SIZE しかし、一番のポイントは、「Small …

3人のプログラマの話

etc

あるIT部門で一人の男が難しい顔をしてPCに向かっていた。 「あなたはここでいったい何をしているのですか?」 「何って、プログラミングに決まっているだろ。朝から晩まで、設計書の内容を間違わずにコードに落とさなきゃいけないのさ。あんたにはわからな…

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…

Spring Boot with Vaadin 〜その4 : モーダルダイアログと永続化 〜

前回Spring Boot with Vaadin 〜その3 : Spring Loaded と Vaddinデバッグ〜 - A Memorandumの続き。 モーダルダイアログで新しい Customer を登録してみる。 モーダルダイアログ ダイアログは Window を作成して setModal(true) にするとモーダルとなる。 …

Spring Boot with Vaadin 〜その3 : Spring Loaded と Vaddinデバッグ〜

前回Spring Boot with Vaadin 〜その2 : JPA で Grid 表示〜 - A Memorandumの続き。 コード編集の度にコンパイルが面倒なので、ちょっとわき道にそれて、Spring Loaded を入れて Hot Swap が使えるようにしておく。 UIの調整はブラウザで確認しながら調整す…