Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> "Snapshot" java объекта, Захватить текущее состояние объекта 
:(
    Опции темы
lazycat
Дата 26.9.2014, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 15.7.2007

Репутация: 1
Всего: 1



Доброго времени суток всем!

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

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

После того, как бекграунд описан, описываю саму проблему. Хотелось бы захватить текущее состояние нескольких объектов, после чего прогонять требуемые методы можно было бы хоть до бесконечности. Но ... многие классы определены в библиотеках и они не имплементируют Serializable. JAXB не могу использовать по той же причине - не могу дотянуться до классов, чтобы аннотировать их.

И, наконец, вопрос: знает ли кто-нибудь способ сделать "snapshot" объекта, не изменяя исходный код его класса. Захватить нечто вроде байтовой последовательности, а потом восстановить его в виде Java объекта. 
И возможно ли это вообще?

Буду крайне благодарен за любой совет и любое высказанное мнение по этому вопросу.

PM MAIL   Вверх
baldina
Дата 26.9.2014, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 1
Всего: 101



Цитата(lazycat @  26.9.2014,  16:51 Найти цитируемый пост)
прогоняю приложение на реальных данных и смотрю, что происходит

Стругацкие, "Попытка к бегству"
PM MAIL   Вверх
lazycat
Дата 26.9.2014, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 15.7.2007

Репутация: 1
Всего: 1



Цитата(baldina @  26.9.2014,  17:55 Найти цитируемый пост)
Стругацкие, "Попытка к бегству" 


А по сути мысли есть?

PM MAIL   Вверх
LSD
Дата 2.10.2014, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Не понятна задача. Тебе надо в работающей системе сереализовывать объекты. Или "под дебагом" посмотреть содержимое?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
lazycat
Дата 23.10.2014, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 15.7.2007

Репутация: 1
Всего: 1



Цитата(LSD @  2.10.2014,  15:20 Найти цитируемый пост)
Не понятна задача. Тебе надо в работающей системе сереализовывать объекты. Или "под дебагом" посмотреть содержимое? 


LSD, спасибо за желание помочь. Прошу прощения за долгое молчание.

Несмотря на то, что дикими усилиями основная задача решена, считаю, что вопрос сам по себе достаточно интересен и достоин обсуждения.

Итак, уточняю ситуацию.

В принципе мне надо было "под дебагом" посмотреть, как ведет себя метод, как он обрабатывает реальные данные. Надо это для того, чтобы внести небольшие изменения и ничего не сломать при этом.

Параметры метода - сложные объекты, сам я их создать не могу, создаются библиотечным кодом, исходников нет. Поставить точку останова - не могу, т.к. реально приложение можно запустить только на серваке, где он взаимодействует с другими модулями.
Так вот возникла у меня идея: нельзя ли сделать "граббер" параметров. Тогда я бы запустил на серваке модуль с граббером, захватил реальные параметры, а потом уже издевался над кодом локально.
Отсюда и возник первоначальный вопрос: нет ли какого-то способа захватывать объекты в текущем состоянии, а потом использовать их при вызове метода. Битовая карта здесь не пройдет, т.к. в объектах списки и прочие динамические данные. Сериализация также не катит, т.к. объект в библиотеке не имплементит Serializable, а исходного кода нет. Одним словом, так как описано в первом посте.

Повторяю, задача, для которой это надо было, уже решена, но сам вопрос, по-моему, интересен.

PM MAIL   Вверх
LSD
Дата 23.10.2014, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



В общем случае тебе надо снапшот не только одного объекта, а вообще всего дерева и значит потенциально вообще всей JVM, а значит и вообще всей ОС. Такой механизм есть в вируальных машинах. Это все в общем случае, когда потенцильно метод может изменить любой другой объект и иметь побочное воздействие на ОС в целом.

Если же производимые изменения локальны, то тут хватит transactional memory. Есть как программные так и аппаратные реализации, но опять же тут требуются усилия по поддержке со стороны программиста. В приницпе добавить в POJO сериализацию ничего сложного нет, тот же Hibernate прекрасно это делает, просто модифицируя байткод класса при загрузке.

P.S. А дебажить удаленные сервер, не сложнее чем локальный.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
lazycat
Дата 23.10.2014, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 15.7.2007

Репутация: 1
Всего: 1



Цитата(LSD @  23.10.2014,  16:15 Найти цитируемый пост)
В общем случае тебе надо снапшот не только одного объекта, а вообще всего дерева и значит потенциально вообще всей JVM, а значит и вообще всей ОС. Такой механизм есть в вируальных машинах. Это все в общем случае, когда потенцильно метод может изменить любой другой объект и иметь побочное воздействие на ОС в целом.


Всего дерева - конечно же да.

Цитата(LSD @  23.10.2014,  16:15 Найти цитируемый пост)
метод может изменить любой другой объект и иметь побочное воздействие на ОС в целом


Теоретически, да, но в моем случае до этого не доходило.


Цитата(LSD @  23.10.2014,  16:15 Найти цитируемый пост)
добавить в POJO сериализацию ничего сложного нет, тот же Hibernate прекрасно это делает


Это мне надо осмыслить ...

Спасибо за идею !

PM MAIL   Вверх
RageSteel
  Дата 24.10.2014, 07:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 6.2.2010

Репутация: 1
Всего: 2



А в чём проблема запустить этот удалённый сервер под Debug'ом?

А ещё JVM можно попросить сделать дамп памяти, а потом по нему походить.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0890 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.