|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
Нужна штука, которая будет трекать изменения в классе и в любом его поле на любую глубину Ну то есть я скармливаю ей MyClass.class, эта штука выдаёт мне некую хеш строку. Потом где-то кто-то добавил новое поле в MyOtherClass и хеш строка должна поменяться. Код: java 1. 2. 3. 4. 5. 6.
Можно конечно самому написать через рефлекшн, но может есть что-то готовое уже? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 11:59 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner эта штука выдаёт мне некую хеш строку. Потом где-то кто-то добавил новое поле в MyOtherClass и хеш строка должна поменяться. Строки иммутабельные и не являются ссылками. Код: java 1. 2. 3. 4.
Идея изначально провальная, давай заново. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 12:57 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner отом где-то кто-то добавил новое поле в MyOtherClass Разве поля не определяются на этапе компиляции? Если ты хочешь добавлять их в рантайме, то тебе не нужна java, возьми какой-нибудь динамический [недо]язычок. Вон, на js, по идее, можно такое провернуть через прокси и какой-нибудь объект с иерархией. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 13:01 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
crutchmaster, я и не собирался добавлять поля в рантайме. С чего ты взял? Программист Вася добавил некое поле в некий класс , закоммитил. Надо его предупредить, что он может сломать другой сервис. Нужно явно его заставить проверить, что он не сломает ничего. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 13:08 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
речь идёт о чем то типа java.io.ObjectStreamClass#computeDefaultSUID ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 13:10 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner я и не собирался добавлять поля в рантайме. С чего ты взял? С того, что ты написал: questioner Потом где-то кто-то добавил новое поле >новое поле >поле >добавил questioner Программист Вася добавил некое поле в некий класс , закоммитил. Надо его предупредить, что он может сломать другой сервис. Так для такого есть интерфейсы. Если Васян что-то где-то ломает у него рассыпется проект при сборке. Да и как он может что-то сломать, если расширяет класс. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 13:14 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
crutchmaster, Вижу, есть проблемы с причинно следственной связью. Додумываешь слова. Про рантайм от меня вообще речи не было ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 13:18 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner я скармливаю ей MyClass.class, эта штука выдаёт мне некую хеш строку. Потом где-то кто-то добавил новое поле в MyOtherClass и хеш строка должна поменяться. Почему нельзя просто посчитать хэш класса? Код: java 1. 2. 3. 4.
(дисклаймер: код взял первый попавшийся со стековерфлоу - улучшайте сами) Еще можно паковать в JAR с цифровой подписью и проверять ее ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 13:18 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
Basil A. Sidorov Я это уже собственно и упомянул. у меня есть пара вопросов: 1. Будет ли эта штука возвращать одно и то же число и на винде и на маке и на линуксе ? 2. Будет ли эта штука возвращать одно и то же число на java 8 9 10 11... ? 3. Я так понимаю она не учитывает изменение в поле MyOtherClass при подсчёте для MyClass, а надо, чтобы учитывала ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 13:21 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
Kachalov, те же вопросы, что и постом выше. Можно ссылку на тред на SO ? я видимо не смог сформулировать запрос так, чтобы найти ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 13:30 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner, А че не ответил? авторТак для такого есть интерфейсы. Если Васян что-то где-то ломает у него рассыпется проект при сборке. Да и как он может что-то сломать, если расширяет класс. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 13:33 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp questioner, А че не ответил? авторТак для такого есть интерфейсы. Если Васян что-то где-то ломает у него рассыпется проект при сборке. Да и как он может что-то сломать, если расширяет класс. Это оффтоп. Можем в другом топике обсудить, если есть желание ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 13:34 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner, Все многообразие ссылок на классы ты не учтешь. Задача странная. Делай руками и уходи. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 13:37 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner те же вопросы, что и постом выше. Можно ссылку на тред на SO ? я видимо не смог сформулировать запрос так, чтобы найти - ссылку не дам (уже нет ее и пост не о том был). А по сути изменения в глубину без Reflection-а не отследишь (так мне кажется), а подсчет хэша класса по его байткоду будет давать другой хэш на любой чих (другая версия JDK, другие настройки компилятора - типа дебаг информации и т д). Готовой утилиты решающей Вашу задачу не знаю, но не исключаю что она кем то уже написана (мне и раньше, когда сталкивался с подобной задачей пришлось городить рефлекшн велосипед) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 13:42 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner PetroNotC Sharp questioner, А че не ответил? пропущено... Это оффтоп. Можем в другом топике обсудить, если есть желание Мне не надо. Я за версту чую странные желания осчастливить мир со словами НА ЛЮБУЮ и ЛЮБЫЕ авторлюбом его поле на любую глубину А если у тебя сериализация то там POJO классы. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 13:42 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
Kachalov questioner те же вопросы, что и постом выше. Можно ссылку на тред на SO ? я видимо не смог сформулировать запрос так, чтобы найти - ссылку не дам (уже нет ее и пост не о том был). А по сути изменения в глубину без Reflection-а не отследишь (так мне кажется), а подсчет хэша класса по его байткоду будет давать другой хэш на любой чих (другая версия JDK, другие настройки компилятора - типа дебаг информации и т д). Готовой утилиты решающей Вашу задачу не знаю, но не исключаю что она кем то уже написана (мне и раньше, когда сталкивался с подобной задачей пришлось городить рефлекшн велосипед) Вот я тоже думаю, что придётся писать ограниченный своими нуждами трёхколёсный лисопед. Надеялся, что кто-то написал уже полноценный байк) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 13:52 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, Если тебе не надо, то к чему вопрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 13:53 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner PetroNotC Sharp, Если тебе не надо, то к чему вопрос? Убедился))) Тебе верно сказали. Твой маркер будет меняться на каждый чих. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 14:02 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner Нужна штука, которая будет трекать изменения в классе и в любом его поле на любую глубину Начинается пятница. Во первых непонятно что значит "трекать" ? У вас-же не Lisp. А Java. Тоесть вы контролируете изменения по коду. И в фазе компилляции знаете что у вас есть. Во вторых зачем. Хеш таблицы? Контракт хеш-кода предполагает что и equals тоже участвует в этой-же формуле. Вам придётся автоматически выводить предикат эквивалентности для таких объектов-мутантов. Это не всегда возможно. Это требует обсуждений. Не все поля класса принадлежат DTO и есть технические поля которые вовсе не надо включать в эту формулу. Кеширующие. Вычислимые. Transient. Внешние объекты. Файлы. Сокеты. Это все не сериализуемо и не имеет представления в виде бинаря или строки. Тоесть посчитать хеш-код невозможно. Или вы посчитаете фигню. Есть более выгодное IMHO. Если объекты иммутабельны и излекаются из БД - то уникальный ключ - уже полностью указывает на равенство объектов с точки зрения бизнеса и на этом можно остановится. Это еще раз ИМХО. По поводу рефлексии. Да писать самому лучше. Глубже разберешся. Но объект может представлять граф и наивный алгоритм обхода вложенности теоретически может попасть в петлю. Надо это учитывать как маловероятный но все таки кейс. По поводу готового. Посмотри на http://commons.apache.org/proper/commons-beanutils/ может пригодится. Это взгляд на задачу с точки зрения бинов а не pure Java. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 14:03 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp questioner PetroNotC Sharp, Если тебе не надо, то к чему вопрос? Убедился))) Тебе верно сказали. Зачем тебе это? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 14:18 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
mayton, +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 14:19 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner PetroNotC Sharp пропущено... проверить, вменяемый ли постановщик. Решаем ли задача без граничных условий. Убедился))) Тебе верно сказали. Зачем тебе это? Гимнастика ума. Развлечение. Проф рост для диагностики убыточных проектов. Ещё? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 14:21 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
mayton questioner Нужна штука, которая будет трекать изменения в классе и в любом его поле на любую глубину Начинается пятница. Во первых непонятно что значит "трекать" ? У вас-же не Lisp. А Java. Тоесть вы контролируете изменения по коду. И в фазе компилляции знаете что у вас есть. Во вторых зачем. Хеш таблицы? Контракт хеш-кода предполагает что и equals тоже участвует в этой-же формуле. Вам придётся автоматически выводить предикат эквивалентности для таких объектов-мутантов. Это не всегда возможно. Это требует обсуждений. Не все поля класса принадлежат DTO и есть технические поля которые вовсе не надо включать в эту формулу. Кеширующие. Вычислимые. Transient. Внешние объекты. Файлы. Сокеты. Это все не сериализуемо и не имеет представления в виде бинаря или строки. Тоесть посчитать хеш-код невозможно. Или вы посчитаете фигню. Есть более выгодное IMHO. Если объекты иммутабельны и излекаются из БД - то уникальный ключ - уже полностью указывает на равенство объектов с точки зрения бизнеса и на этом можно остановится. Это еще раз ИМХО. По поводу рефлексии. Да писать самому лучше. Глубже разберешся. Но объект может представлять граф и наивный алгоритм обхода вложенности теоретически может попасть в петлю. Надо это учитывать как маловероятный но все таки кейс. По поводу готового. Посмотри на http://commons.apache.org/proper/commons-beanutils/ может пригодится. Это взгляд на задачу с точки зрения бинов а не pure Java. Согласен - мысли такие же... По поводу "трекать": Мы собираем некий объект и делаем его снепшот и сохраняем в некотором хранилище, чтобы юзер смог пвоторить своё действие из прошлого. В будущем некто может добавить в объект поля, а в хранилище будет сохраняться снепшот без этого поля, что может не хило так всё разломать. Миграция исторических данных остаётся за скобками этого топика. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 14:23 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp questioner пропущено... Зачем тебе это? Гимнастика ума. Развлечение. Проф рост для диагностики убыточных проектов. Ещё? Спорить не буду, но думаю это приведёт только к деградации. Извини, больше не буду отвечать на твои сообщения. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 14:24 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner mayton пропущено... Начинается пятница. Во первых непонятно что значит "трекать" ? У вас-же не Lisp. А Java. Тоесть вы контролируете изменения по коду. И в фазе компилляции знаете что у вас есть. Во вторых зачем. Хеш таблицы? Контракт хеш-кода предполагает что и equals тоже участвует в этой-же формуле. Вам придётся автоматически выводить предикат эквивалентности для таких объектов-мутантов. Это не всегда возможно. Это требует обсуждений. Не все поля класса принадлежат DTO и есть технические поля которые вовсе не надо включать в эту формулу. Кеширующие. Вычислимые. Transient. Внешние объекты. Файлы. Сокеты. Это все не сериализуемо и не имеет представления в виде бинаря или строки. Тоесть посчитать хеш-код невозможно. Или вы посчитаете фигню. Есть более выгодное IMHO. Если объекты иммутабельны и излекаются из БД - то уникальный ключ - уже полностью указывает на равенство объектов с точки зрения бизнеса и на этом можно остановится. Это еще раз ИМХО. По поводу рефлексии. Да писать самому лучше. Глубже разберешся. Но объект может представлять граф и наивный алгоритм обхода вложенности теоретически может попасть в петлю. Надо это учитывать как маловероятный но все таки кейс. По поводу готового. Посмотри на http://commons.apache.org/proper/commons-beanutils/ может пригодится. Это взгляд на задачу с точки зрения бинов а не pure Java. Согласен - мысли такие же... По поводу "трекать": Мы собираем некий объект и делаем его снепшот и сохраняем в некотором хранилище, чтобы юзер смог пвоторить своё действие из прошлого. В будущем некто может добавить в объект поля, а в хранилище будет сохраняться снепшот без этого поля, что может не хило так всё разломать. Миграция исторических данных остаётся за скобками этого топика. Что такое снепшот? Это сериализация? Исходник? Или просто ревизия в github? Или некий DSL? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 14:32 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner PetroNotC Sharp пропущено... Гимнастика ума. Развлечение. Проф рост для диагностики убыточных проектов. Ещё? Спорить не буду, но думаю это приведёт только к деградации. Извини, больше не буду отвечать на твои сообщения. Я злой следователь. Mayton добрый. Работай! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 14:52 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner, авторМы собираем некий объект и делаем его снепшот и сохраняем в некотором хранилище, чтобы юзер смог пвоторить своё действие из прошлого. В будущем некто может добавить в объект поля, а в хранилище будет сохраняться снепшот без этого поля, что может не хило так всё разломать. Да. Изменив классы вы потом не десиреализуете. Не родите обратно. Тупик. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 14:56 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner, >чтобы юзер смог пвоторить своё действие из прошлогоМы собираем некий объект и делаем его снепшот и сохраняем в некотором хранилище, чтобы юзер смог пвоторить своё действие из прошлого.... ==== без примера не катит. Зачем в бд пихать сам класс а не ДЕЙСТВИЕ чтобы его повторить?))) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 14:59 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
mayton questioner пропущено... Согласен - мысли такие же... По поводу "трекать": Мы собираем некий объект и делаем его снепшот и сохраняем в некотором хранилище, чтобы юзер смог пвоторить своё действие из прошлого. В будущем некто может добавить в объект поля, а в хранилище будет сохраняться снепшот без этого поля, что может не хило так всё разломать. Миграция исторических данных остаётся за скобками этого топика. Что такое снепшот? Это сериализация? Исходник? Или просто ревизия в github? Или некий DSL? Это некий снимок состояния структуры объектов. Это сериализация. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 15:07 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner, Про это не слышал. Понятно. интерфейс Serializable ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 15:11 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner Я понял вас. Сериализация - это вобщем тухлый механизм. Продвинутые конторы ее не используют. Медленно ибо. Для 10 объектов - нормас. А для 100500 будет уже ощутима задержка из-за механизмов рефлексии. +Есть много issues об инфо-безопасности но я честно говоря не изучал их никогда ибо было неинтересно. Предполагаю что просто через сериализацию утекали пароли из приватных полей о которых разраб просто забыл. Вместо нее обычно берут либо коммерческий Cryo. Я не использовал но мы стыковались с проектом который юзал это. Либо Гугловый ProtoBuf . Либо Apache Thrieft . Либо Avro . Последний мы юзали в одном банке. Кроме сериализации есть еще и externalization. Это такой-себе брат-близнец сериализации - только от вас требуеся вручную описать все действия в readObject/writeObject на уровне битов и байтов. Работает - быстрее. Но вам все равно не хватит встроенных функций. Например я не смог найти как экстернализировать массив double[] одной функцией. А в Cryo - можно. P.S. Да и самое страшное. Сериализация и экстернализация боятся изменений версии класса. Если вы добавили хоть одно поле - то считай все пропало. Уже не прочитаете. Насчет прочих библиотек - не знаю. Надо читать. Возможно у них заложен какой-то уровень толерантности к новым полям как в XML. Это я думаю очень большой плюс. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 15:20 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
mayton questioner Я понял вас. Сериализация - это вобщем тухлый механизм. Продвинутые конторы ее не используют. Медленно ибо. Для 10 объектов - нормас. А для 100500 будет уже ощутима задержка из-за механизмов рефлексии. +Есть много issues об инфо-безопасности но я честно говоря не изучал их никогда ибо было неинтересно. Предполагаю что просто через сериализацию утекали пароли из приватных полей о которых разраб просто забыл. Вместо нее обычно берут либо коммерческий Cryo. Я не использовал но мы стыковались с проектом который юзал это. Либо Гугловый ProtoBuf . Либо Apache Thrieft . Либо Avro . Последний мы юзали в одном банке. Кроме сериализации есть еще и externalization. Это такой-себе брат-близнец сериализации - только от вас требуеся вручную описать все действия в readObject/writeObject на уровне битов и байтов. Работает - быстрее. Но вам все равно не хватит встроенных функций. Например я не смог найти как экстернализировать массив double[] одной функцией. А в Cryo - можно. P.S. Да и самое страшное. Сериализация и экстернализация боятся изменений версии класса. Если вы добавили хоть одно поле - то считай все пропало. Уже не прочитаете. Насчет прочих библиотек - не знаю. Надо читать. Возможно у них заложен какой-то уровень толерантности к новым полям как в XML. Это я думаю очень большой плюс. Это всё мне известно... у нас вообще всё это в монге хранится и объект в Жысон сохраняется, поэтому не совсем релевантно. Да и трейдингом мы не занимаемся, поэтому доли секунды не критичны. Нужен просто ответ на вопрос поменялось ли что что-то в структуре объектов или нет. Если да, то метод должен вернуть другой хэш, чем в прошлый раз. Да и вызываться это будет один раз при старте аппликейшена. То бишь грешить на перформанс тут не надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 15:29 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
Вопрос как сериализовать не стоит. Стоит вопрос как трекнуть изменения в структуре классов( такие как добавление поля, удаление поля, переименование поля) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 15:32 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
Класс лежит в исходнике. Считайте MD5 исходника. Или смотрите там git diff ... или git log ... Чем не вариант? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 15:46 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
mayton Класс лежит в исходнике. Считайте MD5 исходника. Или смотрите там git diff ... или git log ... Чем не вариант? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 15:47 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
Мне напомнило. Когда работали в *телекомах для ГТС у нас были услуги для населения. Бизнес-факты. Например один чел (абонент А) позвонил абоненту (Б) и они говорили 18 минут. Потом формула тарификации поменялась (например до 2004.01.02 была одна формула) и после этой точки - другая. При расчете платежек населению наша логика учитывала эту формулу и все услуги до 2004.01.02 считались так. А после этого - по другому. Потом формула могла еще 100 раз поменятся. И в Oracle автоматом компилировалась PLSQL функция что-то типа FUNC_2004_xxxx и бизнес логика просто брала эту функцию. Это было в определённой степени полиморфизмом для Оракла. Потому-что другие системы для телефонии и даже такое не умели делать. Разумеется процесс создания таких периодов и формул был ручной. Был отдел бизнесов которые этим управляли. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 16:04 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
mayton Класс лежит в исходнике. Считайте MD5 исходника. Или смотрите там git diff ... или git log ... Чем не вариант? MD5 исходника вариант кстати, https://stackoverflow.com/a/2435932/2674303 Но опять же это на уровне одного класса. У нас классы каждый в своём файле лежит и как-то не хочется трекать изменения в методах. При таком варике проще рефлекшеном гулять. Ещё раз повторю - хотелось бы скормить один класс, а он сам по полям бы полгулял. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 16:13 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
На рефлекторе вместо этого Код: java 1. 2. 3.
будет скорее всего такое Код: java 1. 2. 3.
Ты ОК с таким допущением? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 16:20 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
mayton На рефлекторе вместо этого Код: java 1. 2. 3.
будет скорее всего такое Код: java 1. 2. 3.
Ты ОК с таким допущением? Кстати да, это проблема. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 16:32 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner, >Ещё раз повторю - хотелось бы скормить один класс, а он сам по полям бы полгулял. А если класс ещё не создан?))))))))) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 16:34 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner mayton На рефлекторе вместо этого Код: java 1. 2. 3.
будет скорее всего такое Код: java 1. 2. 3.
Ты ОК с таким допущением? Кстати да, это проблема. Идите гуляйте с такими целями и задачами. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 16:35 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
mayton, MD5 кстати не покатит, потому, что родитель не будут учитываться ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 16:43 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner mayton, MD5 кстати не покатит, потому, что родитель не будут учитываться Почему? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 16:44 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
Вот будет такой input: Код: jscript 1. 2. 3. 4. 5. 6. 7.
Вот считай его MD5 и тут всё учтено что связано с сигнатурами. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 16:48 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
mayton Вот будет такой input: Код: jscript 1. 2. 3. 4. 5. 6. 7.
Вот считай его MD5 и тут всё учтено что связано с сигнатурами. а родитель родителя? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 17:00 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
mayton, Добавили поле в родителя, у наследника это поле тоже есть... может понадобиться сериализовать ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 17:01 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
Есть такое (всяко есть куча аналогов) - никогда не использовал, но по идее можно генерить, сохранять и сравнивать с предыдущим. А какая вообще постановка от бизнеса? - вроде задача ясна, но возможно решение не с той стороны ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 17:03 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
SpringMan, Задачу он с потолка взял. Поработали прогеры. Потом в рантайме рожают классы из хранилища а в ответ Райзе. Код поменялся. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 17:10 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
SpringMan Есть такое (всяко есть куча аналогов) - никогда не использовал, но по идее можно генерить, сохранять и сравнивать с предыдущим. А какая вообще постановка от бизнеса? - вроде задача ясна, но возможно решение не с той стороны Задача - при старте приложение ответить на вопрос менял ли кто-то что-то в структуре жава объектов начиная с определенного рута с момента прошлого старта. JsonSchema это другое ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 17:13 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner mayton Вот будет такой input: Код: jscript 1. 2. 3. 4. 5. 6. 7.
Вот считай его MD5 и тут всё учтено что связано с сигнатурами. а родитель родителя? Мы ходим по кругу. Твой вопрос в чем? Можно ли принципиально, используя рефлексию извлечь родителей? Я думаю - да. Можно. Тебе придется хранить не только поля. Но и всю цепочку родителей. И все композитные классы если они были в полях. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 17:29 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
mayton, Не только композит. Полиморфные методы, абстрактные, наследование, интерфейсы,... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 17:33 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
mayton questioner пропущено... а родитель родителя? Мы ходим по кругу. Твой вопрос в чем? Можно ли принципиально, используя рефлексию извлечь родителей? Я думаю - да. Можно. Тебе придется хранить не только поля. Но и всю цепочку родителей. И все композитные классы если они были в полях. Как сделать руками через рефлексию я уж как-нить разберусь) Был вопрос нет ли готовой тулы для этого, чтобы не писать свой велоспед ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 17:37 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
С практической точки зрения это был-бы рандомный шум. Я - как раз за то чтобы не анализировать сигнатуры, а смотреть с точки зрения бизнеса - какие были сделаны ФАКТИЧЕСКИ изменения. А то что-же получается. Система стартанула. Сказала - ойойой - тут около 500 классов изменились. И дальше что? Какая нам с этого польза? Мне вот как разработчику эта тема - не интересна. Бизнесу - 500 классов тоже никакой инфы не несет. Ему надо другое. С какого числа в "маркетинг акции" появилось свойство - "привел друга". Вот это - интересно. Это - экспертный вопрос. И мета-информацию по нем я-бы искал в release-notes.txt а не в рандомных изменениях классов которые разраб каждый день делает по 100 штук. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 17:39 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
mayton, По бизнесу делается "версионирование".... Разными методами. Но ТС наверно не слышал такого. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 17:46 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner Задача - при старте приложение ответить на вопрос менял ли кто-то что-то в структуре жава объектов начиная с определенного рута с момента прошлого старта. JsonSchema это другое А в чем проблема генерить схему и проверять поменялась ли они? Или на каком уровне ты это хочешь делать? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 17:56 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
mayton С практической точки зрения это был-бы рандомный шум. Я - как раз за то чтобы не анализировать сигнатуры, а смотреть с точки зрения бизнеса - какие были сделаны ФАКТИЧЕСКИ изменения. А то что-же получается. Система стартанула. Сказала - ойойой - тут около 500 классов изменились. И дальше что? Какая нам с этого польза? Мне вот как разработчику эта тема - не интересна. Бизнесу - 500 классов тоже никакой инфы не несет. Ему надо другое. С какого числа в "маркетинг акции" появилось свойство - "привел друга". Вот это - интересно. Это - экспертный вопрос. И мета-информацию по нем я-бы искал в release-notes.txt а не в рандомных изменениях классов которые разраб каждый день делает по 100 штук. В нашем случае будет достаточно свалиться. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 18:16 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
(разводя руками) Это странно. Комплекс падает при старте. Ну ладно. Вам виднее. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 18:39 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
mayton (разводя руками) Это странно. Комплекс падает при старте. Ну ладно. Вам виднее. Да, это expected result. Также как приложение не стартует если не все миграции накатились. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 18:44 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
Ни один чел топике не одобрил постановку. Но ТС упрямо - всё хорошо, прекрасная маркиза... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 19:19 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
Я-бы послушал как эту задачу озвучивает бизнес. Не в терминах классов. А в общих словах. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2021, 19:21 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner Додумываешь слова. Про рантайм от меня вообще речи не было >Не райнайм >Рефлексия Яснопонятно. Чтобы за тебя не додумывали попробуй делать избыточное описание своих хотелок. Никто не обязан и не в состоянии знать, какой у тебя там контекст. Сохранишь кучу времени себе и людям. questioner Это всё мне известно... у нас вообще всё это в монге хранится и объект в Жысон сохраняется, поэтому не совсем релевантно. Да и трейдингом мы не занимаемся, поэтому доли секунды не критичны. Нужен просто ответ на вопрос поменялось ли что что-то в структуре объектов или нет. Если да, то метод должен вернуть другой хэш, чем в прошлый раз. Ты не мог сразу написать, что у тебя там жсон из монги с проекцией на pojo? У тебя два варианта - или парсить код, или рефлексия в рандайме и падать при запуске/работе/тестах. Я бы выбрал первый вариант, если тебе надо трекать изменения в коде и долбить разрабов по башке. А лучше вообще сделал бы код для json'а генерируемым/частично генерируемым и трекал всё где-то отдельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2021, 09:50 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
crutchmaster, Он хотел одного - готовую либу. А сам он фиг напишет и тему топика достойно не закроет. Уже видно по его поведению. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2021, 10:09 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Он хотел одного - готовую либу. Вряд ли он найдёт что-то готовое под такой специфичный изврат. Типа в стат. типизированном яп компилятор и так должен бить по рукам за всякие изменения структуры. PetroNotC Sharp А сам он фиг напишет и тему топика достойно не закроет. И хорошо. Он что-то хочет там с рефлексей, чтобы проект подло падал после недели траходрома с его сборкой. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2021, 17:46 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
crutchmaster, )) +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2021, 18:02 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner SpringMan Есть такое (всяко есть куча аналогов) - никогда не использовал, но по идее можно генерить, сохранять и сравнивать с предыдущим. А какая вообще постановка от бизнеса? - вроде задача ясна, но возможно решение не с той стороны Задача - при старте приложение ответить на вопрос менял ли кто-то что-то в структуре жава объектов начиная с определенного рута с момента прошлого старта. JsonSchema это другое а если создать свою статическую мапу <неизмененный Class<?>, хеш> а потом переделать класслоадер, чтобы он при загрузке классов сверялся с этой хеш мапой, изменился ли хеш класса? хеш класса считать как то по полям http://commons.apache.org/proper/commons-beanutils/javadocs/v1.9.4/apidocs/index.html ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2021, 11:18 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
questioner Это всё мне известно... у нас вообще всё это в монге хранится и объект в Жысон сохраняется, поэтому не совсем релевантно. Да и трейдингом мы не занимаемся, поэтому доли секунды не критичны. Нужен просто ответ на вопрос поменялось ли что что-то в структуре объектов или нет. Если да, то метод должен вернуть другой хэш, чем в прошлый раз. Да и вызываться это будет один раз при старте аппликейшена. То бишь грешить на перформанс тут не надо. Какой-то велосипед изобретаете. Сохраняйте в монго/JSON номер версии. При считывании сравниваете. Если отличается - ошибка. Ровно так в родной сериализации и сделано Если процесс разработки поставлен и есть build server, то Subversion при коммитах может в код приложения сам номер версии вписывать. Если нужно более толлирантный вариант, то достаточно только проверять набор полей. Очень странно, что процедура считывания этого не делает. Если поля в объекте нет, то куда оно его считывать будет? Т.е. эта проверка (на отсутвие полей) уже должна быть реализована. Остается проверка, что не появилось новых полей. Точнее, что после операции считывания не осталось не проиницыализированных полей. Служебные поля, внутренние для объекта и инициализирующиеся кодом, ясное дело операции записи/чтения никак не мешают. Важны только внешние поля (которые сохраняются/загружаются). Проход по иерархии и цепочки классов так же не нужен. Т.к. операция считывания объекта и так должна такой проход делать неавно (рекурсивно). IMHO & AFAIK ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2021, 16:29 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Про версии вы правы и ему говорилось. Не реагирует. Если нет версии, то считывающий класс не сможет проверить тот набор полей или нет. Райзе будет. Код: java 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2021, 17:09 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Если нет версии, то считывающий класс не сможет проверить тот набор полей или нет. Райзе будет. Код: java 1. 2. 3. 4.
почему не сможет? Если код чтения постороен исходя из полей в классе, то Вариант поле добавилось в класс - его не будет в JSON - ошибка Вариант поле удалили в классе - ну нужно дописать обработку ситуации, что остались необработанные поля из JSON. Задача вроде попроще, чем бином Ньютона ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2021, 17:41 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Это если json. Я говорил про байтовый поток в блоб поле бд. Там только данные полей. Без имён и типов. А если json то конечно,... Там и типы и названия полей и данные и точность и схема и...)))) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2021, 19:10 |
|
Как посчитать хеш класса ?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Пусть хранит прямо файлы исходников MyClass.java)))) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2021, 19:11 |
|
|
start [/forum/topic.php?all=1&fid=59&tid=2120515]: |
0ms |
get settings: |
11ms |
get forum list: |
6ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
69ms |
get topic data: |
5ms |
get forum data: |
1ms |
get page messages: |
1332ms |
get tp. blocked users: |
1ms |
others: | 296ms |
total: | 1723ms |
0 / 0 |