Обновить
128K+

Java *

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

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

Все, что хотели знать о сдаче экзамена Java Programmer I (1Z0-803) в Киеве, но боялись спросить

Время на прочтение6 мин
Охват и читатели64K
Предисловие

imageКак бывший программист на С++, который перешел на православную Java, я решил постепенно подкрепить свои знания сертификатами. Просто для себя (не совсем так просто, но о мотивации чуть далее). Получение подобной «бумаги» стало для меня новым квестом и о том, как его пройти я и буду рассказывать, параллельно сдав все явки и пароли в Киеве. Само собой, не считая конкретного центра сертификации, все сказанное актуально и для не киевлян.
Читать дальше →

Простая поддержка окружений в Spring 3.1+

Время на прочтение2 мин
Охват и читатели17K
Многие знают что для подстановки значений в конфигурационные файлы Spring можно использовать context:property-placeholder.

<context:property-placeholder location="classpath*:/prop/*.properties"/> <!-- здесь будут искаться property файлы -->

<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg ref="mongo"/>
    <constructor-arg name="databaseName" value="${mongo.db}"/> <!-- здесь будет подставлено значение из найденных property -->
</bean>

Но, при данном подходе, можно лишь подставить различные значения параметров, но не изменить логику развертывания контекста. А ведь, в некоторых случаях, нам необходимо развернуть огромную систему, интегрированную с внешними системами, а в некоторых — просто одну маленькую заглушку.

Когда передо мной встала задача, в зависимости от окружения (dev, prod, load-test), изменить логику развертывания — я искренне попытался использовать старый проверенный способ через property.
И я сделал следующее:

Начинаем использовать Tarantool в Java проекте

Время на прочтение8 мин
Охват и читатели20K
    В статье ниже я попытаюсь кратко рассказать о том, что такое Tarantool и как начать его использовать в уже существующем проекте если вы программируете на Java. Если же вы программируете на другом языке, то вам могут быть интересны некоторые инструменты доступные в коннекторе, такие как возможность редактирование xlog файлов и создание snap файлов из любых данных. Если вы не знаете, что такое Tarantool, то лучше прочитать этот пост.
Читать дальше →

Программный дебаг Java-приложений посредством JDI

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

В процессе отладки приложений работающих на JVM посредством дебаггера в Eclipse меня всегда впечатляло то, сколько доступа можно получить к данным приложения — потокам, значениям переменных и т.п. И в то же время периодически возникало желание «заскриптовать» некоторые действия или получить больше контроля над ними.

Например, иногда для того чтоб «мониторить» состояние какой-то переменной, меняющейся в цикле, я использовал условный брейкпойнт, условием к которому был код вроде «System.out.println(theVariable); return false». Этот хак позволял получить лог значений переменной практически не прерывая работы приложения (она, естественно, всё-таки прерывалась на время выполнения кода условия, но не более). Плюс, нередко при просмотре каких-нибудь данных через вид Display порядком раздражало то, что результат евалюейшна кода в Display введённого добавлялся тут же после него.

В общем хотелось получить возможность делать всё то же самое например через Bean Shell или Groovy Shell, что в принципе аналогично программному дебагу. По логике это не должно было быть сложно — ведь делает же это как-то сам Eclipse, верно?

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

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

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

Время на прочтение3 мин
Охват и читатели66K
Поиск русского гайда по сдаче на OCAJP 7 не увеньчался успехом, так что я решил написать свой.

Что это за сертификат рассказывают в этом видео. Сдавать или нет каждый решает для себя сам, но этот сертификат является базовым в иерархии Oracle для интересующихся Java.

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

Началось как обычно с чтения CodeRanch. Когда я начинал готовиться книг посвященных OCA 7 еще не было в природе. Сейчас уже появился официальный гайд. Но учитывая ценник (30$), я все же воздержался бы от покупки. Сейчас расскажу почему.
Читать дальше →

Кодируем на лету в base64 и стреляем в MongoDB из JMeter с помощью BeanShell

Время на прочтение5 мин
Охват и читатели5.7K
Я работаю в нагрузочном тестировании относительно недолго, и одним из моих основных инструментов является Apache Jmeter. Тем не менее, большинство моих коллег не использовали Beanshell в JMeter, и в этой статье я хочу показать пару способов как он может упростить и сократить время подготовку к самим тестам. А покажу это на примере конвертации текста в base64-кодировку и простых стрельб в MongoDB.
Читать дальше →

