org.xsocket.connection
Interface IConnectionScoped
- All Superinterfaces:
- Cloneable
public interface IConnectionScoped
- extends Cloneable
Defines that the IHandler is connection scoped.
A connection scoped handler will be used by the server
as a prototype. That means, for each new incoming connection
this handler will be cloned and the cloned handler will be assigned
to the new connection to perform the handling.
The prototype handler will never be used to handle
connections. It will only be used as a clone base.
By having such a dedicate handler instance for each connection,
all variables of the cloned handler become session specific
variables.
Take care by implementing the clone interface. Just calling the
super.clone() method within the handler clone method lead to
a shallow copy. That means all fields that refer to other
objects will point to the same objects in both the original and
the clone. To avoid side effects a deep copy has to be implemented.
All attributes beside primitives, immutable or global manager/service
references has also to be cloned
E.g.
class MyHandler implements IDataHandler, IConnectionScoped {
private int state = 0;
private ConnectionRecordQueue recordQueue = new ConnectionRecordQueue();
...
public boolean onData(INonBlockingConnection connection) throws IOException, BufferUnderflowException {
...
return true;
}
@Override
public Object clone() throws CloneNotSupportedException {
MyHandler copy = (MyHandler) super.clone();
copy.recordQueue = new ConnectionRecordQueue(); // deep "clone"
return copy;
}
}
clone
Object clone()
throws CloneNotSupportedException
-
- Throws:
CloneNotSupportedException