Java

Java デバッグオプション (JDWP)

JVMのデバッグを有効にするには Javaデバッグワイヤプロトコル(JDWP)エージェントを有効にします。 デバッグを有効にした場合、オーバーヘッドが生じることに加え、セキュリティ上の問題となる場合がありますので、本番環境では使用してはなりません。 Java5…

「Spring Boot で persist()」 のあらすじ

はじめに 題材 トランザクションインタセプタ リポジトリの save() 呼び出し 永続化イベント トランザクションの commit コミット前処理の flush() ActionQueue の実行 まとめ はじめに フレームワークも成熟しており、中身の動作を意識することも少なくなっ…

Java 言語でつくるインタプリタ 〜パーサ#3〜

「Go 言語でつくるインタプリタ」では、Monkey という小さな言語のインタプリタを Go で実装する過程が書かれています。 あくまで教育目的として、字句解析〜構文解析〜評価 までをシンプルな実装で丁寧に解説しています。 Go言語でつくるインタプリタ作者:T…

Java 言語でつくるインタプリタ 〜パーサ#2〜

「Go 言語でつくるインタプリタ」では、Monkey という小さな言語のインタプリタを Go で実装する過程が書かれています。 あくまで教育目的として、字句解析〜構文解析〜評価 までをシンプルな実装で丁寧に解説しています。 Go言語でつくるインタプリタ作者:T…

Java 言語でつくるインタプリタ 〜パーサ#1〜

Java 言語でつくるインタプリタ 「Go 言語でつくるインタプリタ」では、Monkey という小さな言語のインタプリタを Go で実装する過程が書かれています。 あくまで教育目的として、字句解析〜構文解析〜評価 までをシンプルな実装で丁寧に解説しています。 Go…

Java 言語でつくるインタプリタ 〜 Lexer 〜

「Go 言語でつくるインタプリタ」では、Monkey という小さな言語のインタプリタを Go で実装する過程が書かれています。 あくまで教育目的として、字句解析〜構文解析〜評価 までをシンプルな実装で丁寧に解説しています。 Go言語でつくるインタプリタ作者:T…

Java Stream におけるソートのお作法

ソート対象 昔ながらの読みにくいソート Lambda を利用した冗長なソート Java8 Stream における正しいソート thenComparing による複合キーのソート ソート条件の指定 null コンパレータ Comparable Map のソート まとめ ソートキーの指定 ソート条件の指定 …

Micronaut で Hello World するだけしてみる

Micronaut とは Quick Start アプリケーションの作成 実行 Micronaut とは マイクロサービスベース用のフルスタックフレームワーク 低フットプリント JVMベースで、Java・Kotlin・Groovy などで書ける GraalVM の native image の実験的サポートがある コン…

AdoptOpenJDK のインストール

Mac mini 2018 が来たのでセットアップ Homebrew $ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" Homebrew version $ brew --version Homebrew 1.8.2 Homebrew/homebrew-core (git revision 4d0d; …

普通の Spring Boot 2.0 Web Applicatrion 〜 Spring Boot DevTools で Automatic Restart 〜

Spring Boot 2 で、なるべく標準的なやり方で、トラディショナルな Spring MVC による Web Application を作成するチュートリアルを数回に分けて。 の5回目です。 目次 Spring MVC で Hello World Spring Data JPA でデータベースアクセス 登録・更新処理と …

普通の Spring Boot 2.0 Web Applicatrion 〜 Bootstrap と Thymeleaf でページネーション 〜

Spring Boot 2 で、なるべく標準的なやり方で、トラディショナルな Spring MVC による Web Application を作成するチュートリアルを数回に分けて。 の4回目です。 目次 Spring MVC で Hello World Spring Data JPA でデータベースアクセス 登録・更新処理と …

普通の Spring Boot 2.0 Web Applicatrion 〜 登録・更新処理と Bean Validataion 〜

Spring Boot 2 で、なるべく標準的なやり方で、トラディショナルな Spring MVC による Web Application を作成するチュートリアルを数回に分けて。 の3回目です。 目次 Spring MVC で Hello World Spring Data JPA でデータベースアクセス 登録・更新処理と …

普通の Spring Boot 2.0 Web Applicatrion 〜 Spring Data JPA でデータベースアクセス 〜

Spring Boot 2 で、なるべく標準的なやり方で、トラディショナルな Spring MVC による Web Application を作成するチュートリアルを数回に分けて。 の2回目です。 目次 Spring MVC で Hello World Spring Data JPA でデータベースアクセス 登録・更新処理と …

普通の Spring Boot 2.0 Web Applicatrion 〜 Spring MVC で Hello World 〜

Spring Boot 2 で、なるべく標準的なやり方で、トラディショナルな Spring MVC による Web Application を作成するチュートリアルを数回に分けて。 Web Application 作成の流れを、細か過ぎる説明は省き、ざっくりと一通り見ていきます。 目次 Spring MVC で…

Java EE Spec 一覧

はじめに Java EE 仕様の一覧です。 Jakarta EE 以降は以下を参照してください。 blog1.mammb.com Java EE Spec Version JSR リリース JavaEE1.3 JSR-58 2001年9月 JavaEE1.4 JSR-151 2003年11月 JavaEE5 JSR-244 2006年5月 JavaEE6 JSR-316 2009年12月 Java…

JVM主要オプション

