Как стать автором
Поиск
Написать публикацию
Обновить
202.47

Java *

Объектно-ориентированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Spring в действии — пробуем opensource CMS на Java

Время на прочтение5 мин
Количество просмотров34K
В данной статье речь пойдёт о системе управления содержимым Riot, написанной на Java. Система основана на Spring Framework, использует Ajax.

web developer at work

Я приведу основные возможности системы и пошагово расскажу, как её установить. Статья адресована всем тем, кто интересуется системами управления содержимым на Java.
Читать дальше →

Сборка Java приложений при помощи Apache Ant, quick start

Время на прочтение12 мин
Количество просмотров52K

О чем эта статья


Одной из отличительных особенностей платформы Java является ее независимость от используемого инструментария. Вы можете разрабатывать сколь угодно большое Java приложение при помощи блокнота (vi) и командной строки. Понятно что так никто не делает и все используют какую-то IDE. Как следствие независимости от инструментов — IDE для Java много. Все это хорошо но есть одна особенность. Если Ваш коллега делал приложение и для сборки проекта использовал IDE_A то в IDE_B которая стоит у Вас — собрать приложение не получится.
В общем-то это давно уже не проблема. Хорошей практикой считается использовать систему сборки не зависящую от IDE. Для Java их две это Apache-Ant и Maven (тоже в общем-то Apache). Но тут есть один подводный камень. Если в Delphi или Visual Studio, чтобы создать и собрать приложение надо кликнуть в кнопку new пройтись по шагам визарда и нажать кнопку собрать, то написание ant скрипта для сборки например web приложения, особенно для начинающего разработчика, задача не тривиальная.
В статье рассматривается сборка и деплой Java web приложения шаг за шагом.

В целом задачу можно решить как с помощью ant так и с помощью maven, здесь будет рассмотрен ant. Для начинающих он проще и нагляднее.

Примечание 10 лет спустя

Решил посмотрел на свою статью написанную 10 лет назад. Звучит старомодно, в 2021 я в общем случае не рекомендую собирать Java приложения при помощи ant. НО если уж у вас возникла такая необходимость, то статья все еще может помочь. Пусть живет.

Читать дальше →

Кэширование данных в приложениях с Spring 3, размещенных в AppEngine

Время на прочтение7 мин
Количество просмотров6.5K
В этой статье я расскажу как можно кэшировать в memcache значения, возвращаемые методами bean'ов. Для этого не потребуется писать код, достаточно добавить конфигурации в xml файлы Spring'а и разметить код с помощью аннотаций.

Итак поредставим что у нас есть DAO с тремя методами — двумя для поиска сущностей и одним для сохранения сущностей. Для правильного функционирования нам нужен интерфейс и реализующий его класс (чтобы можно было добавить dynamic proxy на реализацию)
немного xml

Мемоизация в Java

Время на прочтение9 мин
Количество просмотров11K
Мемоизация — (Memoization, англ) вариант кеширования, заключающийся в том, что для функции создаётся таблица результатов, и будучи вычисленной при определённых значениях параметров результат заносится в эту таблицу. В дальнейшем результат берётся из данной таблицы.
Эта техника позволяет засчёт использования дополнительной памяти ускорить работу программы.Данный подход очень частно применяется в функциональных языках программирования, однако и в императивных ему так же можно найти применение. В данном топике рассматривается использование мемоизации в языке java приводятся различные примеры мемоизации и в конце производится небольшое сравнение производительности данных методов.
Читать дальше →

Декларативная система безопасности с помощью аннотаций и AspectJ в среде Java SE

Время на прочтение9 мин
Количество просмотров4.3K
Цель данной статьи — написание мини контейнера-фреймворка, который возьмет на себя задачи авторизации и аутентификации пользователя, позволяя писать минимум кода в клиентской программе. Сразу оговорюсь, в реальной жизни я использую Spring Security (ранее проект назывался Acegi).
Статья предназначена для тех кто хочет демистифицировать для себя магию работы подобных решений, либо для тех кто по каким либо причинам не считает целесообразным использование общедоступных решений и планирует создать собственную имплементацию системы безопасности. Одна из таких причин — ограниченный размер оперативной памяти и невозможность запуска «взрослых» фреймворков, например в такой Java среде как Android (у меня пока нет данных об успешном использовании AspectJ на платформе Android, но это лишь вопрос времени).
Читать дальше →

Автосканирование проекта в NetBeans 6.9

Время на прочтение1 мин
Количество просмотров4K
image В блоге NetBeans for PHP рассказано о возможности включения и отключения автосканирования проектов в NetBeans версии 6.9.

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

Особенно замедление было заметно при большом количестве папок в проекте. Так же NetBeans пересканировал проекты при изменении файлов извне.

Это было необходимо для поддержания актуальности автодоплнения и навигации по проекту.

Читать дальше →

15 лет Java

