powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Как посчитать хеш класса ?
72 сообщений из 72, показаны все 3 страниц
Как посчитать хеш класса ?
    #40048887
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужна штука, которая будет трекать изменения в классе и в любом его поле на любую глубину

Ну то есть я скармливаю ей MyClass.class, эта штука выдаёт мне некую хеш строку. Потом где-то кто-то добавил новое поле в MyOtherClass и хеш строка должна поменяться.

Код: java
1.
2.
3.
4.
5.
6.
public class MyClass{
    int field1;
    List<MyOtherClass> otherClassList = ...;
    ...
 
}



Можно конечно самому написать через рефлекшн, но может есть что-то готовое уже?
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048911
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner
эта штука выдаёт мне некую хеш строку. Потом где-то кто-то добавил новое поле в MyOtherClass и хеш строка должна поменяться.

Строки иммутабельные и не являются ссылками.
Код: java
1.
2.
3.
4.
String s = "abc";
String s1 = s;
s = "ab";
System.out.println(s1); //--> abc


Идея изначально провальная, давай заново.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048915
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner
отом где-то кто-то добавил новое поле в MyOtherClass

Разве поля не определяются на этапе компиляции? Если ты хочешь добавлять их в рантайме, то тебе не нужна java, возьми какой-нибудь динамический [недо]язычок. Вон, на js, по идее, можно такое провернуть через прокси и какой-нибудь объект с иерархией.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048920
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster,

я и не собирался добавлять поля в рантайме. С чего ты взял?


Программист Вася добавил некое поле в некий класс , закоммитил. Надо его предупредить, что он может сломать другой сервис. Нужно явно его заставить проверить, что он не сломает ничего.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048922
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
речь идёт о чем то типа java.io.ObjectStreamClass#computeDefaultSUID
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048924
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner
я и не собирался добавлять поля в рантайме. С чего ты взял?

С того, что ты написал:

questioner
Потом где-то кто-то добавил новое поле

>новое поле
>поле
>добавил

questioner
Программист Вася добавил некое поле в некий класс , закоммитил. Надо его предупредить, что он может сломать другой сервис.

Так для такого есть интерфейсы. Если Васян что-то где-то ломает у него рассыпется проект при сборке.
Да и как он может что-то сломать, если расширяет класс.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048925
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerialVersion UUID .
Считает его утилита serialver (JDK) или метод класса ObjectStreamClass .
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048926
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster,

Вижу, есть проблемы с причинно следственной связью. Додумываешь слова. Про рантайм от меня вообще речи не было
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048927
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner
я скармливаю ей MyClass.class, эта штука выдаёт мне некую хеш строку. Потом где-то кто-то добавил новое поле в MyOtherClass и хеш строка должна поменяться.

Почему нельзя просто посчитать хэш класса?
Код: java
1.
2.
3.
4.
Class c = ...
String className = c.getName();
String classAsPath = className.replace('.', '/') + ".class";
InputStream stream = c.getClassLoader().getResourceAsStream(classAsPath);


(дисклаймер: код взял первый попавшийся со стековерфлоу - улучшайте сами)

Еще можно паковать в JAR с цифровой подписью и проверять ее
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048929
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov
SerialVersion UUID .
Считает его утилита serialver (JDK) или метод класса ObjectStreamClass .


Я это уже собственно и упомянул.

у меня есть пара вопросов:

1. Будет ли эта штука возвращать одно и то же число и на винде и на маке и на линуксе ?
2. Будет ли эта штука возвращать одно и то же число на java 8 9 10 11... ?
3. Я так понимаю она не учитывает изменение в поле MyOtherClass при подсчёте для MyClass, а надо, чтобы учитывала
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048932
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kachalov,

те же вопросы, что и постом выше.

Можно ссылку на тред на SO ? я видимо не смог сформулировать запрос так, чтобы найти
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048933
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,