JSR 335 или lambda-выражения в JAVA 8

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

Введение


Посетил вчера семинар по lambda-выражениям в JAVA 8. Рассказали много интересного.
Читать дальше →

Как мы делали сборки

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

Введение


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

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

Checkstyle и Java. Поможет ли автоматическая инспекция кодa?

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


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

Думаю, постоянные читатели уже встречали предыдущие посты (первый, второй), где мои коллеги рассказывали об использовании Java-библиотеки Checkstyle и делились нашим совместным опытом по ее расширению.

Последние труды нашей команды по написанию дополнительных чеков (проверок) для Checkstyle вошли в новую сборку нашего дополнения для Eclipse Checkstyle-плагина Eclipse-cs (sevntu-checkstyle 1.5.3, 4.09.2012).

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

Читать далее...

GWT + Hibernate + Dispatch

Время на прочтение5 мин
Охват и читатели11K
При создании портала крайне часто основной функцией BackEnd является работа с БД. Как правило сейчас никто не использует обычные и не очень удобные для написания Statement’ы, а в место этого используют ORM фреймворки. В случае с GWT этим фреймворком скорее всего становится Hibernate, так как на сервере у нас Java. Мне далеко не первому пришла в голову мысль о том, что крайне удобно и просто было бы передавать не отдельные данные а целиком POJO(персистентные объекты) используемые Hibernate. Вот я создал свой сервис, возвращающий на клиентскую часть POJO. POJO пронаследовал от Serializable. Запускаю приложение и получаю вот такое вот исключение:

Caused by: com.google.gwt.user.client.rpc.SerializationException: Type 'org.hibernate.collection.PersistentSet' was not included in the set of types which can be serialized by this SerializationPolicy or its Class object could not be loaded. For security purposes, this type will not be serialized.
at com.google.gwt.user.server.rpc.impl.StandardSerializationPolicy.validateSerialize(StandardSerializationPolicy.java:83)
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:591


Не сразу понятно что пошло не так. Дело в том, что как только объект становится персистентным, в нем происходит ряд изменений, необходимых для работы Hibernate. Например обычные Set меняются на PersistentSet. Из-за этого браузер уже никак не может десериализовать отправленный ему объект, ни при каких условиях.
Читать дальше →

Систематизация сборщиков мусора в HotSpot, IBM J9, JRockit JVMs

Время на прочтение5 мин
Охват и читатели18K
Данная статья призвана систематезировать знания о всех современных сборщиках мусора, используемых в HotSpot, JRockit и J9 JVMs. Статья содержит краткий обзор всех режимов сборки мусора с проведенными аналогиями между всеми рассматриваемыми здесь JVM. Статья будет интересна всем, кто интересуется вопросом GC, а также будет полезна тем, кто рассматривает или планирует совершать портирование JAVA приложений на альтернативные JVM.
Читать дальше →

Курс Algorithms от Coursera (4-6 недели обучения)

Время на прочтение4 мин
Охват и читатели23K
Как и обещал, пишу продолжение статьи, посвященной обучению на курсе Algorithms.

Тех кто не знает структуру курса, прошу в первую статью, там я расписал, как проходит работа. Здесь я расскажу о программе заключительных 3 недель обучения и о финальном экзамене.
Читать дальше →

Транзакции в MongoDB

Время на прочтение5 мин
Охват и читатели62K
image MongoDB — замечательная база данных, которая становится все популярнее в последнее время. Все больше людей с SQL опытом начинают её использовать, и один и первых вопросов, который у них возникает: MongoDB transactions?.

Если поверить ответам со stackoverflow, то все плохо.

MongoDB doesn't support complex multi-document transactions. If that is something you absolutely need it probably isn't a great fit for you.
If transactions are required, perhaps NoSQL is not for you. Time to go back to ACID relational databases.
MongoDB does a lot of things well, but transactions is not one of those things.
Но мы не поверим и реализуем транзакции (ACID*) основанные на MVCC. Ниже будет рассказ о том, как эти транзакции работают, а тем, кому не терпится посмотреть код — добро пожаловать на GitHub (осторожно, java).

Пост не о MongoDB, а о том, как использовать compare-and-set для создания транзакций, а durability обеспчивается ровно в той степени, в которой её обеспечивает хранилище.
Читать дальше →

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