Время на прочтение1 мин
Количество просмотров1.8K
image

На днях самому популярному в мире языку программирования исполнилось 15 лет. Созданный Джеймсом Гослингом и компанией Sun Microsystems, он является основой для множества мобильных устройств(Java ME, Android), web-сайтов(Ebay, Amazon, Google), бизнеса крупных вендоров программного обеспечения(IBM, Red Hat, Oracle, SAP), а так же открытых проектов(Apache, Eclipse). Следующая(седьмая) версия языка ждет вас уже осенью.

JavaOne приходит в Санкт-Петербург

Время на прочтение1 мин
Количество просмотров611
Только что вернулся со сборища в Oracle для участников местных групп пользователей Java. Было объявлено, что конференция JavaOne будет жить и в 2010-2011 годах пройдет в Сан-Франциско, Пекине, Сан-Паоло, Хайдарабаде и Санкт-Петербурге. В Сан-Франциско конференция пройдет в рамках конференции Oracle Open World с 19 по 23 сентября 2010 года, даты в других городах пока не объявлены.

Расширение Java: алиасы

Время на прочтение2 мин
Количество просмотров7.9K
Выкладываю данный пост с целью получения обратной связи от хабра-сообщества Java-программистов. При наличии достаточного количества голосов «за» эту фичу можно будет отправить для рассмотрения в Sun.

Проблема



После длительной работы с Java 5 и Java 6 и небольшой аналитики я пришел к тому, что generic'и в Java имеют ряд ограничений, которые не дают реализовать решение красивым способом, и обходить их порой приходится очень нетривиально. Данное высказывание относится к разработке подсистем, которые активно используют generic'и (доходит до 3-4 generic-типов со сложной иерархией в описании класса).

Приведу примеры кода, которые явно указывают на данные ограничения, а также неудобство использования (рассматривать только синтаксис):
public class A {
    public <X> void method(List<? extends X> list) {
        // processElement(list, list.get(0)); - compilation error
        processElement((List) list, (Object) list.get(0)); // compilation warning
    }

    public <T> void processElement(List<T> list, T object) {
    }

    public static class B<T extends I1 & I2> {
    }

    // Приходится повторять объявления generic-типов
    public static class С<T extends I1 & I2> extends A.B<T> {
    }
}


Читать дальше →

Hegel4j — диалектические переменные на Java

Время на прочтение6 мин
Количество просмотров1.2K

Что такое диалектическая переменная?


Кто-то возможно скажет: «Что общего у философии и программирования?». Человек недалекий скажет: «Ничего!», а мы с вами задумаемся.

Есть такой раздел философии — диалектика. Было сформулировано три закона диалектики:

1. Закон перехода количественных изменений в качественные
2. Закон единства и борьбы противоположностей
3. Закон отрицания отрицания

Из определения первого закона и родилось понятие диалектической переменной.
Диалектическая переменная — некоторое свойство объекта, от значения которого зависит внутреннее состояние объекта, принадлежность объекта к некоторому классу и, как следствие, его поведение. Так, например, температура является диалектической переменной для классов Water и Ice, а возраст для Child и Mature и т.д.

В данной статье я хочу описать библиотеку для работы с диалектическими переменными hegel4j и показать пример работы с данной библиотекой.
Читать дальше →

Получаем версию файла (exe, dll) с помощью java

Время на прочтение4 мин
Количество просмотров4.2K
Столкнулась я с такой проблемкой — как получить версию файла (exe и dll) на java. Ведь обычными стандартными средствами определить это нельзя, а только лишь можно узнать размер, дату последней модификации и некоторые другие свойства файла. Это описано тут.
Покопавшись на форумах и всё хорошенько прогуглив — нашла два таких выхода — JNI и JNA. Остановилась на втором варианте, так как на С++ писать специальную dll ну уж очень не хотелось, хотелось всё решить с помощью java и обращаться напрямую к version.dll (C:\WINDOWS\system32).
В итоге решение сводится к такой связке GetFileVersionInfo GetFileVersionInfoSize VerQueryValue. Долго пришлось поразбираться с функцией VerQueryValue — сложность была в том, что версии файлы зависят от языка и необходимо было хитрым способом получить LANGANDCODEPAGE. В итоге получился такой класс:

Читать дальше →

Использование apr_socket_sendfile() из сервлетов под Tomcat

Время на прочтение4 мин
Количество просмотров2.2K
В этом топике расскажу о маленьком, но эффективном способе передачи файлов пользователю из сервлета по HTTP протоколу. Используется:
  • Apache Tomcat
  • Apache Portable Runtime Library
  • Apache Tomcat Native Library
  • Ваш сервлет, которому нужно отдавать файлы пользователю
Читать дальше →

Ближайшие события

Применение JAAS в Web-приложениях на glassfish v2

