Обновить
256K+

Java *

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

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

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нету.

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

Собственный Security Realm в GlassFish

Время на прочтение4 мин
Охват и читатели7.7K
Ни для кого не секрет что сервера приложений существуют для того чтобы снять некоторую часть работы с разработчика и возложить её на уже готовые механизмы. В частности механизм аутентификации в сервере приложений Glassfish можно организовать с помощью так называемых Security Realms. Существуют несколько встроенных вариантов, такие как аутентификация через СУБД, LDAP, PAM, Certificate и обычное чтение из файла. Однако они могут нас не устроить ввиду своей ограниченности (LDAP, например, может работать только с одним наперед заданным доменом). Поэтому мы и рассмотрим создание собственного security realm’а.
Читать дальше →

Новые источники данных для Teiid, часть 1: используем DDL

Время на прочтение4 мин
Охват и читатели1.7K
Те, кто сталкивались с необходимостью объединения нескольких источников данных, наверное, уже знают о JBoss Teiid, вводная статья о нём есть даже на хабре. Коротко говоря, эта система предназначена для для представления нескольких физических источников данных (например, СУБД) в виде одной виртуальной базы данных (virtual database, VDB) с доступом по SQL.

Штатно Teiid поддерживает многие источники данных, например, Oracle, DB2, M$ SQL Server, MySQL, PostgreSQL, SalesForce, но, вместе с тем, предоставляет также и удобные инструменты для работы с web-сервисами, XML, JSON. На базе этого инструментария можно легко построить доступ к несложному источнику данных (например, делать запросы в twitter, в поставке Teiid есть готовый пример), и обойтись при этом только DDL-описанием. Но для чего-либо посложнее уже требуется писать код.

В этой части мы рассмотрим способ описания с помощью DDL

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

«Умный дом» собственными руками v2

Время на прочтение5 мин
Охват и читатели89K
Добрый день, уважаемый %habrausername%!

Судя по предыдущим постам, многие из вас интересуются hand-made автоматизацей своего жилища. Я долго собирался с мыслями и идеями по итогам построения первого «умного дома» и теперь хочу поделиться своими наработками с вами.
Читать дальше →

Вышел Kotlin M3

Время на прочтение3 мин
Охват и читатели14K
Наш язык программирования неуклонно развивается: мы выпустили Kotlin M3 — большой milestone, в который вошло много интересного: от обновления домашней страницы до поддержки режима скриптов. А еще наша команда начала активный «догфудинг»: в ближайшее время все больше кода в проекте Kotlin будет писаться на Kotlin.

В этом посте я кратко опишу две наиболее интересные вещи, которые были сделаны в M3: мульти-декларации и «расщепление» интерфейсов коллекций.
Читать дальше →

Аппаратный блок сигнализации и умного дома с wifi/ethernet и 2 x usb host

Время на прочтение2 мин
Охват и читатели34K
Продолжая свой пост habrahabr.ru/post/136811 хочу представит сообществу проект аппаратной части для сигнализации, получения данных с датчиков, удаленного управления нагрузкой, подключения HD веб камеры для видео наблюдения и аудио колонок для воспроизведения сетевого радио или аудиофайлов с flash. Ethernet/wifi интерфейс, openwrt linux, 2 доступных host USB входа для подключения вебкамеры/колонок с интегрированным usb audio и т.п.



С учетом реальной цены в России на Raspberry Pi, выбор сделан в пользу MIPS платформы.

Возможность разрабатывать ПО на java, C/C++, lua, python, perl, php, ruby, shell скриптах — языках поддерживаемых openwrt. Разработка для платы ввода/вывода используя arduino подобную среду разработки maple или eclipse
Похоже есть раздолье, для разработчиков и порог вхождения невысокий — не требуется знание ассемблера и RTOS для быстрого старта.

Подробности

В ответ на вопрос почему доступ к элементу массива быстрее чем доступ к полям объекта

Время на прочтение4 мин
Охват и читатели22K
Совсем недавно уважаемый lany написал замечательный пост про mutable numbers в Java: http://habrahabr.ru/post/151887/
В комментарии к его посту я упомянул, что если важна производительность, то можно заменить объект-обертку на одно-элементный массив, доступ к элементу массива по определению быстрее чем извлечение значения из instance field.
Этот стереотип мне достался в наследство от Sun после прочтения очередного performance white paper. Там было написано что быстрее всего происходит доступ к локальной переменной, следом идет статический филд, потом элемент массива и замыкает этот список instance field.
К счастью на слово мне не поверили и это послужило поводом для написания этой статьи.
Статья не расчитана на джуниоров, читатель должен знать Java, ASM x86 и байткод.

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

Scripting Java с помощью JSR 223 — пример написания template engine в 20 строк из личного опыта

Время на прочтение3 мин
Охват и читатели12K
Статья посвящена Java девелоперам, которых жизнь заставила или пока только заставляет двигаться вперед, к светлому agile будущему. Препологается, что читатель знаком с Java, Javascript и слышал про JSR 223.
Читать дальше →

Изменяемые числовые объекты

Время на прочтение2 мин
Охват и читатели15K
Как известно, в Java существуют примитивные типы для чисел (byte, short, int, long, float, double) и объектные обёртки над ними (Byte, Short, Integer, Long, Float, Double). В различных статьях можно встретить диаметрально противоположные рекомендации о том, чем пользоваться. С одной стороны объектные обёртки универсальны: их можно использовать со стандартными коллекциями, которые удобны, инкапсулированы и вообще прекрасны. Но боксинг убивает производительность и ест кучу памяти. Примитивные типы быстры и компактны, но их можно поместить только в массивы, которые и от записи не защитишь, и абстракция на нуле. Если же вам нужно что-то типа Map, для отображения чего-нибудь на числа, то придётся либо мириться с потерей производительности и памяти, либо использовать сторонние библиотеки, реализующие нестандартный интерфейс. Однако в некоторых случаях вам помогут изменяемые (mutable) числа.
Читать дальше →

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

Время на прочтение4 мин
Охват и читатели58K
Месяц назад несколько раз на Хабре проскакивали статьи о замечательном ресурсе Coursera, где можно пройти курсы обучения по различным направлениям. Среди прочего меня очень заинтересовал курс «Алгоритмы» (часть 1), на который я подписался и начал его изучать. Сейчас курс приближается к завершению, а я решил написать небольшой отчет по первой части курса (надеюсь меня хватит и на описание второй части курса по его завершению), чтобы уважаемый %username% мог определить стоит ли записываться на следующую итерацию курса или нет.
Читать дальше →