[Seasar-user:9046] Re: [Teeda] カスタムバリデータ内にあるDaoと同じDaoをページで使用するとエラーになってしまう

takemura [E-MAIL ADDRESS DELETED]
2007年 7月 9日 (月) 22:10:55 JST


竹村です


教えていただいた通りEntityをHOTからはずす事によってうまくいきました。
ありがとうございます。
ただ、前から不思議に思っていたのですがDAOから返されるEntityはなぜ
アスペクトがかかったような状態になるのでしょうか


また、同じ理由かわからないですがvalidatorをクリアした後に
daoにPageオブジェクトを渡すと(いい作り方ではないですけど)
一番最初にメーリングリストに投稿したエラーが発生してしまいます。
java.lang.IllegalArgumentException: object is not an instance of
declaring class



Page
public Class doSearch(){
empItems = empDao.searchEmp(this);
return null;
}

---
Dao
---
@SqlFile
public List<EmpDto> searchEmp(EmpSearchPage condition);



empDao.searchEmp(Page)のPageをthisではなくnew して値をセットして
検索するとうまくいきます。



以下スタックトレースです

DEBUG 2007-07-09 22:02:58,046 [http-8080-Processor25] BEGIN
jp.co.hoge.app1.dao.EmpDao#searchEmp(jp.co.hoge.app1.web.search.EmpSearchPage$$EnhancedByS2AOP$$[E-MAIL ADDRESS DELETED])
DEBUG 2007-07-09 22:02:58,078 [http-8080-Processor25] END
jp.co.hoge.app1.dao.EmpDao#searchEmp(jp.co.hoge.app1.web.search.EmpSearchPage$$EnhancedByS2AOP$$[E-MAIL ADDRESS DELETED])
Throwable:java.lang.IllegalArgumentException: object is not an instance
of declaring class
DEBUG 2007-07-09 22:02:58,078 [http-8080-Processor25] トランザクションを
ロールバックしました
java.lang.IllegalArgumentException: object is not an instance of
declaring class
	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 org.seasar.framework.util.MethodUtil.invoke(MethodUtil.java:73)
	at
org.seasar.framework.beans.impl.PropertyDescImpl.getValue(PropertyDescImpl.java:188)
	at org.seasar.dao.node.BindVariableNode.accept(BindVariableNode.java:59)
	at org.seasar.dao.node.ContainerNode.accept(ContainerNode.java:34)
	at org.seasar.dao.node.IfNode.accept(IfNode.java:58)
	at org.seasar.dao.node.ContainerNode.accept(ContainerNode.java:34)
	at
org.seasar.dao.impl.AbstractDynamicCommand.apply(AbstractDynamicCommand.java:66)
	at
org.seasar.dao.impl.SelectDynamicCommand.execute(SelectDynamicCommand.java:50)
	at
org.seasar.dao.interceptors.S2DaoInterceptor.invoke(S2DaoInterceptor.java:53)
	at
org.seasar.dao.pager.PagerS2DaoInterceptorWrapper.invoke(PagerS2DaoInterceptorWrapper.java:71)
	at
jp.co.hoge.app1.dao.EmpDao$$EnhancedByS2AOP$$60a77c$$MethodInvocation$$searchEmp6.proceed(MethodInvocationClassGenerator.java)
	at
org.seasar.framework.aop.interceptors.TraceInterceptor.invoke(TraceInterceptor.java:70)
	at
jp.co.hoge.app1.dao.EmpDao$$EnhancedByS2AOP$$60a77c$$MethodInvocation$$searchEmp6.proceed(MethodInvocationClassGenerator.java)
	at
jp.co.hoge.app1.dao.EmpDao$$EnhancedByS2AOP$$60a77c.searchEmp(EmpDao$$EnhancedByS2AOP$$60a77c.java)
	at
jp.co.hoge.app1.web.search.EmpSearchPage.doSearch(EmpSearchPage.java:118)
	at
jp.co.hoge.app1.web.search.EmpSearchPage$$EnhancedByS2AOP$$d77ed3.$$doSearch$$invokeSuperMethod$$(EmpSearchPage$$EnhancedByS2AOP$$d77ed3.java)
	at
