Обновить
128K+

Java *

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

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

Использование BitTorrent в Java: jBitTorrent API

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

Введение



Доброго дня всем читателям!

Недавно в одном проекте мне потребовалось программно скачивать и раздавать торренты, а также впоследствие создавать новые торрент-файлы к уже скачанным данным. Естественно, изобретать велосипед очень не хотелось, и я решил посмотреть в поисковике, что же есть в нише BitTorrent-библиотек для Java.
Хочу сказать, что выдача меня очень расстроила. Всего упоминалось лишь несколько реализаций, да и те были уже давно не обновляемые. Stackoverflow подсказал следующие:



Теперь пройдемся по каждому из них.
Читать дальше →

Как бороться с паузами GC

Время на прочтение6 мин
Охват и читатели39K
В данном топике речь пойдет о причинах, вызывающих длинные паузы сборщика мусора и о способах борьбы с ними. Рассказывать я буду о CMS (low pause), так как на данный момент это наиболее часто используемый алгоритм для приложений с большой памятью и требованием малой задержки (low latency). Описание дается в предположении, что у вас приложение крутится на боксе с большим объемом памяти и большим количеством процессоров.

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

Многопоточность в Java: ExecutorService

Время на прочтение2 мин
Охват и читатели254K
В Java 5 было добавлено много вещей для организации многопоточности и особенно касаемо организации параллельного доступа. В этой и последующих статьях мы пройдемся по некоторыми из них.
ExecutorService и ScheduledExecutorService будут рассмотрены в этой статье

JBFD: декомпилятор из Brainfuck в Java

Время на прочтение2 мин
Охват и читатели4.4K
Кто-то когда-то сказал: «Возьмите несколько произвольных латинских букв, допишите перед ними J, и вы получите очередную Java-технологию». В этой статье речь пойдет о технологии JBFD, что означает Java BrainFuck Decompiler. Технология еще достаточно молодая (от силы 3 часа), так что не судите строго.

Идея создания декомпилятора возникла не случайно. Всему виной большое количество статей по BrainFuck в Интернете вообще и на Хабре в частности. Интерпретаторов этого замечательного языка существует огромное множество, но вот средств для отладки BF кода мне удалось найти крайне мало.

А что если преобразовать код с BF на свой «родной» язык и воспользоваться всеми преимуществами своей любимой IDE для обнаружения трудноуловимых ошибок, покрытия кода тестами, оптимизации и т.д.? Все это и много другое становится возможным с JBFD.
Читаем, скачиваем, пользуемся...

Архитектура и платформа проекта Одноклассники

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

Архитектура и платформа проекта Одноклассники


В этом посте расскажем о накопленном за 5 лет опыте по поддержанию высоконагруженного проекта. Надеемся, что коллегам-разработчикам будет интересно узнать, что и как мы делаем, какие проблемы и трудности у нас возникают и как мы справляемся с ними.

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

Презентация Liferay на JavaOne 2011

Время на прочтение1 мин
Охват и читатели2.4K
image

Кому интересно — на предстоящей JavaOne в Москве проведу презентацию Liferay (ИМХО лучший портал на Java) — что он умеет, что дает пользователям и как помогает программистам.
Презентация состоится 13 апреля в 18:30 в «Синем Зале».
Читать дальше →

Сбор хабровчан — кто едет на JavaOne и/или App Developer Days (2011)?

Время на прочтение1 мин
Охват и читатели707
Предлагаю в этой теме отписываться тем, кто едет на какую-то (или обе) из двух указанных конференций, чтобы можно был при желании как-то скооперироваться тем, кто едет из одного города, планирует жить в определенном отеле и пр.