О том как я на Java из PDF флэш получал

Время на прочтение6 мин
Охват и читатели8.9K
image
Давным давно, когда трава была зеленее, меня поймали и долго пытали пришлось мне повышать перформанс в одной чудесной связке.

Как задачу понял архитектор


Дано: есть безумный каталог изделий в виде большого количества PDF по паре тыщ страниц каждый. Надо их выдать в веб в виде красочных анимированных презентаций.

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

Проблема: каталоги постоянно меняются, а конвертация только одного гроссбуха из каталога занимает больше часа(!).

Почему так и как улучшить?

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

«Java-Оскар» нашел своего нового обладателя

Время на прочтение2 мин
Охват и читатели10K
Победители премии Duke's Choice Award 2012 были объявлены командой Oracle в преддверье самого крупного ежегодного события в мире Java – конференции JavaOne в Сан-Франциско, и мы среди них! Проект Jelastic победил в номинации «Технологический лидер». Было очень приятно разделить пьедестал почёта с другими победителями, среди которых Hadoop Project, Parleys.com и Liquid Robotics. Это не только наша победа, это победа всех хабраюзеров, ведь наш проект зародился на Хабре и постоянно развивается благодаря Вашему активному фидбэку. Огромное спасибо за поддержку!

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

Doppio — JVM, Компилятор и дизассемблер в JavaScript

Время на прочтение2 мин
Охват и читатели9.2K
На сегодняшний день мы не испытываем недостатка в прекрасных вещах, которые написаны на JavaScript. Да и реализации JVM в JavaScript мы уже видели. Теме не менее, Doppio представляет собой наиболее полную и активно развивающуюся JVM.


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

Разбираем email в Java

Время на прочтение5 мин
Охват и читатели12K
К моему последнему проекту, написанному на 80% на Java, надо было дописать модуль — парсер всех писем, проходящих через сервер. Религиозные мотивы модуля очень странные, но некоторыми деталями хотелось бы поделиться.

В наличии имеются:

Почтовый сервер Postfix со службой доставки Dovecot на CentOS. Ну и JVM.

Структура сообщений

Что такое электронное письмо, его составные части, их примерная структура, заголовки и MIME типы по-человечески описано на википедии.
Более интересной является структура имени файла письма на сервере. Пример имени новоиспеченного (не прочитанного/не запрошенного клиентом) письма:

1348142977.M852516P31269.mail.example.com,S=3309,W=3371

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

Какой Java поток нагружает мой процессор

Время на прочтение3 мин
Охват и читатели29K
Что Вы делаете, когда Ваше Java приложение потребляет 100% ЦП? Оказывается Вы легко можете найти проблемные потоки, используя встроенные Unix и JDK утилиты. Никакие инструменты профилирования не потребуются.
С целью тестирования мы будем использовать простую программу:
Читать дальше →

Как запускать DBDeploy в Gradle

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

В данной заметке я покажу, как запускать DBDeploy из скрипта Gradle.


О чём это вообще?


Возможно, вы уже слышали о версионированной миграции структуры баз данных. Об этом писали на хабре. DBDeploy — один из самых простых и известных инструментов, позволяющий легко установить все последние изменения в базе данных на любом инстансе и любой девелоперской машине. А Gradle — модный ныне инструмент для сборки проекта (как Ant и Maven, только лучше). О нём тоже уже писали.



И в чём вопрос?


Вопрос в том, как запускать DBDeploy из скрипта Gradle? У DBDeploy есть таски для Ant и плагин для Maven, но пока ещё нет плагина для DBdeploy (точнее, он в зачаточном состоянии). Немного потыркавшись, я пришёл к выводу, что самый простой способ — это использовать тот самый Ant таск DBDeploy из скрипта Gradle (здесь описано, как из gradle-скрипта использовать любые Ant-таски). Рассмотрим пример.



Пример проекта и билд-скрипт для запуска SQL-скриптов

Во Львове просят предоставить Java статус регионального языка *

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


Мов парость виноградної лози,
Плекайте Java пильно й ненастанно!


Несмотря на то, что эта новость лежит в плоскости юмора (и отчасти даже политической сатиры), нельзя обойти её вниманием. Я взялся собрать воедино и перевести часть из этих весёлых материалов которые сегодня гуляют по UAнету.

Узнать все подробности