jp.co.hoge.app1.web.search.EmpSearchPage$$EnhancedByS2AOP$$d77ed3$$MethodInvocation$$doSearch2.proceed(MethodInvocationClassGenerator.java)
	at
org.seasar.extension.tx.RequiredInterceptor.invoke(RequiredInterceptor.java:48)
	at
jp.co.hoge.app1.web.search.EmpSearchPage$$EnhancedByS2AOP$$d77ed3$$MethodInvocation$$doSearch2.proceed(MethodInvocationClassGenerator.java)
	at
org.seasar.framework.aop.interceptors.ThrowsInterceptor.invoke(ThrowsInterceptor.java:73)
	at
jp.co.hoge.app1.web.search.EmpSearchPage$$EnhancedByS2AOP$$d77ed3$$MethodInvocation$$doSearch2.proceed(MethodInvocationClassGenerator.java)
	at
org.seasar.framework.aop.interceptors.TraceInterceptor.invoke(TraceInterceptor.java:70)
	at
jp.co.hoge.app1.web.search.EmpSearchPage$$EnhancedByS2AOP$$d77ed3$$MethodInvocation$$doSearch2.proceed(MethodInvocationClassGenerator.java)
	at
jp.co.hoge.app1.web.search.EmpSearchPage$$EnhancedByS2AOP$$d77ed3.doSearch(EmpSearchPage$$EnhancedByS2AOP$$d77ed3.java)
	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 org.seasar.framework.util.MethodUtil.invoke(MethodUtil.java:73)
	at
org.seasar.framework.beans.impl.BeanDescImpl.invoke(BeanDescImpl.java:213)
	at
org.seasar.teeda.extension.html.impl.HtmlComponentInvokerImpl.invoke(HtmlComponentInvokerImpl.java:159)
	at
org.seasar.teeda.extension.html.impl.HtmlActionListener.processAction(HtmlActionListener.java:62)
	at javax.faces.component.UICommand.broadcast(UICommand.java:149)
	at
org.seasar.teeda.extension.component.html.THtmlCommandButton.broadcast(THtmlCommandButton.java:53)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:192)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:117)
	at
org.seasar.teeda.core.lifecycle.impl.InvokeApplicationPhase.executePhase(InvokeApplicationPhase.java:29)
	at
org.seasar.teeda.core.lifecycle.AbstractPhase.execute(AbstractPhase.java:55)
	at
org.seasar.teeda.core.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:94)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:92)
	at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at
org.seasar.teeda.core.filter.RequestDumpFilter.doFilter(RequestDumpFilter.java:125)
	at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
	at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at
org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:63)
	at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
	at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at
org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:64)
	at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
	at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at
