Tagged with java

Организация взаимодействия Java-приложений с помощью JGroups

Сегодня я хочу рассказать о JGroups. Это Java-библиотека для организации группового взаимодействия между различными процессами Java. Приложения, использующие JGroups могут:

  • Создавать и уничтожать группы
  • Присоединяться к группам и покидать их
  • Получать оповещения о новых членах групп
  • Отправлять сообщения конкретному процессу или всем процессам группы
Библиотека достаточно широко используется, в частности в сервере приложений JBoss, в кэше OSCache и в Grid-платформе Infinispan.

Здесь я ограничусь начальной информацией и опишу создание простого группового чата на Java.

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

Получение всех Java классов из ClassPath

Уже не первый раз наталкиваюсь на достаточно общую задачу: найти все классы в classpath приложения. Каждый раз гуглю, пишу код, а потом он где-то теряется. Поэтому, выкладываю код своего решения, может быть кому-нибудь пригодится. А если не пригодится напрямую, здесь видно как читать Jar-файлы))) Короче, говоря, гугл рассудит) Краткое описание подхода, чтобы лучше понимался код:

  • Разделяем строку classpath на записи, ссылающиеся на конкретные директории и jar-файлы. В линуксе разделитель между ними - двоеточие, в винде - точка с запятой. Дальше, для каждой записи:
  • Если запись ссылается на директорию - рекурсивно сканируем ее, считая директорию, откуда начали сканирование соответствующей корневому пакету.
  • Если запись ссылается на файл, пытаемся анализировать его как Jar-файл, используя инструментарий из пакета java.util.jar
Чтобы использовать нижеприведенный класс необходимо получить саму строку classpath. Это осуществляется простым вызовом System.getProperty ("java.class.path")

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

Преимущества Maven

Около полутора недель назад открыл для себя Maven. Пришлось с ним играться в связи с тем, что исходники одной библиотеки на Java, с которой я работал, собирались с его помощью. Сначала было несколько непривычно, сейчас уже не представляю как я раньше жил без него. Наверное, если все просуммировать, основными особенностями, которые меня в нем привлекают будут:

  • Контроль внешних зависимостей. Потрясающе удобно, когда всякие мелкие библиотечки не надо качать отовсюду и искать им место в структуре проекта, а достаточно указать в xml-файле. и они автоматически скачиваются по мере необходимости.
  • Модули и зависимости между ними. Один проект легко разбивается на подпроекты, междукоторыми устанавливаются зависимости.
  • Плагины, которые автоматически скачиваются по мере необходимости.
  • Генерация проектов Eclipse, не надо делать одно и то же дважды.
  • Простота - то, что все проекты имеют более-менее зафиксированную структуру значительно упрощает работу с ними.
Несколько ссылок по теме:

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

Robocode

robocode

Robocode – это игра, придуманная Mathew Nelson в компании IBM, предназначенная для обучения программированию на языке Java.

Суть игры проста: игроки пишут код на Java, управляющий действиями миниатюрного танка. Потом несколько танков выпускаются на поле и бьются до победного конца) По результатам нескольких раундов определяется победитель.

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

В ближайшее время попробую поиграться)) Так что, если у кого будет желание сразиться с моими танками – с удовольствием приму вызов=)

Ссылки:

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

Абстракция хранилища данных в J2ME

В процессе написания небольшой програмки для мобильного телефона столкнулся с тем, что работа c файловой системой (JSR-75) поддерживается не на всех телефонах. А данные надо же где-то хранить. Потому я решил реализовать поддержку записи данных как в файловую систему, так и в RecordStore

Но при этом различные объекты пишут данные по разному, поэтому в голову пришла следующая абстракция:

  • Все объекты, которые могут быть сохранены, реализуют интерфейс Storable
  • Имеется абстрактное хранилище данных, от которого наследуются реализации для файлов и для RecordStore. Это же абстрактное хранилище умеет само выбирать реализацию и выдавать ее по запросу.

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

Логирование в Java: Использование slf4j

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

SLF4J (Simple Logging Facade for Java) – библиотека для логгирования, ставящая своей целью предоставить максимально простой, но при этом мощный фасад для различных систем логгирования на Java. Чем же это лучше чем использование какой-либо распространенной библиотеки для логгирования?

Если сравнить использование различных систем логгирования, как log4j и обощенных фасадов, таких как, например, slf4j, то можно найти следующие отличия:

Использование конкретной реализации:


  • Зависимость от этой конкретной реализации

  • Необходимость искать адаптеры, при необходимости использования компонент, разработанных, для других реализаций логгирования

  • Меньше компонент в зависимостях

Использование фасада:


  • Возможность использования различных реализаций

  • Большое число компонент (фасад + реализация)

  • Возможность быстро менять реализацию, возможно даже не меняя не строчки кода

Дополнительно к этому, SLF4J предоставляет возможность интегрировать компоненты, зависимые от других систем логирования (Log4J, JCL), подставляя реализации, направляющие логи этих систем в SLF4J.

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

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

GUI в Java c помощью JFace: Создание окна приложения

JFace - это доплнительный слой абстракции над графической библиотекой SWT, предоставляющий возможности для разработки графического интерфейса приложения на основе модели MVC(Model View Controller). Основные компоненты JFace включают:

  • Viewers - классы для инкапсуляции задач предоставления данных для отображения, их фильтрации, сортировки и т.п.
  • Actions and contributions - вводят семантику описания пользовательских действий и того, как они должны быть доступны пользователю.
  • Image and font registries - предоставляют классы для управления ресурсами, такими как изображения и шрифты.
  • Dialogs and wizards - фреймворк для построения сложного диалогового взаимодействия с пользователем.
  • Field assist - предоставляет возможности для реализации вспомогательной функциональности для полей, такой как отображение статуса поля или подсказки о содержимом.
В первой части будет рассмотрено создание простого окна с использованием JFace, добавление к нему меню, статусной строки и панели инструментов.

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

Переменное число аргументов в Java: конструкция "..."

Недавно случайно обнаружил, что в Java существует возможность красиво реализовать переменное число аргументов у метода. Красиво, это значит без всяких new Object[]{}, которые жутко засоряют код и совсем не способствуют его читабельности. Красивое решение: конструкция "...", которая была добавлена в Java SE 5.

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