[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 メーリングリストの案内