org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:62)
	at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
	at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
	at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
	at
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
	at
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	at java.lang.Thread.run(Thread.java:595)
DEBUG 2007-07-09 22:02:58,093 [http-8080-Processor25] END
jp.co.hoge.app1.web.search.EmpSearchPage#doSearch() : null
DEBUG 2007-07-09 22:02:58,093 [http-8080-Processor25] BEGIN
jp.co.hoge.app1.web.search.EmpSearchPage#prerender()
DEBUG 2007-07-09 22:02:58,109 [http-8080-Processor25] トランザクションを
開始しました
DEBUG 2007-07-09 22:02:58,109 [http-8080-Processor25] クラス
(jp.co.hoge.app1.dto.UserDto[userDto])のコンポーネント定義を登録します
DEBUG 2007-07-09 22:02:58,109 [http-8080-Processor25] BEGIN
jp.co.hoge.app1.dao.DeptDao#selectAll()
DEBUG 2007-07-09 22:02:58,125 [http-8080-Processor25] SELECT Dept.id,
Dept.DEPT_NAME, Dept.DEPT_NO, Dept.loc, Dept.VERSION_NO FROM Dept
DEBUG 2007-07-09 22:02:58,125 [http-8080-Processor25] END
jp.co.hoge.app1.dao.DeptDao#selectAll() :
[[E-MAIL ADDRESS DELETED],
[E-MAIL ADDRESS DELETED], [E-MAIL ADDRESS DELETED],
[E-MAIL ADDRESS DELETED]]
DEBUG 2007-07-09 22:02:58,125 [http-8080-Processor25] BEGIN
jp.co.hoge.app1.dxo.LabelValueDxo#deptToMap([[E-MAIL ADDRESS DELETED],
[E-MAIL ADDRESS DELETED], [E-MAIL ADDRESS DELETED],
[E-MAIL ADDRESS DELETED]])
DEBUG 2007-07-09 22:02:58,140 [http-8080-Processor25] END
jp.co.hoge.app1.dxo.LabelValueDxo#deptToMap([[E-MAIL ADDRESS DELETED],
[E-MAIL ADDRESS DELETED], [E-MAIL ADDRESS DELETED],
[E-MAIL ADDRESS DELETED]]) : [{label=ACCOUNTING, value=1},
{label=RESEARCH, value=2}, {label=SALES, value=3}, {label=OPERATIONS,
value=4}]
DEBUG 2007-07-09 22:02:58,140 [http-8080-Processor25] トランザクションを
コミットしました
DEBUG 2007-07-09 22:02:58,140 [http-8080-Processor25] END
jp.co.hoge.app1.web.search.EmpSearchPage#prerender() : null
DEBUG 2007-07-09 22:02:58,140 [http-8080-Processor25] クラス
(jp.co.hoge.app1.web.layout.Layout2Page[layout_layout2Page])のコンポーネ
ント定義を登録します
DEBUG 2007-07-09 22:02:58,187 [http-8080-Processor25] BEGIN
jp.co.hoge.app1.web.layout.Layout2Page#prerender()
DEBUG 2007-07-09 22:02:58,187 [http-8080-Processor25] トランザクションを
開始しました
DEBUG 2007-07-09 22:02:58,203 [http-8080-Processor25] トランザクションを
コミットしました
DEBUG 2007-07-09 22:02:58,203 [http-8080-Processor25] END
jp.co.hoge.app1.web.layout.Layout2Page#prerender() : null
DEBUG 2007-07-09 22:02:58,234 [http-8080-Processor25]


DEBUG 2007-07-09 22:02:58,234 [http-8080-Processor25] HOT deployを終了し
ました









Shinpei Ohtani さんは書きました:
> 大谷です.
> 
> 下記のようにconvention.diconを修正して、
> EntityをHOTの対象からはずせば上手くいくと思います.
> 
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
> 	"http://www.seasar.org/dtd/components21.dtd">
> <components>
> 	<component class="org.seasar.framework.convention.impl.NamingConventionImpl">
> 		<initMethod name="addRootPackageName">
> 			<arg>"z4"</arg>
> 		</initMethod>
> 		<initMethod name="addIgnorePackageName">
> 			<arg>"z4.entity"</arg>
> 		</initMethod>
> 	</component>
> </components>
> 
> 根本的な原因の対策にはなっていませんが、
> 参考にしてみてください.
> 宜しくお願いします.
> 
> 07/07/09 に Yasuo Higa<[E-MAIL ADDRESS DELETED]> さんは書きました:
>> ひがです。
>>> 竹村です
>>>
>>>> 出来ればサンプルのコードなどを提供してもらえると幸いです
>>> 現象が発生する最低限に絞ったソースを添付させて頂きました。
>>>
>>> 自分でもいろいろやってみてエラーになるケースをまとめてみました。
>>>
>>> 1.COOLデプロイだと平気でHOTデプロイだとエラーとなってしまう。
>>> 2.validatorメソッド内でdaoを実行する前にreturnすると平気。そして
>>> daoを実行して(検索系)戻り値がnullの場合は平気。戻り値があって
>>> validateをスルーすると(エラーとしない)次のPageのdoメソッド内で
>>> daoを実行したときにエラーとなってしまいます。
>>>
>>> 前回とは違って今度はClassCastExceptionが発生してしまいました
>>>
>> Validatorをdiconファイルに登録してはいないでしょうか。
>> ValidatorのパッケージはSMART deployのルールどおりなので、
>> 何も登録しなくても認識されるはずです。
>>
>> よろしくお願いします。
>>
>> --
>> Yasuo Higa
>> [E-MAIL ADDRESS DELETED]
>> _______________________________________________
>> Seasar-user mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>
> 
> 




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