理系学生日記

おまえはいつまで学生気分なのか

java

Javaアプリから共有ライブラリが読み込めない問題(java.library.path と LD_LIBRARY_PATH)

なんか良くわからないエラー (no [ライブラリ名] in java.library.path みたいなヤツ) が出てきたのだけれど、解決方法が java.library.path の設定ではなく、LD_LIBRARY_PATH の設定だったりした。この手のエラーに苦しめられ続けており、そのあたり、ちょ…

maven と git-flow を使用したリリースフロー

ぼく自身、git-flow を利用するのは始めてで、Maven 力も低い。 そういう人間がリリース時にどうしようかとか考えても仕方がないので、先人に頼るかーと思っていたら、ちょうどいいエントリがあった。 Why I Never Use the Maven Release Plugin - DZone Jav…

モックサーバStubby4jの性能

モックサーバに Stubby4j というのがある。 一緒に働いている方に紹介してもらったんだけど、これすごく使いやすい。 使い方は README にわかりやすく書いてあるからそれを読んでもらえばよい。 この Stubby4J、性能テストにも使いたいことがあるから、どの…

Java に関する最後の雑誌?Java Magazine の購読

最近はもっぱらジャバジャバしているので、Java の雑誌でも読んで動向をウォッチしとかないとなぁなどと思っていた。 が、JAVA PRESS が死に、JavaWorld が廃刊になったこのご時世、雑誌としてはどうやってウォッチすれば良いのかなぁと思ったら Oracle が J…

Maven力の低い自分に送るMaven良い感じドキュメント

Maven 力が低くて、会社の人に迷惑かけている感じある。 Maven、基本的に 公式ドキュメント 読みにくいし全体像つかみにくいし、本読んでもなかなか詳細が分からないし何とかならんものかと思ってた。 Apache Maven 3 クックブック - 理系学生日記 思って探…

テスト前提が満たされている場合にのみJUnitのテストケースを実行したい

Java で JUnit のテストコードを書く場合、テスト実行環境がこういう前提を満たした場合にのみ、このテストを実行させるようにしたい、というようなケースが多々あります。 例えば、 テスト実行環境の OS に依存する テスト実行環境における特別なソフトウェ…

JCAとは何であるのか

Java SDK というのは、膨大な機能セットを提供してくれていますが、その中には暗号化に関するものがあり、このうち、暗号化に関する機能についてのフレームワークセットを JCA (Java Cryptography Architecture) と呼びます。 ちょっとこういう機能セットを…

Java プログラマーなら習得しておきたい Java SE 8 実践プログラミング

Java プログラマーなら習得しておきたい Java SE 8 実践プログラミングを読みました。タイトル長いな。Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング (impress top gear)作者:Cay S. HorstmannインプレスAmazonどの言語でもそうですが…

Loggerはstatic 変数にすべきか、インスタンス変数にすべきか

