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

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…

gradle でファイルダウンロードを自動化する

ファイルのダウンロード ダウンロードプラグインを使うと簡単。 plugins { id 'java' id "de.undercouch.download" version "1.2" } repositories { mavenCentral() } task wrapper(type: Wrapper) { gradleVersion = '2.2.1' } task downloadAndUnzip { out…

分速で始める JavaEE 7 〜 Arquillian 〜

前回分速で始める JavaEE 7 〜 JPA + CDI + JAX-RS 〜 - A Memorandumの続き arquillian のテストまでやっときます。 ファイル準備 テスト用のパッケージ追加と arquillian 用の設定ファイルなどを作成しておきます。 mkdir -p src/test/java/example/servic…

分速で始める JavaEE 7 〜 JPA + CDI + JAX-RS 〜

前回 分速で始める JavaEE 7 〜 JPA + CDI + JSF 〜 - A Memorandum の続き。 RESTサービス追加します。 ファイル準備 パッケージ用のディレクトリ追加とファイル作成します。 mkdir -p src/main/java/example/rest touch src/main/java/example/rest/JaxRsA…

分速で始める JavaEE 7 〜 JPA + CDI + JSF 〜

前回の続き 秒速で始める Java EE 7 with Wildfly - A Memorandum せっかくなので wildfly の quickstart をベースに、分速で簡単なアプリにしてみます。 設定ファイル準備 最初に src 以下にディレクトリを掘っておきます。 mkdir -p src/main/java/example…

秒速で始める Java EE 7 with Wildfly

gradle がインストールされている前提。 されていない場合は以下で入れておく。 brew install gradle 開始 ターミナルに以下のブロックを全て選択してコピペする。 mkdir example cd example cat <<EOF > build.gradle plugins { id 'java' id 'war' id 'com.bmusc</eof>…

asciidoc 超簡易 Cheatseet

etc

軽量マークアップ言語で、リッチな Markdown と言うと伝わりやすいでしょうか。 Github でもプロジェクトルートに README.adoc を置けば、 README.md と同じように表示されます。 ヘッダ =で書くのが楽です。Markdownの#と同じです。テキストの下部に =====…

lombok を gradlw with Intellij で使う

provided スコープの指定 lombok 使うときは、依存スコープを provided にします。 maven だと、こんな感じになります。 <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.0</version> <scope>provided</scope> </dependency> </dependencies> gradle 使う場合は java プラグインだと provided の configuratio…

Java で Windows OS 判定いろいろ

Windows 判定 Grizzly のソース見てたら、Windows 判定をこんな風にやってた。 private static final boolean WIN32 = "\\".equals(System.getProperty("file.separator")); なるほど。 何も考えずにやるとこんな感じだけど private static final boolean WI…

JPA2.1 でアノテーション使わずに Named Query を登録するには

JPA 2.1 の javax.persistence.EntityManagerFactory#addNamedQuery() のはなし。 検索してもあまりヒットしないので。 普通の NamedQuery の使い方 JPA で NamedQuery 使う時は、Entity にアノテーション指定して以下のように定義する。 @Entity @NamedQuer…