29
August
2009

Reflection в Java (java.lang.reflect API)

Posted in: Java technologies, J2SE | 17 Comments

Reflection API в Java используется для просмотра информации о классах, интерфейсах, методах, полях, конструкторах, аннотациях во время выполнения java программ.
При этом знать названия исследуемых элементов заранее не обязательно.

Все классы для работы с reflection расположены в пакете java.lang.reflect. Это метод (Method), конструктор (Constructor), массив (Array), поле (Field) и многие другие.
Вместо изучения каждого из этих элементов в отдельности, для знакомства с reflection я предлагаю вам небольшой пример. Мы попытаемся в runtime вывести всю возможную информацию о следующем java-классе:

package some;

public abstract class Test implements Serializable, Cloneable {
    private int field;

    public Test(Object field) { }

    @Deprecated
    protected static void method(String[] params) { }
}

Итак, приступим.

(more…)

22
March
2009

Сколько нужно потоков для обработки пользовательских запросов или крайности при использовании Singleton

Posted in: Java Web Design, J2EE, Java technologies, J2SE, Паттерны проектирования | 19 Comments

Более трех лет назад, когда я только пере?ел на Java, написал статью об использовании паттерна Singleton. Статья доступна по этой ссылке - Паттерн Singleton. Не смотря на про?ествие значительного промежутка времени, статью до сих пор читают и комментируют. Меня заинтересовала одна ссылка из комментариев, в которой довольно неплохо рассказываются нюансы реализации паттерна Singleton.

В статье говорится о том, что следующая реализация с lazy инициализацией является не оптимальной при достаточно частом обращении к getInstance():

public final class Singleton {
    private static Singleton _instance = null;

    private Singleton() {}

    public static synchronized Singleton getInstance() {
        if (_instance == null)
            _instance = new Singleton();
        return _instance;
    }
}

Давайте попробуем определить, что же такое “достаточно часто”. Так же в статье я хочу показать Вам одну достаточно сме?ную реализацию Singleton, идею которой рассказал мне мой друг.

(more…)

20
February
2009

Генерация Google Sitemap и нюансы его использования (googlesitemap)

Posted in: Интернет Маркетинг, SEO, Java technologies, J2SE | 16 Comments

Sitemap позволяет владельцам сайтов и веб-мастерам сообщить поисковым системам о структуре сайта и обновлении контента на его страницах. Таким образом при правильном использовании sitemap можно добиться луч?его индексирования страниц веб-ресурса поисковыми системами. Соответственно, при неправильном использовании данной технологии можно навредить самому себе (точнее своему интернет детищу).

В этой статье я хочу коротко рассказать вам о Google Sitemap, предоставить программный код на Java для простой генерации sitemap.xml, ну и открыть некоторые нюансы обнаруженные моим другом и мной, и о которых, как мне кажется, многие не знают.
(more…)

18
December
2008

Модель памяти Java и атомарность операций (java memory model)

Posted in: Java technologies, J2SE | 8 Comments

Бывает, что иногда почитываю разные интересные книжки.
Вот например, для собственного развития всякие JSR читаю :).
?з недавнего - просматривал JSR-133 Java Memory Model and Thread Specification (Модель памяти Java).
В данной статье хочу в который раз показать, насколько важна синхронизация потоков, на примере такого понятия как атомарность (Atomicity) операций.

Рассмотрим такой программный код:
(more…)

14
October
2008

Скриптовый движок в Java (Script Engine)

Posted in: Java technologies, J2SE | 12 Comments

Вот скажите, где могут выполняются скрипты написанные на javascript: на сервере, на клиенте? На клиенте, говорите? Это устаревшая информация…

С введением в Java версии 1.6 Scripting API стало очень просто и удобно писать extension поинты и динамические конфигурации для серверной логики.

В этой статье я хочу коротко рассказать вам о ScriptEngine, ну и еще кое о чем.
(more…)

31
May
2008

Аннотации в Java (java annotation types)

Posted in: Java technologies, J2SE | 16 Comments