コンパイラフラグ GC戦略 GCログ ヒープ関連 設定しておきたい Java 起動オプション まとめ コンパイラフラグ JVMチューニングで最初に検討するのがコンパイラの選択となる。 ただ、近年は階層的コンパイルが有効になっていたり、プラットフォーム別で適した…

Java7 と Java8 ランタイム配備の違い、または如何にして CurrentVersion has value '1.8', but '1.7' is required エラーが起こるか

はじめに JDK7(あるいはそれ以前の)インストール時の挙動 JDK8(あるいはそれ以降の)インストール時の挙動 Java Runtime Environment \ CurrentVersion Windows サービス起動する Java アプリの場合話しがややこしくなる Java7 と Java8 では MaxTenuringThre…

NetBeans の JDK は netbeans.conf で設定する

単なるメモ。 JDKの設定 NetBeans自身の JDK は以下の定義ファイルで変更する。 C:\Program Files\NetBeans 8.0.2\etc\netbeans.conf # Default location of JDK: # (set by installer or commented out if launcher should decide) # # It can be overridde…

20行ぐらいでリッチなテキストエディタをJavaFXで

Nashorn スクリプトで作る Ace Editor とは 50行ぐらいでファイル処理 実行 Nashorn スクリプトで作る ace.js として以下のスクリプトを作成します。 #!/usr/bin/jjs -fx var html = "" + "<html><head>" + "<style type='text/css' media='screen'>" + " #editor { position: absolute; top: 0; right: 0; bott</style></head></html>…

Java におけるタイプセーフとジェネリクスの微妙な関係

はじめに 当たり前な話 ジェネリック型の継承関係 共変(covariant)の問題点 共変(covariant) が妥当なケース 反変 (contravariant) の問題点 反変 (contravariant) が妥当なケース ここまでのまとめ ジェネリクスが不変だと、、 ジェネリクスに共変性を持た…

知らなくても困らない Javaクラスのバイトコードの読み方

クラスファイルの中身 クラスファイルの構造 javap コマンド javap 出力の概要 型とメソッドの読み方 オペランドスタック コンストラクタの実行 加算メソッド invoke 系命令 条件判断 for ループ まとめ 普段使いでは困ることはないですが、昨今はバイトコー…

Java8 lambda の裏舞台は、きっとあなたが考えているより強かだ

前回、Stream の裏舞台について見てみました。 blog1.mammb.com ついでなので、今回は Lambda 式の裏舞台について見てみましょう。 はじめに 有名な話ではありますが、以下の匿名クラスを含むコードをコンパイルすると、2つのクラスファイルが生成されます。…

Java8 Stream の裏舞台は、きっとあなたが考えているより忙しない

Java9 も出た昨今でいまさらですが、Stream パイプラインが裏でどのように動いているのかをコードを交えて紹介します。 以下の単純な例を元に、内部処理を追っていきましょう。 Arrays.asList("a", "b", "c") .stream() // (1) Stream の生成 .filter(String…

JavaEE Code探索 その3 〜 トランザクション属性 〜

前回はEJBにおけるトランザクションの開始と終了の流れを見てきました。 blog1.mammb.com 今回は、トランザクション属性による動作を少しだけみてみましょう。 はじめに 最初のトランザクション 次のトランザクション トランザクションのサスペンド REQUIRES…

JavaEE Code探索 その2 〜 トランザクション 〜

前回は Glassfish 4.1.2 のソースコードを元にして EJB のメソッド呼び出しの概要を見ました。 blog1.mammb.com 今回は、この流れの中でトランザクションの開始と終了について見ていきます。 前回と同様に今回の説明のために不要な箇所は大幅に省略または改…

JavaEE Code探索 その1 〜 EJB コール 〜

Glassfish のソースコードを元に、リモートEJBコールがどのように処理されていくかを説明します。 トラブルシュートにはどうしてもソースコードを読む必要がありますし、設定の問題なのかバグなのかの切り分けも容易になります。手っ取り早いし確実です。 そ…

Kotlin を Gradle でビルドする minimal サンプル

Gradle プロジェクトの準備 ソースファイルの作成 ビルド&実行 ビルドスクリプトをKotlinで書く Gradle プロジェクトの準備 init タスクでプロジェクト準備します(gradle は導入済みの前提)。 $ mkdir kotlin-example $ cd kotlin-example $ gradle init kot…

Gradle で評価時の依存を定義するには evaluationDependsOn を使う

Gradle のマルチプロジェクトで、ビルドスクリプトの評価順序を定義するには evaluationDependsOn を使う。 ビルド成果物の依存は dependencies タスク間の実行時依存関係は dependsOn 評価時の依存は evaluationDependsOn ビルド成果物の依存は dependencie…

10年の長きに渡り Java の可変長引数を過信していた話

可変長引数のループで ヌルポ発生 普通の呼び出し なんだ!? これ 念のため どうしても null を渡したい場合 まとめ 可変長引数のループで ヌルポ発生 先日とあるプロジェクトで、可変長引数を for - each している箇所でヌルポになっていた。 実際にはずっと…

Collectors.toMap() は第3引数を意識してください

リストからマップを作る時に使う以下のコード Map<String, String> phoneBook = people.stream() .collect(Collectors.toMap(Person::getName, Person::getAddress); なつかしい以下のコードとは挙動が異なります。 Map<String, String> phoneBook = new HashMap<>(); for (Person p : people</string,></string,>…