![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
lazycat |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 15.7.2007 Репутация: 1 Всего: 1 |
Доброго времени суток всем!
Возникла проблема. Чтобы было лучше понятно, сначала небольшой бекграунд. Есть работающее приложение. Куча кода и куча библиотек. Надо понять, как работают некоторые методы класса. Излишне говорить, что документации никакой. Как я привык (да и многие другие тоже) прогоняю приложение на реальных данных и смотрю, что происходит, структуру объектов, приходящих в качестве параметров и т.д. Вот только получить эти реальные данные крайне сложно: нужна согласованная работа многих людей. После того, как бекграунд описан, описываю саму проблему. Хотелось бы захватить текущее состояние нескольких объектов, после чего прогонять требуемые методы можно было бы хоть до бесконечности. Но ... многие классы определены в библиотеках и они не имплементируют Serializable. JAXB не могу использовать по той же причине - не могу дотянуться до классов, чтобы аннотировать их. И, наконец, вопрос: знает ли кто-нибудь способ сделать "snapshot" объекта, не изменяя исходный код его класса. Захватить нечто вроде байтовой последовательности, а потом восстановить его в виде Java объекта. И возможно ли это вообще? Буду крайне благодарен за любой совет и любое высказанное мнение по этому вопросу. |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 1 Всего: 101 |
||||
|
||||
lazycat |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 15.7.2007 Репутация: 1 Всего: 1 |
||||
|
||||
LSD |
|
|||
![]() 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. |
|||
|
||||
lazycat |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 15.7.2007 Репутация: 1 Всего: 1 |
LSD, спасибо за желание помочь. Прошу прощения за долгое молчание. Несмотря на то, что дикими усилиями основная задача решена, считаю, что вопрос сам по себе достаточно интересен и достоин обсуждения. Итак, уточняю ситуацию. В принципе мне надо было "под дебагом" посмотреть, как ведет себя метод, как он обрабатывает реальные данные. Надо это для того, чтобы внести небольшие изменения и ничего не сломать при этом. Параметры метода - сложные объекты, сам я их создать не могу, создаются библиотечным кодом, исходников нет. Поставить точку останова - не могу, т.к. реально приложение можно запустить только на серваке, где он взаимодействует с другими модулями. Так вот возникла у меня идея: нельзя ли сделать "граббер" параметров. Тогда я бы запустил на серваке модуль с граббером, захватил реальные параметры, а потом уже издевался над кодом локально. Отсюда и возник первоначальный вопрос: нет ли какого-то способа захватывать объекты в текущем состоянии, а потом использовать их при вызове метода. Битовая карта здесь не пройдет, т.к. в объектах списки и прочие динамические данные. Сериализация также не катит, т.к. объект в библиотеке не имплементит Serializable, а исходного кода нет. Одним словом, так как описано в первом посте. Повторяю, задача, для которой это надо было, уже решена, но сам вопрос, по-моему, интересен. |
|||
|
||||
LSD |
|
|||
![]() 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. |
|||
|
||||
lazycat |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 15.7.2007 Репутация: 1 Всего: 1 |
Всего дерева - конечно же да.
Теоретически, да, но в моем случае до этого не доходило.
Это мне надо осмыслить ... Спасибо за идею ! |
||||
|
|||||
RageSteel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 6.2.2010 Репутация: 1 Всего: 2 |
А в чём проблема запустить этот удалённый сервер под Debug'ом?
А ещё JVM можно попросить сделать дамп памяти, а потом по нему походить. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |