Я думаю, что вы подходите к проблеме не с той стороны. Я думаю, вы хотите, чтобы обратный вызов драйвера устройства внес некоторые результаты в пользовательский сеанс. Но этого недостаточно для отображения этих данных, поэтому (опять-таки догадываясь), вероятно, требуется некоторый длительный опрос, изучающий сеанс с помощью bean-объекта сессионной области.
Исходя из этого предположения, я советую вам генерировать какой-то уникальный requestId
каждый раз, когда вы вызываете внутренний драйвер и помещаете его requestId
как в сеанс HTTP, так и в обратный вызов. Когда вызывается обратный вызов, он помещает результаты в какую-то карту, где ключу назначается requestId
. Теперь клиент (который также знает requestId
) может посмотреть на карту и получить результаты. Вы должны помнить о синхронизации (что также имеет место с обычной HttpSession
).
Если у вас есть более продвинутый способ уведомления клиентов (Comet? WebSockets?), Это также можно сделать с помощью этого обратного вызова.
Обратите внимание, что технически вы можете передать экземпляр объекта HttpSession
в экземпляр обратного вызова (но, как вы можете видеть, это не работает с bean-объектами в сессионной области Spring), но передача сеанса вокруг не выглядит хорошим дизайном. Просто лучше обеспечить уровень косвенности. Что если в будущем вы захотите повторно использовать этот код с помощью командной строки или настольного клиента?