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 用のドライバ…

かけ足で学ぶ Golang その2 〜HTTPサーバでHelloWorld〜

前回、 etc9.hatenablog.com の続きです。 Hello, World on HTTP Go には簡易な Http サーバのパッケージがバンドルされています。 net/http をインポートするだけで簡単に Http サーバを動かすことができます。 package main import ( "fmt" "log" "net/htt…

かけ足で学ぶ Golang その1 〜環境構築編〜

インストール Homebrew 更新 $ brew update $ brew info go インストール & バージョン確認 $ brew install go $ go version go version go1.8 darwin/amd64 ワークスペースの作成 Go では任意のディレクトリをワークスペースとして指定し、ワークスペースの…

Hibernate in Action における DTO についての考察

もう10年以上前の本、Hibernate in Action に書かれている DTO についての考察です。 HIBERNATE イン アクション作者: Christain Bauer,Gavin Ki,倉橋央,勝嶌和彦出版社/メーカー: ソフトバンク クリエイティブ発売日: 2005/12/28メディア: 大型本購入: 3人 …

MacOS Sierra アップグレード後にJavaアプリケーションの起動がノキナミ遅い

例えば H2 database を以下のように起動するとめっぽう遅い java -cp h2.jar org.h2.tools.Server H2 database に限らず、Tomcat だったり Logback だったり、あらゆるものが遅い 以下にあるように InetAddress.getLocalHost() から呼ばれる DNS Lookup に原…

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,>…

Arrays.asList() は単なる配列のラッパを返すだけなので、要素の追加も削除もできません

いつまでたっても間違いが無くなりません。 以下のようにListの初期化で多用するArrays.asList()。 List<String> stooges = Arrays.asList("Larry", "Moe", "Curly"); Arrays.asList() が返すインスタンスは、java.util.Arrays$ArrayList であって、java.util.ArrayL</string>…

Spring Petclinic を JavaEE MVC 1.0 (JSR-371) で作る 〜 その2 〜

前回 etc9.hatenablog.com の続きです。 TemplateEngineProducer Ozark で Thymeleaf を使えるように org.thymeleaf.TemplateEngine の Producer を作成します。 @Dependent public class DefaultTemplateEngineProducer { @Produces @ViewEngineConfig publ…

Spring Petclinic を JavaEE MVC 1.0 (JSR-371) で作る 〜 その1 〜

はじめに Spring MVC ベースのサンプル・アプリケーション Spring Petclinic を JavaEE MVC 1.0 に移植してみます。 MVC 1.0 は Early Draft 段階ではありますが、JavaEE 7 環境でもそれなりに動かすことができます。ここでは、なるべく JavaEE 標準機能をそ…

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 は日時…