Слушатели контекста сервлета безоговорочно создают таймер во время contextInitialized? Если это так, это объясняет проблему, поскольку слушатель контекста сервлета будет работать в каждой JVM. Вам нужно как-то проверить, был ли таймер уже создан первым. Либо используйте getTimers, либо проверьте / вставьте строку в свою таблицу базы данных.