かけ足で学ぶ 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 は日時…

MXBean から取得できる情報あれこれ

Java Management Extensions の主要どころの簡単なまとめです。 RuntimeMXBean ランタイム関連情報の取得。 RuntimeMXBean runtimeMx = ManagementFactory.getRuntimeMXBean(); 以下のような情報が取得できます。 メソッド 出力例 説明 getVmName() Java Hot…

RebelLabs による Java ツール & テクノロジ 調査レポート 2016

RebelLabs による 2016年度の Java ツール & テクノロジの調査結果が公開されました。 2,040名の Geeks に対する調査結果ということで、気になった箇所をピックアップ。 Intellij IDEA が首位に Eclipseが過半数割れてIDEAが首位になりました。 JavaEEはどの…

2003年に IEEE から出された Michael Cusumano らによる国際的 Survey

前回のプロジェクトの成功率についての Survey に続き、国際的な Survey の結果紹介です。 etc9.hatenablog.com 2003年に IEEE から出された Michael Cusumano らによる国際的 Survey 2001年から2002年の間に以下の組織を対象に調査。 インド Motorola India…

ソフトウェア開発プロジェクトの成功率

Scott W. Ambler の Survey スコット・アンブラー(Scott W. Ambler)氏は定期的にITプロジェクトの Survey を出してくれています。 アンブラー・スコット と言えば、ディシプリンド・アジャイル・デリバリー(DAD)、アジャイルモデリング(AM)、アジャイル統一…

Java の上の JavaScript エンジン Nashorn の基本

Nashorn とは Java7 までは JavaScript スクリプティングエンジンとして Rino が同梱されていましたが、Java8 からは Nashorn が同梱されるようになりました。 ナースホルン(Nashorn)はドイツ語でサイを意味します。 Nashorn は ECMAScript-262 に準拠してお…

Amazon RDS(Oracle) の rdsadmin パッケージ

etc

RDS はマネージド・サービスなので、OSにログインしたり、sysdba でDBに接続することはできない。 その代わり rdsadmin という PL/SQLパッケージで必要な操作ができるようになっている。 よく使いそうなものは以下かなぁ。 Oracle RDS セッションの強制終了a…

Java8 で追加された Exact 系メソッド

Java8 の目立たない変更として、Math クラスにオーバーフロー時には例外を投げるExact (正確な) 系メソッドが追加された。 いずれも int または long を引数に取るようにオーバーロードされている。 算術演算の結果がオーバフローする場合には ArithmeticExc…

JSF ライフサイクルはソース見るのが手っ取り早い

JSF のライフサイクルを理解するにはソース見てしまうのが一番早いですねー。 いまさらですが、Mojarra 2.2.13 のソースでライフサイクルを追ってみます。いまさらですが。 大枠を眺めるため、ソースは大幅に削ったり加工したりしたものなのでご注意ください…

Payara Micro clustered CDI Event Bus -インスタンスを跨いだCDIイベント-

Clustered CDI Event Bus Payara Micro は Glassfish を元にしたマイクロサービス向けの JavaEE コンテナです。 Payara Micro の簡単な概要は以下を参照してください。 etc9.hatenablog.com Payara は Hazelcast でクラスタサポートをしており、Payara Micro…

macOS Sierra で NetBeans から GlassFish が起動できない (というか起動はするけど繋がらない)

Sierra にアップデート後、NetBeans のサービスタブから GlassFish を起動しても応答が帰ってこない事象があり、あまり情報が落ちていないので書いておきます。 事象 NetBeans の GlassFish バンドル版をインストール時、インストールにえらい時間がかかる(…

日本人の名字をランダムに抽出する 〜 Alias Method 〜

なにがやりたいか 日本人の名字をランダムに取得したい。 ただし、佐藤さんや鈴木さんはより多く、大柿さんや桑畑さんは低頻度といった具合に、名字の分布に応じた確率で取得したい。 重み付きランダム 発生確率に重み付けされたランダムで、復元抽出(ある特…

JSF で JQueryUI Sortable を使う

最近すぐに忘れてしまうので、細かいことでも書いておこう。 テーブルの一覧画面の並び順や項目名、表示/非表示などをユーザが自由にカスタマイズする機能追加の対応があった。 ユーザ独自のビューとして画面で見たり、ダウンロードして他のシステムに投入し…

Class#getEnumConstants() って初めて使った気がする

Enum#values() ある Enum の値を取得したい場合は Enum の static メソッドである values() を使う。 public enum Fruits { APPLE, ORANGE, BANANA; } Fruits.values(); この values() の実装は、コンパイラが生成してクラスに埋め込む。 言語仕様的には 8.9…