Обновить
512K+

Java *

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

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

Использование Liquibase без головной боли. 10 советов из опыта реальной разработки

Время на прочтение5 мин
Охват и читатели172K
kdpvLiquibase — это система управления миграциями базы данных. Это вторая статья о Liquibase, на этот раз содержащая советы «боевого» использования системы. Для получения базовых сведений подойдет первая статья-перевод «Управление миграциями БД с Liquibase» (ссылка).

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

Вот 10 вещей, которые в определенный момент работы с Liquibase были для меня открытием.

1. Версионность приложения должна быть отражена в структуре папок миграций


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

/db-migrations
    /v-1.0
        /2013-03-02--01-initial-schema-import.xml
        /2013-03-02--02-core-data.xml
        /2013-03-04--01-notifications.xml
        /changelog-v.1.0-cumulative.xml
    /v-2.0
        ...
        /changelog-v.2.0-cumulative.xml
    /changelog.xml

Подробнее:
Читать дальше →

Stand-alone приложение RAP

Время на прочтение7 мин
Охват и читатели4.4K
Приветствую всех! Это моя первая статья, потому просьба отнестить с пониманием.

С тех пор как я впервые увидел RAP и OSGi — прошел год, но с первого взгляда я просто влюбился в эти технологии. К сожалению даже в сети очень мало документации по RAP, позволяющей написать что-то крутое (кроме hello world) с нуля. Для начала, конечно, нужно знать что такое OSGi. По этой теме инфы в сети достаточно — можно загуглить. Так как статья о RAP, подразумевается, что читатель уже знает как создавать OSGi бандлы, как их устанавливать и запускать.

То есть задача ставится так: «сделать кастомный интерфейс сайта заюзав RAP». Как создать в Eclipse проект OSGi бандла, читатель, я предполагаю, знает.
Читать дальше →

Мониторинг «на коленке» – использование Cacti для контроля Jаva приложений

Время на прочтение9 мин
Охват и читатели50K
В статье описывается решение для мониторинга с использованием Cacti на примере задачи анализа и контроля потребления ресурсов большого Java-приложения.

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

В одной из фирм, где я работал, было реализовано впечатляющее по удобству и простоте решение для мониторинга Java-приложений на основе RRD Tool. Состояло оно из несложной надстройки на perl-скриптах, обеспечивающих сбор и отображение данных через HTTP и ряда доработок-агентов сбора данных в самом приложении. Для меня это стало идеей решения, однако, времени на написание обвязки над RRD у меня не было.

После аккуратного поиска нашелся бесплатный инструмент, реализующий необходимую мне надстройку – Cacti. Cacti это приложение, написанное в инфраструктуре Apache-PHP-MySql, позволяющее настраивать сбор и отображение данных мониторинга на основе веб-интерфейса. Разобраться с ним оказалось несложно, пару дней для подъема инфраструктуры, затем настройка и дописывание агентов сбора данных и все.

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

Дальше...

История одного garbage collection'а

Время на прочтение5 мин
Охват и читатели29K
Эта поучительная история повествует о том, как важно развивать навыки гугления, и о том, как я боролся с ежечасным полным Garbage collection.

Краткое описание проблемы


После того, как мы мигрировали в продакшене один из компонентов системы (единственный, работающий на Tomcat) на новую версию томката, неожиданно саппорт запаниковал, увидев в логах полуторасекундные запуски GC.
Читать дальше →

Передача параметров в HTTP-заголовке через запятую для Apache CXF

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

Предистория:


Согласно RFC-2616, HTTP header можно передавать кучей разных способов.
Мы использовали вариант КЛЮЧ = <ЗНАЧЕНИЕ-1>,<ЗНАЧЕНИЕ-2>,...,<ЗНАЧЕНИЕ-N>
Библиотека Apache CXF до версии 2.5.8 (включительно) обрабатывала такую ситуацию корректно.

Проблема:


