Aus dem Stack-Trace und dem Codebeispiel sieht es so aus, als würden Sie den Cayenne-Stack (ServerRuntime-Objekt) nicht wiederverwenden und stattdessen jedes Mal einen neuen erstellen. Abgesehen davon, dass dies langsam ist, führt dies auch zu einem Ressourcenleck. Jede ServerRuntime verfügt über einen eigenen Verbindungspool, den Sie nicht herunterfahren. Früher oder später wird der PostreSQL-Server also mit offenen Verbindungen überflutet.
Die Lösung besteht darin, ServerRuntime in ein anwendungsbezogenes Singleton zu verwandeln (z. B. eine statische Variable von AccountsDBRuntime) und es immer dann wiederzuverwenden, wenn Sie einen neuen ObjectContext benötigen.