А че не ответил?
авторТак для такого есть интерфейсы. Если Васян что-то где-то ломает у него рассыпется проект при сборке.
Да и как он может что-то сломать, если расширяет класс.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048934
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
questioner,

А че не ответил?
авторТак для такого есть интерфейсы. Если Васян что-то где-то ломает у него рассыпется проект при сборке.
Да и как он может что-то сломать, если расширяет класс.

Это оффтоп. Можем в другом топике обсудить, если есть желание
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048935
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,
Все многообразие ссылок на классы ты не учтешь.
Задача странная. Делай руками и уходи.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048938
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner

те же вопросы, что и постом выше.

Можно ссылку на тред на SO ? я видимо не смог сформулировать запрос так, чтобы найти

- ссылку не дам (уже нет ее и пост не о том был). А по сути изменения в глубину без Reflection-а не отследишь (так мне кажется), а подсчет хэша класса по его байткоду будет давать другой хэш на любой чих (другая версия JDK, другие настройки компилятора - типа дебаг информации и т д). Готовой утилиты решающей Вашу задачу не знаю, но не исключаю что она кем то уже написана (мне и раньше, когда сталкивался с подобной задачей пришлось городить рефлекшн велосипед)
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048939
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner
PetroNotC Sharp
questioner,

А че не ответил?
пропущено...

Это оффтоп. Можем в другом топике обсудить, если есть желание

Мне не надо. Я за версту чую странные желания осчастливить мир со словами НА ЛЮБУЮ и ЛЮБЫЕ
авторлюбом его поле на любую глубину
А если у тебя сериализация то там POJO классы.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048945
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kachalov
questioner

те же вопросы, что и постом выше.

Можно ссылку на тред на SO ? я видимо не смог сформулировать запрос так, чтобы найти

- ссылку не дам (уже нет ее и пост не о том был). А по сути изменения в глубину без Reflection-а не отследишь (так мне кажется), а подсчет хэша класса по его байткоду будет давать другой хэш на любой чих (другая версия JDK, другие настройки компилятора - типа дебаг информации и т д). Готовой утилиты решающей Вашу задачу не знаю, но не исключаю что она кем то уже написана (мне и раньше, когда сталкивался с подобной задачей пришлось городить рефлекшн велосипед)


Вот я тоже думаю, что придётся писать ограниченный своими нуждами трёхколёсный лисопед. Надеялся, что кто-то написал уже полноценный байк)
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048946
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp,
Если тебе не надо, то к чему вопрос?
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048953
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner
PetroNotC Sharp,
Если тебе не надо, то к чему вопрос?
проверить, вменяемый ли постановщик. Решаем ли задача без граничных условий.
Убедился)))
Тебе верно сказали. Твой маркер будет меняться на каждый чих.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048956
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner
Нужна штука, которая будет трекать изменения в классе и в любом его поле на любую глубину

Начинается пятница.

Во первых непонятно что значит "трекать" ? У вас-же не Lisp. А Java. Тоесть вы контролируете изменения по коду.
И в фазе компилляции знаете что у вас есть.

Во вторых зачем. Хеш таблицы? Контракт хеш-кода предполагает что и equals тоже участвует в этой-же формуле.
Вам придётся автоматически выводить предикат эквивалентности для таких объектов-мутантов. Это не всегда возможно.
Это требует обсуждений. Не все поля класса принадлежат DTO и есть технические поля которые вовсе не надо
включать в эту формулу. Кеширующие. Вычислимые. Transient. Внешние объекты. Файлы. Сокеты. Это все не сериализуемо
и не имеет представления в виде бинаря или строки. Тоесть посчитать хеш-код невозможно. Или вы посчитаете фигню.

Есть более выгодное IMHO. Если объекты иммутабельны и излекаются из БД - то уникальный ключ - уже полностью
указывает на равенство объектов с точки зрения бизнеса и на этом можно остановится. Это еще раз ИМХО.

