Java EE Spec 一覧

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月 JavaEE7 JSR-342 2013年5月 JavaEE8 JSR-366 2017年9月 バージョン一覧 太字が前バージョンからの変更…

JVM主要オプション

コンパイラフラグ JVMチューニングで最初に検討するのがコンパイラの選択となる。 ただ、近年は階層的コンパイルが有効になっていたり、プラットフォーム別で適した設定がデフォルトで有効になっていることもあり、改めて設定するケースは少ない。 フラグ 説…

開発用 Windows マシンの SSD が ディスクフル なので色々消す

Maven のローカルキャッシュ削除 $ mvn dependency:purge-local-repository または HOME\.m2\repository をバッサリ削除。 Gradle のローカルキャッシュ削除 $ gradlew cleanBuildCache またはHOME\.gradle をバッサリ削除。 Oracle Database Express Editio…

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

はじめに Windows 環境での話し。 いまさらの話し。 Java7 と Java8 でライタイムの配備方法が変更され、以下のエラーで起動できないことがある。 Error: Registry key 'Software\JavaSoft\Java Runtime Environment'\CurrentVersion' has value '1.8', but …

glassfish.org は消滅したので DTD が読み込めなくなったのですケド

TL;DR Java EE の Oracle から Eclipse Foundation への移管に伴い以下のような DTD の URL は今や存在しないので XML 操作時には注意 http://glassfish.org/dtds/glassfish-resources_1_5.dtd とあるプロジェクトで 久しぶりの改修。 Gradle スクリプトがエ…

商用環境で設定しておきたいセキュリティ関連 HTTP ヘッダまとめ

TL;DR X-Content-Type-Options MIME スニッフィングの無効化 X-Frame-Options(XFO) フレーム表示を制限しクリックジャッキングを予防 X-XSS-Protection XSSフィルタの有効/無効 Content-Security-Policy (CSP) XSSなどの攻撃を軽減するセキュリティレイヤー …

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.js として以下のスクリプトを作成します。 #!/usr/bin/jjs -fx var html = "" + "<html><head>" + "<style type='text/css' media='screen'>" + " #editor { position: absolute; top: 0; right: 0; bottom: 0; left: 0; }" + "</style>" + "</head>" + "<body>" + "<div id='editor'></div>" + "</body></html>

Kotlin 1.1.60 周辺ライブラリの導入

November 13, 2017 に Kotlin 1.1.60 がリリースされました。 だからって訳ではないですが、以下について最初の一歩として簡単な導入部分を見ていきます。 kotlin-dsl によるGradle プロジェクトのビルド Kotlin でサーブレット Kotlin の SQLライブラリ Exp…

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

ジェネリクスの 不変・共変・反変 といった話は、なんとなく分かった気になって流してしまう方が多いのではないでしょうか? Java に限った話ではないですが、実際、ジェネリクスが絡んだタイプセーフ性の話題は混乱しやすく、理解しにくいものだと思います…

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

普段使いでは困ることはないですが、昨今はバイトコードマニピュレーションによる黒魔術が謳歌しているため、知っていると役に立つ場合もあるバイトコードの最低限の読み方を説明します。 クラスファイルの中身 以下のような簡単なソースコードを考えましょ…

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

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

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

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

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

前回はEJBにおけるトランザクションの開始と終了の流れを見てきました。 etc9.hatenablog.com 今回は、トランザクション属性による動作を少しだけみてみましょう。 はじめに TransactionAttributeType.REQUIRED のEJBメソッドから、TransactionAttributeType…

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

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

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

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

Rust の初期環境構築 【2017年版】

Rust のインストール brew 使う場合は以下。 $ brew install rust ただ、公式通り rustup を使った方が複数バージョンの管理できたりするので、以下でインストールする。 $ curl https://sh.rustup.rs -sSf | sh 以下のように表示される。 Welcome to Rust! …

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