Время на прочтение13 мин
Количество просмотров18K
На этот раз хочется написать про применение JAAS (Java Authentification and Authorization Service) для веб-приложений. Для начала рассмотрим простой контроль доступа к веб-ресурсам и авторизацию. Я попытаюсь раскрыть основную идею, а также дам подсказку по способу развёртывания (позже из текста станет понятно в чём проблема).

Читать дальше →

JBrowser: реинкарнация MozSwing

Время на прочтение7 мин
Количество просмотров3K
imageВспомним, что же такое MozSwing. MozSwing — единственное адекватное (по моему мнению) бесплатное и кросс-платформенное решение для встраивания браузера как компонента swing. Но, как ни печально это признавать, проект умер еще на той стадии, когда в нем оставалось слишком много ошибок. Эти ошибки, а так же просчеты в архитектуре, не позволяют использовать это решение «как есть», для ваших проектов. С непреодолимым желанием исправить это, я взялся за работу и кое-что у меня получилось.

(Статья о интеграции браузера Mozilla, как Swing компонента).
Читать дальше →

SoftReference Read-Write Cache для Hibernate — с «хвостами» для реализации кластера

Время на прочтение17 мин
Количество просмотров4.5K
В этом топике попробую рассказать о реализации системы кеширования данных в CMS ArpSite. Эта подсистема уже не раз переписывалась, но она является именно тем, что позволяет системе вообще работать с приемлимым временем отклика.

Использование SoftReference даёт возможность оставить поведение кеширования «на самотёк» — за пореблением памяти следит сама JVM, она же очищает старые элементы.

«Cluster» означает, что кеш самостоятельно отслеживает события инвалидации (устаревания, обновления) значений и следит за тем, чтобы на других серверах в кластере устаревшие элементы выкидывались из кеша. Есть и другие определения кластерного кеша. Например, основной режим работы JBoss Cache может даже «вытягивать» элементы с других узлов кластера, если их нет на текущей машине. Но для нашей системы, где скорость получения элемента с другой машины ненамного меньше скорости генерации элемента, достаточно инвалидации.

Read-Write означает, что мы не используем блокировку элементов кеша и вообще не думаем (почти) о том, что в нашей системе есть какие-то независимые транзакции. Для CMS это нормально, но, разумеется, для какого-нибудь enterprise application это было бы недопустимо.
Читать дальше →

Сегодня состоялся релиз JavaFX 1.3

Время на прочтение1 мин
Количество просмотров814
Скачать релиз JavaFx 1.3 можно тут. JavaFX 1.3 SDK доступен в связке с NetBeans 6.9 Beta.
Коротко о нововведениях:
Bind исполнении: 2-3 раз быстрее
Время запуска апплета: 20% быстрее (с Java SE 6u18 +)
Рендеринг текста: 5-10 раз быстрее (кадров в секунду / FPS)
Чрезвычайно сложные анимации: до 10 раз быстрее (FPS)
Использование памяти: 20-33% сокращение (реальных приложений, ш / Java SE 6u18 +)
Элементы пользовательского интерфейса: 50% быстрее, 33% -50% меньше памяти (тип.) и т.д.

Пользовательские критерии в Hibernate

Время на прочтение4 мин
Количество просмотров7.3K
В предыдущей статье я рассказал, как научить Hibernate хранить пользовательские типы данных. Теперь попробуем использовать эти данные при фильтрации выборок. Задекларируем результат, который мы хотим получить:
  1. String filteringTag = "habr";
  2. Session session = ...;
  3. Criteria criteria = session.createCriteria(StringArrayContainer.class);
  4. criteria.add(new StringArrayContainsCriterion("tags", filteringTag));
  5. List containers = criteria.list(); //Получаем список контейнеров, содержащих тег "habr"
  6. ...

Читать дальше →

Пользовательские типы в Hibernate

Время на прочтение4 мин
Количество просмотров11K
Hibernate — это прекрасный ORM инструмент, который можно настроить практически под любые свои нужны. В этом топике я покажу, как можно хранить поля произвольного типа. Для примера, возьмем массив строк (String[]) и POJO объект, который мы хотим хранить в БД:
  1. public class StringArrayContainer {
  2.     private Integer id;
  3.     private String[] tags;
  4. //  Место для геттеров и сеттеров.    
  5. }

Для того, чтобы хибернейт мог сохранять в базу поле типа «массив строк» необходимо (и достаточно) написать класс, который реализует интерфейс UserType, а также сослаться на него в мэппинге (файл hbm.xml).
  1. public class StringArrayCustomType implements UserType {
  2. //  TODO: написать реализацию.  
  3. }

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

Java 2D и буфер глубины

Время на прочтение7 мин
Количество просмотров3.9K
imageВсем привет. Хочу поделиться с вами своим «велосипедом», вдруг кому-нибудь еще он пригодится.

(Статья о том как реализовать буфер глубины в Graphics2D).

 

Читать дальше →

Вклад авторов