Первая — JavaOne (http://www.oracle.com/ru/javaonedevelop/index.html), 12-13 апреля 2011, в Москве.
Вторая — Application Developer Days (http://addconf.ru/), 29-30 апреля 2011, в Питере.

java.util.concurrent. Часть первая: Зачем и почему?

Время на прочтение4 мин
Охват и читатели29K
Часть первая, в которой множеством слов раскрывается смысл существования этого API
Эта статья, хоть и не является прямым переводом, основана на статье Брайана Гетца Concurrency in JDK 5.0

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

Обновление веб приложения на удаленном сервере после сборки Maven'ом через SSH

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

Проблема


После сборки проекта с помощью Build сервера или на локальной машине требуется выложить полученное приложение на тестовый сервер.
Читать дальше →

Настройка репозитория Sonatype Nexus для проксирования артефактов Maven

Время на прочтение6 мин
Охват и читатели71K
Добрый день!

Про утилиту сборки для Java-проектов Maven и про возможность создания локального сервера для Maven-репозитория с помощью Sonatype Nexus на Хабре уже упоминали (тут и тут). Однако, никакого рецепта по этому поводу представлено не было. Это неудивительно при наличии достаточно полной грамотной документации. По долгу службы мне пришлось настраивать его на нашей фирме, и оказалось, что советы из официальной документации не совсем подходят. Возникшей проблемой и способом ее решения я и хочу поделиться с сообществом. Но обо всем по порядку.

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


Локальный сервер для Maven-репозитория (как, например, Sonatype Nexus) может быть использован для хранения локальных артефактов Maven, и действительно пригодится командам, которые разрабатывают модульные приложения, но не собираются публиковать модули в общий доступ.

Кроме того, такой сервер может работать и для локального хранения удаленных артефактов Maven, что значительно сокращает время загрузки удаленных артефактов всеми членами команды и предохраняет от недоступности внешних репозиториев. Именно о таком использовании и пойдет речь дальше.
Читать дальше →

История одной оптимизации

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


Аннотация


Статья раскрывает особенности высокоуровневых оптимизаций вычислительных алгоритмов на Java на примере кубического алгоритма перемножения матриц.

Шаг 0. Установи точку отсчета!


Определимся с окружением:
  • Hardware: 1-socket/2-cores Intel Core 2 Duo T7300 2GHz, 2Gb ram;
  • Java: HotSpot(TM) Client VM (build 17.0-b17, mixed mode, sharing);

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

JVM падает (2 истории про вызов native library)

Время на прочтение2 мин
Охват и читатели2.4K
Хочу поделиться двумя историями с одинаковым сюжетом, но разными развязками.
Может быть кому то, у кого тоже падает JVM будет полезно

1. Native code вызывается из Явы через JNI. Юнит тест — проходит на ура, приложение (GUI, Swing) крэшится.
Подключаемся через дебагер ddd (это такая оболочка над gdb, ежели кто из яваистов не знает :) ) — видим что падает с длинющим стеком. Выясняем с автором нативной библиотеки, что там они десериализуют через boost (такая библиотека для C++) дерево большой глибины. И там рекурсия.

Возникает идея (не сразу, 3 дня споров и гугления), что при вызове из приложения стек больше и он переполняется. Находим параметер для JVM: -XX:ThreadStackSize=

Работает!

2. Native code вызывается через JNA. Присутствую колбеки обратно в Явы, так как я описывал. Юнит тест бежит, приложение падает!

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

Metawidget — инструмент, генерирующий Java формы

Время на прочтение3 мин
Охват и читатели3.1K
Привет читатель.
Хочу рассказать про инструмент для Java на который я недавно наткнулся и не нашел на хабре ни одного упоминания о нем. Называется он Metawidget и его предназначение — генерировать формы в Java.
Читать дальше →

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

NetBeans IDE 7.0 Beta 2

Время на прочтение1 мин
Охват и читатели1.5K
image
На мой взгляд, в этой версии следующие изменения являются основными:
1) Перенос строк. То что долго многие ждали.
2) Поддержка Git 1.7.x
3) Поддержка HTML5
4) Улучшено определение изменений файлов другими программами.
5) PHP рефакторинг.

Полный список новшевств.
Все фичи 7 версии
Скачать NetBeans IDE 7.0 Beta 2

ЖЖ в БД (скрипт на Groovy)

Время на прочтение3 мин
Охват и читатели2.9K
В продолжении темы маленьких скриптов на groovy — еще один.
Предыдущие: Большие письма в Gmail, Упражнение на сложение (LATEX)

Новый скрипт показывает основы работы с XML и базой данных в Groovy. В качестве задачи выберем сохранение нашей уютной ЖЖшки из XML в базу данных.
Зачем это делать? — SQL нам расскажет всё о нашем (или чужом) ЖЖ — темы, комменты, таги — насколько фантазии хватит собирать статистику

Сначало нам надо скачать ЖЖ в XML.
Это сделает чужая утилита — ljdump
Придется установить Питон, открыть IDLE (Python GUI), загрузить туда утилиту и запустить. Всё спросит она сама.

