[Seasar-user:10987] Re: [Teeda] 1.0.12-EA1-SNAPSHOT

kubo [E-MAIL ADDRESS DELETED]
2007年 10月 13日 (土) 11:05:59 JST


久保です。

> > ヌルポの発生箇所ですが、
> > 
> >     【BasicHandler】
> >     ValueType valueType = getValueType(argTypes[i]);
> >     try {
> >         valueType.bindValue(ps, i + 1, args[i]); // ★
> > 
> > valueTypeがnullではないかと思えるところです。
> > どうやら10月11日にValueTypes.getValueType(clazz);が
> > nullを返すように変更されているみたいで、それが原因のようです。
> > ちょっとDBFlute側の対応は考え中です。
> > 
> この辺は、S2JDBCの非互換性が見つかったので、直ぐに修正が入っています。
> ValueTypes.getValueType()は、引数がnullならObjectTypeを
> 返すように修正がはいっています。

おおっと、すいません。
ありがとうございます。

> 知らない型はnullを返すように変更したのは、
> 知らない型を適当にObjectTypeで処理するのは、
> 危険だし、データベースによる非互換性を生みやすいので
> はやめにnullぽで落ちて、対策を打ったほうが
> 堅いいう理由からです。
> 
> S2Daoまでは、確認して大丈夫だったので修正したのですが、
> DBFluteで困ってます?
> 困っている場合は、本当に知らない型でしょうか?
> args[i]がnullならObjectTypeが返ってくるはずです。

なるほど理解しました。

DBFluteではどうしても仕組みの都合上、Object型として
扱っている箇所があるためでした。


ただ、そういう明確な理由があるのであれば、

BasicHandler.bindArgs()にて
ValueType valueType = ValueTypes.getValueType(argTypes[i]);
if (valueType == null) {
    valueType = ValueTypes.getValueType(args[i]);
    if (valueType == null) {
        String msg = "不明な型:i=" + i + " argType=" + argTypes[i] + " args=args[i]";
        throw new XxxException(msg);
    }
}

というように、実際のValueの型でもgetValueType()をして
それでも無ければ、Exceptionというのはどうでしょうか?

これならば、本当に知らない型は例外となり、
実際はちゃんとした型だけとObject型で扱っている場合に、
正確な型のValueTypeで扱えるのではないかと思いました。






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