[infinispan-dev] Configuration reference - final solution

Manik Surtani manik at jboss.org
Fri Aug 21 06:33:21 EDT 2009


Yeah, looks good to me.  :-)

Could you also pls create a wiki page - perhaps linked to http://www.jboss.org/community/wiki/InfinispanQuickStartGuideforDevelopers 
  - on how to create new configuration elements.

Basically, creating a new configuration variable should entail:

1.  Adding setter and getter to the Configuration bean?   What else?
2.  Annotating accordingly - which annotations?  Where?  On setter?
3.  Javadoc accordingly - any custom tags to use?
4.  Unit tests and sample cfg files to ship?  Where are these?

Also, you should blog about this - and link to this wiki page in your  
blog!

Thanks!
Manik

On 21 Aug 2009, at 11:28, Vladimir Blagojevic wrote:

> On 21/08/09 12:18 PM, Manik Surtani wrote:
>> I would say this should be on the infinispan-dev list - but the  
>> list is broken at the moment!  :P
>>
>> On 21 Aug 2009, at 11:14, Vladimir Blagojevic wrote:
>>
>>> Hey,
>>>
>>> We have two options for the final HTML configuration reference  
>>> solution:
>>>
>>> - keep things as they are and maintain our documentation  
>>> annotations (CofigurationElement, ConfigurationAttribute etc)
>>> - implement a new solution based on XML Schema and javadoc comments
>>>
>>> Since you are familiar with the first let me explain the second.  
>>> The new solution loads created XML Schema using XSOM library and  
>>> creates in-memory tree representation of that schema. Once that is  
>>> done it is very simple to create exact same reference as it is  
>>> today, however, the content would be coming from source file  
>>> javadoc, not annotations as it is today. We would simply document  
>>> our Java classes that correspond to XML schema elements with  
>>> special @ tags. All documentation related to attributes, general  
>>> element description in configuration reference would be coming  
>>> from our own javadoc @tags.
>>>
>>> One shortcoming of the new solution is that not all types of  
>>> loaders would be documented. Recall, how different loaders allow  
>>> special properties and how these are documented in configuration  
>>> reference. Proposed new solution would not contain these but as a  
>>> trade-off we would get rid of all these ConfigurationElement  
>>> annotations. Hmmm, now that I am writing this email I realize that  
>>> it would be still possible to do document all these different  
>>> loaders but it would require a bit more effort - an extra day or  
>>> two. It is doable.
>>
>> What does the 2nd solution entail by way of dependencies?  I assume  
>> we already have all of the JSXB deps we need?
> There extra two dependencies: xsom.jar and relaxngDatatype.jar
>
>> Perhaps a few more deps for the generation tool, but nothing more  
>> for the distro/runtime?
>
> Yes, strictly in tools project. These would not go into distro.
>>
>> Also, is there any impact (performance-wise or anything else) on  
>> the runtime?
>
> Maybe on tools execution time but infinispan runtime absolutely not.
>
>>
>> Finally, what are these extra Javadoc tags going to look like?   
>> Could you show us a short sample?
>
>   /**
>    *
>    * @configElementRef locking
>    * @configElementDoc any documentation here
>    */
>   @XmlAccessorType(XmlAccessType.PROPERTY)
>   private static class LockingType  extends  
> AbstractNamedCacheConfigurationBean{
>
>
>      /** The serialVersionUID */
>      private static final long serialVersionUID =  
> 8142143187082119506L;
>
>      @Dynamic
>      private Long lockAcquisitionTimeout = 10000L;
>
>      private IsolationLevel isolationLevel =  
> IsolationLevel.READ_COMMITTED;
>
>      private Boolean writeSkewCheck = false;
>
>      private Boolean useLockStriping = true;
>
>      private Integer concurrencyLevel = 500;
>
>      /**
>       *  @configElementDoc reference documentation here
>       */
>      @XmlAttribute
>      public void setLockAcquisitionTimeout(Long  
> lockAcquisitionTimeout) {
>         testImmutability("lockAcquisitionTimeout");
>         this.lockAcquisitionTimeout = lockAcquisitionTimeout;
>      }
>
>      /**
>       *  @configElementDoc reference documentation here
>       */
>      @XmlAttribute
>      public void setIsolationLevel(IsolationLevel isolationLevel) {
>         testImmutability("isolationLevel");
>         this.isolationLevel = isolationLevel;
>      }
>
>      /**
>       *  @configElementDoc reference documentation here
>       */
>      @XmlAttribute
>      public void setWriteSkewCheck(Boolean writeSkewCheck) {
>         testImmutability("writeSkewCheck");
>         this.writeSkewCheck = writeSkewCheck;
>      }
>
>      /**
>       *  @configElementDoc reference documentation here
>       */
>      @XmlAttribute
>      public void setUseLockStriping(Boolean useLockStriping) {
>         testImmutability("useLockStriping");
>         this.useLockStriping = useLockStriping;
>      }
>
>      @XmlAttribute
>      public void setConcurrencyLevel(Integer concurrencyLevel) {
>         testImmutability("concurrencyLevel");
>         this.concurrencyLevel = concurrencyLevel;
>      }
>   }

--
Manik Surtani
manik at jboss.org
Lead, Infinispan
Lead, JBoss Cache
http://www.infinispan.org
http://www.jbosscache.org







More information about the infinispan-dev mailing list