[ https://issues.apache.org/jira/browse/DIRMINA-495?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12550970 ]
David M. Lloyd commented on DIRMINA-495: ---------------------------------------- That seems reasonable - with a general callback you could cleanly add attributes. BUT we'd have to ensure that the callback is called -immediately- after the session is created. The regular ConnectFuture callback doesn't happen until the connect completes - which is too late :-) So maybe a new "SessionFuture" type is called for? Also the callback method should be allowed to throw exceptions. You could then do this (which would meet the requirements of this issue): connector.connect(addr, new IoFutureListener<SessionFuture>() { void operationComplete(SessionFuture future) { future.getSession.setAttribute(MY_KEY, myVal); } } > IoConnector needs a way to store information into the IoSession before the > IoHandler gets ahold of it > ----------------------------------------------------------------------------------------------------- > > Key: DIRMINA-495 > URL: https://issues.apache.org/jira/browse/DIRMINA-495 > Project: MINA > Issue Type: New Feature > Components: Core > Reporter: David M. Lloyd > Assignee: Mike Heath > Fix For: 2.0.0-M1 > > Attachments: IoConnector.patch, IoConnector.patch > > > It is often necessary to pass information into the IoHandler associated with > an IoConnector. Sometimes this information is needed even as early as > IoSession creation time. A mechanism is needed to pass information in to the > IoSession at the time you call IoConnector.connect(). Discussing this with > Mike Heath, we determined that a logical approach could be to have variants > of the connect() methods that accept information that can be attached to the > IoSession when it is created. > One option is to simply pass a Map in to the connect method. The contents of > the Map would be copied into the IoSession's attribute map after it is > constructed but before the IoHandler.sessionCreated method is created. In > addition, it seems likely that in many cases only one entry would need to be > added - in this case the user could simply do this: > ioConnector.connect(addr, Collections.singletonMap(MY_KEY, theValue)); > Another option would be to use variable argument lists to accept any number > of key-value pairs. The pairs could be represented by a class - > AttributePair for example. It could look like this: > public final class AttributePair<K, V> { > private final K key; > private final V value; > private AttributePair(K key, V value) { this.key = key; this.value = > value; } > public static <K, V> AttributePair<K,V> pair(K key, V value) { return > new AttributePair<K, V>(key, value); } > } > Then the user can use static imports to pull in the "pair" method. The > connect() method on IoConnector could accept a variable list of AttributePair > objects, so the user could write code like this: > ioConnector.connect(addr, pair(MY_KEY1, myValue), pair(MY_KEY2, > myValue2)); > Though this approach is somewhat more complicated than just using a Map. > Other approaches may also be discussed. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.