[Seasar-user:21113] Re: SAStruts+S2JDBC Function内からcontainer.getComponentした場合に1回だけClassCastExceptionが発生する

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2011年 11月 2日 (水) 23:34:44 JST


小林 (koichik) です.

可能であれば,

> > > JSPからEL式使ってFunctionを呼び出していますが、そのFunction内の処理にて
(略)
> > > を実行してServiceクラスを通じてDBにアクセスしようとしていますが、

をやめるのが無難だと思います.
Service (DB) にアクセスするのは Action にして,その結果を
リクエストの属性に設定,JSP (EL/Function) からはそれを参照
するだけ.

それが難しければいろいろ諦めるしかありません.
少なくとも,Function から利用する Service や Dao 等を
HOT deploy にすることはできません.
後はそれらをどうやって切り離すか (パッケージを分けるか,
dicon に書くか) といった選択になります.


On Wed, 2 Nov 2011 16:12:12 +0900, 泉井透 <[E-MAIL ADDRESS DELETED]> wrote:

> 井上さま
> 有力な情報ありがとうございます。
> 
> CoolDeployで試したところ、エラーが出なくなったので同じ現象だと確認できました。
> 
> 対策案ですが、案2だと同じクラスが違うパッケージに2個できるということですよね?
> 特に私の場合、Serviceを2つ作ることになるので、同じ業務ロジックが2か所に存在することになり
> とても避けたい状況です。
> 
> 案3,4は、Serviceのクラスが大量に存在するため、そのために設定ファイルを避けたいというのが本音です。
> HotDeploy対象とならないというのも、開発の効率を考えると避けたいです。
> 
> ですので、案1の方法が一番スマートに感じるのですが、
> すべてのクラスをSmart Deploy対象にするというのは、結構複雑な問題なのでしょうか?
> 何か情報をお持ちであれば教えて頂ければ幸いです。
> 
> よろしくお願いします。
> 
> 2011年11月2日1:02 Manabu Inoue <[E-MAIL ADDRESS DELETED]>:
> 
> > 井上と申します。
> >
> > おそらく、Hot Deployを使用されていると思います。
> > 私も過去にハマって調べた結果、原因や対策を以下に書きました。
> > ご参考になれば。
> > http://d.hatena.ne.jp/learn/20090318/p1
> >
> > なお、対策として幾つか書いています(書いているもの以外にリフレクションを
> > 使う方法もあります)が、
> > http://ml.seasar.org/archives/seasar-user/2009-February/016916.html
> > や、ひがさんからコメントいただいているように、
> > 基本的には案2のSmart Deploy対象外クラスから対象クラスを参照しないように
> > するのが無難と思います。
> >
> > (11/11/01 23:18), 泉井透 wrote:
> > > こんにちは。
> > >
> > > JSPからEL式使ってFunctionを呼び出していますが、そのFunction内の処理にて
> > >
> > > final S2Container container = SingletonS2ContainerFactory.getContainer();
> > > HogeService hogeService = container.getComponent(HogeService.class);
> > >
> > > を実行してServiceクラスを通じてDBにアクセスしようとしていますが、下記の
> > > ようにClassCastExceptionが発生します。
> > > (getComponentの結果が、HogeServiceのインスタンスでない?)
> > > java.lang.ClassCastException:
> > > jp.xxx.xxx.service.HogeService$$EnhancedByS2AOP$$8ee5c0 cannot be cast
> > > to jp.xxx.xxx.service.HogeService
> > >
> > > 発生するのは起動後、初回の1回のみで、再度そのページを実行すると同じロ
> > > ジックが成功します(予定通り動作する)
> > >
> > > ちなみに、Functionを使用しているJSPに対するAction内では、普通にServiceを
> > > DIして使用していますが特に問題は発生していません。
> > >
> > > どなたか心当たりがある方、解決方法を教えてください。
> > > よろしくお願いします。
> > >
> > > --
> > >
> > > エボルブアイティワークス株式会社
> > > 泉井 透
> > > toru izui <[E-MAIL ADDRESS DELETED] <mailto:[E-MAIL ADDRESS DELETED]>>
> > > http://www.evolveit.jp <http://www.evolveit.jp/>
> > >
> > >
> > >
> > > _______________________________________________
> > > Seasar-user mailing list
> > > [E-MAIL ADDRESS DELETED]
> > > https://ml.seasar.org/mailman/listinfo/seasar-user
> >
> > _______________________________________________
> > Seasar-user mailing list
> > [E-MAIL ADDRESS DELETED]
> > https://ml.seasar.org/mailman/listinfo/seasar-user
> >
> 
> 
> 
> -- 
> 
> エボルブアイティワークス株式会社
> 泉井 透
> toru izui <[E-MAIL ADDRESS DELETED]>
> http://www.evolveit.jp
> 電話:03-6457-8330
> FAX:03-6457-8331
> 携帯:080-1286-4715


-- 
{
  name: "Koichi Kobayashi",
  mail: "[E-MAIL ADDRESS DELETED]",
  blog: "http://d.hatena.ne.jp/koichik/",
  twitter: "@koichik"
}



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