По поводу рефлексии. Да писать самому лучше. Глубже разберешся. Но объект может представлять граф и наивный
алгоритм обхода вложенности теоретически может попасть в петлю. Надо это учитывать как маловероятный но все таки кейс.

По поводу готового. Посмотри на http://commons.apache.org/proper/commons-beanutils/ может пригодится. Это взгляд
на задачу с точки зрения бинов а не pure Java.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048965
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
questioner
PetroNotC Sharp,
Если тебе не надо, то к чему вопрос?
проверить, вменяемый ли постановщик. Решаем ли задача без граничных условий.
Убедился)))
Тебе верно сказали.


Зачем тебе это?
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048967
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
+1
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048970
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner
PetroNotC Sharp
пропущено...
проверить, вменяемый ли постановщик. Решаем ли задача без граничных условий.
Убедился)))
Тебе верно сказали.


Зачем тебе это?

Гимнастика ума. Развлечение. Проф рост для диагностики убыточных проектов.
Ещё?
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048971
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
questioner
Нужна штука, которая будет трекать изменения в классе и в любом его поле на любую глубину

Начинается пятница.

Во первых непонятно что значит "трекать" ? У вас-же не Lisp. А Java. Тоесть вы контролируете изменения по коду.
И в фазе компилляции знаете что у вас есть.

Во вторых зачем. Хеш таблицы? Контракт хеш-кода предполагает что и equals тоже участвует в этой-же формуле.
Вам придётся автоматически выводить предикат эквивалентности для таких объектов-мутантов. Это не всегда возможно.
Это требует обсуждений. Не все поля класса принадлежат DTO и есть технические поля которые вовсе не надо
включать в эту формулу. Кеширующие. Вычислимые. Transient. Внешние объекты. Файлы. Сокеты. Это все не сериализуемо
и не имеет представления в виде бинаря или строки. Тоесть посчитать хеш-код невозможно. Или вы посчитаете фигню.

Есть более выгодное IMHO. Если объекты иммутабельны и излекаются из БД - то уникальный ключ - уже полностью
указывает на равенство объектов с точки зрения бизнеса и на этом можно остановится. Это еще раз ИМХО.

По поводу рефлексии. Да писать самому лучше. Глубже разберешся. Но объект может представлять граф и наивный
алгоритм обхода вложенности теоретически может попасть в петлю. Надо это учитывать как маловероятный но все таки кейс.

По поводу готового. Посмотри на http://commons.apache.org/proper/commons-beanutils/ может пригодится. Это взгляд
на задачу с точки зрения бинов а не pure Java.


Согласен - мысли такие же...

По поводу "трекать":

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

Миграция исторических данных остаётся за скобками этого топика.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048972
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
questioner
пропущено...


Зачем тебе это?

Гимнастика ума. Развлечение. Проф рост для диагностики убыточных проектов.
Ещё?


Спорить не буду, но думаю это приведёт только к деградации. Извини, больше не буду отвечать на твои сообщения.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048982
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner
mayton
пропущено...

Начинается пятница.

Во первых непонятно что значит "трекать" ? У вас-же не Lisp. А Java. Тоесть вы контролируете изменения по коду.
И в фазе компилляции знаете что у вас есть.

Во вторых зачем. Хеш таблицы? Контракт хеш-кода предполагает что и equals тоже участвует в этой-же формуле.
Вам придётся автоматически выводить предикат эквивалентности для таких объектов-мутантов. Это не всегда возможно.
Это требует обсуждений. Не все поля класса принадлежат DTO и есть технические поля которые вовсе не надо
включать в эту формулу. Кеширующие. Вычислимые. Transient. Внешние объекты. Файлы. Сокеты. Это все не сериализуемо
и не имеет представления в виде бинаря или строки. Тоесть посчитать хеш-код невозможно. Или вы посчитаете фигню.