После её пробега у вас будет директория с файлами LXXX — посты и CXXX — комменты.

А на эти XMLи мы и запустим мой скрипт.
В этом виде он использует pure Java, embedded базу данных Hypersonic (HSQLDB), но можно подключиться к любой, конечно же. Только убедитесь, что JDBC driver у вас в classpath.

Парсинг и работа с БД такого типа годятся только для скриптов и небольших программ. В энтерпрайзе никто не будет загружать весь XML в память (а будут использовать SAX), и никто не будет напрямую слать SQL (а будет Connection Pool, prepared statement, batch, Hibernate какой нибудь).

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

Кеширование в Spring Framework 3.1

Время на прочтение3 мин
Охват и читатели31K
Я могу ошибаться, но мне кажется что всем хорошо известный Spring Framework достиг своей вершины к версии 2.5 (когда внедрили активное использование аннотаций) и дальше идет по сути дела «полировка» — даже major-релиз 3.0 не сильно отличается от 2.5. Тоже самое можно сказать и про грядущий 3.1 — небольшие улучшения, фишечки — но не более того. Однако одна «фишечка» в 3.1 показалась мне особенно интересной — это кеширование.
image
Читать дальше →

Программирование по контракту в Java, с использованием библиотеки COFOJA от Google

Время на прочтение9 мин
Охват и читатели7.6K
image

Для чего используется



Данная методика обеспечивает проверку предусловий и постусловий при выполнении методов классов, пользовательских функций.

Как и любая другая проверка, она позволяет повысить надежность программы, гарантируя корректность данных на входе и выходе. Либо, понизить (при некорректном использовании).

В отличие от assert’ов, проверки выполняются в runtime, т.е., непосредственно во время выполнения программы и присутствуют в релизной версии.

Суть метода заключается в том, что с каждой подпрограммой, как бы, заключается «контракт» на выполнение некоторых действий, т.е. ей ставятся ограничения(условия) на диапазон входных и выходных данных. При этом, выполнение «контракта»(условий) жестко контролируется.

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

«Hello World» BPMN2.0 или введение в Activiti

Время на прочтение12 мин
Охват и читатели35K
В данной статье я хочу рассмотреть пример создания простого приложения с использованием движка Activiti.

“Activiti” — это легковесная платформа (framework) для работы с бизнес-процессами (Business Process Managment), адаптированная для деловых людей, разработчиков и системных администраторов. Платформа основана на быстром и надёжном java-движке BPMN2-процессов. Проект OpenSource’ный и распространяется под лицензией Apache. Activiti может запускаться либо как часть вашего java-приложения, либо самостоятельно на сервере, кластере или облаке. Кроме того, она прекрасно интегрируется со Spring’ом.
Читать дальше →

JNA: callbacks to Java

Время на прочтение2 мин
Охват и читатели25K
Мне понадобилось подключить наш проект на Яве к старой библиотеке на C. Одной из проблем было, что эта библиотека требует регистрации колбеков (callbacks), которые вызывает по ходу работы, и которые, я хотел бы имплементировать на стороне Явы.

JNI позволяет это всё делать, но муторно. Есть прекрасная библиотека JNA как замена JNI я хотел воспользоваться ей.
К сожалению сайт JNA сейчас пуст — они переезжают с сервера на сервер, статьи по JNA не показывают пример callbacks, поэтому пришлось повозиться немного, чтобы сделать работающий пример.

Этот пример и хочу показать — может кому то приходится.

Начинаем со стороны C:

my.h
typedef  void (*callback)(char *, char*);

int myfunc(char *);

void registerCallback(callback myc);


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

Google упрощает контрактное программирование

Время на прочтение1 мин
Охват и читатели2.7K
Google выпустил открытую библиотеку Contracts for Java, которая упрощает реализацию методов контрактного программирования в Java. С помощью библиотеки Contracts for Java предусловия, постусловия и инварианты можно добавлять в Java как булевые выражения внутри аннотаций.

Как сказано в официальном анонсе, библиотека разработана двумя программистами Google в свободное от основной работы время (20% на личные проекты) и основана на Modern Jass и сделана под впечатлением от языка Эйфель, в котором впервые был реализован метод контрактного программирования.
Читать дальше →