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の調整はブラウザで確認しながら調整す…

Spring Boot with Vaadin 〜その2 : JPA で Grid 表示〜

前回Spring Boot with Vaadin 〜その1〜 - A Memorandumに続き、JPAで取得したデータをグリットで表示する簡単なサンプル。 面倒くさいので Groovy で書くことにする。 依存の追加 build.gradle にJPA関連の依存を追加する。 buildscript { repositories { j…

Spring Boot with Vaadin 〜その1〜

結構むかしになりますが、Spring boot の Vaadin サポートが出来てきたので簡単なチュートリアル。 プロジェクトの作成 まずは最小限のサンプルを作成します。 gradle でプロジェクト作成。 $ mkdir example-springboot-vaadin $ cd example-springboot-vaad…

Java スレッドダンプとの戯れ方

プロセスIDの取得 まずは Java のプロセスIDを取得するところから始める。jps で取得できる。 $ <JAVA_HOME>/bin/jps -l 主要なオプションは以下の通り(SunVM)。 オプション 説明 -m main メソッドに渡される引数を出力 -l アプリケーションの主要なクラスのフルパッケ</java_home>…

Wildfly Swarm で JavaEEアプリケーションを FatJAR 化する

wildfly-swarm とは JavaEE アプリケーションを Dropwizard や Spring Boot のようにコンテナごと fat JAR 化する 先日 1.0.0.Alpha4 がリリース WildFly 10.0.0.Beta1をベース 以前から要望のあった Netflix OSS サポート(Ribbon, Hystrix) Keycloak による…

ソフトウェアプロジェクトにまつわる神話

etc

管理にまつわる神話 開発に必要な手順書も標準集も揃っている。必要なことをすべて部下に教えられないだろうか 手順書や標準集がある会社は多い。 しかし実際に利用されているのだろうか。開発者は存在に気づいているんだろうか。最新のカイアhつ状況におけ…

Elixir の RoR 風フレームワーク Phoenix のはじめ方

Elixir のはじめ方 - A Memorandum の続きで Phoenix。 Elixir 版 RoR の Phoenix Framework。現在のバージョンは V0.15.0。 公式サイト http://www.phoenixframework.org/ Github https://github.com/phoenixframework/phoenix 事前準備 必要に応じて以下を…

Elixir のはじめ方

導入 Homebrew での導入は以下。 brew update brew install elixir バージョン確認。 $ elixir -v Elixir 1.0.4 Erlang も入る。 erl -version Erlang (SMP,ASYNC_THREADS,HIPE) (BEAM) emulator version 6.4 IEx (Interactive Elixir) 対話型シェルで、各種…

sun.misc.Unsafe の魔力

sun.misc.Unsafe とは sun.misc.Unsafe はネイティブメソッドを利用して Java のメモリモデルを書き換えるAPIを公開しています。 OpenJDKのJavaDocが以下で確認できます。 http://www.docjar.com/docs/api/sun/misc/Unsafe.html sun.misc.Unsafe のインスタ…

Java8 Date and Time API の時点と時間量

Instant Instant は時系列上のある一時点を表現します。 Instant の内部では、以下のように seconds と nanos というフィールドで、ある時点からの経過時間をナノ秒の単位で保持します。 public final class Instant implements Temporal, TemporalAdjuster,…

エラトステネスの篩 vs アトキンの篩

エラトステネスの篩とアトキンの篩って実際どのぐらい違うのか気になったのでー エラトステネスの篩 倍々しながら篩から落としていくアレです。 public interface Primes { /** * Sieve of Eratosthenes. * @param upperBound upper bound * @return List of…

Gradle で Hello Scalate on Scalatra

Gradle で Hello Scalatra - A Memorandumからの続きで、簡単な Hello Scalate をしてみます。 Scalate とは Scala で書かれたテンプレートエンジンで、以下のシンタックスがサポートされています。 Mustache: 多くの言語で実装があり どこでも使えるテンプ…

Gradle で Hello Scalatra

Gradle で Hello Scala - A Memorandumからの続きで、簡単な Hello Scalatra をしてみます。 Scalatra とは web micro-framework とされている通り、非常にコンパクトな Web フレームワークです。 以下のような Sinatra 風の DSL が利用できます(Scala + Sin…

Gradle で Hello Scala

Scala のビルドツールと言えば sbt ですが、もちろん Gradle でも簡単に始められます。 ここでは Gradle の scala プラグインを使った Hello World を見ていきます。 プロジェクトの作成 gradle の init タスクで scala プロジェクトが作成できます(gradle …

{{ mustache }} の man ページ翻訳

etc

気づいたら勢いで訳していたので貼っておきます。 名前 mustache - ロジックレステンプレート. 書式 典型的な Mustache テンプレート: Hello {{name}} You have just won {{value}} dollars! {{#in_ca}} Well, {{taxed_value}} dollars, after taxes. {{/in_…

POI で Word ファイルの編集 〜その1〜

需要はほとんど無いとは思いますが、簡単なサンプルです。 Word ドキュメントを作成する Excel の場合と同じように、doc と docx とで別クラスを使用します。 クラス フォーマット 説明 HWPFDocument Horrible Word Processor Format 拡張子 doc の MS-Word …

Kotlin で始める JavaEE 7 〜 JPA + CDI + JSF 〜

Kotlin でサーブレット - A Memorandumに引き続き、 分速で始める JavaEE 7 〜 JPA + CDI + JSF 〜 - A MemorandumをKotlin化してみます。 設定ファイルなどは同じものを利用するので必要に応じてこちらを参照してください。 Resources.kt CDIの Produces を…

Kotlin でサーブレット

Kotlin で簡単なサーブレットを。 HelloWorld.kt package example import javax.servlet.annotation.WebServlet import javax.servlet.http.HttpServlet import javax.servlet.http.HttpServletRequest import javax.servlet.http.HttpServletResponse [WebS…

Hello Kotlin with Gradle

Gradle で Kotlin 始める導入手順です。 Kotlin の Gradle プラグインは今のところ https://plugins.gradle.org に登録されていないので以下のようには書けません。 plugins { id "org.jetbrains.kotlin.kotlin" version "0.11.91.2" } buildscript でクラス…

Java8 の Stream 取得方法あれこれ

Iterator から Stream を得る Iterable に変換してから Stream を得ることができます。 Iterator<String> sourceIterator = Arrays.asList("A", "B", "C").iterator(); Iterable<String> iterable = () -> sourceIterator; Stream<String> targetStream = StreamSupport.stream(itera</string></string></string>…

ReactiveX/RxJava の概要

RxJava は ReactiveX (Reactive Extensions) の JVM 実装で、平たく言うと非同期のイベント処理を簡素に書ける、単なるライブラリです。 "Rx = Observables + LINQ + Schedulers" などと表現されます。なんですかこれ?大げさな抽象概念を掲げすぎて意味不明…

手に入れておきたい GWセール中の Kindle 技術書

etc

Kindle 本のゴールデンウィークセールが開催中です。 結構数が多いので、技術書を抜き出してみました。 Kindle 端末なくてもアプリ入れれば読めるので、60% OFFの機会に手に入れておくのもよいのではないでしょうか。 組織パターン作者: James O. Coplien,Ne…

Gradleプロジェクト作成時の init タスク

Build Init Plugin init タスクで build.gradle などをよろしく作れます。 試験的な提供なので将来が計画されていますが、Gradle 2.3 時点でどのようなになるかメモしておきます。 (2017/02/22 追記) 現在は java-application が追加されているので加えまし…

現時点で最強の言語は Haskell に決まり

本日フラッと Haskell の HP 見たら大幅リニューアルされてた。 昔はかなり残念なページだった記憶しかなくかなり驚き。 Try it の所がコンソールになっていて、help と打つとインタラクティブなチュートリアルが始まります。 ロゴも美しくなっており、教材…

JavaFX8 を Gradle で始める

JavaFX8 を Gradle でビルドするのは色々と手間なことが多く、 (javafx-gradle plugin)https://bitbucket.org/shemnon/javafx-gradle/overviewを使うのが手っ取り早い。 現在 0.4.0 がリリースされているので、以下のような build.gradle を用意(gradleは新…

魅惑的なテスティングフレームワーク Spock (Mocking API編)

Spock では Groovy の動的な特性を生かした柔軟な Mocking テストが実現できます。 さて、前回に続いて、Spock のモック機能について見ていきましょう。 まずは公式サンプルからの例で、以下のようなイベントの Publisher と Subscriber のインタラクション…

魅惑的(Fascinating)なテスティングフレームワーク Spock

Spock とは Java と Groovy アプリケーションのテスティングと仕様フレームワーク JUnit, jMock, RSpec, Groovy, Scala, Vulcans などにインスパイアされた Groovy の DSL による可読性の高いテストコードが書ける メジャー IDE との連携も十分 強力なデータ…

Firefox のスクリーンキャプチャ機能が、すごくイイ

etc

最近 Firefox に戻ってきていて、 スクリーンキャプチャ機能が すごくイイ ことに気づきました。 開発者ツール レスポンシブデザインビュー メニューから またはこちらのボタン このボタン押す 横のプルダウンでスクリーンサイズ変えたら このボタン ダウン…

JPA 2.1 の 新機能 バルクオペレーション まとめ

JPA 2.1 で Criteria API 経由での一括更新と一括削除が可能となりました。 Criteria API の変更点 JPA 2.1 では CriteriaUpdate と CriteriaDelete インターフェースが追加され、 CriteriaBuilder の createCriteriaUpdate(Class<T> targetEntity) と createCr</t>…

package 配下のクラス一覧を取得する方法いろいろ

簡単にできそうで意外と面倒な package 配下のクラス一覧を取得方法について。 Guava の ClassPath 利用 ClassPath を使えば簡単に取得できる。 ClassLoader loader = Thread.currentThread().getContextClassLoader(); Set<Class<?>> allClasses = ClassPath.from(lo</class<?>…

Minimal Embedded Tomcat

Tomcat を組み込みで扱う最小限のサンプルです。 最小限の組み込み Tomcat main から最低限の設定をして組み込みの Tomcat を起動します。 package embed; import org.apache.catalina.Context; import org.apache.catalina.servlets.DefaultServlet; import…

JPA では Read-Only の Entity は定義できない

JPA Read-Only マッピング JPA では今のところ読み込み専用で Entity を定義することはできない。 マッピングの定義で読み込み専用に定義することはできる。 @Entity public class Employee { @Id @Column(insertable=false) private int id; @Column(insert…

JPA 2.1 の 新機能 Converter まとめ

データベースのカラムと Entity の該当する属性の変換を Converter で定義できるようになりました。 Converter の使用例 Converter は以下の AttributeConverterインターフェース を実装して定義します。 public interface AttributeConverter<X,Y> { public Y co</x,y>…

JPA 2.1 の新機能 Entity Graphs まとめ

Entity Graphs とは JPA 2.1 では Entity Graph を使うことで fetch 計画を指定できるようになりました。これにより query や find で取得する対象ををカスタマイズできるようになります。同じ Entity から様々なデータの見せ方が必要で、時にはパフォーマン…

ドキュメント+グラフのハイブリットNoSQL -> OrientDB 〜Java API編〜

前回ドキュメント+グラフのハイブリットNoSQL -> OrientDB 〜導入編〜 - A Memorandum の続きで、今回は OrientDB を Java から操作する。 Java API OrientDB のコンポーネントは以下のようになっている。 データベースを操作する際には以下のAPIを利用する…

ドキュメント+グラフのハイブリットNoSQL -> OrientDB 〜導入編〜

OrientDB とは 100% Pure Java の NoSQL データベース ドキュメント指向型 と グラフ型 のデータベースを扱える ライセンスは Apache 2 license NoSQLだけど SQL が使える 組み込み/サーバのどちらもOK Github https://github.com/orientechnologies/orientd…

Java EE の標準バッチAPI -- JSR-352 Batch Applications for the Java Platform --

Java Batchとは JSR-352 Batch Applications for the Java Platform として仕様化されたバッチ処理用 API。 Java EE 7 に取り込まれた。通称 jBatch (日本のみ?)。 構造は Spring Batch とほとんど同じ。標準化されるのは良いことだ。 Job の種類と実行制御…

Gradle Copy タスクのまとめ

Copy タスク Copy タスクは Gradle の core で提供されている。 簡単な Copy タスク例は以下。 task copyConfig(type: Copy) { from 'config' into 'build/config' } gradle copyConfig でタスクを実行すると 'config' ディレクトリにあるファイルを'build/c…