Продолжаю серию статей о нововведениях в Java (начиная с версии 1.5). На этот раз разговор пойдет об аннотациях (annotation type).

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

Вот основные варианты использования аннтоаций:
(more…)

4
April
2008

Работа с CSV. Чтение и запись CSV файлов в Java (comma separated values file)

Posted in: Java open-source проекты, Java technologies, J2SE, Полезные программы | 23 Comments

Решил сделать свой вклад в мировое open-source сообщество. Как вы уже догадались из названия статьи, на этот раз речь пойдет о формате CSV.

Итак, проблема заключалась в том, что генерация отчетов в формате Excel через библиотеку POI кушала много оперативной памяти и процессорного времени.

Сам по себе Excel, наверное, один из немногих действительно хороших продуктов компании Microsoft, но вот формат файлов оставляет желать лучшего. Короче говоря, при генерации документа необходимо полностью держать его в памяти.

Выходом из ситуации является использование формата CSV (comma-separated values file format), который к счастью тоже читается с помощью Excel.
(more…)

26
March
2008

Социальные сети, Co-working Центры, Стартапы и Фрилансеры

Posted in: Разное (uncategorized), Ваш досуг. Полезные советы | 27 Comments

[Disclamer: все персонажы этого стёба выдуманы и не имеют реальных аналогов. Автор статьи не несет ответственности за то, что после ее прочтения вы организуете свой собственный co-working центр или как минимум стартап.]

Читая хабр я обнаружил, что каждая 10-ая статья посвящена Co-working Центрам и Стартапам (скорее всего, пока я напишу этот пост, там добавится еще одна-две статьи о co-working центрах и уж точно не меньше о Стартапах).

Поэтому появилась идея СТАРТАПА - создать социальную сеть (social network), посвященную Co-working центрам и Стартапам (startups). Естественно, главной сущностью в этом проекте будет не кто иной как Фрилансер (freelancer).

Смысл социальной сети достаточно прост…
(more…)

26
March
2008

Паттерн Наблюдатель (Observer design pattern)

Posted in: Паттерны проектирования | 14 Comments

По просьбам читателей очередную статью о паттернах проектирования посвящу паттерну Observer (Наблюдатель). Этот ?аблон проектирования также известен под именами Dependents (Подчиненные) и Publisher-Subscriber (?здатель-Подписчик).

Реализация данного паттерна используется для наблюдения за состоянием объектов в системе. Если состояние объектов изменяется в процессе их жизненного цикла, то Наблюдатель оповещает другие части системы об этих событиях.

В данной статье я попытаюсь как можно проще и понятнее рассказать об этом паттерне и привести пример программного кода на Java, реализующего Observer.
(more…)

22
March
2008

Результаты голосования

Posted in: Разное (uncategorized) | 5 Comments

Всем доброго времени суток.

Что-то голосование о рефакторинге блога поутихло…
Тем не менее можно подвести какой-никакой итог. К сожалению он будет недостаточно объективным.

В номинации Паттерны Проектирования победил “Паттерн Observer”. Статью об этом паттерне напи?у в ближай?ее время.

В номинации Open-Source проекты первое место получает “?спользование Hibernate”. Хотя Hibernate использую все реже и реже - pure JDBC рулит когда важна производительность.

В номинации Java статьи побеждают “Нововведения в Java”. Ближай?ая тема для рассмотрения - аннотации в Java.

“Фиксим layout для IE 7.0″ победил в номинации Делаем блог красивее. Вообще-то хочется немного обновить дизайн блога - сделать область для чтения ?ире и ?рифт покрупнее. Посмотрим…

Ну и лично мое мнение. Неболь?ое количество проголосовав?их можно объяснить тем, что комментарии - не самый удобный спобос голосования. Наверняка нужно прикрутить какой-то хоро?ий плагин для голосований (polls). Чем и займусь в ближай?ее время.

Спасибо всем за ва? вклад в развитие данного ресурса. Голосование остается открытыми, высказать ва?е мнение никогда не поздно: Refactoring блога Javenue.

Всего хоро?его.