I don't enjoy using JBoss Logging for that reason :) I always have to get down to the JavaDoc or figure out the list of available params to understand what debug* does for example and which one I need.
I guess that's taste and for something like JBoss Logging, a fluent API is costly (unnecessary object creation etc). On 16 mai 2011, at 20:01, David M. Lloyd wrote: > As a rule I've never cared about exploding the number of methods on an > API class as long as: > > 1. There are few basic functions - i.e. get is get, and regardless of > which overload we're talking about it behaves consistently - and the > large number of methods is due mainly to overloads > 2. The end user is not expected to ever need to implement the interface > > For example, org.jboss.logging.Logger has about a zillion methods but > they all boil down to: log, trace, debug, info, warn, error, fatal. So, > there's relatively little confusion possible. > > Just FWIW... > > On 05/16/2011 12:57 PM, Sanne Grinovero wrote: >> I don't like the TCCL either, so I'll repeat my suggestion from two >> weeks ago to just have: >> >> Cache c = cacheManager.getCache( cacheName, classLoader ); >> >> sounds reasonable to me to have the application declare it's intentions once >> ? >> >> BTW I don't like >> >> "cache.get(K key, Class<V> clazz)" >> >> as we're not speaking only about the get(K) method, but about many >> methods and this will explode the number of method of Cache; on the >> other hand I think it;s acceptable to have a single Cache instance >> used by a single application/classloader. You can still have multiple >> applications share the same underlying cache and use different >> classloaders: >> >> getCache( cacheName, classLoader ) would return a delegate to the >> original cache, having a specific marshaller in the invocation context >> as Trustin was suggesting. >> >> Cheers, >> Sanne >> >> >> 2011/5/16 Pete Muir<pm...@redhat.com>: >>> >>> On 16 May 2011, at 18:20, Galder Zamarreño wrote: >>> >>>> >>>> On May 12, 2011, at 11:18 AM, Dan Berindei wrote: >>>> >>>>> On Wed, May 11, 2011 at 11:18 PM, David Bosschaert<da...@redhat.com> >>>>> wrote: >>>>>> On 11/05/2011 17:54, Dan Berindei wrote: >>>>>>> On Wed, May 11, 2011 at 7:08 PM, Pete Muir<pm...@redhat.com> wrote: >>>>>>>> Were we developing for OSGi I would certainly agree with you. However >>>>>>>> in many environments today we can reasonably expect the TCCL to be set >>>>>>>> and to be able to load the classes we need. So whilst making it part >>>>>>>> of the API is the safest option, it's also making complicated an API >>>>>>>> for the sake of the few at the cost of the many. Further this also >>>>>>>> seems kinda nasty to me. We know the class (and hence bundle/module) >>>>>>>> when we put the object into Infinispan, therefore why do we require >>>>>>>> people to respecify this again? >>>>>>>> >>>>>>>> David, can we not actually do something here akin to what we are >>>>>>>> discussing for Weld? Whereby we can serialize out the bundle id and >>>>>>>> then find the correct CL based on that when we deserialize. >>>>>>> What if the object is a java.util.ArrayList? Each element in the list >>>>>>> could belong to a different bundle, so you'd have to write a bundle id >>>>>>> for every element in the list. >>>>>> Yes, if you know the Bundle-SymbolicName and Version (or the Bundle ID) >>>>>> you can find its classloader. >>>>>> >>>>>> On the other question, if you're passing in a class object then you can >>>>>> obtain its classloader and hence the bundle where it came from. But, and >>>>>> I think this is what Dan allused to above, is it always true that the >>>>>> class your passing in comes from the bundle that you need to have or >>>>>> could it also come from one of its parent class loaders? >>>>>> >>>>> >>>>> Exactly David, sorry if my message was a little cryptic. I think in >>>>> order to handle every case properly you would have to go through the >>>>> entire object graph being stored in the cache in order to find all the >>>>> classloaders/bundle ids that you will need on get(). >>>>> >>>>> That seems like a lot of overhead to me, and forcing the user to >>>>> provide the classloader doesn't seem that bad in comparison. Perhaps >>>>> we should use something other than a thread-local for this though, so >>>>> that users can do a onto the result of a >>>>> cacheManager.getCache("A").usingClassLoader(A.class) and never have to >>>>> provide the classloader again. >>>>> >>>>> In fact I think this is a good idea for the invocation flags we >>>>> already have, too. It would involve creating lots of overloads in >>>>> CacheDelegate with a PreInvocationContext parameter and a new >>>>> CacheDelegateWithContext class to invoke those methods, but the public >>>>> API would remain the same. >>>> >>>> No matter how I look at it, putting a classloader in a thread local makes >>>> me shiver. >>> >>> I also wonder why we want do this, given we already have a construct called >>> the Thread Local Context Classloader ;-) >>> >>> Either we use that, or use some other mechanism. >>> >>>> Just imagine the mayhem you can cause if you "forget" to clear the thread >>>> local. >>>> >>>> I've done enough of Apache Commons Logging support to understand that you >>>> should limit the references to classloaders to the minimum, particularly >>>> in system classes/infrastructure. >>>> >>>> If we need to end up forcing users to register classloaders in these >>>> scenarions, we need to do it in such way that either: >>>> >>>> - we can detect these leaks (it might be a bit primitive now but old JBoss >>>> JCA code had an interesting way of discovering unclosed open connections) >>>> >>>> - if we give you on trying to detect them, the impact of a leak is reduced >>>> as much as possible. >>>> >>>> Cheers, >>>> -- >>>> Galder Zamarreño >>>> Sr. Software Engineer >>>> Infinispan, JBoss Cache >>>> >>>> >>>> _______________________________________________ >>>> infinispan-dev mailing list >>>> infinispan-dev@lists.jboss.org >>>> https://lists.jboss.org/mailman/listinfo/infinispan-dev >>> >>> >>> _______________________________________________ >>> infinispan-dev mailing list >>> infinispan-dev@lists.jboss.org >>> https://lists.jboss.org/mailman/listinfo/infinispan-dev >>> >> >> _______________________________________________ >> infinispan-dev mailing list >> infinispan-dev@lists.jboss.org >> https://lists.jboss.org/mailman/listinfo/infinispan-dev > > > -- > - DML > _______________________________________________ > infinispan-dev mailing list > infinispan-dev@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/infinispan-dev _______________________________________________ infinispan-dev mailing list infinispan-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/infinispan-dev