Обновить
153.25

Java *

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

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

JNI, загрузка нативных библиотек. Меняем java.library.path на лету

Время на прочтение3 мин
Охват и читатели41K
В подмножестве экосистемы Java, относящейся в основном к JNI (без которого никуда не деться, если приходиться интегрироваться с каким-то legacy или просто редким и специфическим кодом, написанном на С или каком-то другом языке), есть такое понятие, как java.library.path. Вкратце, это в некотором роде аналог classpath, только не для Java классов и *.jar файлов, а для нативных библиотек — системное свойство, которое указывает JVM, где искать эти самые нативные библиотеки (.dll в винде или .so под юниксами).

Свойство это устанавливается один раз, перед запуском JVM, через глобальные system properties, или как ключ -Dname=value для JVM, и после этого оно становится read-only. Точнее, менять-то его можно, но никакого эффекта на работу программы это не окажет, т.к. после того как вы обновите это свойство, JVM не перечитает его и не будет использовать новое значение.

Под катом — про то, как все таки поменять это свойство в рантайме, и немного о том, как собственно работает загрузка нативных библиотек в Java.

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

Jooq — «LINQ» для Java, типобезопасный построитель SQL запросов в Java коде

Время на прочтение5 мин
Охват и читатели26K
Недавно, в поисках золотой середины между JDBC и ORM, я натолкнулся на интересную open source библиотеку (лицензия Apache Software License), с помощью которой можно строить SQL прямо в Java-коде достаточно удобно и безопасно. Библиотека называется Jooq. Jooq включает в себя генератор кода, который парсит структуру вашей базы данных и создает необходимые Java-классы. На деле получается примерно такой код:

Integer taskId = sqlFactory.select(ID).from(TASK).where(STATUS.equal(TaskStatus.QUEUED)).
    orderBy(LAST_UPDATED).limit(1).fetchOne(ID);


Как видите, конструирование запроса и его выполнение для простых типов занимает одну строку. Немного о jooq:

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

Spring Remoting — Spring + RMI

Время на прочтение4 мин
Охват и читатели17K
Spring Remoting

Spring framework предоставляет обширные возможности по созданию распределенных приложений. Он не только помогает создавать удаленные службы, но и упрощает доступ к ним. На данный момент в с помощью фреймворка можно организовывать удаленный доступ с помощью большого количества технологий — Caucho’s Hessian и Burlap, собственная реализация удаленного доступа через HTTP, RMI и т.д. Под катом краткий обзор возможностей фреймворка Spring для создания распределенных приложений с помощью RMI.

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

Улучшаем интерфейс Java-приложения

Время на прочтение27 мин
Охват и читатели102K
Добрый день, Хабражитель!

Достаточно много различной раздробленной информации существует на тему работы со Swing и графикой в просторах интернета, а также на тему интерфейсов Java-приложений. Кто-то твердит о том, что Java морально устарела и десктоп-приложения на Java не имеет смысла писать, кто-то с пеной у рта доказывает обратное. В то же время работа идет, приложения пишутся и встают очередные проблемы. В предыдущей статье я уже привел небольшой список полезных библиотек для исключительных случаев, но нередко бывает так, что никакая сторонняя библиотека не позволяет сделать то, что Вам нужно. Именно в такой момент стоит задуматься о возможной необходимости написания своих компонентов.

Итак, в данном посте я постарался изложить самые важные и значимые на мой взгляд моменты по работе со Swing и графикой — как создавать компоненты, как стилизовать интерфейс, чего делать не стоит и многое другое…

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

Как Ларри Пейдж изучал Java

Время на прочтение2 мин
Охват и читатели3.8K
Нынешний руководитель Google Ларри Пейдж во времена студенческой юности не был выдающимся программистом. Стивен Леви рассказывает об истории создания программ Backrub и PageRank в своей книге "In the Plex" (цитаты: 1, 2, там же ссылка на первую часть книги, которая лежит в открытом доступе).

Пейдж никак не мог добиться нормальной работы краулера и индексатора из-за большого количества багов в коде и ещё по причине использования нового и нестабильного языка Java. Система всё время падала и не годилась для реальной работы. В архивах ньюс-группы comp.lang.java за 1996 год сохранились вопросы Пейджа. Он пытается выяснить у знающих людей, как назначить User-Agent для заголовка HTTP.
Читать дальше →

jBitTorrent API 1.0, исправленный и дополненный

