Обновить
128K+

Java *

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

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

Простой и быстрый фреймворк для стресс-тестирования приложений

Время на прочтение4 мин
Охват и читатели13K
[ english version ]

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

Поэтому было решено набросать свой, ведь это всего 3-5 классиков в данном случае. Основные требования: быстрота и динамическая генерация запросов. При этом быстрота это не просто тысячи RPS, а в идеале — когда стресс упирается только в пропускную способность сети и работает с любой свободной машины.
Читать дальше →

Быстрый поиск в «Альфа-Клике»

Время на прочтение2 мин
Охват и читатели16K
Всем привет! Меня зовут Тамара, я – разработчик интернет-банка «Альфа-Клик».

Недавно команда Альфа Lab запустила новый поиск по Клику. Ежедневно интернет-банком пользуются сотни тысяч клиентов, и даже такая, казалось бы небольшая, доработка упростит им жизнь и поможет быстрее найти нужную функцию или получателя платежей.

Быстрый поиск в Альфа-Клике

На Хабре много клиентов Альфы, и будет проще и быстрее спросить напрямую – как бы вы хотели пользоваться таким сервисом, какие функции вам были бы удобны и полезны? Предлагаю обсудить это в комментариях.

Несколько слов о том, как работает поиск и о его возможностях – под катом.
Читать дальше

Много-файловое хранилище Java объектов в формате xml

Время на прочтение11 мин
Охват и читатели11K
Много-файловое хранилище Java объектов в формате xml (часть 2)

Введение


В программировании часто перед нами встают задачи, которые мы можем решить несколькими путями: найти и использовать уже готовые решения, или же решать задачу самостоятельно. Хоть и написано множество спецификаций и их реализаций, они не всегда дают нам то, что требуется в конкретном случае. Вот и мне в очередной раз пришлось столкнуться с подобной ситуацией.
Задача состояла в хранении объектов в файле в формате xml. Ничего казалось бы сложного, если бы не несколько «но». Объектов много, имеют они древовидную структуру и над ними постоянно выполняются операции добавления, изменения и удаления в разных потоках. Как вы понимаете постоянные запись и чтение большого xml файла довольно трудоемкая задача. Тем более если с одними и теми же данными работают несколько потоков. Так собственно и родилась идея написать много-файловое хранилище объектов в формате xml.
В этой статье я не буду рассматривать саму реализацию. Приведу лишь основные идеи и как использовать эту реализацию. Если вы хотите углубиться, то можете скачать посмотреть исходные коды.

Исходники доступны по ссылке: xdstore-1.3
Исходные тексты немного отличаются от приведенных в этой статье. В них были глубже проработаны исключительные ситуации, а именно, — для каждой операции, включая чтение, выбрасывается свое исключение. Также в последней версии реализована фрагментация.

Основная идея разработки


Главная идея заключается в том, чтобы объекты хранить не в одном файле, а в некотором множестве. При этом предоставить возможность настраивать политики хранения для каждого требуемого класса. Для класса можно установить одну из следующих политик:
  • ParentObjectFile – объекты класса будут сохраняться в файле объекта владельца как дочерние элементы, эта политика применяется по умолчанию;
  • SingleObjectFile – каждому объекту класса предоставляется отдельный файл, а в файле объекта владельца будет сохранена лишь ссылка на этот объект (в дальнейшем буду просто называть ее объектной ссылкой); все файлы каждого объекта будут сохраняться в отдельной папке внутри хранилища;
  • ClassObjectsFile – все объекты этого класса будут храниться в отдельном файле, а в файлах объектов владельцев будут сохранены лишь объектные ссылки.

Под понятием объектной ссылки понимается объект указанного класса, у которого проставлено одно поле – идентификатор. В xml файле вместо полных данных этого объекта сохраняется лишь имя класса и идентификатор, чтобы в дальнейшем по этой ссылке можно было получить все данные. Загрузка таких объектов подобна поздней инициализации в hibernate.
Сохраняемые объекты должны быть реализованы как JavaBeans с методами get(is) и set для сохраняемых полей.

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

PowerMock(+Mockito) +TestNG и имитация вызова (mock) статических методов

Время на прочтение5 мин
Охват и читатели16K
На хабре уже была статья с примерами использования PowerMock, но в ней не хватает такого описания, как имитации вызова статических методов как самостоятельных «единиц» в классе, так и в гибридном использовании, когда часть статических методов у класса подменяются «заглушкой», а часть вызываются реально. Попробую исправить эту нишу.

Для начала создадим демонстрационный класс со статическими методами (commit):

public class ClassStatic {
	static String getValue() {
		return "value";
	}

