An implementation of CSAF relying on a shared SQL database to store the necessary information in a cluster setting.
Perform the DB-setup/migrations that
Incoming (Client-to-Server) Send, Request and Replies (Resolve and Reject) handler.
Provides several hacks to get the Remote Address for different Servlet Containers implementing JSR 356 Java API for WebSockets, as that standard does not specify a method for it.
Trick to make ThreadPoolExecutor work as anyone in the world would expect: Have a constant pool of "corePoolSize", and then as more tasks are concurrently running than threads available, you increase the number of threads until "maxPoolSize", at which point the rest go on queue.
Handles async sending of not-"information bearing messages", that is, messages that are idempotent.
Defines the String and Binary datatypes for some databases.
When trying to send messages over WebSocket and get an IOException, we do not have many options of handling - the socket has probably closed.