why don't you have your Communicable interface extend Serializable so that all the classes that implement Communicable automatically implement Serializable
I'd consider having a Command class for passing messages from client to server, and maybe a separate Response class for sending data from server to client.
I don't think the server needs a way to initiate messages to the client; it just waits for commands, and responds.
If you used a Transfer Object then you would be passing a much smaller, more generic object.
I like your ServerContext context parameter in your performServerTask method. I suppose that your connections are permanent and stateful and that your ServerContext object is what I called Session in my Command interface