Время на прочтение1 мин
Охват и читатели3.3K
Недавно я описывал библиотеку jBitTorrent для Java, с помощью которой можно работать с файлами по протоколу BitTorrent.
В той же статье был блок описания проблем, встречанных при использовании этой библиотеки, ведь она не обновлялась еще с 2009 года.
Пользователь sadyjka предложил мне самому пофиксить эти баги, и вот я нашел немного времени для этого. Исправлены следующие проблемы:

  • Недочет при добавлении множественных файлов в генерируемый торрент-файл
  • Ошибка при закачке файлов


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

Признаюсь честно, с этим кодом мне пришлось несколько суток разбираться, поэтому я мог немножко наговнокодить.
Проблему в printData я не стал убирать, ибо метод также не критичен, а просмотрев исходник, увидел, что идет доступ к списочным элементам, которые в том классе не использовались.
Извиняюсь, что не на SourceForge лежат мои фиксы, ибо автор оказался весьма занятым.

Исходники
JAR

UPD
По просьбе debacle сделал репозиторий на GitHub.

JavaOne / Oracle Develop: общие впечатления

Время на прочтение3 мин
Охват и читатели2.8K
12-13 апреля в Российской Академии Наук, впервые в Москве, проходила известная конференция Java и Oracle разработчиков — JavaOne / Oracle Develop. Побывал на обоих днях и хотел бы поделиться своим мнение о докладах, на которых удалось поприсутствовать, общих впечатлениях и различных бытовых мелочах
Читать дальше →

Какие бывают типы OutOfMemoryError или из каких частей состоит память java процесса

Время на прочтение3 мин
Охват и читатели214K
Если вы словили OutOfMemoryError, то это вовсе не значит, что ваше приложение создает много объектов, которые не могут почиститься сборщиком мусора и заполняют всю память, выделенную вами с помощью параметра -Xmx. Я, как минимум, могу придумать два других случая, когда вы можете увидеть эту ошибку. Дело в том, что память java процесса не ограничивается областью -Xmx, где ваше приложение программно создает объекты.

image

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

JavaOne: слияние Java

Время на прочтение5 мин
Охват и читатели2.8K
Как вы все знаете, вчера прошел первый день долгожданного JavaOne. Стоить заметить, что в Москве данное мероприятие проходит впервые, чему я несказанно рад. Было много разных интересных и полезных докладов, но всех больше мне понравилась секция про слияние HotSpot и JRockit. Во-первых, я мало что знал про JRocket, во-вторых, эту новость я слышал впервые, а в докладе было довольно много подробностей. Презентации выложат на официальном сайте мероприятия только через две недели, поэтому я все таки решил пересказать услышанное в вольном исполнении. Тем более по комментариям к одному из моих предыдущих постов, я так понял, что на хабре не очень много людей знакомых с JRockit, так что, думаю, топик будет интересен хабрасообществу.
image
Читать дальше →

Расширяем возможности Java-приложения

Время на прочтение11 мин
Охват и читатели19K
Здраствуй, Хабражитель!

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

Итак, сегодня я приведу здесь библиотеки, которые могут Вам помочь решить часто возникающие вопросы вроде «Как сделать это на Java?» по разным узким направлениям разработки.

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

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

Новый синхронизатор Phaser

Время на прочтение5 мин
Охват и читатели61K
Phaser (Этапщик) — мощная и гибкая реализация паттерна синхронизации Барьер. Включен в JDK 7 в составе пакета java.util.concurrent.

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

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

True Java Elastic Cloud @ JavaOne — закрытый beta-test

Время на прочтение3 мин
Охват и читатели1.1K
Java Elastic Cloud Как и все русскоязычные разработчики на языке Java, мы с интересом ждем конференцию JavaOne, которая будет проходить 12 апреля в Москве. Для нас это мероприятие будет знаковым, т.к. к этому дню мы подготовили beta-версию Jelastic — эластичного облачного решения для Java.
Для кого предназначен Jelatic на данном этапе тестирования: для Java разработчиков использующих Tomcat и MySQL, желающих в один клик деплоить свои приложения в эластичное облачное окружение.

Важными отличительными особенностями Jelastic относительно конкурентов является наличие вертикального масштабирования.
Читать дальше →

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

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

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

Введение



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

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



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

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

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

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

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

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

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

Время на прочтение2 мин
Охват и читатели4.3K
Кто-то когда-то сказал: «Возьмите несколько произвольных латинских букв, допишите перед ними 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 мин
Охват и читатели693
Предлагаю в этой теме отписываться тем, кто едет на какую-то (или обе) из двух указанных конференций, чтобы можно был при желании как-то скооперироваться тем, кто едет из одного города, планирует жить в определенном отеле и пр.

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

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