It would be nice, if we could focus on the discussion about the fluent api. What DM is, should be discussed on another thread. (there are already several ones ;))
I really appreciate the discussion about what DM is, but it is the wrong topic. Here we discuss the design proposal by Simone. Thx and Bye, Daniel 2012/2/19 Raffaele P. Guidi <[email protected]> > While I agree with michael, (it's my personal point of view on DM since > even before bringing it in apache) I have to say that having a simple ready > to use harness would have been useful and help adoption. That's why I > adopted the Cache static facade, which well served the case. I also have to > agree with daniel - this seems fluent but not so easy. > > My 2 cents.e > > Ciao, > R > Il giorno 19/feb/2012 05:24, "Michael André Pearce" < > [email protected]> ha scritto: > > > Question I pose to all of this is seeing the word user, which i think > > needs to be asked. > > > > What are you seeing DirectMemory as, a CacheStore which is the > > OffHeapStore (which is what terracottas own big memory is to EHCache) > which > > you can plug into existing Cache Frameworks,, which the project provides > > the modules to plug into such frameworks as JCR, JCache, OSCache, EHCache > > etc or are you trying to write a cahce framework from scratch? > > > > If its a CacheStore then really i think each plugin module such as im > > starting to write for EHCache and Mir is writing for JCR is where the > > configuration style and method sit etc, as long as developers writing the > > plugins know how to interact with the cache then that should be enough. > > User will use the frameworks already existing for configuration and these > > are well documented in those projects. > > > > If we're trying to write yet another Caching Framework, i don't > personally > > see the point, there are all ready good frameworks out there, and your > > better off concentrating on the actual improvements of the OffHeap store, > > e.g. bugs, speed, sizing needed on heap, concurrency etc. > > > > Mike > > > > > > On 19 Feb 2012, at 00:43, Daniel Manzke wrote: > > > > > Hey guys, > > > > > > Simone asked me to write my 2 cents for it. ;) > > > > > > Due to the fact, I had a lot to do with Simone and Guice, I just can > say > > > that I also really like fluent apis. But reading this apis feels like > > > trying to use fluent, where it doesn't fit. > > > > > > I often have problems with fluent apis, which have really long names > for > > > the method, because without them, it is not clear what they are doing. > > > (because to complex?!) > > > > > > {code} > > > /* Basic configuration APIs */ > > > Cache cache = DirectMemory.createNewInstance( new > > > CacheConfiguration() > > > { > > > > > > @Override > > > public void configure( CacheConfigurator cacheConfigurator ) > > > { > > > cacheConfigurator.buffers().count( 1 ); > > > cacheConfigurator.allocate(MemoryUnit); //(or what was > your > > > class? ram?) > > > cacheConfigurator.dispose().every(TimeUnit); > > > > > > cacheConfigurator.bind(Map.class).to(..); //use guice > ESDL > > - > > > Default Implementations should > > > > > > //never > > > have to be bound manually ;) > > > cacheConfigurator.bind(MemoryManager.class).to(..); > > > cacheConfigurator.bind(Serializer.class).to(..); > > > } > > > > > > } ); > > > {code} > > > > > > {code} > > > Pointer a = cache.allocatePointer( 1 ).Gb().identifiedBy( "Simo" > ); > > > Pointer b = cache.put( "Strored!" ).identifiedBy( "Raf" ); > > //expiring > > > depends on the default of the cacheConfiguration > > > Pointer b2 = cache.put( "Strored!" ).identifiedBy( "Raf" > > > ).expires().in(TimeUnit); > > > > > > Pointer d = cache.update( new Object() ).identifiedBy( "Olivier" > ); > > > Pointer e = cache.updateByteArray( new byte[0] ).identifiedBy( > > > "TomNaso" ) > > > {code} > > > > > > > > > Do you really have a put and putByteArray? That's hard. ;) And for my > > > cases, I would add a putStream(..)? :) > > > > > > (we have created a cache implementation with focus on files/document > > cache > > > (onheap, offheap, ...)) > > > > > > 2012/2/19 Simone Tripodi (Created) (JIRA) <[email protected]> > > > > > >> Adopt fluent APIs for bootstrapping the Cache and manage stored > objects > > >> > ----------------------------------------------------------------------- > > >> > > >> Key: DIRECTMEMORY-62 > > >> URL: > > https://issues.apache.org/jira/browse/DIRECTMEMORY-62 > > >> Project: Apache DirectMemory > > >> Issue Type: New Feature > > >> Reporter: Simone Tripodi > > >> Assignee: Simone Tripodi > > >> > > >> > > >> Hi all guys, > > >> > > >> as discussed some days ago, I started prototyping an EDSL embedded in > DM > > >> to make Cache APIs more "sexy" :) > > >> > > >> So, influenced by the past experience with Commons Digester - > influenced > > >> by Google Guice - I tried to identify the 2 phases in the Cache > > lifecycle > > >> > > >> * the "bootstrap" phase - where settings are used to instantiate the > > >> Cache; > > >> > > >> * the object store management. > > >> > > >> Current codebase has a mix of both and users have to be aware of > correct > > >> sequence of operations call, I mean, calling {{Cache.retrieve( "aaa" > )}} > > >> without having previously called {{Cache.init( 1, Ram.Mb( 100 ) )}} at > > the > > >> beginning of the program, would cause an error. That is why I recurred > > to a > > >> kind of "configuration" pattern to make sure Cache instance have to be > > >> configured first and then can be used: > > >> > > >> {code} > > >> /* Basic configuration APIs */ > > >> Cache cache = DirectMemory.createNewInstance( new > > >> CacheConfiguration() > > >> { > > >> > > >> @Override > > >> public void configure( CacheConfigurator cacheConfigurator ) > > >> { > > >> cacheConfigurator.numberOfBuffers().ofSize( 1 ); > > >> cacheConfigurator.allocateMemoryOfSize( 128 ).Mb(); > > >> cacheConfigurator.scheduleDisposalEvery( 10 ).hours(); > > >> > > >> > > >> cacheConfigurator.bindConcurrentMap().withJVMConcurrentMap(); > > >> > > >> > > cacheConfigurator.bindMemoryManagerService().withDefaultImplamentation(); > > >> > > >> cacheConfigurator.bindSerializer().fromServiceProviderInterface(); > > >> } > > >> > > >> } ); > > >> {code} > > >> > > >> Hoping that the code itself is clear enough, the {{DirectMemory}} > class > > >> accepts a {{CacheConfiguration}}, users have to override the {{ > > configure( > > >> CacheConfigurator )}} method, where describing the basic Cache > behavior, > > >> and will return a Cache instance. > > >> > > >> According to the DRY (Don't Repeat Yourself) principle, repeating > > >> "cacheConfigurator" over and over for each binding can get a little > > >> tedious, so there is an abstract support class: > > >> > > >> {code} > > >> cache = DirectMemory.createNewInstance( new > > >> AbstractCacheConfiguration() > > >> { > > >> > > >> @Override > > >> protected void configure() > > >> { > > >> numberOfBuffers().ofSize( 1 ); > > >> allocateMemoryOfSize( 128 ).Mb(); > > >> scheduleDisposalEvery( 10 ).hours(); > > >> > > >> bindConcurrentMap().withJVMConcurrentMap(); > > >> bindMemoryManagerService().withDefaultImplamentation(); > > >> bindSerializer().fromServiceProviderInterface(); > > >> } > > >> > > >> } ); > > >> {code} > > >> > > >> Once obtained the Cache instance, users can now start storing objects: > > >> > > >> {code} > > >> Pointer a = cache.allocatePointer( 1 ).Gb().identifiedBy( "Simo" > > ); > > >> Pointer b = cache.put( "Strored!" ).identifiedBy( "Raf" > > >> ).thatNeverExpires(); > > >> Pointer c = cache.putByteArray( new byte[0] ).identifiedBy( > "Izio" > > >> ).thatExpiresIn( 1 ).days(); > > >> > > >> Pointer d = cache.update( new Object() ).identifiedBy( "Olivier" > > ); > > >> Pointer e = cache.updateByteArray( new byte[0] ).identifiedBy( > > >> "TomNaso" ); > > >> {code} > > >> > > >> WDYT? > > >> > > >> -- > > >> This message is automatically generated by JIRA. > > >> If you think it was sent incorrectly, please contact your JIRA > > >> administrators: > > >> > > https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa > > >> For more information on JIRA, see: > > http://www.atlassian.com/software/jira > > >> > > >> > > >> > > > > > > > > > -- > > > Viele Grüße/Best Regards > > > > > > Daniel Manzke > > > > > -- Viele Grüße/Best Regards Daniel Manzke
