見習いプログラミング日記

Javaを中心に色々なことを考えてみます。目指せ本物のプログラマ。

PostgreSQL JDBCドライバのタイムアウト設定

OracleのJDBCドライバと同様に、PostgreSQLのJDBCドライバにも同様のタイムアウト設定が用意されています。@yamadamnさんがWebLogicServer + Oracle JDBC向けにまとめた資料Oracle JDBCドライバプロパティの活用を参考に、WildFly + PostgreSQL版のタイムア…

CDI1.2によるbean-discovery-modeの見直し

2014年4月にCDI仕様のマイナーアップデート CDI1.1 -> CDI1.2 *1が行われ、@java.inject.Singletonが付与されたクラスはデフォルトではインジェクションできるBean対象から外れました。後方互換性のない変更であるため、以下にまとめます。 default bean-dis…

-XX:+DisableExplicitGCに関するJDK7とJDK8の違い

この記事は JVM Advent Calendar 2014の12/5分の記事*1です。昨日は @jyukutyoさんのJITWatchでJITコンパイルを見よう!でした。HotSpotには-XX:+DisableExplicitGCというオプションがありますが、この挙動がJDK8のリリースから変わっていたのでまとめます。…

書籍「詳解Tomcat」を読んで

本書のレビューアの方から頂いたので読んでみました。以下、感想です。詳解 Tomcat作者: 藤野圭一出版社/メーカー: オライリージャパン発売日: 2014/12/26メディア: 大型本この商品を含むブログを見る最近、Twitterのタイムラインで『はじめてのXXXや、XXX …

Apache ShiroでBCryptを使う

先日のJava EE Advant Calander 2014にApache Shiroを使ってみましたを書いたところ、Shiroのデフォルトのハッシュポリシーソルト付きSHA-256, 500000 イテレーションについて、ハッシュイテレーションのアルゴリズムをShiroのように独自実装せずに、総当た…

GlassFish4.1をなおしてみた

この記事は GlassFish Advent Calendar 2014の12/25分の記事です。昨日は @backpaper0さんのGlassFishでセッションIDを生成してるところでした。2013/11にGlassFishの商用サポートの終了がアナウンスされて私も不安に思っていましたが、冷静に考えるとGlassF…

Apache Shiro を使ってみました

この記事は Java EE Advent Calendar 2014の12/17分の記事です。昨日は @glory_ofさんのJAX-RSのレスポンスでした。明日は@nagaseyasuhitoさんです。Java EE8では、『使い方が複雑・各APサーバ固有のレルム設定がよくわからん』とあまり評判のよくないセキュ…

MavenのJAX-WSプラグイン

まだまだエンタープライズな分野ではJAX-WSがシステム間連携に使われることが多い。wsdlからスタブを生成するMavenプラグインの使い方に関するメモ。 JAX-WS Mavenプラグイン https://jax-ws-commons.java.net/jaxws-maven-plugin/ にJAX-WSの参照実装Metro…

PDFBoxで取得したテキストの空白置換

SlideShareがやっているように、PDFスライドから抽出したしたテキストから、改行やタブを半角スペース1つに置換を試みた際にはまったのでメモ。取得したいのはSlideShareのページ下部に表示されているこの文字列。 1. PDFBoxでテキスト抽出 PDFTextStripper.…

JavaOne2014 4日目メモ (10/1)

サンフランシスコ市街地のスーパーに水を買いにいったら、キャベツ太郎が売ってたので思わず写真を撮る。2.49ドル、日本でいうとポッキーよりも高級なお菓子になっている。以下のようなセッションに参加。 Everything You Wanted to Know About Writing Asyn…

JavaOne2014 3日目メモ (9/30)

今日も晴れていて、過ごしやすい気候。3回目のJavaOneでも雨に振られたことがないので、サンフランシスコは雨が少ない地域なのだろうか。 Building a Distributed Application for the Cloud with Akka Clustering and Java 8 [TUT6483] Playフレームワーク…

JavaOne2014 2日目メモ (9/29)

2日目。朝は霧が出ていて少し寒いが、日中になると日差しが出て半袖でも良いくらい暑くなる。今日から本格的にセッションの開始。 Java EE 8 [CON3015] Java EE8のスペックリードであるLinda DeMichielさんによる、Java EE 8の現状の方針を話すセッション。J…

JavaOne2014 1日目メモ (9/28)

JavaOne2014の初日はコミュニティが主体のユーザグループフォーラム(UGF)と、キーノートがサンフランシスコのモスコーンセンタにて行われた。カメラとPCを繋ぐケーブルを家に忘れたので、写真は後日追加予定。以下、荒い部分も数多くあるがセッション参加メ…

HeapStatsをChefでインストールする

HotSpotJVMの監視・解析OSSツールであるHeapStatsをChefでインストールできるようにクックブックを作ってみた。n-agetsu/chef-heapstats n-agetsu/chef-heapstats · GitHubHeapStatsとはなんぞやについては、JJUGナイトセミナーなどのスライドやキャスレー技…

JDK8からあるちょっと嬉しいGCログオプション

JDK8およびJDK8u20では、GCログに関連する2つの便利な機能が追加されている。いずれの機能も2014/8現在最新のJDK7 update 67 には含まれていないが、JDK7u80にてバックポートされる予定。 GCログにpidと日付を含める (JDK8より) JAVA_OPTS="$JAVA_OPTS -Xlog…

