[Seasar-user:5018] [s2dao] 1.0.37 の新機能についてエラーが発生

森脇 [E-MAIL ADDRESS DELETED]
2006年 11月 9日 (木) 13:57:54 JST


森脇と申します。お世話になります。

先日リリースされたs2dao-1.0.37で追加された機能を試そうとしたところ
下記のようなエラーが発生しました。

1.メソッド名の末尾に「UnlessNull」が付いているUPDATEメソッドで作成されたSQLについて
    (1)生成されたSQLの構文が不正な為SQLが発行できない。
    (2)VersionNoがカウントアップされない。

2.UpdateAutoDynamicCommandのテストクラスである
    UpdateAutoDynamicCommandTestのテストが成功しない。


まず「1-(1)」についてですが、以下のような例外が発生しました。

----- ここから
ERROR 2006-11-09 13:09:15,390 [main] [ESSR0017]例外が発生しました。理由はjava.sql.SQLException:
Connection is closed
org.seasar.framework.exception.SXAException:
[ESSR0017]例外が発生しました。理由はjava.sql.SQLException: Connection is closed
	at org.seasar.extension.dbcp.impl.DBXAResourceImpl.doRollback(DBXAResourceImpl.java:75)
	at org.seasar.extension.jta.xa.AbstractXAResource.rollback(AbstractXAResource.java:193)
	at org.seasar.extension.dbcp.impl.XAResourceWrapperImpl.rollback(XAResourceWrapperImpl.java:137)
	at org.seasar.extension.jta.XAResourceWrapper.rollback(XAResourceWrapper.java:76)
	at org.seasar.extension.jta.TransactionImpl.rollbackResources(TransactionImpl.java:346)
	at org.seasar.extension.jta.TransactionImpl.rollback(TransactionImpl.java:320)
	at org.seasar.extension.jta.TransactionManagerImpl.rollback(TransactionManagerImpl.java:100)
	at org.seasar.extension.unit.S2TestCase.doRunTest(S2TestCase.java:92)
	at org.seasar.framework.unit.S2FrameworkTestCase.runBare(S2FrameworkTestCase.java:150)
	at junit.framework.TestResult$1.protect(TestResult.java:106)
	at junit.framework.TestResult.runProtected(TestResult.java:124)
	at junit.framework.TestResult.run(TestResult.java:109)
	at junit.framework.TestCase.run(TestCase.java:118)
	at junit.framework.TestSuite.runTest(TestSuite.java:208)
	at junit.framework.TestSuite.run(TestSuite.java:203)
	at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: org.seasar.framework.exception.SSQLException: [ESSR0072]SQLで例外(SQL=[UPDATE EMP SET
,deptno = ?,ename = ?,tstamp = ? WHERE empno = ? AND tstamp = ?], ErrorCode={1}, SQLState={2})
が発生しました
	at org.seasar.extension.dbcp.impl.ConnectionWrapperImpl.wrapException(ConnectionWrapperImpl.java:524)
	at
org.seasar.extension.dbcp.impl.ConnectionWrapperImpl.prepareStatement(ConnectionWrapperImpl.java:144)
	at org.seasar.extension.jdbc.util.ConnectionUtil.prepareStatement(ConnectionUtil.java:50)
	... 26 more
Caused by: java.sql.SQLException: Column not found: , in statement [UPDATE EMP SET ,deptno = ?,ename =
?,tstamp = ? WHERE empno = ? AND tstamp = ?]
	at org.hsqldb.jdbc.jdbcUtil.throwError(Unknown Source)
	at org.hsqldb.jdbc.jdbcPreparedStatement.<init>(Unknown Source)
	at org.hsqldb.jdbc.jdbcConnection.prepareStatement(Unknown Source)
	at
org.seasar.extension.dbcp.impl.ConnectionWrapperImpl.prepareStatement(ConnectionWrapperImpl.java:141)
	... 27 more
----- ここまで

生成されたSQLを見るたところ、UPDATE文のカラム名の前に
カンマがあり不正なSQL文になっていました。
UPDATE文を生成しているUpdateAutoDynamicCommand#setupSql 
71行目のカンマを付加する判定が、
プロパティ全体数のカウントで見ているため発生したと思われます。


「1-(2)」についてはテストを実施したところ以下の用なSQL文が発行されました。

----- ここから
UPDATE chiki_m SET ,chiki_nm = '東京',version_no = 0
WHERE chiki_cd = '01' AND version_no = 0
----- ここまで

UpdateAutoDynamicCommand#setupSqlで更新番号のカウントアップを
おこなっていないためと思われます。
また、テストは行っておらず憶測になりますがソースを見るかぎり
Timestampについても同じ現象が発生すると思います。


次に2.についてですが、現在公開されている「s2-dao-1.0.37.zip」を
ダウンロードしMaven2にて「mvn package」コマンドを実行したところ
BUILD FAILUREになりました。

次にEclipseにプロジェクトをインポート後、テストパッケージ(s2-dao/src/test/java)を指定し、
全てのテストを実行したところテストは何故か成功してしまいした。
しかし、UpdateAutoDynamicCommandTestのみをテストするとエラーが発生します。
これについてはよく分かりませんでした。すいません。



--------------------------------------
Protect Your PC Now ! -- 0 Yen Security Campaign
http://pr.mail.yahoo.co.jp/security/




Seasar-user メーリングリストの案内