С версии 2.5.9 Apache CXF втихаря «улучшились» и допустимыми признают только КЛЮЧ = <ЗНАЧЕНИЕ>
Ни в документации, ни на форуме апача нет ответа на вопрос:

Как разрешить Apache CXF принимать параметры заголовка HTTP-запроса (HTTP header) через запятую?

Исследование исходных кодов библиотеки указало на решение проблемы.

Решение:


В конфиге beans.xml надо добавить:

<jaxrs:properties>
     <!-- enable comma separated HTTP header values. Example" "X-ListID: 0,100,13,25,16" -->
     <entry key="org.apache.cxf.http.header.split" value="true" />
</jaxrs:properties>

Управление миграциями БД с Liquibase

Время на прочтение6 мин
Охват и читатели159K
Не так давно мы начали внедрять Liquibase в качестве инструмента миграций схемы данных в большинстве наших проектов, новых и уже существующих. Система миграций схемы базы данных Liquibase хороша тем, что позволяет использовать системы контроля версий, VCS, (например, Git) для управления ревизиями базы данных приложения. Говоря более точно, VCS содержит описание изменений, необходимые для миграции схемы базы данных из одной ревизии в другую.

Хотя миграция схемы базы данных кажется довольно простой задачей изначально, задача становится сложнее после того, как появляется желание откатывать изменения схемы без ее создания заново.
Кроме схемы и операций DDL, Liquibase позволяет мигрировать данные приложения, с поддержкой наката изменений данных и их отката.
Читать дальше →

История одного девелопера, или Стреляя по звёздам, попадёшь в Луну

Время на прочтение5 мин
Охват и читатели31K
Привет всем,
Особенно студентам, начинающим программистам и всем, кто хочет ими стать! Я бы хотела рассказать историю своего джуниорства, надеюсь, мой бесценный опыт будет кому-нибудь полезен (и поможет не набивать шишки там, где не надо).

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

Итак, имеется двадцатилетний студент четвёртого курса, обучающийся по специальности «Информационные технологии в образовании» со специализацией «Управление проектами». В пассиве – очень скромное количество и качество обучения программированию в вузе и гуманитарное прошлое. В активе – огромное желание стать высококвалифицированным специалистом в области разработки высоконагруженных Java-приложений (такая формулировка пришла намного позже, на ранней же стадии было примерно так: «Java клёвая, хочу на ней круто кодить!»). Задача – реализовать свою мечту. Ниже приведён алгоритм, худо-бедно сформулированный по окончании анализа всех ошибок, сделанных в попытках решить эту задачу.
Читать дальше →

JavaOne Russia или бенефис Куксенко с Шипилёвым. Отчет о конференции

Время на прочтение7 мин
Охват и читатели14K
Хочу рассказать о конференции JavaOne Russia, которая проходила 23-24 апреля в Москве, с точки зрения разработчика JVM и одного из докладчиков.

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

JIRA: создание плагинов. Особенности фреймворка

Время на прочтение5 мин
Охват и читатели25K
Приветствую всех.
Эта статья поможет начинающим в области веб-программирования научиться писать плагины под JIRA. Сам в начале работы с этой системой столкнулся с тем, что, во-первых, нет ни одного достаточно подробного и русскоязычного гайда. А во-вторых, большая часть статей рассчитана на достаточно опытных людей.
Для начала, я рассмотрю основные моменты и ошибки при создании плагинов, а так же структуру JIRA плагина, что сильно упростит задачу начинающему веб-программисту.
Читать дальше →

Разработка веб приложения на основе Java EE+JSP+Hibernate+Maven+Spring MVC в NetBeans. Часть 1

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

Вступление


Это будет серия статей, помогающих начинающим Java разработчикам в их нелегком пути. Покажу пример создания интернет магазина.
Первое что вам понадобится — это NetBeans 7.3. Скачать можно здесь.
Почему именно он? Думаю для начинающих в ЕЕ — это идеальный вариант.

Используемые технологии:
Читать дальше →