	static String getValue(final String s) {
		return getValue() + s;
	}
}

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

RMI для нескольких сетевых интерфейсов

Время на прочтение2 мин
Охват и читатели13K
Здравствуй, Хабр!
В ходе работы появилась задача создать несколько RMI реестров, доступных через разные сетевые интерфейсы (локальная сеть и интернет). И к моему удивлению я ничего толком не нашел в сети по этому вопросу. Поэтому разобравшись сам, решил поделиться решением с людьми.

Дано

Сервер с двумя сетевыми интерфейсами: локальный и внешний IP-адреса. Интерфейс, используемый клиентом и реализуемый сервером:
public interface Server extends Remote {
    public String getMessage() throws RemoteException;
}

Задача

Создать два RMI реестра, каждый для своего сетевого интерфейса.
Решение

Организуем поиск молекулярных структур с помощью Lucene и Chemistry Development Kit

Время на прочтение5 мин
Охват и читатели2.8K
Библиотека полнотекстового поиска Lucene предоставляет возможность организовать поиск по текстовым документам. Существуют так же средства, с помощью которых можно организовать поиск «похожих» химических структур, например, OpenBabel. Иногда может возникнуть потребность объединить эти два вида поиска в единой «канве». Например, если нужно создать систему, которая может отвечать на такие запросы: найти вещество, в текстовом описании которого есть слово «аминокислота», структурно похожее на индол (ожидается, что мы найдём аминокислоту триптофан). В этой статье описано решение данной задачи на основе полнотекстового движка Lucene.
Читать дальше →

JAXB и XSLT с использованием StAX

Время на прочтение5 мин
Охват и читатели22K
В одном из проектов понадобилось обрабатывать большие XML файлы, от сотен мегабайт до десятков гигабайт.
Причем выдернуть надо было только некоторые тэги с расположенные на различной «глубине». XSLT «в лоб» ломался от недостатка памяти. Пришлось подумать и вспомнить о потоковом парсере.
Далее

Генерация музыки в реальном времени

Время на прочтение6 мин
Охват и читатели137K


«Как автоматизировать сочинение музыки?» — этот вопрос тревожит умы музыкантов еще со времен средневековья. Кеплер превращал траектории движения планет в музыку; Моцарт и его современники изобрели игру в «музыкальные кости» — они броском кубиков выбирали из большой таблицы такты и составляли из них менуэты. Но только с появлением компьютеров алгоритмическая генерация музыки получила настоящее развитие. Теория вероятности, марковские цепи, искусственные нейронные сети — все это стало инструментами создания музыки.
Читать дальше →

Сборка CLDC HotSpot Implementation для ARM

Время на прочтение4 мин
Охват и читатели6.2K
В данной статье рассматривается виртуальная Java-машина CLDC HI с открытым исходным кодом компании Sun для встраиваемых и мобильных платформ, а также её построение для вычислительных машин с архитектурой ARM.
Читать дальше →

Инструментирующий профайлер своими руками

Время на прочтение5 мин
Охват и читатели6.5K
Давно хотел написать простую утилиту, которая позволила бы показать в каких методах код проводит основное время, какие объекты и в каком количестве создает и оперативно включать трассировку посещения метода не модифицируя исходник.

Основные требования — простота, возможность запуска в текстовом режиме и независимость от архитектуры.

И вот что получилось

JavaOpen и JavaDay в Самаре

Время на прочтение11 мин
Охват и читатели3K


Недавно в Самаре прошли два занимательных мероприятия: JavaOpen и JavaDay.

Первое представляло собой турнир по программированию с денежными призами. Второе — конференцию, на которой были озвучены победители турнира.
Подробности и задания турнира

Работа с cURL на android

Время на прочтение6 мин
Охват и читатели25K

Зачем это нужно


Мы хотим общение с API сервером написать на C++, а дальше использовать написанную библиотеку во всех наших приложения под различными платформами. Конечно мы хотим, чтобы работало под android.

Libcurl — это библиотека интерфейса API для передачи, которую разработчики могут встроить в свои программы; cURL действует как автономная обёртка для библиотеки libcurl. libcurl используется, чтобы обеспечить возможность передачи файлов (адресуемых с помощью URL) многочисленным приложениям (как открытым, так и коммерческим). (wikipedia)

Для iOS можно скачать готовый пример подключения и использования cURL с сайта разработчика. И с iOS всё просто.

Под android мне на просторах google не удалось найти ни одного исходника, где бы производилось успешное обращение к этой кросс-платформенной библиотеке. (Может я плохо искал).

И вообще говоря под android заставить работать cURL оказалось немного сложнее чем хотелось бы.
Под катом сама статья и работающий исходник

