ITコンサルの日常

ITコンサル会社に勤務する普通のITエンジニアの日常です。

blancoDb Enterprise Edition 1.3.0 (Beta1)動きました。

MySQL4.0.26 + WindowsXP SP2 + JSE5(1.5.0_04)でAntタスクによる実行で動作しました。ソースが自動生成される様をみて、Railsと似てるなぁと思ってしまいました。http://d.hatena.ne.jp/nowokay/20051114で、Javaにはウィザードが必要だとおっしゃってますが、blanco Frameworkもそういう流れの一つになるような気がします。
さて、blancoDbですが、早速オレオレベンチにかけてみたところ、二つほど問題がありました。
オレオレベンチ: http://taka-2.com/jclass/ORMapper/index.html
問題その1: 自動生成ソースの一部がコンパイルエラーとなる

Compiling 46 source files to C:\work\project\OR\build\classes
C:\work\project\OR\src\blancodb\query\SimpleCustomerSelectAllIterator.java:183: シンボルを見つけられません。
シンボル: メソッド setID(int)
場所    : blancodb.row.SimpleCustomerSelectAllRow の クラス
        result.setID(fResultSet.getInt(1));
C:\work\project\OR\src\blancodb\query\SimpleCustomerSelectAllIterator.java:184: シンボルを見つけられません。
シンボル: メソッド setNAME(java.lang.String)
場所    : blancodb.row.SimpleCustomerSelectAllRow の クラス
        result.setNAME(fResultSet.getString(2));
C:\work\project\OR\src\blancodb\query\SimpleCustomerSelectIterator.java:117: シンボルを見つけられません。
シンボル: メソッド setID(int)
場所    : blancodb.row.SimpleCustomerSelectRow の クラス
        result.setID(fResultSet.getInt(1));
C:\work\project\OR\src\blancodb\query\SimpleCustomerSelectIterator.java:118: シンボルを見つけられません。
シンボル: メソッド setNAME(java.lang.String)
場所    : blancodb.row.SimpleCustomerSelectRow の クラス
        result.setNAME(fResultSet.getString(2));

のように、本来setIdやsetNameでなければならないところが、setIDやsetNAMEになってしまっています。テーブル定義を表示してみると、

mysql> desc customer;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| ID    | int(11)     |      | PRI | 0       |       |
| NAME  | varchar(16) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql>

となっているのですが、他のクラスは問題ないため、Captalizeを忘れているのでしょうか。それとも、MySQLMySQLJDBCドライバの問題なんでしょうか。。

問題その2: 連続INSERTや連続DELETEがかなり遅い
3テーブルに100件ずつINSERTするのに4秒くらいかかってますが、JDBC直でやった場合は80msくらいなので、二桁オーダーが違っちゃってますね。。SimpleCustomerInsertInvokerのインスタンスは使いまわししているのですが、内部でPreparedStatementの使いまわしは行われていないので(出来るかどうかは別として)、それが原因の一つと言えるかも知れません。
→誤報でした。すみません。。Connection#setAutoCommit(false)してなかったため、毎行コミットしていたのが性能低下の要因だったようです。