Download the JMX RI, and look at the source code for
com/sun/management/jmx/Introspector.java and in particular the for loop
that begins on line 386 and ends on line 397. This is where it generates
the attribute list (by combining entries for getters and setters).
The logic here looks very sketchy to me - here's my pseudocode:
for(i=0; i<vector.size(); i++) {
...
if(readable and writeable) {
vector.removeElementAt(i);
}
}
To me, it looks like that will skip element i+1: when you remove
i, then i+1 becomes i, then you loop and increment to the new i+1 which
used to be i+2...
Now, if i+1 happened to be setURL, it may get skipped, and bad
things could happen.
This is pretty hypothetical, since I still haven't been able to
consistently reproduce the problem, but if you could examine this sequence
in your debugger with the problem, I would *love* to see what you get...
Aaron
On Wed, 4 Oct 2000, Oleg Nitz wrote:
> I tried to trace what happens and found out that in
> ConfigurationService.save() in the line
>
> if (attributes[i].isReadable() && attributes[i].isWritable())
>
> attributes[i].isWritable() for "URL" is evaluated as "false"
> (of course, should be "true", since XADataSourceLoader.setURL() method
> exists).
> Any ideas?
>
> Best regards,
> Oleg
>
>
>