Есть более выгодное IMHO. Если объекты иммутабельны и излекаются из БД - то уникальный ключ - уже полностью
указывает на равенство объектов с точки зрения бизнеса и на этом можно остановится. Это еще раз ИМХО.

По поводу рефлексии. Да писать самому лучше. Глубже разберешся. Но объект может представлять граф и наивный
алгоритм обхода вложенности теоретически может попасть в петлю. Надо это учитывать как маловероятный но все таки кейс.

По поводу готового. Посмотри на http://commons.apache.org/proper/commons-beanutils/ может пригодится. Это взгляд
на задачу с точки зрения бинов а не pure Java.


Согласен - мысли такие же...

По поводу "трекать":

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

Миграция исторических данных остаётся за скобками этого топика.

Что такое снепшот? Это сериализация? Исходник? Или просто ревизия в github? Или некий DSL?
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048993
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner
PetroNotC Sharp
пропущено...

Гимнастика ума. Развлечение. Проф рост для диагностики убыточных проектов.
Ещё?


Спорить не буду, но думаю это приведёт только к деградации. Извини, больше не буду отвечать на твои сообщения.
а кто против?
Я злой следователь. Mayton добрый.
Работай!
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048998
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,

авторМы собираем некий объект и делаем его снепшот и сохраняем в некотором хранилище, чтобы юзер смог пвоторить своё действие из прошлого. В будущем некто может добавить в объект поля, а в хранилище будет сохраняться снепшот без этого поля, что может не хило так всё разломать.
Да. Изменив классы вы потом не десиреализуете. Не родите обратно.
Тупик.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40048999
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,
>чтобы юзер смог пвоторить своё действие из прошлогоМы собираем некий объект и делаем его снепшот и сохраняем в некотором хранилище, чтобы юзер смог пвоторить своё действие из прошлого....
==== без примера не катит. Зачем в бд пихать сам класс а не ДЕЙСТВИЕ чтобы его повторить?)))
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049007
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
questioner
пропущено...


Согласен - мысли такие же...

По поводу "трекать":

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

Миграция исторических данных остаётся за скобками этого топика.

Что такое снепшот? Это сериализация? Исходник? Или просто ревизия в github? Или некий DSL?


Это некий снимок состояния структуры объектов. Это сериализация.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049012
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,
Про это не слышал. Понятно.
интерфейс Serializable
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049017
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner

Я понял вас. Сериализация - это вобщем тухлый механизм. Продвинутые конторы ее не используют.
Медленно ибо. Для 10 объектов - нормас. А для 100500 будет уже ощутима задержка из-за механизмов рефлексии.
+Есть много issues об инфо-безопасности но я честно говоря не изучал их никогда ибо было неинтересно.
Предполагаю что просто через сериализацию утекали пароли из приватных полей о которых разраб
просто забыл.

Вместо нее обычно берут либо коммерческий Cryo. Я не использовал но мы стыковались с проектом
который юзал это.

Либо Гугловый ProtoBuf . Либо Apache Thrieft . Либо Avro . Последний мы юзали в одном банке.

Кроме сериализации есть еще и externalization. Это такой-себе брат-близнец сериализации - только от вас
требуеся вручную описать все действия в readObject/writeObject на уровне битов и байтов. Работает - быстрее.
Но вам все равно не хватит встроенных функций. Например я не смог найти как экстернализировать массив double[]
одной функцией.

А в Cryo - можно.

P.S. Да и самое страшное. Сериализация и экстернализация боятся изменений версии класса. Если вы добавили хоть
одно поле - то считай все пропало. Уже не прочитаете. Насчет прочих библиотек - не знаю. Надо читать. Возможно
у них заложен какой-то уровень толерантности к новым полям как в XML. Это я думаю очень большой плюс.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049020
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
questioner

