[Seasar-user:5491] [s2Dao]PROCEDURE アノテーションの記述について

森脇 [E-MAIL ADDRESS DELETED]
2006年 12月 15日 (金) 14:26:47 JST


森脇と申します。

s2daoのPROCEDUREアノテーションについてお聞きしたい事があります。

開発環境
    ・oracle10g 10.1.0
    ・s2dao-1.0.39
目的
    Oracleのパッケージ化したストアドを実行したい。

以前、s2dao-1.0.34でパッケージ化したストアドを呼ぶ際、
PROCEDUREアノテーションの記述は"パッケージ名.プロシージャ名"形式に
してを問題なく実行できていました。

--------------------
@S2Dao(bean = Department.class)
public interface DepartmentProcedureDao {

    @Procedure("PACKAGE_NAME.PROCEDURE_NAME")
    Map getDepartmentList(String departmentCd);

}
--------------------

今回s2dao-1.0.39で上記と同様にPROCEDUREアノテーションの記述を
"パッケージ名.プロシージャ名"としたところ以下の様な例外が発生しました。

--------------------
org.seasar.framework.exception.SRuntimeException:
[EDAO0012]Storedprocedure(PACKAGE_NAME.PROCEDURE_NAME) not found
	at
org.seasar.dao.handler.AbstractBasicProcedureHandler.getProcedureMetaData(AbstractBasicProcedureHandler.java:283)
	at
org.seasar.dao.handler.AbstractBasicProcedureHandler.initTypes(AbstractBasicProcedureHandler.java:126)
	at org.seasar.dao.handler.ProcedureHandlerImpl.initialize(ProcedureHandlerImpl.java:29)
	at org.seasar.dao.impl.DaoMetaDataImpl.setupProcedureMethod(DaoMetaDataImpl.java:266)
	at org.seasar.dao.impl.DaoMetaDataImpl.setupMethodByAnnotation(DaoMetaDataImpl.java:253)
	at org.seasar.dao.impl.DaoMetaDataImpl.setupMethod(DaoMetaDataImpl.java:227)
	at org.seasar.dao.impl.DaoMetaDataImpl.setupMethod(DaoMetaDataImpl.java:223)
	at org.seasar.dao.impl.DaoMetaDataImpl.setupSqlCommand(DaoMetaDataImpl.java:217)
	at org.seasar.dao.impl.DaoMetaDataImpl.initialize(DaoMetaDataImpl.java:208)
	at org.seasar.dao.impl.DaoMetaDataFactoryImpl.createDaoMetaData(DaoMetaDataFactoryImpl.java:140)
	at org.seasar.dao.impl.DaoMetaDataFactoryImpl.getDaoMetaData(DaoMetaDataFactoryImpl.java:109)
	at org.seasar.dao.interceptors.S2DaoInterceptor.invoke(S2DaoInterceptor.java:51)
	at org.seasar.dao.pager.PagerS2DaoInterceptorWrapper.invoke(PagerS2DaoInterceptorWrapper.java:64)
	at
jp.co.shinkenad.addmul.dao.ProcedureDao$$EnhancedByS2AOP$$11e1e67$$MethodInvocation$$getBumonHaika0.proceed(MethodInvocationClassGenerator.java)
	at
jp.co.shinkenad.addmul.dao.ProcedureDao$$EnhancedByS2AOP$$11e1e67.getBumonHaika(ProcedureDao$$EnhancedByS2AOP$$11e1e67.java)
	at jp.co.shinkenad.addmul.dao.ProcedureDaoTest.test02(ProcedureDaoTest.java:53)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at junit.framework.TestCase.runTest(TestCase.java:164)
	at org.seasar.framework.unit.S2FrameworkTestCase.doRunTest(S2FrameworkTestCase.java:233)
	at org.seasar.extension.unit.S2TestCase.doRunTest(S2TestCase.java:89)
	at org.seasar.framework.unit.S2FrameworkTestCase.runBare(S2FrameworkTestCase.java:150)
	at junit.framework.TestResult$1.protect(TestResult.java:110)
	at junit.framework.TestResult.runProtected(TestResult.java:128)
	at junit.framework.TestResult.run(TestResult.java:113)
	at junit.framework.TestCase.run(TestCase.java:120)
	at junit.framework.TestSuite.runTest(TestSuite.java:228)
	at junit.framework.TestSuite.run(TestSuite.java:223)
	at org.junit.internal.runners.OldTestClassRunner.run(OldTestClassRunner.java:35)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
	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)
--------------------

ソースを確認したところs2dao-1.0.34の場合は"パッケージ名.プロシージャ名"形式で
PROCEDUREアノテーションを記述した場合、
org.seasar.dao.handler.AbstractBasicProcedureHandler.javaで
「DatabaseMetaData#getProcedures」の引数を
(パッケージ名, null, プロシージャ名)としていました。

s2-dao1.0.35以降はおそらくJIRA[DAO-5]対応だと思うのですが
(null, パッケージ名, プロシージャ名)
としているためResultSetが取得できず例外が発生しているようです。

一応、PROCEDUREアノテーションの引数を"プロシージャ名"だけや
"パッケージ名.スキーマ名.プロシージャ名"と指定すれば
動作することは確認できましたが、実際にPL/SQLで書くときのように
"パッケージ名.プロシージャ名"としたいのですが対応していただくことは可能でしょうか?

また、その他の解決方法等がありましたらご教示願います。


--------------------------------------
Start Yahoo! Auction now! Check out the cool campaign
http://pr.mail.yahoo.co.jp/auction/




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