プログラマ38の日記

主にプログラムメモです。

雑記: Java開発ではまった思い出(JDBCやlog4J)

久しぶりに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側でやってくれてもいいのになーと思いました。

 

WebLogicWebServiceでbooleanの引数にnullを指定されエラー

@WebMethod(operationName = "doSample")  
public Result doSample(
      @WebParam(name = "p1") String  p1, 
      @WebParam(name = "p2") boolean  p2
  ) {

こんなWebServiceを作成しました。

p2にnullを指定されるとWebLogicのエラーが呼び出し元に返ります。nullならfalseに変換してくれないのかと驚きました。

 

Log4jlog4j.propertiesの設定が正しく動かない

 ログが指定したファイルに書き出されず、何がいけないのかずっと調べていましたが、結局別のチームで作成したjarの中に別のlog4j.propertiesが含まれていてそちらが優先されていました。

アプリケーションでは、かなり多くのjarを含んでいて原因を特定するのは大変でした。jarの中身を確認する際に次を使ったのですがとても便利でした。

jd-gui

早くて使いやすいUIです。

 

今となっては懐かしい思い出ですが、当時は余裕がなくて大変だったなー。