Автоматизация развертывания Play! Framework приложений на платформе OpenShift

Время на прочтение3 мин
Охват и читатели6.2K
    

Привет, хабражители! Сегодня я хотел бы рассказать о том, как можно воспользоваться бесплатным решением от RedHat для размещения своих сайтов в облаке на примере Play! Framework. Не буду описывать отдельно каждый из продуктов, т.к. про них уже не раз писали, расскажу лишь об их взаимодействии и моей схеме для автоматизации сборки и развертывания.
Читать дальше →

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

Знакомство с JMS 2.0

Время на прочтение4 мин
Охват и читатели64K
Не так давно, 12 июня 2013, миру был представлен релиз Java EE 7. Одним из ключевых моментов в этом релизе было появление JMS версии 2.0, которая не обновлялась с 2002 года.

Данный текст является вольным переводом начала статьи Найджела Дикина. Текст предназначен для ознакомления заинтересованного читателя с новым API.
Читать дальше →

Глюки апдейта Java 7u25

Время на прочтение1 мин
Охват и читатели5.5K
На заметку хабровчанам: автоапдейт Java 7u25 ломает сам себя в комбинации с Internet Explorer 10, ОС Win7 & Win8.

Симптомы проблемы: Java не запускается.

Проблема фиксится ручной переустановкой через сайт Java. Что интересно, ручной апдейт с сайта такой проблемы не создаёт.

Велосипед для генерации Excel документов по шаблону

Время на прочтение3 мин
Охват и читатели10K
Обычно для программного формирования сложных отчётов в xls предлагается использовать «вручную» сформированный документ — шаблон, в нужных местах которого вместо реальных данных подставлены некоторые «теги» н.п. ${userName}, ${userAge}, и в процессе заполнения шаблона находить теги в тексте документа и заменять их соответствующими значениями.

Но как быть, если в итоговом документе должны отсутствовать некоторые страницы из шаблона, и наоборот, другие страницы могут быть несколько раз «клонированы» и заполнены разными данными? И как избавиться от нудного заполнения маппинга тег->значение в коде?
Читать дальше →

Введение в Spring Frameworks: Spring MVC

Время на прочтение8 мин
Охват и читатели21K
Привет, Хабр.

Это моя первая статья.Прошу сильно молотком не бить.

Сегодня, этим сообщением начнется мой цикл статей о фреймворках Spring.

Я не буду вдаваться в тонкости теории, здесь на хабре достаточно статей об этом. Предпочитаю практику.
Тем не менее, стоит напомнить, что работать со Spring Framework можно как с помощью xml-конфигурации, так и с помощью аннотаций. Также, ничего не мешает комбинировать оба подхода.
Лично я предпочитаю работать с аннотациями, чего и вам советую. Поэтому все примеры, которые я буду приводить, будут использовать аннотации.
Читать дальше →

Подготовка к сдаче экзамена Oracle certified JAVA programmer

Время на прочтение2 мин
Охват и читатели24K
Совершенно случайно заметил что на dzone появился гайд по относительно новому экзамену от Oracle и тоже решил написать.

Скажу сразу что здесь не будет silver bullet golden hammer для сдачи этого экзамена. Среди Java разработчиков распространена тяга к best practices. Так как многие проблемы уже когда-то и кем то были решены в ходе почти 20ти летного процесса развития языка, то среди программистов считается плохим тоном придумывать свой велосипед. Настоящий Java-гуру мыслит парадигмами из книг Josh Bloch и Bruce Eckel. Меня, пришедшего из других языков, это всегда умиляло. В данном случае прийдется много работать, т.к. идеального источника для подготовки пока нет.
Далее

Использование JAAS для web-приложений на VAADIN + TomEE

Время на прочтение3 мин
Охват и читатели7.3K
Мне бы хотелось рассказать о применении JAAS (Java Authentification and Authorization Service) для web-приложений использующих VAADIN 7 (в качестве web-фреймворка) и Apach TomEE (в качестве Java EE контейнера).
Читать дальше →

Скачивание музыки из vk.com

Время на прочтение4 мин
Охват и читатели74K
После недавней шумихи вокруг аудиозаписей на сайте vk.com решил подстраховаться и скопировать всю свою коллекцию на жесткий диск. Для решения мною была написана простенькая утилита на Java. Ниже — её код c комментариями. Статья предназначена для читателей, знакомых с любым языком программирования общего назначения и умеющих компилировать и запускать написанные на нем программы.

Важное замечание: если Ваши аудиозаписи уже изъяты, то скачать их таким образом скорее всего не получится.
Читать дальше →