mmh, you're right, if someone explicitly set the default / thread bus, we can't afford to have that GC-ed, as we can't be sure we'll be able to re-create an equivalent one later, while the user would expect that to be in place. To be honest, even this solution (soft ref for bus created by magic) might expose to possible side effects, given -for instance- the bus creation process depends on the current thread context classloader. This argument is probably something not that relevant after all, but I still believe this kind of changes should be documented / included in migration notes [1].
Cheers
Alessio

[1] btw, I think the other changes for CXF-3142 have been merged to 2.3.x already by Dan, right?


On 11/23/2010 10:50 PM, Benson Margulies wrote:
An additional thought:

if a bus is being created 'by magic', refer to it softly, either
default or per-thread.

If someone, on the other hand, makes an _explicit_ call to set a
default bus, reference it strongly.


On Tue, Nov 23, 2010 at 4:15 PM, Benson Margulies<[email protected]>  wrote:
I just realized that I didn't really do the whole job. Arguable, the
per-thread busses should be sitting in a

WeakHashMap<Thread, Reference<Bus>>, with SoftReferences. Otherwise,
the implicit bus hangs around just as effectively as it's creating
thread's default bus.

That make sense?


On Tue, Nov 23, 2010 at 3:06 AM, Alessio Soldano<[email protected]>  wrote:
Hi Benson,
don't get me wrong, I'm fine with the changes, just saying that this needs
to be documented :-)
Cheers
Alessio

On 11/22/2010 07:43 PM, Benson Margulies wrote:
But the GC will only hammer you if you are low on memory, no?
Particularly if it's soft. If you are that low on memory, isn't
recreating the CXF bus all the time the least of your performance
problems?

I feel a need to win an argument here; I'll change to Soft, and if you
don't want to migrate, don't migrate.


On Mon, Nov 22, 2010 at 12:30 PM, Alessio Soldano<[email protected]>
  wrote:
+1 on adding this to the migration notes, this could be a major change
for
those just using jaxws api


On 11/22/2010 05:34 PM, Daniel Kulp wrote:
On Saturday 20 November 2010 4:18:29 pm Benson Margulies wrote:
It's not weak. Nothing ever sets it to null. I propose to declare it
as a WeakReference.
There are SOME usage patterns that this change would make much slower.
I'm
thinking of the case where you use the pure JAX-WS API's and just
  create
clients as needed, make a call, discard the client.    In that case, the
Bus
would then be dereferenced and GC'd.   That would cause everything that
it
caches (like the WSDL's) to also be GC'd.  Thus, the next client to be
created
needs to re-create it all.     Obviously the workaround is to have them
hold
the bus strongly someplace (or re-use the proxies), but it is a behavior
change.

I think I'd suggest two things:

1) This should only be done on trunk (and migration note it for 2.4)
2) Change to a SoftReference, not a WeakReference.   Should mitigate the
issue
a bit.

Thoughts?

--
Alessio Soldano
Web Service Lead, JBoss



--
Alessio Soldano
Web Service Lead, JBoss




--
Alessio Soldano
Web Service Lead, JBoss

Reply via email to