You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mina.apache.org by "Emmanuel Lecharny (Commented) (JIRA)" <ji...@apache.org> on 2011/12/05 15:11:40 UTC

[jira] [Commented] (DIRMINA-874) Typesafe AttributeKeys

    [ https://issues.apache.org/jira/browse/DIRMINA-874?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13162792#comment-13162792 ] 

Emmanuel Lecharny commented on DIRMINA-874:
-------------------------------------------

I think it has already been implemented the way you describe, except we don't use the AttributKey class anymore :

    /* Session context management */
    /**
     * Returns the value of the user-defined attribute for this session.
     * 
     * @param name the attribute's name
     * @return <tt>null</tt> if there is no attribute with the specified name
     */
    <T> T getAttribute(String name);

    /**
     * Sets a user-defined attribute.
     * 
     * @param name the attribute's name
     * @param value the attribute's value
     * @return The old attribute's value. <tt>null</tt> if there is no previous value or if the value is null
     */
    <T> T setAttribute(String name, T value);

    /**
     * Removes a user-defined attribute with the specified name.
     * 
     * @param name the attribute's name
     * @return The old attribute's value. <tt>null</tt> if not found or if the attribute had no value
     */
    <T> T removeAttribute(String name);

    /**
     * Tells if the session has an attached attribute.
     * 
     * @return <tt>true</tt> if this session contains the attribute with the specified <tt>name</tt>.
     */
    boolean containsAttribute(String name);

    /**
     * Gets the set of attributes stored within the session.
     * 
     * @return the set of names of all user-defined attributes.
     */
    Set<String> getAttributeNames();

                
> Typesafe AttributeKeys
> ----------------------
>
>                 Key: DIRMINA-874
>                 URL: https://issues.apache.org/jira/browse/DIRMINA-874
>             Project: MINA
>          Issue Type: Improvement
>          Components: Core
>    Affects Versions: 3.0.0-M1
>            Reporter: Christian Schwarz
>
> In Mina 2 we can add attributes to a session and get them as well. Because IoSession#getAttribute(Object key)  returns Object we always have to remember what attribute type is associated with the key and cast the result to the expected type.
> Mina 2 example:
> final static Object KEY = new AttributeKey(SourceClass.class,"myKey");
> ...
> session.set(KEY,"myAttribute");
> String attributeValue= (String)session.get(KEY);
> Instead of using plain Object-keys, the key type should contain information about its attributes. The aim is to get type-safe access to attributes.
> Assume we have the following new AttributeKey-Class:
> /**
> * @parmeter T Type of the referenced Attribute
> */
> class AttributeKey<T> {
>   public TypesafeAttributeKey(Class<T> attributeType, String attributeKey){
>    ...
>   }
> }
> The IoSession should have Attribute related accessors like these:
>  
>  void setAttribute(AttributeKey<T> key, T value);
>  T getAttribute(AttributeKey<T> key);
> So in Mina 3 the example could look like this:
> final static AttributeKey<String> KEY = new AttributeKey<String>(String.class,"myKey");
> ...
> session.set(KEY,"myAttribute");
> String attributeValue=session.get(KEY);
> These 2 cases won't compile:
> session.set(KEY,new Date());
> Integer attributeValue=session.get(KEY);
> This pattern would simplify the use of Attributes, because the programmer don't have to care about the types and can concentrate on more improtant things. In my humble opinion the Objekt keys should be removed at all, i don't see the purpose for such unspecific keys.

--
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