среда, 29 января 2014 г.

maven dependency hell

Так сложилось, что в компании долгое время использовался инструмент http://ant.apache.org/. Круто, здорово, можно делать невероятные вещи и почти что запустить ракету на Луну с помощью него. Но за это приходится платить большим размером ant-скриптов, дублированием действий и прочими штуками, которые во множестве мест и статей уже описаны. Ещё один негатив - это т. н. jar-hell, когда у девелопера на локальной машине одна версия библиотеки (быть может, даже кастомная), у тестировщика другая, а у внедренца на продакшн-стенде - третья.

Перешли на http://maven.apache.org/. Круто, здорово, можно быстро и легко делать стандартные вещи. Если проект нестандартен и не подходит под maven-lifecycle - 99 %, что его целесообразнее стандартизировать - и будет круто и здорово.
Упрощение управлением зависимостями - одно из достоинств maven, которое часто упоминается.

Только вот беда с зависимостями всё равно есть - на этот раз maven-dependency-hell!

вторник, 19 ноября 2013 г.

Валидация по схеме в Jaxb2Marshaller

Для маршаллинга soap-объектов используем org.springframework.oxm.jaxb.Jaxb2Marshaller - удобный и быстрый.
На этапе отладки взаимодействия между двумя системами решено было использовать и валидацию по xsd-схемам, чтобы эффективнее отлавливать нарушения контракта. Выбранный маршаллер отлично справляется с этой задачей - необходимо указать ему одну или несколько схем, по которым проводить валидацию, и проверка начнётся.

среда, 23 октября 2013 г.

Снятие блокировки в oracle

В посте http://itech-notes.blogspot.com/2013/07/select-for-update.html был рассказ о работе с конструкцией select for update в oracle. И был там такой текст: "если ... обнаруживается, что на какой-то строке уже имеется лок от другой сессии, то текущая сессия будет ожидать - бесконечно! - пока лок не будет снят, и только после этого продолжит выполнение".
Интересный вопрос - собственно, а как и когда снимается лок (т. е. блокировка)?

понедельник, 7 октября 2013 г.

Design patterns GoF от luxoft-training

Шаблоны проектирования. В общем-то, классика. Многие знают и активно применяют на практике. Находятся те, кто вполне аргументированно доказывается, что это, как минимум, не очень хорошо. Но - сейчас не о том речь.
А о том, что есть в учебном центре luxoft-training такой курс - Шаблоны проектирования (Gang of Four). Вот об этом курсе и своих впечатлениях от посещения оного и пойдёт пост.

пятница, 4 октября 2013 г.

liquibase + spring

Для удобства интеграции с spring-фреймоворком есть специальная оболочка liquibase.integration.spring.SpringLiquibase (с версии 3.0.5).
Пример бина:
    <bean id="liquibase" class="liquibase.integration.spring.SpringLiquibase">
        <property name="dataSource" ref="dataSource"/>
        <property name="changeLog" value="classpath:changelog.xml"/>
        <property name="contexts" value="test, production"/>
    </bean>
При старте конфигурации с таким бином liquibase-скрипт будет автоматически загружен из changelog.xml, а затем применён к хранилищу javax.sql.DataSource dataSource.
 
Опциональные параметры можно посмотреть в javadoc'е (http://www.liquibase.org/javadoc/liquibase/integration/spring/SpringLiquibase.html).

пятница, 19 июля 2013 г.

Конструкция select for update

Есть такие примечательные sql-конструкции:
  • oracle: select ... from table where ... for update
  • ms sql server: select ... from table with (updlock, rowlock) where ...
Смысл и результат выполнения обеих весьма схож: выбрать из таблицы записи для обработки, удовлетворяющие определённым условиям, и установить на выбранные записи блокировку, чтобы предотвратить их чтение/изменение другими пользователями до окончания обработки.
Вероятно, отличия между ними есть. Однако, после столкновения "здесь и сейчас" именно с oracle-вариантом, дальнейшее описание будет посвящено этой конструкции - select for update.