久しぶりにJavaを使うことがありました。
だいぶ前に、JavaのWeb開発をしていてその時にはまったことをふと思い出しました。
WebLogicのDataSourceのConnectionをcloseしておらずエラー
インスタンスを起動してしばらくすると、DBのConnectionが取得できずエラーになる現象が発生していました。調べた結果、Connectionを最後にcloseしていないことが判明。
Context ctx = null;
Hashtable ht = new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL,"t3://hostname:port");
Connection conn = null;
try{
ctx = new InitialContext(ht);
javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup ("myDataSource");
conn = ds.getConnection();
・・・・・・ //途中の処理
conn.close(); //必ず必要
絶対にcloseが必要ならWebLogic側でやってくれてもいいのになーと思いました。
WebLogicのWebServiceでbooleanの引数にnullを指定されエラー
@WebMethod(operationName = "doSample")
public Result doSample(
@WebParam(name = "p1") String p1,
@WebParam(name = "p2") boolean p2
) {
こんなWebServiceを作成しました。
p2にnullを指定されるとWebLogicのエラーが呼び出し元に返ります。nullならfalseに変換してくれないのかと驚きました。
Log4jのlog4j.propertiesの設定が正しく動かない
ログが指定したファイルに書き出されず、何がいけないのかずっと調べていましたが、結局別のチームで作成したjarの中に別のlog4j.propertiesが含まれていてそちらが優先されていました。
アプリケーションでは、かなり多くのjarを含んでいて原因を特定するのは大変でした。jarの中身を確認する際に次を使ったのですがとても便利でした。
早くて使いやすいUIです。
今となっては懐かしい思い出ですが、当時は余裕がなくて大変だったなー。