Logger は static 変数にすべきか、インスタンス変数にすべきかという話があります。 static 変数 public class Foo { private static Log log = LogFactory.getLog(Foo.class); .... } インスタンス変数 public class Foo { private Log log = LogFactory.g…

SLF4Jとはなにか

SLF4J とは何か。これ、わりと分かりづらい人もいるかと思います。SLF4J の FAQ にそのものズバリな回答があるんですけど、 What is SLF4J? SLF4J is a simple facade for logging systems allowing the end-user to plug-in the desired logging system at …

GoogleにおけるJava CamelCaseの決定方法 (ipv6Address? ipV6Address?)

一般に ObjectiveC だったり Java だったりといった言語は CamelCase で変数名やクラス名を付けるというのが定石のようになっていますが、世の中には「この言葉の CamelCase はどういう風になるんだろう」というのが曖昧になるケースがあります。 例えば IPv…

java のクラスパスをワイルドカードで指定する

大量の jar ファイルに依存している Java のバッチとかを走らせるとき、これらの jar ファイルに対するクラスパス(classpath) を通す必要があります。 これ、かつては for f in $(ls lib/*.{jar,JAR}); do CLASSPATH="${CLASSPATH}:$f" done java -cp $CLASS…

DBUnit から "Potential problem found: The configured data type factory 'class org.dbunit.dataset.datatype.DefaultDataTypeFactory' might cause problems with the current database" と怒られたあなたへ贈るメッセージ

あなたへ贈るメッセージ このFAQを読めや!!!!! 背景 DBUnit を使ったテストをしていてふとログを見てみると、以下のような WARN ログが出力されることがあります。 [main] WARN org.dbunit.dataset.AbstractTableMetaData - Potential problem found: T…

Composite パターン・Strategy パターンでの比較ロジック

実際には Composite パターンと Strategy パターンの組み合わせで比較条件をいくらでも複雑にできるという例です。 wikipedia:Composite パターン wikipedia:Strategy パターン 例えば 入力パラメータ a, b, c によって、特定ブロックを実行するか否かが複雑…

DBUnit でカラム値の比較をカスタマイズする

DBUnit の思想について - 理系学生日記 の記事の続きです。 DBUnit では、基本的にデータセット単位、あるいはテーブル単位で比較するので、このカラムの値がこういうときにはテストを OK としたい、というようなカラム値単位でのテスト制御を行うためにはち…

DBUnit の思想について

DBUnit というと、JUnit 徹底入門だったり、現場で使える Java ライブラリだったりで紹介されていることからも分かるように、それなりにユーザベースも広く、"DB 関連のテストをするにあたってそういうライブラリがある" という認識はわりと多くの方が持たれ…

DBUnit の IDataSet を JavaBean で表現する

DBUnit においては、DB に投入するデータセットは IDataSet と呼ばれる Interface によって規定されている。この記述だけではイメージが分かないが、これを実装したものをいくつか挙げれば、イメージを掴んで頂けると思う。 CSV ファイルからデータセットを…

SpringでBean名にエイリアスの名前を付ける

既存の Spring アプリケーションにおいて applicationContext.xml で特定の Bean が定義されており、それを別名の Bean として参照したい場合がある。 今回遭遇したケースでは - ロジック層用の applicationContext.xml が存在していて多数の Bean が定義さ…

複数のスレッドで同時にある処理を起動させたい

こういうときは CountDownLatch を使う。 latch、英語としては「掛け金」とかそういう意味だけど、その名の通り、スレッドに対して掛け金をかけておいて、掛け金を外したらスレッドが猪突猛進に走り出すイメージ。CountDownLatch では、コンストラクタに与え…

@ControllerAdvice を使(わ|え)ないときの、コントローラ横断例外ハンドラの実装

コントローラベースの例外ハンドラ Spring MVC といえば、その名の通り Spring が提供する MVC フレームワークで、Controller 等を POJO で実装することができます。 で、Controller 層で例外を送出した場合、単純に HTTP STATUS 500 を返却するのではなく、…

Java並行処理プログラミング

読んだ。 ISBN:978-4797337204:detailこの本、3 年前くらいにも一度読んでた。 並行 - 理系学生日記 なんで読んでたのか思い出してみると、あの頃ちょっとした流量制御をアプリケーションで実装する必要あったからだった。その流量制御っていうの、特定の API…

-XX:+PrintGCDetails で出力される GC ログの読み方

-XX:+PrintGCDetails を JVM に与えて起動させると、GC ログが詳細化される。 もともと、-verbose:gc を与えてると [GC 325407K->83000K(776768K), 0.2300771 secs] [GC 325816K->83372K(776768K), 0.2454258 secs] [Full GC 267628K->83769K(776768K), 1.84…

GC ログに関わる JVM コマンドラインオプションまとめ

Full GC による Stop the World でサーバが停止状態に…、そんなときに調査の助けになるのが GC のログ。Permanent 領域が溢れているのか、Java Heap が溢れているのか、Heap が溢れているのなら何のオブジェクトが溢れているのか、メモリリークが発生してい…

Java における class sun.reflect.GeneratedSerializationConstructorAccessor... または Java の Inflation について

まぁ GC の様子を見ていると、 Unloading class sun.reflect.GeneratedSerializationConstructorAccessor1 Unloading class sun.reflect.GeneratedSerializationConstructorAccessor2 Unloading class sun.reflect.GeneratedSerializationConstructorAccesso…

Log4J バグっぽい

Log4J 1.2.5 あたり、同期制御がうまくいってないバグがあるっぽい。Tomcat の処理滞留が発生してて、スレッドダンプとったら Log4J のログ出力時に待ちになってるスレッド大量にあった。 deadlock, log4j でググったら色々ヒットする。bugzilla にも登録さ…

SimpleDateFormat がマルチスレッドで使われて人間が不幸になる

人のソースレビューをしていると、SimpleDateFormat クラスが(暗黙のうちに)マルチスレッドで使いまわされるようなコードを見てしまいました。 Oracle Java Technologies | Oracle 前にも書いたけど、JavaDoc にも明記されているとおり、SimpleDateFormat は…

Callable と Future

そういえば、ExecutorService#submit が受け取ることができるのは古き良き Runnable に留まらず、Callable も受けとることができる。この Callable は Runnable#run と似たような call というメソッドを持っているのだけれど、この宣言がイカしていて、Inter…

ExecutorService を使ったスレッドプール実験

そういえば先日、Executor をはじめて使った。昔のソースを眺めていると、生で Thread を使い、その Thread を配列にプールしていて自作スレッドプールを作成していたことが判明したのだけれど、この頃から比較すると随分と時代は変わったのだと実感した。ま…

Cassandra に対する Java からの Insert

ここで Java を使うのは諸事情のためなのだけど、Cassandra に対するアクセスは Thrift 経由となる。じゃぁ Thrift って何よというと、公式では以下のように説明されている。 Apache Thrift - Home> Thrift is a software framework for scalable cross-lang…

ResultSet がメモリをモリモリ食い出す事案が発生

Oracle DB のテーブルに格納されたレコードのうち、SELECT した数十万レコード程度を ResultSet 経由で受け取るようにしていたところ、ResultSet#next を呼び出すループを回す毎に JVM のメモリが増えていく事案が発生。ヒープをあまり取っていないと、メモ…