| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > "Snapshot" java объекта |
| Автор: lazycat 26.9.2014, 16:51 |
| Доброго времени суток всем! Возникла проблема. Чтобы было лучше понятно, сначала небольшой бекграунд. Есть работающее приложение. Куча кода и куча библиотек. Надо понять, как работают некоторые методы класса. Излишне говорить, что документации никакой. Как я привык (да и многие другие тоже) прогоняю приложение на реальных данных и смотрю, что происходит, структуру объектов, приходящих в качестве параметров и т.д. Вот только получить эти реальные данные крайне сложно: нужна согласованная работа многих людей. После того, как бекграунд описан, описываю саму проблему. Хотелось бы захватить текущее состояние нескольких объектов, после чего прогонять требуемые методы можно было бы хоть до бесконечности. Но ... многие классы определены в библиотеках и они не имплементируют Serializable. JAXB не могу использовать по той же причине - не могу дотянуться до классов, чтобы аннотировать их. И, наконец, вопрос: знает ли кто-нибудь способ сделать "snapshot" объекта, не изменяя исходный код его класса. Захватить нечто вроде байтовой последовательности, а потом восстановить его в виде Java объекта. И возможно ли это вообще? Буду крайне благодарен за любой совет и любое высказанное мнение по этому вопросу. |
| Автор: baldina 26.9.2014, 17:55 |
Стругацкие, "Попытка к бегству" |
| Автор: lazycat 26.9.2014, 18:07 |
А по сути мысли есть? |
| Автор: LSD 2.10.2014, 15:20 |
| Не понятна задача. Тебе надо в работающей системе сереализовывать объекты. Или "под дебагом" посмотреть содержимое? |
| Автор: LSD 23.10.2014, 16:15 |
| В общем случае тебе надо снапшот не только одного объекта, а вообще всего дерева и значит потенциально вообще всей JVM, а значит и вообще всей ОС. Такой механизм есть в вируальных машинах. Это все в общем случае, когда потенцильно метод может изменить любой другой объект и иметь побочное воздействие на ОС в целом. Если же производимые изменения локальны, то тут хватит http://en.wikipedia.org/wiki/Transactional_memory. Есть как программные так и аппаратные реализации, но опять же тут требуются усилия по поддержке со стороны программиста. В приницпе добавить в POJO сериализацию ничего сложного нет, тот же Hibernate прекрасно это делает, просто модифицируя байткод класса при загрузке. P.S. А дебажить удаленные сервер, не сложнее чем локальный. |
| Автор: lazycat 23.10.2014, 16:36 | ||||||
Всего дерева - конечно же да.
Теоретически, да, но в моем случае до этого не доходило.
Это мне надо осмыслить ... Спасибо за идею ! |
| Автор: RageSteel 24.10.2014, 07:23 |
| А в чём проблема запустить этот удалённый сервер под Debug'ом? А ещё JVM можно попросить сделать дамп памяти, а потом по нему походить. |