Я понял вас. Сериализация - это вобщем тухлый механизм. Продвинутые конторы ее не используют.
Медленно ибо. Для 10 объектов - нормас. А для 100500 будет уже ощутима задержка из-за механизмов рефлексии.
+Есть много issues об инфо-безопасности но я честно говоря не изучал их никогда ибо было неинтересно.
Предполагаю что просто через сериализацию утекали пароли из приватных полей о которых разраб
просто забыл.

Вместо нее обычно берут либо коммерческий Cryo. Я не использовал но мы стыковались с проектом
который юзал это.

Либо Гугловый ProtoBuf . Либо Apache Thrieft . Либо Avro . Последний мы юзали в одном банке.

Кроме сериализации есть еще и externalization. Это такой-себе брат-близнец сериализации - только от вас
требуеся вручную описать все действия в readObject/writeObject на уровне битов и байтов. Работает - быстрее.
Но вам все равно не хватит встроенных функций. Например я не смог найти как экстернализировать массив double[]
одной функцией.

А в Cryo - можно.

P.S. Да и самое страшное. Сериализация и экстернализация боятся изменений версии класса. Если вы добавили хоть
одно поле - то считай все пропало. Уже не прочитаете. Насчет прочих библиотек - не знаю. Надо читать. Возможно
у них заложен какой-то уровень толерантности к новым полям как в XML. Это я думаю очень большой плюс.



Это всё мне известно... у нас вообще всё это в монге хранится и объект в Жысон сохраняется, поэтому не совсем релевантно.
Да и трейдингом мы не занимаемся, поэтому доли секунды не критичны. Нужен просто ответ на вопрос поменялось ли что что-то в структуре объектов или нет. Если да, то метод должен вернуть другой хэш, чем в прошлый раз.

Да и вызываться это будет один раз при старте аппликейшена. То бишь грешить на перформанс тут не надо.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049021
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос как сериализовать не стоит.

Стоит вопрос как трекнуть изменения в структуре классов( такие как добавление поля, удаление поля, переименование поля)
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049023
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Класс лежит в исходнике. Считайте MD5 исходника.

Или смотрите там git diff ... или git log ...

Чем не вариант?
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049024
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Класс лежит в исходнике. Считайте MD5 исходника.

Или смотрите там git diff ... или git log ...

Чем не вариант?
он просто Упрямый)
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049028
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне напомнило. Когда работали в *телекомах для ГТС у нас были услуги для населения. Бизнес-факты.
Например один чел (абонент А) позвонил абоненту (Б) и они говорили 18 минут. Потом формула тарификации
поменялась (например до 2004.01.02 была одна формула) и после этой точки - другая.

При расчете платежек населению наша логика учитывала эту формулу и все услуги до 2004.01.02 считались
так. А после этого - по другому. Потом формула могла еще 100 раз поменятся. И в Oracle автоматом
компилировалась PLSQL функция что-то типа FUNC_2004_xxxx и бизнес логика просто брала эту функцию.

Это было в определённой степени полиморфизмом для Оракла. Потому-что другие системы для телефонии
и даже такое не умели делать.

Разумеется процесс создания таких периодов и формул был ручной. Был отдел бизнесов которые этим управляли.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049031
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Класс лежит в исходнике. Считайте MD5 исходника.

Или смотрите там git diff ... или git log ...

Чем не вариант?


MD5 исходника вариант кстати, https://stackoverflow.com/a/2435932/2674303

Но опять же это на уровне одного класса. У нас классы каждый в своём файле лежит и как-то не хочется трекать изменения в методах.
При таком варике проще рефлекшеном гулять.


Ещё раз повторю - хотелось бы скормить один класс, а он сам по полям бы полгулял.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049036
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На рефлекторе вместо этого

