Tagged with java
Сегодня я хочу рассказать о JGroups. Это Java-библиотека для организации группового взаимодействия между различными процессами Java. Приложения, использующие JGroups могут:
- Создавать и уничтожать группы
- Присоединяться к группам и покидать их
- Получать оповещения о новых членах групп
- Отправлять сообщения конкретному процессу или всем процессам группы
Библиотека достаточно широко используется, в частности в сервере приложений JBoss, в кэше OSCache и в Grid-платформе Infinispan.
Здесь я ограничусь начальной информацией и опишу создание простого группового чата на Java.
Читать дальше »
Уже не первый раз наталкиваюсь на достаточно общую задачу: найти все классы в classpath приложения. Каждый раз гуглю, пишу код, а потом он где-то теряется.
Поэтому, выкладываю код своего решения, может быть кому-нибудь пригодится. А если не пригодится напрямую, здесь видно как читать Jar-файлы))) Короче, говоря, гугл рассудит)
Краткое описание подхода, чтобы лучше понимался код:
- Разделяем строку classpath на записи, ссылающиеся на конкретные директории и jar-файлы. В линуксе разделитель между ними - двоеточие, в винде - точка с запятой. Дальше, для каждой записи:
- Если запись ссылается на директорию - рекурсивно сканируем ее, считая директорию, откуда начали сканирование соответствующей корневому пакету.
- Если запись ссылается на файл, пытаемся анализировать его как Jar-файл, используя инструментарий из пакета java.util.jar
Чтобы использовать нижеприведенный класс необходимо получить саму строку classpath. Это осуществляется простым вызовом
System.getProperty ("java.class.path")
Читать дальше »
Около полутора недель назад открыл для себя Maven. Пришлось с ним играться в связи с тем, что исходники одной библиотеки на Java, с которой я работал, собирались с его помощью. Сначала было несколько непривычно, сейчас уже не представляю как я раньше жил без него.
Наверное, если все просуммировать, основными особенностями, которые меня в нем привлекают будут:
- Контроль внешних зависимостей. Потрясающе удобно, когда всякие мелкие библиотечки не надо качать отовсюду и искать им место в структуре проекта, а достаточно указать в xml-файле. и они автоматически скачиваются по мере необходимости.
- Модули и зависимости между ними. Один проект легко разбивается на подпроекты, междукоторыми устанавливаются зависимости.
- Плагины, которые автоматически скачиваются по мере необходимости.
- Генерация проектов Eclipse, не надо делать одно и то же дважды.
- Простота - то, что все проекты имеют более-менее зафиксированную структуру значительно упрощает работу с ними.
Несколько ссылок по теме:
Читать дальше »
Robocode – это игра, придуманная Mathew Nelson в компании IBM, предназначенная для обучения программированию на языке Java.
Суть игры проста: игроки пишут код на Java, управляющий действиями миниатюрного танка. Потом несколько танков выпускаются на поле и бьются до победного конца) По результатам нескольких раундов определяется победитель.
Обычно, соревнования проводятся в стиле deathmatch, то есть каждый танк представляет одну команду, но игра поддерживает и возможность командной игры, когда за одну команду играют несколько танков, возможно, кооперирующихся.
В ближайшее время попробую поиграться)) Так что, если у кого будет желание сразиться с моими танками – с удовольствием приму вызов=)
Ссылки:
Читать дальше »
В процессе написания небольшой програмки для мобильного телефона столкнулся с тем, что работа c файловой системой (JSR-75) поддерживается не на всех телефонах. А данные надо же где-то хранить. Потому я решил реализовать поддержку записи данных как в файловую систему, так и в RecordStore
Но при этом различные объекты пишут данные по разному, поэтому в голову пришла следующая абстракция:
- Все объекты, которые могут быть сохранены, реализуют интерфейс Storable
- Имеется абстрактное хранилище данных, от которого наследуются реализации для файлов и для RecordStore. Это же абстрактное хранилище умеет само выбирать реализацию и выдавать ее по запросу.
Читать дальше »
В этой заметке я расскажу о фасаде для систем логирования, SLF4J, опишу его особенности и использование.
SLF4J (Simple Logging Facade for Java) – библиотека для логгирования, ставящая своей целью предоставить максимально простой, но при этом мощный фасад для различных систем логгирования на Java. Чем же это лучше чем использование какой-либо распространенной библиотеки для логгирования?
Если сравнить использование различных систем логгирования, как log4j и обощенных фасадов, таких как, например, slf4j, то можно найти следующие отличия:
Использование конкретной реализации:
- Зависимость от этой конкретной реализации
- Необходимость искать адаптеры, при необходимости использования компонент, разработанных, для других реализаций логгирования
- Меньше компонент в зависимостях
Использование фасада:
- Возможность использования различных реализаций
- Большое число компонент (фасад + реализация)
- Возможность быстро менять реализацию, возможно даже не меняя не строчки кода
Дополнительно к этому, SLF4J предоставляет возможность интегрировать компоненты, зависимые от других систем логирования (Log4J, JCL), подставляя реализации, направляющие логи этих систем в SLF4J.
Таким образом, небольшой ценой использование фасада для логирования значительно увеличивает возможности для интегрирования компонента в другие системы, что особенно важно, если неизвестно, где компонент будет использован (например, если это какая-та библиотека).
Читать дальше »
JFace - это доплнительный слой абстракции над графической библиотекой SWT, предоставляющий возможности для разработки графического интерфейса приложения на основе модели MVC(Model View Controller). Основные компоненты JFace включают:
- Viewers - классы для инкапсуляции задач предоставления данных для отображения, их фильтрации, сортировки и т.п.
- Actions and contributions - вводят семантику описания пользовательских действий и того, как они должны быть доступны пользователю.
- Image and font registries - предоставляют классы для управления ресурсами, такими как изображения и шрифты.
- Dialogs and wizards - фреймворк для построения сложного диалогового взаимодействия с пользователем.
- Field assist - предоставляет возможности для реализации вспомогательной функциональности для полей, такой как отображение статуса поля или подсказки о содержимом.
В первой части будет рассмотрено создание простого окна с использованием JFace, добавление к нему меню, статусной строки и панели инструментов.
Читать дальше »
Недавно случайно обнаружил, что в Java существует возможность красиво реализовать переменное число аргументов у метода. Красиво, это значит без всяких new Object[]{}, которые жутко засоряют код и совсем не способствуют его читабельности.
Красивое решение: конструкция "...", которая была добавлена в Java SE 5.
Читать дальше »