2014年8月5日火曜日

[DB]pg_restoreするときに’pg_restore: [archiver] input file is too short (read 0, expected 5)’が発生する

pg_dump -F cでダンプしたファイルをpg_restoreするときは-F cをつけないと題名のエラーが出る場合があります。 確認したバージョンはpg_dump、pg_restoreともに9.1.5です。

2014年1月7日火曜日

[Java]eclipseのクイック・フィックスを使って、serialVersionUIDがついていない全てのSerializable実装クラスにデフォルト・シリアル・バージョンIDを自動生成する

1. SuppressWarningsアノテーションを削除する

eclipse上で、次の文字列を正規表現で検索し、空白で置換する。

@SuppressWarnings\(\"serial\"\)\r\n 


2. serialVersionUIDがついていないクラスを見つける

eclipseの設定→Java→エラー/警告→潜在的なプログラミングの問題→serialVersionUID…、を「エラー」にしてしまう。(警告でもいいが、その方がより分かりやすいので)

これで、serialVersionUIDがついていないクラスが、「問題」ビューで「エラー」として確認できるようになる。(つまり、他にエラーがあると邪魔なので、そちらは対処すること)


3. クイック・フィックスのときに自動生成されるコメントを編集する


eclipseインストールデフォルトだと、コメントアウト行だけ自動生成時されてしまい、何のコメントも入らないので、何かコメントを入れたいときはこれをやっておく。

eclipseの設定→Java→コード・スタイル→コード・テンプレート→コメント→フィールド、で付けたいコメントに変更する。なお、これは他のフィールドにも影響があるので、終了後元に戻す。


4. クイック・フィックスする

「問題」ビューでserialVersionUIDが付いていないクラスを選択し、右クリック→クイック・・フィックスを選択する

「すべて選択」し、「デフォルト・シリアル・バージョンIDの追加」を選択する。これで、全てのSerializeble実装クラスにserialVersionUIDが付与される。

3.のコメントを元に戻して終了。


Eclipse 3.7 Indigo で上記手順、確認済み。

2013年9月22日日曜日

[Java][FindBugs]”VA_PRIMITIVE_ARRAY_PASSED_TO_OBJECT_VARARG”とは

FindBugs 2.0.2 / Java 6で検知できるパターンID:(VA_PRIMITIVE_ARRAY_PASSED_TO_OBJECT_VARARG)の意味が良くわかっていなかったのでメモしておきます。

このパターンについて、FindBugsのバグエクスプローラによる説明を改めて見てみます。
このコードは可変引数をとるメソッドにプリミティブ型の配列を渡しています。これは結局、要素型が配列である、サイズ1の配列が生成されて、その要素にこのプリミティブ型の配列が格納されてメソッドに渡されることになります。 
どういうことなの…?
そこで以下のコードを考えてみます。

 /**
  * 可変長引数に渡す変数がオブジェクトとプリミティブ型で挙動が異なる。
  */
 private void execute() {

  // オブジェクトの配列を渡す
  List<Integer> integerList = Arrays.asList(new Integer[] { 1, 2 });

  // プリミティブ型の配列を渡す
  List<int[]> intList = Arrays.asList(new int[] { 3, 4 });

 }
Arrays.asListは可変長引数を持つメソッドです。ローカル変数であるintegerListとintListの型を見てみると、integerListはIntegerのリストなのに、intListはint配列のリストになっています
直感的には、intListもintのリストになってくれてもいい気がします。
 
ここで、改めてバグエクスプローラの説明を見ます。
なるほど、確かにその通りでした。

結論としては、可変引数のメソッドはオブジェクトとプリミティブ型で挙動が違うから気をつけろ、ということが言いたいんですね。
まあ、上記コードのように戻り値があれば、違いは明らかなので問題は起きないと思います。

ちなみに、上記コードではFindBugsによって検知されません。

2013年9月12日木曜日

2013年7月26日金曜日

JSPからJNLPを生成する。jsp generate jnlp

jnlpにパラメータを渡して実行できる利点があります。 ファイル名はrun.jsp(仮)
<%
//  JSPを記述
response.setHeader("Content-Disposition", "attachment;filename=run.jnlp");
%>

<?xml version="1.0" encoding="Shift_JIS"?>
<jnlp spec="0.2 1.0" codebase="http://xxx.x.x.x/">
     <!-- JNLPを記述 -->
</jnlp>

keytool error: java.lang.IllegalStateException: masked envelope

/jdk/bin/keytool 実行時に発生した例外
keytool error: java.lang.IllegalStateException: masked envelope
単純に出力先に.keystoreが存在していただけ。削除し、再度実行したら発生しなくなくなりました。 実行環境がJava4なので、もはや見ることは無いと思いますがメモ。

2013年4月30日火曜日

Oracle 11 テーブル一覧を確認するSQL

set linesize 300
column table_name format a40
column tablespace_name format a20
select table_name, tablespace_name, status from user_tables;