Hibernateのバッチ更新効果を実測してみる

JPA

Hibernateには内部的にjava.sql.Statement.addBatch()およびexecuteBatch()を使ってバッチ更新でSQLを発行するオプションhibernate.jdbc.batch_sizeがある。 デフォルトは無効となっているが、1トランザクションで大量のエンティティを登録する処理において…

JPAで少しずつデータを処理する方法を考える

JPA

OutOfMemoryErrorの主な要因例として、DBMSからデータを取得しすぎがあります。LASYフェッチによるN + 1 問題を回避するために、結合先テーブルの要素を一気に持ってくるJOIN FETCHを使ったところ、引き換えにJavaヒープ使用量が多くなるのはよくあるケース…

クラスローダリークとヒープダンプ

Java EE を使っている人なら多くの人が遭遇するクラスローダリーク。EclipseなどのIDEでホットデプロイしながら開発していると、突然APサーバから応答がなくなったり、java.lang.OutOfMemory : PermGenが出力されたりする。原因についてはnekopさんのスライ…

EJBタイマーサービスを使う

定番のスケジュール実行としてはcronがあるが、Java EEにおいても同様の機能が用意されている。Java EE 5以前では『x秒後に実行する』ような機能しかなかったが、Java EE 6(WLS12c/JBossEAP6など)以降ではcron風にカレンダー形式で設定ができる。 使い方 Jav…

トラブルに備えるJVMオプション

以前の記事でトラブルが起きた後の初動対応を書いてみたが、いざトラブルに遭遇すると、まず再起動してからどうするか考えるケースが多いと感じている。しかし何も情報がないと『情報がない/再現方法が不明』などの理由からそのままお蔵入りになってしまう。…

GrowthForecastでJBossの運用状況をグラフ化する

アプリケーションサーバでありがちなトラブルとしてDB接続プールの枯渇がある。原因はチューニングミスやSQLが長時間化してプールにコネクションが返って来ないなど色々とあるが、負荷試験時にモニタリングしておくと多くの問題は事前に検知・対処できる。JB…

Javaトラブルに応じた初動対応のまとめ

Javaトラブルでは『情報がなくて、再現もなかなかしません』といった状況に陥ることがある。このような状況を回避するために、以下の3つの代表的なトラブルを例に、アプリケーションサーバを再起動する前に何を取得すれば良いのかをまとめてみる。 アプリケ…

コネクションプーリングの効果を実測してみる

Java EE アプリケーションサーバを使うとどの製品にもDBコネクションプーリング機能が付いている。DB接続の再接続にはコストがかかることがこの機能の動機だが、いったいどれくらいの『コスト』なのか。あまり実データを見たことないので、実際に測ってみる…

Java SE 7のProcessBuilderでリダイレクト

Java SE 7よりJavaから外部コマンドを実行できるProcessBuilderに便利な機能が追加されている。pingを実行してファイルにリダイレクトが簡単にできるなど、派手ではないが嬉しい機能追加である。以下では、追加された機能を使って色々なpingを実行してみる。…

ProcessBuilderの中を覗いてみる

UNIXカーネルの設計を読んでいて以下のような記述を見つけたとき、ふと疑問が浮かんだ。 UNIXカーネルの設計 p164 7.1 プロセスの生成 UNIXオペレーティングシステムで利用者が新しいプロセスを作る唯一の方法は, forkシステムコールを呼び出すことである。 …

CDI1.1からのデフォルト化で少し困ったこと

この記事はGlassFish Advent Calendar 2013の21日目の記事です。昨日はHASUNUMA Kenji(@btnrouge)さんのGlassFish 4.0のCDIに潜む罠でした。 明日はMako Yanagisawaさんです。よろしくお願いします。以前の記事にも書きましたが、2013年5月にリリースされた…

CDIをはじめよう

少し時間が経ってしまいましたが、2013年11月のJJUGナイトセミナーで Java EE 6 から導入されたDI/AOP仕様であるCDIについて話す機会を頂きました。 JJUG 11月ナイトセミナー CDIをはじめよう from Norito Agetsuma 補足 : インタフェースを作るべきか 資料…

CDIでアプリケーション設定をインジェクション

この記事は Java EE Advent Calendar 2013 の12/8分の記事です。昨日はHirofumi Iwasakiさんの WebLogicをGlassFishの商用版として使う方法 です。 明日は@emaggameさんです。よろしくお願いします。CDI と Commons Configrationと組み合わせて、アプリケー…

AeroGear SimplePushServer でプッシュ通知

日本Javaユーザグループ主催のJavaOne報告会2013で、プッシュ通知についてLTの機会を頂きましたが、SimplePushが何者なのかあまり説明していなかったのでまとめます。 当日のスライド TODO : SlideShareのリンクを張ること SimplePushとは プッシュ通知登録…

JavaOne2013レポート 9/24 (3日目)

3日目は Java SE と Java EE のセッションに参加。Java SE のセッションは理解できなかったのも多いので、レポートというよりは備忘録。 Developers’ Introduction to HotSpot Internals [CON6446] セッションのテーマはJava仮想マシン入門について。Java仮…