Gradle プロジェクトの準備 init タスクでプロジェクト準備します(gradle は導入済みの前提)。 $ mkdir kotlin-example $ cd kotlin-example $ gradle init kotlin-gradle-plugin を使うよう build.gradle を編集します。 plugins { id "org.jetbrains.kotli…

【Gradle 4.0 版】プロジェクト作成時に便利な Build Init Plugin

Gradle 4.0 向けに以下の記事の更新版です。 etc9.hatenablog.com 試験的な提供なので将来が計画されていますが、Gradle 4.0 時点でどのようなになるかメモしておきます。 Build Init Plugin Build Init Plugin を使うと Gradle build プロジェクトの作成を…

Java によるいろいろなカンマ区切り変換(または OpenJDKで提供されるJMH を利用したマイクロベンチマーク測定のやり方)

List<String> list = Arrays.asList("A", "B", "C", "D", "E", "F", "G", "H", "I"); カンマ区切りの文字列に変換 A, B, C, D, E, F, G, H, I いろいろなやり方がある 文字列結合 String result = ""; for (String s : list) result += result.isEmpty() ? s : ", " </string>…

Markdown エディタ Typora が好きになる7つの理由

みなさんは Markdown エディタは何を使っているでしょうか? Atom や Visual Studio Code のプラグインでプレビュー表示していたり、Windows だったらMarkdownPad 、Mac だったら MacDown などの専用エディタを使っている方が多いのではないでしょうか。 そ…

2017年夏 Siera クリーンインストール直後の作業

etc9.hatenablog.com ということで、クリーンインストール直後の作業をメモしておく。 キーリピート システム環境設定の最速では遅すぎるので変更。 現在値の表示 defaults read -g KeyRepeat defaults read -g InitialKeyRepeat 設定変更 defaults write -g…

MacBook Air (Mid 2012[13]) の SSD がふたたび逝った

はじまりは ログイン画面でキーボード入力を受け付けなくなった。 しばらく触っていると、レインボーカーソルが回りだした。 電源ボタン押して再起動するも、アップルマークの起動画面で進捗バーが進まない。 MacBook Air (Mid 2012[13]) は、その昔 SSDが壊…

Glassfish や Payara の embedded サーバではログイン認証は動きません(そのままでは)

payara-embedded や payara-micro では普通にログイン認証作っても動きません。 login.conf を明示的に指定しないといけません。 embedded サーバを使うには payara-embedded-all (や glassfish-embedded-all) で Java EE をサクッと動かすのはとても簡単で…

Java のログ出力がローカライズされて鬱陶しい

例えば JUL のログレベルや、H2 database や Glassfish などのログメッセージなどローカライズされていて鬱陶しい。 エンコーディングが違ったりすると読めないし。 ログ内容で検索しても国外の情報拾えないし。 起動時のシステムプロパティで変更する 起動…

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

Gradle のマルチプロジェクトで、ビルドスクリプトの評価順序を定義するには evaluationDependsOn を使う。 ビルド成果物の依存は dependencies settings.gradle で以下のようにマルチモジュールプロジェクトを定義していたとする。 include 'war', 'app' ビ…

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

可変長引数のループで ヌルポ発生 先日とあるプロジェクトで、可変長引数を for - each している箇所でヌルポになっていた。 実際にはずっと複雑だが、簡単に書くと以下のような for ループでのヌルポ。 public void method(String... args) { for (String s…

かけ足で学ぶ Golang その5 〜Webサーバからデータベース操作〜

前回はデータベースの操作方法を見てきました。 etc9.hatenablog.com 今回はWebサーバで受けた情報をデータベースに保存します。 POST でデータ保存 POSTで受けたリクエストボディの Json 文字列をデコードし、データベースにインサートしてみます。 func us…

かけ足で学ぶ Golang その4 〜データベース操作〜

前回は H2 データベースの準備を行いました。 etc9.hatenablog.com 今回はデータベース操作を行っていきます。 ドライバのインポート postgres のドライバはいろいろありますが、ここでは github.com/lib/pq を使います。 go get しましょう。 $ cd $GOPATH …

かけ足で学ぶ Golang その3 〜データベースの準備〜

前回は Go で簡単なWebサーバを作成しました。 etc9.hatenablog.com 今回からはデータベース操作を行っていきます。 データベースの準備 今回はデータベースサーバに H2 を使います。 H2 は postgres プロトコル互換モードがあるので、postgres 用のドライバ…