Быстрый способ создать установщик для Java программы

Время на прочтение4 мин
Охват и читатели19K
Вам никогда не надо было быстро создать установщик для своего Java-приложения, но не хотелось тратить на это кучу времени, создавая свой собственный? Возможно, вы удивитесь, но в стандартной поставке JDK7 такой инструмент уже присутствует.
Читать дальше →

Обзор ограничений, накладываемых на исключения, на примере наследования и реализации интерфейса

Время на прочтение4 мин
Охват и читатели4.5K
Приветствую всех изучающих Java!
Как известно исключения в Java, при наследовании подчиняются требованию сужения спецификации, а не ее расширения, в отличие от обычных классов.
В книге Bruce Eckel «Thinking in Java, 4 ed.» приведено описание ограничений, накладываемых при использовании исключений.
Читать дальше →

Пишем плагин для IntelliJ IDEA, добавляем функциональности редактору кода

Время на прочтение5 мин
Охват и читатели32K
Начиная работать в IntelliJ IDEA, обнаружил отсутствие удобной комбинации клавиш, которой пользуюсь в Eclipse — Ctrl+Alt+Up. По этой комбинации выделенный блок текста или строка, копируется вверх с перемещением курсора в начало скопированного блока.
В Idea есть действие по умолчанию на Ctrl+D, которое копирует блок вниз (Ctrl+Alt+Down в Eclipse), но невозможно добавить аналогичное действие вверх. После гугления был задан вопрос в Q&A, оставшийся без ответа. Заведён issue на jetbrains. Все эти действия не дали ответа, поэтому решено было написать небольшой плагин для Idea.
Далее

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

Изменения внутреннего представления строк в Java

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

Вступление


Это мой первый перевод статьи. Решил посвятить его Java, как ни странно. В статье рассказывается об изменениях строкового типа данных, которые произошли в Java.

ВАЖНО: В 17 апдейте Java 7 по-прежнему ничего не поменялось в отношении статьи.

Разделение массива символов char[]

В настоящей реализации класса String имеется 4 экземплярных поля: массив символов char[] value — содержащий символы строки, int offset — индекс первого используемого символа в массиве value, int count — количество используемых символов и int hash — кэшированное значение вычисленного хеш кода для данной строки. Как вы могли заметить, в большинстве случаев строка будет иметь значения offset = 0 и count = value.length. Единственное исключение из этого правила, возможно, когда строка создается путем вызова метода viaString.substring или любым методом, который использует данный метод (например, split).
Читать дальше →

Правильно освобождаем ресурсы в Java

Время на прочтение4 мин
Охват и читатели169K
Неправильное освобождение ресурсов — одна из наиболее часто допускаемых ошибок среди Java-программистов. Под ресурсом в данной статье я буду подразумевать всё, что реализует интерфейс java.io.Closeable. Итак, сразу к делу.

Будем рассматривать на примере OutputStream. Задача: получить на вход OutputStream, сделать некоторую полезную работу с ним, закрыть OutputStream.
Читать дальше →

Разработка сервера браузерной игры… как учебная дисциплина

Время на прочтение13 мин
Охват и читатели93K
В середине прошлого лета на программерскую рассылку отдела клиентских игр Mail.Ru Group пришло письмо – «Объявлен конкурс на позицию преподавателя курса Java в нашем совместном проекте с МГТУ им. Н. Э. Баумана». Как программист и сотрудник отдела я это письмо тоже получил. Как выпускник физтеха, а в прошлом преподаватель и научный работник, решил откликнуться.
Так для меня началась история работы преподавателем в Технопарке. Собственно об этом (о работе, о Технопарке, о своем курсе и о студентах) я и хочу вам рассказать.

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

Релиз Java 8 передвинут на март 2014 года

