Java приложения, Java-программы, Java технологии и секреты, J2SE, J2EE, проект Jakarta


29
August
2009

Reflection в Java (java.lang.reflect API)

Posted in: Java technologies, J2SE | 13 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, Паттерны проектирования | 16 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 | 11 Comments

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

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

18
December
2008

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

Posted in: Java technologies, J2SE | 7 Comments

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

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

14
October
2008

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

Posted in: Java technologies, J2SE | 11 Comments

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

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

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

31
May
2008

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

Posted in: Java technologies, J2SE | 10 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, Полезные программы | 17 Comments

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

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

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

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

27
January
2008

Перечисляемые типы в Java (перечисления, enum types, enumerations)

Posted in: Java technologies, J2SE | 14 Comments

[О перечислениях в C++ можно прочитать здесь - Перечисления в C++ (enum types c++).]

По просьбам читателей начну цикл статей, посвященный нововведениям в Java начиная с версии 1.5. Думаю, статьи этой тематики будут актуальны для многих, так как сам только недавно начал переходить на 1.6 (на работе в проекте до сих пор используется версия jdk 1.4).
В этой статье я хочу рассказать о перечислениях (enumeration, enum). Сначала я покажу, как реализовывались перечисления в ранних версиях java.

Итак, перечисление (enum) - это тип, значения которого ограничены конечным набором констант.
Самым простым способом реализовать некоторый набор значений есть следующий класс:
(more…)

21
June
2007

Прозрачные окна в Java Swing (transparent windows)

Posted in: Java GUI, Swing, AWT, SWT, Java technologies, J2SE | 11 Comments

Библиотека Java Swing не предоставляет возможности создания прозрачных (transparent) окон без использования native кода.
Наткнулся на одну интересную статью. В ней рассказывается, как можно без этого самого native кода сделать “прозрачные” окошки в Java Swing. Реализуется это при помощи хитрого хака:

  • Делаем скриншот перед прорисовкой окна.
  • Используем этот screenshot как background фон для нашего окошка.
  • Располагаем все это дело так, чтобы реальное изображение экрана и фон окна совпадали - соответственно, создастся иллюзия прозрачного окна.

(more…)

6
June
2007

Java Головоломки (Java Puzzlers)

Posted in: Java technologies, J2SE, Ваш досуг. Полезные советы | 3 Comments

Всем привет.
Для разнообразия посмотрим на язык программирования Java с другой стороны.
Ниже вы найдете одну очень интересную ссылку. К моему глубочайшему сожалению, я обнаружил ее совсем недавно.
Два серьезных дядьки - Джошуа Блок (Joshua Bloch) и Нил Гафтер (Neal Gafter) в совсем несерьезном стиле предлагают вашему вниманию восемь интереснейших головоломок.
(more…)