|
как тестить кафку?
|
|||
---|---|---|---|
#18+
собссно есть компонент. в хибере в энтитилистенере вставлен кафка продьюссер. просто в конструкторе инициализируется. оттуда и шлет в топик все изменения сущностей. продьюссер не инжектится в энтитилистенер а прям там через нью создается. вопрос - как это тестировать. я поднял контекст хибера. прикрутил н2. ну оно и работает - создает реальный продьюссер (я максимум в тестах могу подкрутить конфиг продьюссера) и продьюссер фигачит реально объекты в топик. как мне замокать в таком конфиге продьюссера (это в идеале) и сдернуть с него объект который в него попадает. если бы это был простой юнит тест там понятно привинтить каптор и поехали. но здесь то реальный контекст поднимается. рассматривал вариант с тестконтейнером. но во-первых, контора против тестконтейнеров. во-вторых, мне же придется консамеры еще поднимать и вылавливать объекты. а это прям много кода. и что тут делать? как внутри энтитилистенера поймать объект который уходит в продьюссер и замокать продьюссер? мне все же нужен контекст хибера, чтоб проверить как отрабатывает именно взаимодействие с ним. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.04.2021, 22:42 |
|
как тестить кафку?
|
|||
---|---|---|---|
#18+
короче сделал продюсер синглтоном, и просто подсовываю мок-продьюсер в него а потом запускаю контекст. но только кажется такая штука сломается если продьюсить в несколько потоков начнут. но с другой стороны, энтитилистенер один на всё приложение поднимается. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 00:14 |
|
как тестить кафку?
|
|||
---|---|---|---|
#18+
andreykaT, какой-то поток сознания, вот что я понял из всего: "мы пишем полную херню, как эту херню тестировать", и насколько я понимаю всю эту историю про тесты, TDD, SOLID и пр., считается, что если непонятно как писать тесты, то значит изначально написана дичь. что касается твоих "энтитилистенеров": в хибере это не лиснеры, а jpa-колбеки, придуманные специально для java-макак и поэтому имеющие крайне ограниченные возможности - можно взаимодействовать только с самой сущностью, а взаимодействовать с инфраструктурой категорически нельзя, хочешь взаимодействовать с инфраструктурой - реализуй слушателей из org.hibernate.event.spi которые взаимодействуют с org.hibernate.event.spi.AbstractEvent ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 04:32 |
|
как тестить кафку?
|
|||
---|---|---|---|
#18+
Андрея как всегда сложно понимать. Но мне кажется что вопрос стоит в пропускной способности некой конфигурации. И кажется что не существует теоретического ответа на этот вопрос. Лучше всего начать перформанс тестирование и мониторить где слабое место уже по факту возникновения этого слабого места. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 10:33 |
|
как тестить кафку?
|
|||
---|---|---|---|
#18+
mayton, а причем тут производительность вообще? ТС из какого-нить @PreUpdate, который вообще никаких гарантий не дает даже на то, что данные до БД доедут, а не то что закоммитятся, шлет сообщения во внешнюю систему (кафку), специально против такой дичи разработчики хибера (или JPA, кто там первый был не в курсе, свечку не держал), сделали так, чтобы из jpa-колбеков до инфраструктуры было достучаться крайне сложно. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 11:48 |
|
как тестить кафку?
|
|||
---|---|---|---|
#18+
Андрей Панфилов andreykaT, какой-то поток сознания, вот что я понял из всего: "мы пишем полную херню, как эту херню тестировать", и насколько я понимаю всю эту историю про тесты, TDD, SOLID и пр., считается, что если непонятно как писать тесты, то значит изначально написана дичь. что касается твоих "энтитилистенеров": в хибере это не лиснеры, а jpa-колбеки, придуманные специально для java-макак и поэтому имеющие крайне ограниченные возможности - можно взаимодействовать только с самой сущностью, а взаимодействовать с инфраструктурой категорически нельзя, хочешь взаимодействовать с инфраструктурой - реализуй слушателей из org.hibernate.event.spi которые взаимодействуют с org.hibernate.event.spi.AbstractEvent спасибо за наводку про спи и абстрактивент. на данный момент сделал проще. я сделал продюссер синглтон (как кафка кстати рекомендует) ну и добавил два метода - где создается инстанс с настоящим кафкапродьюсером либо если параметр передается то инстанс создается с мок-кафка-продьюсером. собссно я так и сделал перед стартом теста загоняю туда мок кафка продьюсер, потом стартуется тест и уже шлет в мок. а я из мока спокойно через хистори это всё вытряхиваю. спасибо кафке за приятный апи. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 12:13 |
|
как тестить кафку?
|
|||
---|---|---|---|
#18+
Андрей Панфилов mayton, а причем тут производительность вообще? ТС из какого-нить @PreUpdate, который вообще никаких гарантий не дает даже на то, что данные до БД доедут, а не то что закоммитятся, шлет сообщения во внешнюю систему (кафку), специально против такой дичи разработчики хибера (или JPA, кто там первый был не в курсе, свечку не держал), сделали так, чтобы из jpa-колбеков до инфраструктуры было достучаться крайне сложно. меня постапдейт интересует. или посткриейт. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 12:14 |
|
как тестить кафку?
|
|||
---|---|---|---|
#18+
andreykaT меня постапдейт интересует. или посткриейт. единственное что тебя в хибере должно интересовать - это org.hibernate.engine.spi.ActionQueue#registerProcess, то место, где есть хоть какие-то гарантии (довольно шаткие), что данные попадут в БД ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 12:19 |
|
как тестить кафку?
|
|||
---|---|---|---|
#18+
Андрей Панфилов andreykaT меня постапдейт интересует. или посткриейт. единственное что тебя в хибере должно интересовать - это org.hibernate.engine.spi.ActionQueue#registerProcess, то место, где есть хоть какие-то гарантии (довольно шаткие), что данные попадут в БД полазал ща по сорцам хибера. тебя не смущает что это оно и есть просто в фантике? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 13:01 |
|
как тестить кафку?
|
|||
---|---|---|---|
#18+
Андрей Панфилов andreykaT, какой-то поток сознания, вот что я понял из всего: "мы пишем полную херню, как эту херню тестировать", и насколько я понимаю всю эту историю про тесты, TDD, SOLID и пр., считается, что если непонятно как писать тесты, то значит изначально написана дичь. что касается твоих "энтитилистенеров": в хибере это не лиснеры, а jpa-колбеки, придуманные специально для java-макак и поэтому имеющие крайне ограниченные возможности - можно взаимодействовать только с самой сущностью, а взаимодействовать с инфраструктурой категорически нельзя, хочешь взаимодействовать с инфраструктурой - реализуй слушателей из org.hibernate.event.spi которые взаимодействуют с org.hibernate.event.spi.AbstractEvent можно делать инжекты через CDI апи. в кварке точно, думаю в его прародителе аналогично. в спринге опять же. я пока смотрю ивент.спи но пока не понимаю как мне это поможет. мне его точно так же надо будет промокивать где то как то. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 13:09 |
|
как тестить кафку?
|
|||
---|---|---|---|
#18+
andreykaT в фантике? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 13:12 |
|
как тестить кафку?
|
|||
---|---|---|---|
#18+
andreykaT можно делать инжекты через CDI апи. в кварке точно, думаю в его прародителе аналогично. в спринге опять же. я пока смотрю ивент.спи но пока не понимаю как мне это поможет. мне его точно так же надо будет промокивать где то как то. по-моему ты бредишь, твоему работодателю было бы гораздо выгоднее взять спеца на хиберу ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 13:17 |
|
как тестить кафку?
|
|||
---|---|---|---|
#18+
мне нравится этот форум. задаешь один вопрос тебе отвечают на совсем другой который ты и не задавал. еще и хамят. спросил как тестируют кафку мне отвечают про сессии в хибере. спасибо тебе мой хамоватый друг. в спринге вообще инжект делается через стандартную аннотацию компонент над листенером. ну это так для справки и к теме вопроса не относится. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 13:21 |
|
как тестить кафку?
|
|||
---|---|---|---|
#18+
andreykaT в спринге вообще инжект делается через стандартную аннотацию компонент над листенером. ну это так для справки и к теме вопроса не относится. Особо одаренный чтоли? нельзя из jpa-колбеков обращаться к инфраструктуре, как ты эти колбеки в хибер внедряешь не имеет значения - нельзя и все. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 13:35 |
|
как тестить кафку?
|
|||
---|---|---|---|
#18+
Андрей Панфилов ТС из какого-нить @PreUpdate, который вообще никаких гарантий не дает даже на то, что данные до БД доедут, а не то что закоммитятся, шлет сообщения во внешнюю систему (кафку) В Oracle похожие проблемы (дата муташин или как-то так) решаются простым образом: в before / after row триггере события пишутся в массив внутри программы/пакета в on commit триггере обрабатываются накопленные события из массива AFAIK ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 14:03 |
|
как тестить кафку?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev В Oracle похожие проблемы (дата муташин или как-то так) решаются простым образом: в before / after row триггере события пишутся в массив внутри программы/пакета в on commit триггере обрабатываются накопленные события из массива AFAIK ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 14:10 |
|
как тестить кафку?
|
|||
---|---|---|---|
#18+
andreykaT сорян. в этом сообщении я послал тебя найух но потом передумал и отредактировал. иди с миром. неужели ты думаешь, что от тебя это бы было хоть чуточку обидно? на форуме даже махровые джуны код показывают в надежде получить подсказку, а ты пытаешься пересказать, причем не потому что там что-то секретное (ага ноу-хау, в конструкторе продьюсер кафки создавать), а потому что там дерьмо. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 14:23 |
|
как тестить кафку?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Андрей Панфилов ТС из какого-нить @PreUpdate, который вообще никаких гарантий не дает даже на то, что данные до БД доедут, а не то что закоммитятся, шлет сообщения во внешнюю систему (кафку) В Oracle похожие проблемы (дата муташин или как-то так) решаются простым образом: в before / after row триггере события пишутся в массив внутри программы/пакета в on commit триггере обрабатываются накопленные события из массива AFAIK тему с триггерами в оракле и логингом обновлений я тут предлагал с полгода назад - обосрали точно так же. но ща вроде ок )) чот тут все какие то агрессоры сплошные. ну я там Стаса еще понимаю а этот то канадец че такой агрессивный. может укусил кто. я тут вроде со всем максимально уважительно общаюсь. по крайней мере стараюсь да. вроде был форум-форумом а ща какое то собрание истеричных тёлок и говноплевателей. я посмотрел пару вариантов вдовесок как инжектить - через ивентлистенеррегистри просто туда складывать заинжекченные бины, и уже отлавливать непосредственно ивенты хибера, а не конкретной сущности, либо то что агрессивный товарищ сказал - но его вариант мне как то не очень. слишком много кода выходит и что то у меня смутные подозрения. а вообще спринг без проблем дает называть компонентом энтитилистенер. может это и неправильно и "для мартышек". касательно потерь - у кого теряет тот пусть и думает почему. интернеты про это знают мало что а значит это чьи то личные проблемы кривых косых рук ног когда сделали говно а потом не знают почему говно. или какие то совсем граничные кейсы. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 17:07 |
|
как тестить кафку?
|
|||
---|---|---|---|
#18+
что то типа того: автор EventListenerRegistry registry = ((SessionFactoryImpl) sessionFactory).getServiceRegistry().getService(EventListenerRegistry.class); registry.appendListeners(EventType.PERSIST, new PersistEventListener() { @Override public void onPersist(PersistEvent persistEvent) throws HibernateException { //NOPMD вытряхиваем сущности из ивента. } @Override public void onPersist(PersistEvent persistEvent, Map map) throws HibernateException { //NOPMD } }); ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 17:09 |
|
как тестить кафку?
|
|||
---|---|---|---|
#18+
ну и второе Код: java 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 17:20 |
|
как тестить кафку?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev В Oracle ... в on commit триггере А такое существует? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 18:02 |
|
как тестить кафку?
|
|||
---|---|---|---|
#18+
Псевдомизантроп, Наверное нет ))), в случае мутации данных на статемент левел. Но если очень хочется на коммит повесится, то гугле подсказывает work arround There is no ON COMMIT trigger mechanism in Oracle. There are workarounds however: You could use a materialized view with ON COMMIT REFRESH and add triggers to this MV. This would allow you to trigger the logic when a base table has been modified at the time of commit. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 18:24 |
|
как тестить кафку?
|
|||
---|---|---|---|
#18+
Вроде в Oracle как раз через очереди (родные Oracle'вые) и делают. https://www.sql.ru/forum/822214/trigger-posle-commit Не специалист по Hibernate, но вроде в Hibernate commit/rollback вполне отследить можно https://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/Interceptor.html afterTransactionCompletion(Transaction tx) Called after a transaction is committed or rolled back. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 18:45 |
|
как тестить кафку?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Вроде в Oracle как раз через очереди (родные Oracle'вые) и делают. https://www.sql.ru/forum/822214/trigger-posle-commit Не специалист по Hibernate, но вроде в Hibernate commit/rollback вполне отследить можно https://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/Interceptor.html afterTransactionCompletion(Transaction tx) Called after a transaction is committed or rolled back. ивент пост-что-угодно это не то что будет после того как транзакция закрыта? я хз как там на других континентах, но у меня этот ивент не отрабатывает в случае ролбэка. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.04.2021, 21:55 |
|
|
start [/forum/topic.php?fid=59&msg=40059502&tid=2120488]: |
0ms |
get settings: |
17ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
38ms |
get topic data: |
3ms |
get forum data: |
1ms |
get page messages: |
449ms |
get tp. blocked users: |
1ms |
others: | 309ms |
total: | 825ms |
0 / 0 |