english | блог | контакт
Wed, 26 May 2010 @ 09:35

Семафоры и велосипеды

concurrency java

Сделал очередной велосипед: именованный семафор. Для моей задачи, как мне показалось, это был более удобный вариант.

Вкратце:

public class SemaphoreUtils {
    public static boolean enterLock(String name, int workers) { ... }
    public static boolean enterLock(String name, int workers, long waitMillis) { ... }
    public static void leaveLock(String name) { ... }
}

Далее реализация.
читать дальше

Wed, 19 May 2010 @ 19:35

Притча о unit-тестах

притча тестирование

Ранним утром, программист спросил великого мастера

"Я собираюсь писать unit-тесты. К какому уровню покрытия кода я должен стремиться?"

Великий мастер ответил:

"Не беспокойся о покрытии, просто напиши хорошие тесты."

Программист улыбнулся, поклонился и ушел.
читать дальше

Wed, 19 May 2010 @ 15:48

Причёсывание CruiseControl

cruisecontrol

Приводил в порядок имеющуюся инсталляцию CC, печалился:

  • почти треть проектов не собирается, т.к. коммитов за последний год просто не было и проекты умерли

  • часть проектов просто компилируется, unit-тесты отключены, т.к. сломались в ходе добавления некоторого функционала

  • часть не собирается и окрашена в волнующе красный цвет

  • в папке круиза - мусорка из ser-файлов, логов, ошмётков скриптов

  • сам круиз антикварный

  • читать дальше

    Mon, 17 May 2010 @ 14:28

    Медиаплеер Iconbit

    iconbit linux

    Купил себе железяку для просмотра фильмов. Выбирал не долго, остановился на Iconbit HDR12L. К нему был подключен Wifi (TEW-648UB), вставлен диск (WD10EARS). После дня использования был найден telnet, root-доступ (он даже без пароля), и появилось желание ковыряться.
    читать дальше

    Wed, 05 May 2010 @ 08:51

    Комментарии в коде и системе контроля версий

    cvs scm

    Добрался, наконец, до починки багов в одном проекте, который работает, но протекает по памяти и чему-то ещё (надо выяснить) и требует иногда перезагрузки.

    Посмотрел код из CVS (да, эта система ещё жива, к сожалению) и захотелось ругаться матом, громко и долго.

    Один товарищ (проработавший около полугода) затеял рефакторинг системы и внёс на протяжении этого времени около 400 (!) коммитов и сделал для них всего 4 (!!!) осмысляемых комментария.
    Основная масса комментариев состояла из повторений следующего:

    maked change to file
    no message
    add code
    fix bug
    *** empty log message ***
    create new objects and code refactor
    create new logic
    code refactor

    В коде коментариев нет.

    Человек, если ты себя узнал, знай: сейчас я тебя ненавижу!

    Thu, 01 Apr 2010 @ 15:47

    JPA и составной PrimaryKey

    hibernate java jpa

    Возникла такая странная ситуация: понадобилось работать с таблицей сущностей, которым не нужен отдельный ID (а JPA очень хочет работать с сущностями, имеющими ID). В принципе, сущности уникальны и можно сделать ключ по всем полям, но "просто и в лоб" проблема не решалась. Сложность была в том, что часть композитного ключа являлась ссылкой по ForeignKey к другой сущности.

    Выглядела сущность, подлежащая хранению, приблизительно так:

    public class WhoisEntity {
      private long ipLow;
      private long ipHigh;
      private Location loc; // у класса Location есть свойство "id"
      // геттеры и сеттеры
    }
    

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

    Fri, 26 Mar 2010 @ 16:51

    Maven и сторонние JAR-файлы

    jdbc maven oracle

    Даже при использовании такого замечательного инструмента, как maven, проблемы с отдельно взятыми зависимостями приходится решать вручную. Одну из таких проблем нам дарит замечательный Oracle JDBC.

    Казалось бы, что может быть проще подключения артефакта ojdbc14 из группы com.oracle с некоторой версией? Ан нет, в pom-файле указан адрес, где можно скачать jar вручную и положить в classpath. И проделывать это предлагается на каждой машине.

    Сегодня было потрачено некоторое количество времени на раскопки, о чём ниже.
    читать дальше

    Wed, 24 Mar 2010 @ 12:01

    Ehcache автоапдейт

    ehcache hibernate java

    Сегодня в логах заметил замечательную строчку:

    INFO - UpdateChecker - New update(s) found: 2.0.0 [http://ehcache.org/news.html]

    "Я негодую", в серверном окружении, по-умолчанию, какая-то библиотека (да, вполне определённая) лезет куда-то в сеть и чекает свои апдейты.

    Чую, скоро в логи будет падать реклама "посетите нашего спонсора, увеличьте сами-знаете-что :)"...

    Кроме проверки апдейтов на хост отправляется статистика использования ehcache (версии os, jvm, платформа, продукт).

    Отключается эта пакость в java-properties "-Dnet.sf.ehcache.skipUpdateCheck=true", либо в конфиге, ehcache.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:noNamespaceSchemaLocation="ehcache.xsd"
                 updateCheck="false">
    
    <!-- здесь, собственно, основной конфиг -->
    
    </ehcache>
    

    Mon, 15 Mar 2010 @ 14:50

    Конфигурирование Acegi [2]

    acegi java spring авторизация

    Начиная с версии 2.0 (да, сейчас уже есть 3-я версия) в Spring-е начали активно использовать неймспейсы. К сожалению, все исходники, с которыми мне пришлось работать, были написаны с использованием spring 1.2 и о неймспейсах, как и о прочих плюшках, приходится узнавать самостоятельно.

    Ранее я собрал шаблонный конфиг, который предполагал использовать в будущем. Вообще, понимание того, как оно работает "изнутри", за шторкой неймспейсов - хорошо. Но вместо полотна на 2-3 страницы вполне можно использовать такой код:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans:beans xmlns="http://www.springframework.org/schema/security"
      xmlns:beans="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
          http://www.springframework.org/schema/security
          http://www.springframework.org/schema/security/spring-security-2.0.4.xsd">
    
        <http auto-config='true'>
            <intercept-url pattern="/anon/*" filters="none"/>
            <intercept-url pattern="/**" access="ROLE_ADMIN" />
            <form-login login-page="/anon/login.jsp"/>
        </http>
    
        <authentication-provider>
            <user-service>
                <user name="admin" password="123" authorities="ROLE_ADMIN" />
            </user-service>
        </authentication-provider>
    
    </beans:beans>
    


    В данном случае меньше = лучше :)

    Читаю Spring Secutiry reference.

    Thu, 18 Feb 2010 @ 15:34

    Маршализация атрибутов в CXF (jax-ws)

    java web-сервисы

    Забавный эффект: если метод возвращает некий пользовательский тип, в результирующем XML будут только те атрибуты, у которых имеются как геттеры, так и сеттеры (то есть нужно полное соответствие JavaBeans). Иначе придётся аннотировать интересующие методы как @XmlAttribute.

    Ещё можно для всего класса дополнительно указать @XmlAccessorType(XmlAccessType.FIELD) и работать будет с полями напрямую.

    Но в большинстве случаев проще дополнить недостающими методами и не напрягаться по поводу дополнительных аннотаций.
    читать дальше

    Страницы: 1 2 3 4 5 6 7 8