読者です 読者をやめる 読者になる 読者になる

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

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

Elastic {ON} 2017 3/7 ノート(1日目)

今日からElastic {ON}が始まった。会場はサンフランシスコのPier48という、AT&Tパーク近くの倉庫のようなイベント会場。キーノートを行う一番大きなセッション部屋はそれなりに大きい。 キーノート 日本のElastic {ON} Tourでもお見かけしたことのある、CTO…

PayaraのJMX Monitoring Service

この記事は Payara Advent Calendar 2016の12/23分の記事です。 昨日はsuke_masaさんのPayaraのバグを報告してみようでした。 明日は@yumix_hさんです。2016/8/1にリリースされた Payara Server 4.1.1.163 より、指定したJMX MBeanの値を定期的にロギングで…

Commons Lang 3.5 でJava EEにBreakerを組み込む

この記事は Java EE Advent Calendar 2016の12/13分の記事です。 昨日はsuke_masaさんの必要最小限のサンプルでThymeleafを完全マスターでした。 明日は@kazuhira_rさんです。Payara MicroやWildFly Swarmをベースとしたマイクロサービス対応の共通仕様の規…

コネクションプールの挙動差分によるバグ顕在化

この記事は Java EE Advent Calendar 2016の12/2分の記事です。 明日は@opengl_8080さんです。Java EEが使われているシステムは、改修を加え続けながら数年〜十年と運用し続けるライフサイクルの長いシステムが多くあります。アプリケーションを全面刷新する…

LogstashからIngest Nodeへの移行

ELK

Elasticsearch 5.xからはIngest Nodeを使うと、Logstashを使わなくてもElasticsearchでログの変換ができるとElastic社のスライドにまとまっていたので、LogstashからIngest Nodeへの移行についてメモ。 LogstashからIngest Nodeへの移行 今までFilebeatで集…

EmbulkでアクセスログをLogstash風に取り込む

ELK

トラブルシューティング時に、バッチ取り込みによるKibanaアクセスログ可視化を行う場合、ログの取り込みに掛かる時間は短い程嬉しい。もちろん測定条件やチューニングにも依存すると思うが、手元のマシン*1においては、Logstash2.2を使うより、Embulk v0.8.…

Kibana4.4.0の機能追加

ELK

2016/02/02にリリースされたkibana4.4.0に欲しかった機能が入っていたのでメモ。 詳細は公式のリリースノート Kibana 4.4 Release Notes を参照。4.1から起動スクリプトを含むRPMファイルもリリースされている。公式のダウンロード リンクにはなく、yum経由…

CentOS7でOpenJDKのソースツリー取得時に/dev/stdout: Permission denied

手元の環境を再構築したときにハマったのでメモ。 get_source.shでエラー CentOS7でOpenJDK9のソースコードを取得しようとすると、以下のようなエラーが発生してget_source.shでソースコードがhg cloneできない。 hg clone http://hg.openjdk.java.net/jdk9/…

JDK8(Linux 64bit)のデフォルトヒープサイズ

Oracleの公式ドキュメントには、-Xmxが未指定であった場合のエルゴノミクスによる最大ヒープサイズは『32GBを上限として、物理メモリの4分の1』書かれている。32GBは-XX:-UseCompressedOopsにより圧縮Oopを明示的に無効にした場合の最大デフォルトヒープサイ…

Javaバッチ処理のNFS向けファイルI/O

この記事は Java EE Advent Calendar 2015の12/7分の記事です。 明日は@btnrougeさんです。Java EEのAPIが直接関連する話ではなくて恐縮ですが、サーバサイドJavaでファイルI/Oを含むバッチ処理の性能Tipsをまとめます。テーマはjava.io.BufferedWriterクラ…

JavaOne 2015 4日目メモ (10/28)

JavaOne 4日目の夜には、毎年トレジャーアイランドでOracle Appreciation Event(オラクルによる感謝祭?)が行われ、有名な方のライブが行われる。今年はエルトンジョンとBECKだった。毎年寒いので、薄手のダウンなど暖かい服装が必須。4日目は以下のセッショ…

JavaOne 2015 3日目メモ (10/27)

3日目も晴れている。今年は週間天気予報に雨マークが出てたから折りたたみ傘を持ってたが、4回目で今のところ傘が必要なほどの雨に振られたことがない。今日は以下のセッションに参加。 [CON6712] Enhanced Process APIs [CON11284] JDK 9 Language and Tool…

JavaOne 2015 2日目メモ (10/26)

今日から各種テクニカルセッションの開始。jigsawのセッションにいくつか参加。 [TUT4416] Preventing Errors Before They Happen [CON2554] Java EE 8 Work in Progress [CON5118] Introduction to Modular Development [CON6821] Advanced Modular Develop…

JavaOne 2015 1日目メモ (10/25)

昨年よりも約1ヶ月遅いJavaOneが始まった。初日はコミュニティ主体のセッションであるユーザグループフォーラムと、キーノートがサンフランシスコのモスコーンセンタにて行われた。以下、参加メモ。 [UGF11082] WebSocket Perspectives [UGF11073] Who Wants…

WeldのProxyクラスはどこからやってくるか

CDIの参照実装 Weld では @Dependent を除いて、全てのCDI管理Beanは直接インスタンスがインジェクションされずに、以下のようにプロキシが設定*1される。 test.Message$Proxy$_$$_WeldClientProxy例外発生時のスタックトレースや、スレッドダンプでも見かけ…

JSF (mojarra) ステートレスビューを試してみる

JSF2.2のビッグチケットとして盛り込まれたステートレスビューですが、HttpSessionへのアクセス量を減らせるメリットの一方、制約事項もあります。Wildfly-9.0.0.CR2(mojarra-2.2.11)で色々と試してみたので以下にまとめます。 ステートレスビューの使い方 <f:view transient="true"></f:view>…

JSF (mojarra2.x) のデバッグログ出力

多くのアプリケーションのログカテゴリには、ログを出力しているパッケージ名(jp.co.test... など)が使われていますが、JSFの参照実装であるmojarra2.xでは少し異なる付与規則となっているため、以下にまとめます。 mojarraのログカテゴリ定義 mojarraのログ…

書籍「Javaパフォーマンス」を読んで

監訳者の@cero-tさんから頂きました。@cero-tさん、ありがとうございます。Javaパフォーマンス作者: Scott Oaks,アクロクエストテクノロジー株式会社(監訳),寺田佳央(監訳),牧野聡出版社/メーカー: オライリージャパン発売日: 2015/04/11メディア: 大型…

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

JavaOne2013レポート 9/23 (2日目)

理解できた範囲でキーノートの新しい発表というとAvatarのオープンソース化しかなかったので、2日目のセッションからまとめ。 Notify Your Mobile Clients by Integrating Push Networks and Java EE 7 [CON5073] RedHatのAeroGear開発者のセッション。 テー…

Java EE環境におけるCDIのデフォルト化

Java EE 7 に含まれるCDI1.1より、beans.xmlをアーカイブに含めなくてもCDIが有効となるように仕様が変更されました。この改善点、Java EE 6ユーザにとっては少し困惑する部分があったので、まとめておきます。CDIとはなんぞやについてはこちらもご参照くだ…