Время на прочтение1 мин
Охват и читатели20K
Главный архитектор платформы Java Марк Рейнхольд сегодня объявил в своём блоге, что выпуск Java 8 переехал с сентября этого года на март следующего. В последнее время много сил инженеров Oracle было переброшено на то, чтобы сделать платформу Java более безопасной. Люди брались не из ниоткуда, а перебрасывались с других фич, в частности, с лямбды. Поэтому процесс разработки новых фич в Java 8 в последнее время шёл медленнее ожидаемого, и дата релиза уехала на полгода.

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

Декомпиляция Java приложений

Время на прочтение3 мин
Охват и читатели209K
Декомпиляция — процесс воссоздания исходного кода декомпилятором
Недавно я задался вопросом: Какой декомпилятор лучше?
Начал мучить Google, экспериментировать. В итоге нашел отличное решение. Как декомпильнуть любую программу и получить рабочие «исходники»? Об этом в сабже.
Читать дальше →

Основы Native Extension на Java для AIR

Время на прочтение4 мин
Охват и читатели9.7K
Здравствуйте уважаемые хабрачитатели. Мой рассказ как видно по названию темы пойдет о основе и особенностях создании adobe native extension(далее ANE) для Adobe AIR, в моем случае расширения буду писать на java, для расширения функциональности AIR, на платформе Android. И так с вашего разрешения начнем.

Введение.


Что же такое ANE? Это инструмент который появился с версии Adobe AIR 3.0 и выше, он позволяет извлекать и выполнять куски нативного кода из среды AIR, условно мы можем выполнить любой нативный код. Выглядит расширение в виде скомпилированного файла библиотеки с расширением .ane.

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

Автономная кроссплатформенная монолитная программа на Java

Время на прочтение21 мин
Охват и читатели64K
Я люблю desktop-приложения. Признаваться в этом нынче, похоже, стыднее, чем в связях с иностранной разведкой, но это так. Нет, это не значит, что я не люблю интернет-технологии. Более того, некоторые я не только уважаю, а даже более-менее знаю. Но, тем не менее, я скучаю по тем временам, когда программа писалась на одном компьютере, потом компилировалась и запускалась на других, разных компьютерах. Тогда везде (почти) была одна система — Windows с одной и той же API, почти не было проблем совместимости на уровне приложений, никто не материл разработчиков браузеров — все берегли нервы на разработчиков WinAPI, которые умудрялись создавать конфликты даже внутри нее одной. Но это я, конечно, иронизирую, а если серьезно — иногда и сейчас хочется написать просто desktop-приложение, да так, чтобы работало оно на всех популярных системах. Трудно? Если подумать и покопать, то не очень.

Еще я люблю языки высокого уровня с аккуратной архитектурой и строгой типизацией. Мои фавориты — Java и C#. Оба они предоставляют разработчику множество преимуществ по сравнению с C++, оба избавляют от ряда забот. Чем приходится платить? Тем, что таскаешь за собой тяжелую колоду, которая называется Oracle JVM, .NET или mono. Все три колоды весят сотни мегабайт и лицензию имеют такую, что каждый пользователь вынужден качать эту штуку сам, не путая при этом разрядность своего компьютера, а главное — программа на Java не может быть совместима со всеми версиями JVM разом, не так ли? И вот — мы приходим к тому, что просто скинуть программку другу (или миллиону друзей) и не заботиться о том, что она у него не запустится, не выходит. Приходится делать хитрые сетапы, вбивать костыли, и это я еще не упомянул .NET — однажды я видел у друга сразу 3 установленных версии, причем все три были нужны разным приложениям…

Стоп! А давайте напишем программу на Java, но так, чтобы она не требовала установки на машину какой-либо JVM, чтобы одним касанием собиралась под Windows, Linux и OS X и чтобы при этом занимала совсем чуть-чуть; так, чтобы никто даже не понял, что она написана, скажем, не на C. Невозможно? Совсем наоборот! (И нет, я имею в виду не gcj, который лишает Java всех ее прелестей. Рефлексия будет работать и даже сторонние jar вы сможете запускать).

Ну и как это сделать?