[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends-ml 10234] Re: Effective Java 読書会 3 回目議事録



高橋(徹)です。

   "Murayama Toshikiyo <murayama@xxxxxxxxxxxxx>"さんは書きました:
> 話は変わりますが,クラスローダーが異なる場合は名前空間が異なる
> ので,同じ名前/同じ実装でも異なるクラスとして扱われると思い
> ますが,これは「たまたま名前が同じだけの別のクラス」で,実装が
> 同じ場合はその特殊な例と考えるべきなんじゃないでしょうか?
タイプセーフEnumが複数のクラスローダで利用される場合の問題点が
下記記事に載っています。サンプルコードもあります。
"Beware of Java typesafe enumerations"
http://www.javaworld.com/javaworld/javatips/jw-javatip122.html?

記事によれば、EJB/JSPを例に問題が生じるケースを説明しています。
・あるEJBが別のEJBのメソッドを起動する場合、EJBが別々の配布JARに
収められていると、異なるクラスローダーからロードされるかもしれな
い。双方のJARにEnumクラスが含まれており、それぞれでEnumクラスが
ロードされていたときに、EJB間でEnumクラスを含むデータをマーシャ
リングなしに交換すると問題が起きる。
(JSPの方は省略)

ということで、アプリケーションのパッケージングの問題でクラスロー
ダが異なる場合があるようです。この場合、同じクラスのつもりでアプ
リケーションを作っているので、「たまたま名前が同じだけの別のクラ
ス」として考えることはできないのではないかなと思います。

ただ、上記記事については、SunのサイトのJavaLiveにおいて、
Effective Javaの著者Joshua Bloch氏は「実際には問題にならないだろ
う」と述べています。
http://developer.java.sun.com/developer/community/chat/JavaLive/
2002/jl0212.html

以下に引用します。
------
 manuel: Did you read JavaWorld's Tip 122 about possible 
problems of typesafe enumerations? If so do you believe that 
using them in EJB(TM)s can be problematic? Personally I think 
that multiple class loader problems are not very likely to occur
 in reality and if so, many other pieces of code relying on 
object identity would break also.

Josh Bloch: I agree with you 100%. I don't believe it's a 
problem in practice. (I sent a letter with more details to the 
guy who wrote the JavaWorld article -- maybe it will show up in 
letters to the editor.) 
------

残念ながら、Joshua氏が書いたレターはJavaWorldには見当たりません
でした。

---
Toru TAKAHASHI
http://www.alles.or.jp/~torutk/oojava/