スレッドダンプの森で覚えた死のロックへの違和感:現場から学ぶWebアプリ開発のトラブルハック(11)(1/3 ページ) 本連載は、現場でのエンジニアの経験から得られた、APサーバをベースとしたWebアプリ開発における注意点やノウハウについて解説するハック集である。現在起きているトラブルの解決や、今後の開発の参考として大いに活用していただきたい。(編集部) スレッドダンプはトラブルハックに非常に有効 Javaを用いたシステムで発生したトラブルを解析する際、スレッドダンプは非常に有効な手掛かりを指し示してくれる。 例えば、連載第3回の「【実録ドキュメント】そのログ本当に必要ですか?」ではログ出力がボトルネックとなったトラブルを、解析ツールを用いたスレッドダンプ解析により発見している。また、連載第10回の「ThreadとHashMapに潜む無限回廊は実に面白い?」では、レースコンディション(競合
Javaで階層が深くなってしまったクラスや何らかのフレームワークを使っているときに、自分を呼び出している class/method を知りたいとき。 ref - 補足(いいわけ?)001 Throwable t = new Throwable(); // [0]は自分自身、[1]が呼び出し元。 StackTraceElement element = t.getStackTrace()[1]; String className = element.getClassName(); System.out.println( className + "/" + element.getMethodName() ); これは面白い。ってか面白すぎる なんか Reflection を初めて知った時の感動が... これは面白いもの作れるかも
Sun Microsystems社より公開されているJVMの公式仕様『Java仮想マシン仕様(The Java Virtual Machine Specification)』(以下、JVM仕様)には、JVMで利用可能なバイトコードの仕様が説明されています。 JVM仕様では、バイトコードの命令列は、人間が読み取ることができるアルファベットの命令名(ニーモニック)と、その数値表現である1byteのオペコードで構成されています。クラスファイルはオペコードのみで構成されており、単なるバイナリデータです。試しにクラスファイルをテキストエディタで開いてみても、画像などのバイナリデータと同様に、文字にならないデータが表示されるだけです(クラスやフィールド、メソッドの名前は、バイトコード内にそのまま文字列として保存されているので、そこだけは何とか読み取ることができます)。 それでは、生成されたクラスファイ
GraphQL.js の buildSchema でカスタム Scalar 型を利用してみました。 サンプルコードは こちら はじめに GraphQL.js では Scalar 型を GraphQLScalarType のインスタンスとして実装するようになっており、ID (GraphQLID) や Int (GraphQLInt) 等の基本的な型が用意されています。(src/type/scalars.ts 参照) 用意されていない型は自前で定義する事ができ、例えば以下のような日付型のカスタム Scalar(名前は Date とする)は下記のように実装できます。 GraphQL 上は文字列として表現し、内部的に JavaScript の Date 型を使用 実装例 - カスタム Scalar の Date 型 const GraphQLDate = new GraphQLScalarType
まぁ、JavaDocに書いてあるんですが、すぐに「あれどこに書いてあったっけ?」と忘れるのでメモ。 executor.shutdown(); try { if (!executor.awaitTermination(60, TimeUnit.SECONDS)) { executor.shutdownNow(); if (!executor.awaitTermination(60, TimeUnit.SECONDS)) { System.out.println("ExecutorService did not terminate"); } } } catch (InterruptedException e) { executor.shutdownNow(); Thread.currentThread().interrupt(); }
ブログ等に掲載されているHttpComponentのサンプルコードは、重要なところが端折られて紹介されている(というか間違っている事を知らずに書いている疑惑すらある)ことが多いので、正しいサンプルコードを書いておく。 まぁ、ここだけでなくApache HttpComponentsのドキュメントもちゃん読みましょう。あ、Androidのリファレンスにはロクに使い方が書いてないので、あんなゴミだけ読んでてもダメですよ。 要点 ポイントは2つ。 ResponseHandlerを使ってコードを書く HttpResponseの内部リソースを自動で解放してくれるので、ミスがなくなり、コードも簡潔になる。ブログ等ではHttpResponseを使わないコードもよく掲載されているが、リソースの解放処理が記述されていないことが多いのであまりよろしくない。 なお、ResponseHandlerを使わずに自分でリ
日頃より、アレスネットをご愛顧いただきまして誠にありがとうございます。 「ホームページサービス」のサービス提供は2016年1月31日をもちまして終了させていただきました。 これまで長らくご利用いただき、誠にありがとうございました。 今後も、皆様によりよいサービスをご提供させていただけるよう、サービス品質向上に努めて参りますので、何卒、ご理解いただけますようお願 い申し上げます。 <アレスネットをご契約のお客様へ> 後継サービスとして「userwebサービス」を提供させていただいております。 詳しくは、以下のリンクをご参照ください。 ▼「userwebサービス」のご案内 http://www.ejworks.info/userhp/alles/index.html 今後ともアレスネットをご愛顧いただけますようお願い申し上げます。 株式会社イージェーワークス アレスネット カスタマーサポート
JDK6 Update10 Beta12(AMD64用)をインストールしたらインストーラが途中でエラーとなりました。ダウンロードしたファイルが完全ではないかと疑い、ハッシュ値(MD5)を確認しようと思い、JavaでファイルのMD5ハッシュ値を取る方法を調べました。 また、別件で作っているプログラムでソケットの受信を開始/停止できるようにしたかったのですが、スレッドに割り込み(interrupt)をしてもソケットのブロックした読み出しはInterruptedExceptionになりません。Java読書会の前回本「Java並行処理プログラミング」を読み直してソケットの同期I/Oでブロックしているスレッドをキャンセルする方法を確認しました。 ファイルのMD5を取る 以下の2つのクラスを使えば数行で実現可能でした。 java.security.MessageDigestクラス java.secur
表形式のデータを簡単に扱いたいときに、CSV(Comma Separated Values)形式を用いる方法があります。CSVでは、データの各要素をカンマ(「,」)で区切り、改行がそのままデータ行の区切りを表します。CSVデータは、一般に「.csv」という拡張子の付いたテキストファイルとして保存されます。テキストエディタだけでなく、Microsoft Excelなどの表計算ソフトでも読み込むことができ、閲覧や編集が簡単なため、よく利用されます。 本稿では、CSV形式のデータをJavaで扱うときの基本的な手順を紹介します。サンプルとして、以下のCSVデータを扱います。このデータは、日本の作家の生年/没年を表しています。 解説 CSVデータの読み込みには、コアAPIのjava.io.BufferedReaderクラスと、java.util.StringTokenizerクラスを併用します(J2
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く