Re: Detecting multiple class loaders
- From: "Matt Humphrey" <matth@xxxxxxxx>
- Date: Wed, 19 Mar 2008 12:37:22 -0400
"Chris" <spam_me_not@xxxxxxxxxx> wrote in message
news:47e12e73$0$29056$9a6e19ea@xxxxxxxxxxxxxxxxxxxxxxx
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?
Have the writing code allocate a server socket on a rarely used port. If
successful, the file write can proceed. Otherwise, someone else has the
socket and is writing. Afer writing, release the socket. Note that the
socket is never actually used. Sockets are a global resource independent of
classloaders and allocation qualifies as atomic test-and-set.
Matt Humphrey http://www.iviz.com/
.
- Follow-Ups:
- Re: Detecting multiple class loaders
- From: Logan Shaw
- Re: Detecting multiple class loaders
- References:
- Detecting multiple class loaders
- From: Chris
- Detecting multiple class loaders
- Prev by Date: Re: Can Java read TOC cd?
- Next by Date: Re: Shell out without so many threads?
- Previous by thread: Detecting multiple class loaders
- Next by thread: Re: Detecting multiple class loaders
- Index(es):
Relevant Pages
|