[jboss-jira] [JBoss JIRA] (AS7-4090) Opimize organization and management of the Infinispan subsystem

Richard Achmatowicz (JIRA) jira-events at lists.jboss.org
Thu Oct 25 14:46:02 EDT 2012


    [ https://issues.jboss.org/browse/AS7-4090?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12729247#comment-12729247 ] 

Richard Achmatowicz commented on AS7-4090:
------------------------------------------

Conversion is finished. Some points follow.

Resource Hierarchy

In order to facilitate sharing of resource attributes between different cache types, a hierarchy of ResourceDefinitions was created which looks like this:
SharedCacheResource extends ClusteredCacheResource extends CacheResource extends SimpleResourceDefinition

LocalCacheResource extends CacheResource
InvalidationcacheResource extends ClusteredCacheResource
ReplicatedCacheResource extends SharedCacheResource
DistributedCacheResource extends SharedcacheResource
 
In order to accompany this sharing with sharing of bundle entries, had to implement a custom ResourceDescriptionResolver which registers all shared attributes and does a separate lookup when the attribute description is requested. This works but can probably be improved.

JDBC stores and complex attributes 

The JDBC stores require table definitions, such as binary keyed table, string keyed table and mixed keyed table. These are not broken down into resources, and instead are held and manipulated as complex attributes (see STRING_KEYED_TABLE, BINARY_KEYED_TABLE, MIXED_KEYED_TABLE AttributeDefinitions). 

Optional 'properties' parameter on add

In the case of resources which can define properties as sub-elements (such as cache stores), the add() operation, in addition to taking the immediate attributes of the resource, can also take an optional properties attribute which is a list of properties. This list will be processed in the add() command and the nested property resources will be created. This is a shorthand and property resources can be created in the ususal way.

Test cases
 
I added a super class OperationTestCaseBase to provide common definitions used in OperationsTestCase and OperationSequencesTestCase, as well as starting to fill out testing coverage for each resources attributes. This needs to be continuted.
 

                
> Opimize organization and management of the Infinispan subsystem
> ---------------------------------------------------------------
>
>                 Key: AS7-4090
>                 URL: https://issues.jboss.org/browse/AS7-4090
>             Project: Application Server 7
>          Issue Type: Task
>          Components: Clustering, Domain Management
>    Affects Versions: 7.1.0.Final
>            Reporter: Richard Achmatowicz
>            Assignee: Richard Achmatowicz
>             Fix For: 7.2.0.Alpha1
>
>
> There are a number of areas where the Infinispan subsystem is organizationally deficient:
> - does not make use of ResourceDefinitions to (i) simplify the generation of DescriptionProviders and (ii) localize the definition of AttributeDefinitions
> - handlers are in some cases written from scratch rather than subclassing helper handlers such as AbstractWriteAttributeHandler, AbstractAddStepHandler, AbstractRemoveStepHandler, etc.
> - collections of services are defined monolithically, rather than in distinct units which makes stopping/restarting them error prone (c.f. CacheContainerAdd, CacheAdd install three or four services each with complex processing - stopping and restarting this in another handler is next to impossible)
> - ServiceNames are not always easy to reconstruct   
> These issues make maintenance of the subsystem hard. These matters can be helped by:
> - making use of ResourceDefinitions
> - defining for each service X a static method installX(context, operation, model) and removeX(context, operation, model) which can be made use of in installServices(context, operation, model) and removeServices(operation, context, model) 
> - define the static method populate(), used to populate a model from an operation, which can be reused in populateModel(), creating describe operations, as well as other contexts
> - define a static method installServices(context, operation, model) which can be used in performRuntime(), and in contexts where all services for a resource need to be stopped and restarted; similarly define removeServices(context, operation, model)
> - make sure each ServiceName can be regenerated easily (c.f. regenerating JNDI names can involve model processing)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira


More information about the jboss-jira mailing list