Где хранить объект сеанса в автономном приложении? - PullRequest
0 голосов
/ 15 июня 2010

У меня есть объект сеанса, который НЕ реализует java.lang.Serializable. (это устаревшее приложение, и теперь я не могу пойти и изменить код)

Есть ли какой-нибудь способ, где я могу сохранить объект сеанса где-нибудь и позже ПОЛУЧИТЬ ОБРАТНОЕ СОСТОЯНИЕ в STANDALONE приложении.

Одна мысль - использовать RMI . Есть ли лучший способ добиться этого.

РЕДАКТИРОВАТЬ: У приложения Legacy есть API, которые дают мне объект Session. На объекте Session я буду вызывать методы. Получение объекта Session действительно дорогая операция. Итак, я хотел бы сохранить его где-нибудь для любых последующих действий, пока сессия не будет действительной.

Спасибо:)

Ответы [ 3 ]

1 голос
/ 16 июня 2010

Если объект сеанса действительно ссылается на вещи, которые не являются сериализуемыми (не только с точки зрения интерфейса, но и с точки зрения того, какие типы несериализуемых экземпляров с состоянием он удерживает), то вам будет трудно восстановитьэто осмысленно.

Если это не так, то вы можете использовать XStream для его сериализации, даже если Serializable не был реализован.

К счастью, этодовольно легко проверить: если ваш восстановленный объект сеанса работает для вас, вы в чистоте.

1 голос
/ 15 июня 2010

Предположим, что вы можете опросить свой объект сеанса, чтобы определить его состояние, и, учитывая это состояние, вы можете создать новый объект сеанса, который будет эквивалентен.Затем вам нужен вспомогательный класс, каждый экземпляр которого связан с объектом сеанса и который сериализуем.Вы пишете сериализацию вспомогательного класса для хранения состояния сеанса, и при создании нового сеанса с помощью сериализации создается сеанс.

0 голосов
/ 15 июня 2010

Исходя из вопроса, я предполагаю, что вы можете добавить код к внешним границам приложений, но везде присутствуют знаки «Остерегайтесь JabberWock».

Если он не сериализуем, тогда объект, вероятно, будет содержатьссылки на изначально неразборчивые вещи, такие как сервисы, бины с состоянием, ... и другие вещи, которые имеют смысл только в контейнере.Теперь обычно большая часть этого материала вам, вероятно, не понадобится вне контейнера.

RMI не решит вашу проблему, потому что тогда полезная нагрузка должна быть сериализуемой, обратно в квадрат 1.

Прагматический подход можетиспользовать простой генератор XML, такой как XML Digester от Apache Commons, если он все еще существует, или какой-то простой генератор JSON, а также выбрать данные нужного сеанса в автономном приложении и вывести их в дерево, которое имеет смысл.

...