Re: Detecting multiple class loaders
- From: Arne Vajhøj <arne@xxxxxxxxxx>
- Date: Sat, 29 Mar 2008 22:26:04 -0400
Chris wrote:
Is there any way to detect when a class has been loaded by two different class loaders?
Our app has a class that reads and writes a file on disk. The file gets corrupt if more than one process gets at it at once. We can detect multiple processes by locking the file on disk and throwing an error; no problem. We can control access by multiple threads using synchronization. So far, so good.
The problem is Websphere. When this class gets used in a webapp, Websphere, like most other app servers, creates a classloader just for that webapp. But it does more than that; it creates multiple classloaders and they all load the class independently. And we get corruption.
Other than fix Websphere (and we're working on it), is there another way, in general, we can use to ensure that only one classloader within a JVM loads a given class?
Put the class in a place where it will be loaded by the same
classloader for all web apps.
Classloaders always try to delegate to their parent, so if the
class can be loaded by a classloader that is ancestor to all the
relevant classloader it will be loaded by that. And therefore
only exist in one copy.
And no need to "fix" WebSphere, because this is how Java and
app servers are supposed to work.
Arne
.
- References:
- Detecting multiple class loaders
- From: Chris
- Detecting multiple class loaders
- Prev by Date: Re: file output in java : Notepad gives weird results
- Next by Date: Re: Appending data to 2 tables in a 1:1 relationship
- Previous by thread: Re: Detecting multiple class loaders
- Next by thread: Shell out without so many threads?
- Index(es):
Relevant Pages
|