Архивы автора: kna

Проблема — клиент не восстанавливает подключение к серверу ActiveMQ после обрыва соединения. Здесь зависит от режима соединения. При обычном (не кластерном) соединении достаточно установить параметр reconnectAttempts=-1. Это заставит клиента бесконечно пытаться подключиться к узлу, с которым изначально было установлено соединение. По-умолчанию параметр установлен в значение 0, что запрещает попытки переподключения, также можно установить конкретное число попыток, например reconnectAttempts=5. В итоге соединение должно выглядеть примерно следующим образом: quarkus.artemis.url=tcp://127.0.0.1:61616?clientFailureCheckPeriod=5000&retryInterval=1000&reconnectAttempts=-1&callTimeout=3000 При кластерном подключении, значение параметра reconnectAttempts=-1 сыграет с Вами злую шутку, т.к. при отваливании live-ноды кластера переподключение к новой live-ноде не произойдёт и приложение просто скажет Вам: Connection failure to 127.0.0.1/127.0.0.1:61616 has been detected: AMQ219015: The connection was disconnected because of server shutdown [ code=DISCONNECTED] Это из-за того, что клиент будет бесконечно пробовать переподключиться к той ноде, к которой он был подключен изначально, и ему абсолютно без разницы, что она умерла, что используется режим ha=true, что в url перечислен список нод для подключения.…

Читать дальше

Столкнулся с некоторыми проблемами: Ошибки типа Discovered unresolved type during parsing… и Discovered unresolved method during parsing… Имеют свойство появляться в случайном порядке, если в приложении существует несколько мест вызывающих данную ошибку. Сначала пытался лечить путем добавления аргумента сборки quarkus.native.additional-build-args=—initialize-at-run-time….. но это оказалось бесполезно, т.к. при сборке, грааль сканирует весь код и находит места вызовов несуществующих классов/методов, и если найдёт, то прекращает сборку и вываливает ошибку. На эту тему есть небольшое замечание тут. Как скипнуть эту проблему или игнорировать такие вещи — не нашёл. Разработчики пишут, что они заботятся о нас, чтобы наша приложуха не дай бог не выкинула ошибку типа ClassNotFoundException. Причина появления этой ошибки — Внутри одной из зависимостей/транзитивных зависимостей есть код, который: При сборке приложения в jar проблем не возникает, т.к. сборщик не копает внутрь работы зависимостей и не смотрит как там взаимодействуют между собой транзитивные зависимости, а просто собирает проект и всё. При запуске приложения из…

Читать дальше

Рассматриваемая система — Ubuntu 22.04. Нужно сделать так, чтобы была возможность одной командой изменить дефолтную версию java. На самом деле оно уже есть, и чтобы изменить версию java в ubuntu, нужно лишь использовать команду: Эта команда изменит ссылку файла /usr/bin/java, которая ссылается на одну из установленных версий java (обычно в директории /usr/lib/jvm). Также переменная JAVA_HOME, которая по-умолчанию ссылается на /usr/bin/java, попадёт в выбранную версию. Всё работало до того момента, когда мне понадобилось добавить GraalVm. Во-первых, GraalVm не появляется в списке update-alternatives; Во-вторых, даже если его туда добавить, то например, Intellij Idea при попытке компилляции проекта выдает ошибку: ‘gu’ tool was not found in your JAVA_HOME.This probably means that the JDK at ‘/usr/bin/java’ is not a GraalVM distribution. Проблема с граалем заключается в том, что Idea пытается найти другие бинарные файлы грааля в одной директории с файлом java из $JAVA_HOME, но их ведь нету в /usr/bin. Проблема решается тем, чтобы удалить…

Читать дальше

Различные способы логгирования JMS сообщений: 1. Логгирование внутри конвертора (Плюс в том, что будет логгироваться тело сообщения как есть. Если сообщение невозможно распарстить, то оно тоже залоггируется (если конечно это TextMessage)): 2. Логгирование внутри jmsTemplate при отправке (Тоже тело сообщения как есть): 3. Логгирование внутри @JmsListener’а (Тоже тело сообщения как есть): 4. Установка уровня логгирования для входящих сообщений (Минус в том, что логгируется объект Message целиком, и тело сообщения может просто не влезть в максимальную длину записи лога):

Выборка записей с максимальной датой в разрезе значений определённого поля На SQL выражение выглядит так (записи с максимальным create_timestamp у каждого sender’а): Но т.к. criteria api поддерживает подзапросы полько в секции where, то можно реализовать только такой запрос (будет делать то же самое): Если реализовать интерфейс Specification, то он будет выглядеть так: При этом, это поля из модели, сгенерированные maven-плагином: Выборка записей с максимальной датой На SQL выражение выглядит так (записи с максимальным create_timestamp): Если реализовать интерфейс Specification, то он будет выглядеть так: Выборка записей с полем, значения которого входят в список значений По аналогии с предыдущими примерами: Выборка записей с полем, значение которого равно указанному значению По аналогии с предыдущими примерами: Выборка записей с полем, значение даты которого равно или более указанной даты Case insensitive like

Такая вот ерунда просто вымогает при каждом запуске вполне легитимных приложений: В интернете полно статей как отключить защиту Defender, поправить групповые политики, изменить настройки конфиденциальности, разблокировать приложение… Всё это шляпа. Оказалось, что если запускать непосредственно сам exe-шник, то запускается сразу без этих дурацких вопросов. Значит дело в ярлыке. Но не понятно что с ним не так. Проблему удалось решить случайно, итак: На exe-шнике жмём правой кнопкой — Создать ярлык, вылезет окошко с предложением создать его на рабочем столе — жмём да. Вуаля — этот ярлык нормальный и не задаёт лишних вопросов, можно перемещать его куда вам надо и использовать

Т.к. в Spring Data JDBC нет стандартных хибернейтовских аннотаций типа @OneToOne, @OneToMany и @JoinColumn, то для меня было проблематично понять можно ли там вообще организовать отношения и использовать их при получении или сохранении объектов. Оказалось это делается так: One-To-One При такой реализации объект Operation без проблем вычитывается из БД уже с смапленным внутрь TaxInfo. Так же без проблем работает сохранение нового Operation с заполненным TaxInfo (корректно заполняются поля id и operationId. One-To-Many Несколько проблематично отношение один ко многим. Здесь сложность состояла в том, что я использовал List для агрегации нескольких TaxInfo, и при сохранении получал эксепшн ConstraintViolationException. Решение состояло в том, чтобы использовать Set (или Map): При такой реализации объект Operation без проблем вычитывается из БД уже с смапленными внутрь TaxInfo. Так же без проблем работает сохранение нового Operation с заполненными TaxInfo (корректно заполняются поля id и operationId. Теперь про эксепшены. У меня были проблемы именно с аннотацией @MappedCollection в…

Читать дальше

Да, эластиксёрч в россии всё. Но у нас пока есть tor, поэтому можно использовать wget через tor proxy:

Чтобы логгировать SQL-запросы к базе данных — нужно добавить следующие свойства: Ещё есть вариант использовать библиотеку p6spy, которая будет писать в лог настоящие запросы:

20/136