Код: java
1.
2.
3.
public class MyClass{
    int field1;
    List<MyOtherClass> otherClassList = ...;



будет скорее всего такое

Код: java
1.
2.
3.
public class MyClass{
    int field1;
    List<Object> otherClassList = ...;



Ты ОК с таким допущением?
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049040
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
На рефлекторе вместо этого

Код: java
1.
2.
3.
public class MyClass{
    int field1;
    List<MyOtherClass> otherClassList = ...;



будет скорее всего такое

Код: java
1.
2.
3.
public class MyClass{
    int field1;
    List<Object> otherClassList = ...;



Ты ОК с таким допущением?


Кстати да, это проблема.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049043
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,
>Ещё раз повторю - хотелось бы скормить один класс, а он сам по полям бы полгулял.
А если класс ещё не создан?)))))))))
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049044
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner
mayton
На рефлекторе вместо этого

Код: java
1.
2.
3.
public class MyClass{
    int field1;
    List<MyOtherClass> otherClassList = ...;




будет скорее всего такое

Код: java
1.
2.
3.
public class MyClass{
    int field1;
    List<Object> otherClassList = ...;




Ты ОК с таким допущением?


Кстати да, это проблема.

Идите гуляйте с такими целями и задачами.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049047
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

MD5 кстати не покатит, потому, что родитель не будут учитываться
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049048
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner
mayton,

MD5 кстати не покатит, потому, что родитель не будут учитываться

Почему?
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049050
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот будет такой input:

Код: jscript
1.
2.
3.
4.
5.
6.
7.
{ "com.corporation.questioner.MyClass" : {
   extends : BasicClass,
   implements : [ "Interface1"],
   fields : [
      { type : "int", name : "field1"},
      { type : "List", name : "otherClassList"}
   ]
}


Вот считай его MD5 и тут всё учтено что связано с сигнатурами.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049056
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Вот будет такой input:

Код: jscript
1.
2.
3.
4.
5.
6.
7.
{ "com.corporation.questioner.MyClass" : {
   extends : BasicClass,
   implements : [ "Interface1"],
   fields : [
      { type : "int", name : "field1"},
      { type : "List", name : "otherClassList"}
   ]
}


Вот считай его MD5 и тут всё учтено что связано с сигнатурами.


а родитель родителя?
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049057
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

Добавили поле в родителя, у наследника это поле тоже есть... может понадобиться сериализовать
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049058
SpringMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть такое (всяко есть куча аналогов) - никогда не использовал, но по идее можно генерить, сохранять и сравнивать с предыдущим.
А какая вообще постановка от бизнеса? - вроде задача ясна, но возможно решение не с той стороны
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049061
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SpringMan,
Задачу он с потолка взял.
Поработали прогеры. Потом в рантайме рожают классы из хранилища а в ответ Райзе. Код поменялся.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049062
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SpringMan
Есть такое (всяко есть куча аналогов) - никогда не использовал, но по идее можно генерить, сохранять и сравнивать с предыдущим.
А какая вообще постановка от бизнеса? - вроде задача ясна, но возможно решение не с той стороны


Задача - при старте приложение ответить на вопрос менял ли кто-то что-то в структуре жава объектов начиная с определенного рута с момента прошлого старта.

JsonSchema это другое
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049065
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner
mayton
Вот будет такой input:

Код: jscript
1.
2.
3.
4.
5.
6.
7.
{ "com.corporation.questioner.MyClass" : {
   extends : BasicClass,
   implements : [ "Interface1"],
   fields : [
      { type : "int", name : "field1"},
      { type : "List", name : "otherClassList"}
   ]
}


Вот считай его MD5 и тут всё учтено что связано с сигнатурами.


а родитель родителя?

Мы ходим по кругу. Твой вопрос в чем? Можно ли принципиально, используя рефлексию извлечь родителей?

Я думаю - да. Можно.

Тебе придется хранить не только поля. Но и всю цепочку родителей. И все композитные классы если они были в полях.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049066
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Не только композит. Полиморфные методы, абстрактные, наследование, интерфейсы,...
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049069
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
questioner
пропущено...


а родитель родителя?

Мы ходим по кругу. Твой вопрос в чем? Можно ли принципиально, используя рефлексию извлечь родителей?

Я думаю - да. Можно.

Тебе придется хранить не только поля. Но и всю цепочку родителей. И все композитные классы если они были в полях.



Как сделать руками через рефлексию я уж как-нить разберусь) Был вопрос нет ли готовой тулы для этого, чтобы не писать свой велоспед
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049070
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С практической точки зрения это был-бы рандомный шум.

Я - как раз за то чтобы не анализировать сигнатуры, а смотреть с точки зрения бизнеса - какие
были сделаны ФАКТИЧЕСКИ изменения. А то что-же получается. Система стартанула.

Сказала - ойойой - тут около 500 классов изменились. И дальше что? Какая нам с этого польза?

Мне вот как разработчику эта тема - не интересна. Бизнесу - 500 классов тоже никакой инфы не несет.

Ему надо другое. С какого числа в "маркетинг акции" появилось свойство - "привел друга".

Вот это - интересно. Это - экспертный вопрос. И мета-информацию по нем я-бы искал в release-notes.txt
а не в рандомных изменениях классов которые разраб каждый день делает по 100 штук.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049072
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
По бизнесу делается "версионирование".... Разными методами.
Но ТС наверно не слышал такого.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049075
SpringMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
questioner

Задача - при старте приложение ответить на вопрос менял ли кто-то что-то в структуре жава объектов начиная с определенного рута с момента прошлого старта.

JsonSchema это другое


А в чем проблема генерить схему и проверять поменялась ли они? Или на каком уровне ты это хочешь делать?
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049082
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
С практической точки зрения это был-бы рандомный шум.

Я - как раз за то чтобы не анализировать сигнатуры, а смотреть с точки зрения бизнеса - какие
были сделаны ФАКТИЧЕСКИ изменения. А то что-же получается. Система стартанула.

Сказала - ойойой - тут около 500 классов изменились. И дальше что? Какая нам с этого польза?

Мне вот как разработчику эта тема - не интересна. Бизнесу - 500 классов тоже никакой инфы не несет.

Ему надо другое. С какого числа в "маркетинг акции" появилось свойство - "привел друга".

Вот это - интересно. Это - экспертный вопрос. И мета-информацию по нем я-бы искал в release-notes.txt
а не в рандомных изменениях классов которые разраб каждый день делает по 100 штук.


В нашем случае будет достаточно свалиться.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049091
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(разводя руками)

Это странно. Комплекс падает при старте.

Ну ладно. Вам виднее.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049094
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
(разводя руками)

Это странно. Комплекс падает при старте.

Ну ладно. Вам виднее.


Да, это expected result. Также как приложение не стартует если не все миграции накатились.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049099
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ни один чел топике не одобрил постановку.
Но ТС упрямо - всё хорошо, прекрасная маркиза...
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049100
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я-бы послушал как эту задачу озвучивает бизнес. Не в терминах классов. А в общих словах.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049315
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner
Додумываешь слова. Про рантайм от меня вообще речи не было

>Не райнайм
>Рефлексия
Яснопонятно. Чтобы за тебя не додумывали попробуй делать избыточное описание своих хотелок. Никто не обязан и не в состоянии знать, какой у тебя там контекст. Сохранишь кучу времени себе и людям.

questioner
Это всё мне известно... у нас вообще всё это в монге хранится и объект в Жысон сохраняется, поэтому не совсем релевантно.
Да и трейдингом мы не занимаемся, поэтому доли секунды не критичны. Нужен просто ответ на вопрос поменялось ли что что-то в структуре объектов или нет. Если да, то метод должен вернуть другой хэш, чем в прошлый раз.

Ты не мог сразу написать, что у тебя там жсон из монги с проекцией на pojo?

У тебя два варианта - или парсить код, или рефлексия в рандайме и падать при запуске/работе/тестах. Я бы выбрал первый вариант, если тебе надо трекать изменения в коде и долбить разрабов по башке. А лучше вообще сделал бы код для json'а генерируемым/частично генерируемым и трекал всё где-то отдельно.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049317
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,
Он хотел одного - готовую либу.
А сам он фиг напишет и тему топика достойно не закроет.
Уже видно по его поведению.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049386
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Он хотел одного - готовую либу.

Вряд ли он найдёт что-то готовое под такой специфичный изврат. Типа в стат. типизированном яп компилятор и так должен бить по рукам за всякие изменения структуры.
PetroNotC Sharp
А сам он фиг напишет и тему топика достойно не закроет.

И хорошо. Он что-то хочет там с рефлексей, чтобы проект подло падал после недели траходрома с его сборкой.
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049389
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster,
)) +1
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049769
questioner
SpringMan
Есть такое (всяко есть куча аналогов) - никогда не использовал, но по идее можно генерить, сохранять и сравнивать с предыдущим.
А какая вообще постановка от бизнеса? - вроде задача ясна, но возможно решение не с той стороны


Задача - при старте приложение ответить на вопрос менял ли кто-то что-то в структуре жава объектов начиная с определенного рута с момента прошлого старта.

JsonSchema это другое


а если создать свою статическую мапу <неизмененный Class<?>, хеш>
а потом переделать класслоадер, чтобы он при загрузке классов сверялся с этой хеш мапой, изменился ли хеш класса?
хеш класса считать как то по полям http://commons.apache.org/proper/commons-beanutils/javadocs/v1.9.4/apidocs/index.html
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049911
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner

Это всё мне известно... у нас вообще всё это в монге хранится и объект в Жысон сохраняется, поэтому не совсем релевантно.
Да и трейдингом мы не занимаемся, поэтому доли секунды не критичны. Нужен просто ответ на вопрос поменялось ли что что-то в структуре объектов или нет. Если да, то метод должен вернуть другой хэш, чем в прошлый раз.

Да и вызываться это будет один раз при старте аппликейшена. То бишь грешить на перформанс тут не надо.

Какой-то велосипед изобретаете.

Сохраняйте в монго/JSON номер версии. При считывании сравниваете. Если отличается - ошибка. Ровно так в родной сериализации и сделано

Если процесс разработки поставлен и есть build server, то Subversion при коммитах может в код приложения сам номер версии вписывать.

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

Проход по иерархии и цепочки классов так же не нужен. Т.к. операция считывания объекта и так должна такой проход делать неавно (рекурсивно).

IMHO & AFAIK
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049932
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
Про версии вы правы и ему говорилось. Не реагирует.
Если нет версии, то считывающий класс не сможет проверить тот набор полей или нет.
Райзе будет.
Код: java
1.
2.
3.
4.
obj.readFromStream(stream){
    field1 читаем
     field2 читаем
    .... 
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049949
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp

Если нет версии, то считывающий класс не сможет проверить тот набор полей или нет.
Райзе будет.
Код: java
1.
2.
3.
4.
obj.readFromStream(stream){
    field1 читаем
     field2 читаем
    .... 


почему не сможет?

Если код чтения постороен исходя из полей в классе, то

Вариант поле добавилось в класс - его не будет в JSON - ошибка
Вариант поле удалили в классе - ну нужно дописать обработку ситуации, что остались необработанные поля из JSON. Задача вроде попроще, чем бином Ньютона )))
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049980
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
Это если json. Я говорил про байтовый поток в блоб поле бд. Там только данные полей. Без имён и типов.
А если json то конечно,... Там и типы и названия полей и данные и точность и схема и...))))
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40049982
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
Пусть хранит прямо файлы исходников MyClass.java))))
...
Рейтинг: 0 / 0
Как посчитать хеш класса ?
    #40050015
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На уровне maven-плагинов можно. Генерить манифесты с контрольными суммами.
...
Рейтинг: 0 / 0
72 сообщений из 72, показаны все 3 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Как посчитать хеш класса ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]