english | блог | контакт
Mon, 30 Aug 2010 @ 14:24

Inner-классы и фабрики

java

Мне нравится использовать double-brace инициализацию: это удобно и быстро.

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

  • имеем некий DAO, который вызывает некий Callback
  • callback сохраняет в себе Connection (для удобства, например) и возвращает результат работы как список Map-ов
  • map-ы инстанциируются как inner-классы

  • В результате имеем потенциальную утечку соединений на время жизни результатов запроса.

    Ниже "проверочный код".
    читать дальше

    Tue, 24 Aug 2010 @ 14:06

    Удаление дубликатов файлов

    bash

    На самом деле не удаление, а замена симлинком на оригинал.

    На одном очень старом проекте "враги" загружали достаточно объёмные одинаковые файлы. Зачем они это делали - тайна веков.
    Но место, как и всё хорошее, когда-то (сегодня) закончилось.

    В срочном порядке был написан простенький скрипт, который смотрит файлы в папке и дубликаты (по md5) бэкапит и меняет на симлинк.
    читать дальше

    Tue, 03 Aug 2010 @ 13:04

    Почему tomcat не видит ресурсы из context.xml

    tomcat

    Часа два бился над этим вопросом. Вроде на продакшене всё работает. Собираю, запускаю на тестовом стенде и получаю

    org.apache.tomcat.dbcp.dbcp.SQLNestedException:
     Cannot create JDBC driver of class '' for connect URL 'null'
    ...
    Caused by: java.lang.NullPointerException
        at sun.jdbc.odbc.JdbcOdbcDriver.getProtocol(JdbcOdbcDriver.java:507)
    

    Тихо ругаюсь, гуглю, ничего путного, кроме доисторических статей, не нахожу, снова ругаюсь и начинаю вдумчиво читать tomcat docs.
    читать дальше

    Sun, 01 Aug 2010 @ 08:22

    Реализации SSH-протокола

    java

    Чуть больше года назад (когда я ещё вспахивал на ниве PHP) я писал таск для ANT, который ходил по SSH на удалённый сервер и производил там некоторые действия.

    В то время я использовал jSch.

    Сегодня, немного погуглив, обнаружил проект Ganymed SSH-2 for Java. В прошлом году проект был скорее мёртв, чем жив (последнее обновление в 2006 году), однако в этом году автор вернулся.

    Оба проекта распространяются под BSD-подобной лицензией. Работают с протоколом SSH2, поддерживают авторизацию по ключу, исполнение команд, передачу файлов (джентльменский набор) и многое другое.

    Первый проект отличается живостью, однако, у автора есть плохой девиз "лучшая документация - исходный код".

    Второй проект отлично документирован (особенно на фоне первого), но активность пока оставляет желать лучшего.

    Не смотря на то, что я тоже знаю о самодокументируемом коде, примеры такого кода я видел только в книгах и их (примеров) объёмы были далеки от 100кб+. На сегодня мой выбор - Ganymed SSH-2.

    Thu, 29 Jul 2010 @ 15:42

    Вариант реализации задержки

    java не делай так

    Я думал, таких шедевров в природе не существует, но вот он:

    public String waiter(){
    /*применяется специально для claim.card
     при выборке данных из веб страницы
    (поток выборки данных опережает поток записи этих данных
     на веб интерфейс)*/
               
        Date d = new Date();
        String s="zero";
        int g=0;
        for (int u=0;u<10000;u++){
            for(int t=0;t<9999;t++){
                    g++;
            }
        }
        logProductivity(d, "waiter");
        return s;
    }
    

    Thu, 01 Jul 2010 @ 10:03

    Синглтоны и синхронизация в Java

    java singleton

    Во всём бывают плюсы и минусы. Минус - не знал, плюс - теперь покопался и буду знать.

    Знал, что работа с синглтоном в нагруженной многопоточной/многопроцессорной среде не тривиальна. Но думал, что вариант с двойной проверкой достаточно хорош.

    Вышло, что лучший вариант - статический инициализатор. Вариант с двойной проверкой тоже достоин жизни после добавления модификатора volatile ("просто добавь воды :)"):

    public class Singleton {
        private volatile static Singleton singleton;
        public static synchronized Singleton getInstance() {
             if (singleton == null) {
                 synchronized (Singleton.class) {
                       if (singleton == null)
                          singleton = new Singleton();
                   }
             }
             return singleton;
        }
    }
    

    Статья с Хабра о синглтонах в java:
    http://habrahabr.ru/blogs/complete_code/27108/

    Хорошая статья на английском, с обзором вариантов реализации:
    http://avricot.com/blog/index.php?post/2010/05/11/Java-MultiThread-singleton-LocalThread-vs-Double-Check-Locked-(dcl)-vs-synchronized-vs-static

    Англоязычное разъяснение "почему двойная проверка плоха":
    http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html

    Sat, 12 Jun 2010 @ 08:12

    Инициализация объектов

    java

    Вспомнил, что в прошлом году очень хотел сертифицироваться. По этому поводу открыл гайд к SCJP от Sybex и уже несколько дней вдумчиво читаю.

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

    Tue, 08 Jun 2010 @ 06:51

    Запуск программы и main(...)

    java

    А ведь это корректно работает:

    public class StaticTest {
        static {
            main();
        }
        static void main() {
            System.out.println("hello, world!");
            System.exit(0);
        }
    }
    

    Вывод:
    ~$ javac StaticTest.java && java StaticTest
    hello, world!
    

    Mon, 07 Jun 2010 @ 14:58

    Spring, ApplicationEventPublisher и ApplicationListener

    java spring

    Какое-то время меня волновал вопрос: как работают события в Spring?
    Понятное дело, приложение через ApplicationEventPublisher.publishEvent(...) их публикует, а различные реализации ApplicationListener.onApplicationEvent(...) эти события получают и обрабатывают.

    Но меня волновал вопрос: что если события поступают быстрее, чем обрабатываются?

    Сегодня методом "научного тыка" было выяснено, что publishEvent() не возвращает управление до тех пор, пока событие не обработано.

    Дальше код:
    читать дальше

    Thu, 27 May 2010 @ 08:27

    Pragmatic Unit Testing in Java with JUnit

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

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

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

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