Обновить
149.63

Java *

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

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

Делаем простое веб приложение на Spring Framework MVC

Время на прочтение13 мин
Охват и читатели254K
image
В данной статье я хочу рассказать начинающим Java разработчикам, как написать простое веб приложение, используя популярный фреймворк Spring Framework.

При разрабокте приложения мы будем использовать утилиту Ant для автоматизации действий и изучим, как писать простой тест с помощью библиотеки JUnit. Весь код будем писать в Eclipse IDE.

Статья написана на основе первой части руководства «Introduction to Spring MVC». Вам достаточно иметь лишь общее представление о Spring, чтобы прочитать статью с пользой.

Так что милости просим :)
Читать дальше →

Корпоративный портал Jahia – обзор архитектуры (часть 1)

Время на прочтение13 мин
Охват и читатели7.8K
В статье представлен высокоуровневый обзор архитектуры корпоративного портала Jahia.

Jahia – одна из немногих open source систем, которая объединяет Java EE портал и управление
контентом в один продукт. CMS является законченным решением, представляющим альтернативу порталам
от крупных компаний.

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

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

Java и паттерн Public Morozov

Время на прочтение3 мин
Охват и читатели33K
Однажды понадобилось мне переопределить на работающей программе поле, помеченное как private final. Причем останавливать программу было нельзя, ибо сервер. Ну и как маленькое дополнение тип переменной был определен как inner класс. Разумеется тоже private.

К счастью, программа позволяет на ходу подключать модули, содержащие произвольный код. А значит — в нашем распоряжении вся мощь reflection!
Читать дальше →

Пишем парсер на Java + MySQL

Время на прочтение15 мин
Охват и читатели44K
Недавно пробегал на Хабре пост про базу доменных имен с электронной почтой. Решил написать парсер, чтоб благополучно слить всю эту базу. Но так как очень быстро сервис загнулся в силу хабраэффекта (а может админы пофиксили, черт его знает), я пошел дальше и нашел просто базу доменов в plaintext'е в зоне .RU. Решил ее пропарсить с помощью whois на nic.ru. Но на последнем действует скрипт, благополучно притормаживая слив базы с одного ip адреса. Выход — использование proxy листа. И, будучи благополучно задушенным жабой покупать прокси листы, я решил написать на Java два скрипта:
1. Парсит samair.ru/proxy и сливает в mysql прокси лист.
2. Проходит по базе и проверяет timeout полученных проксей.

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

Google Collections LIbrary 1.0 final

Время на прочтение1 мин
Охват и читатели2.7K
Наконец-то вышла финальная версия Google Collections Library.Это библиотека коллекций, по сути дополняющая стандартные коллекции.
Что есть в Google Collections?
  • Дополнительные типы коллекций Multimap, Multiset, BiMap
  • Также есть неизменяемые типы коллекций, которые удобны в многопоточных программах
  • Классы утилит для Списков, Множеств и Карт
  • И многое другое…

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

Все о String.intern()

Время на прочтение4 мин
Охват и читатели130K
Думаю, что многие Java-разработчики знают или хотя бы слышали о методе String.intern(). Но далеко не каждый использует его в своих приложениях или представляет в каких случаях он полезен и полезен ли вообще. Так было и со мной до тех пор пока я не столкнулся с этим методом в одном из проектов. В тот момент я захотел узнать смысл и особенности его использования и набрел на одну весьма интересную статью ведущего разработчика Yahoo! по имени Ethan Nicholas, переводом которой теперь хочу поделиться с той частью Хабра-сообщества, которая не безразлична к языку Java.

Тем, кто знает об этом методе лишь понаслышке, добро пожаловать под кат.
Читать дальше →

Работа с ICQ в Java

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

Предыстория


Как-то раз мы решили создать свой собственный микроблоггинг с блекджеком и шлюхами c шахматами и поэтессами. Сначала сделали сайт, но быстро стало понятно, что для реализации идеи его недостаточно. Необходимо было работать с сообщениями через Jabber и ICQ.
Начали с простого — с джаббера. Никаких проблем тут не возникло — мы писали на Java, поэтому прикрутили Smack API и все заработало. Но, как это не печально, но самым популярным IM протоколом все еще является ICQ…

Задача


Итак, задача: залогиниться в ICQ, принимать и отправлять сообщения, понимать X-статусы, работать с кириллицей.

Рассмотрим пути решения.
Читать дальше →

Maven — зачем?

Время на прочтение7 мин
Охват и читатели88K
На просторах сети вообще и хабра в частности мне доселось видеть не один топик посвящённый Maven. И везде, где было обсуждение, возникали вопросы вида:
  • Что даёт его использование в проекте типа X?
  • Чем он лучше Ant/Make/sh?
  • А что делать если я хочу использовать в проекте antlr/JAX-WS/XDoclet?

Я полагаю, что все эти вопросы происходят из незнания что на свете есть гугл недостаточного понимания что такое Maven и какой подход к решению задач build management он предлагает. Что в свою очередь растёт из недостаточного внимания, которое авторы статей уделяют идеям стоящим за xml-файлами и завораживающими консольными командами.
Под кактом нет xml, примеров команд и многих килобайт вывода...

Yandex Maps и подготовка тайлов

Время на прочтение1 мин
Охват и читатели8.9K
Ребята тут выложили программу подготовки слоя тайлов для API Яндекс.Карт

В связи с этим выложу ка я написанную этим летом свою утилитку для нарезки большой карты на кусочки.

Выкладываю вместе с исходниками, программка написана на Java с использованием JAI и ImageIO.

Утилитку писал специально для Йоты вот для этой карты.

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

Релиз открытого Java-фреймворка Spring 3.0

Время на прочтение1 мин
Охват и читатели3.6K
Коллектив SpringSource, недавно вошедший в состав компании VMWare, выпустил первый релиз новой ветки популярного Java-фреймворка Spring 3.0, выступающего в роли свободной альтернативы Enterprise JavaBeans. Исходные тексты Spring доступны в рамках лицензии Apache 2.0. Одновременно доступно обновление инструментария SpringSource Tool Suite, который теперь поддерживает всю новую функциональность Spring 3.0.

Основные новшества Spring 3.0:
  • Полная оптимизация под Java 5: первое поколение Spring, требующее Java 5 или выше, синтаксис Java 5 применяется везде в Spring API и во всём коде реализации;
  • Новый язык выражений SpEL (Spring expression language): парсер выражений ядра для использования в бин-определениях (bean definitions);
  • Расширенная поддержка компонентов на базе аннотаций: ключевые возможности проекта Spring JavaConfig теперь доступны и в самом Spring;
  • Мощная модель стереотипов: создание «коротких» аннотаций через использование мета-аннотаций;
  • Стандартизованные аннотации с внедрением зависимостей (dependency injection): присутствие начальной поддержки пока не полностью готового стандарта JSR-330 для внедрения зависимостей в Java;
  • Декларативная модель валидации на основе ограничивающих аннотаций;
  • Расширенная поддержка связующих средств и средств форматирования;
  • Глобальная поддержка архитектурного стиля REST;
  • Прямое отображение объект/XML (OXM);
  • Полная поддержка Portlet 2.0;
  • Абсолютно новые возможности планирования: новые механизмы триггеров и TaskScheduler с первоклассной поддержкой cron;
  • Поддержка Java EE 6.
Читать дальше →

Обработка сигналов в Java

Время на прочтение3 мин
Охват и читатели16K
Передо мной частенько вставала задача написать какой-нибудь Java-сервис. В качестве ОС мы используем по большей части линукс, так что удобнее всего управляться с такими сервисами — работать с ними как с демонами. То есть, запускаем:
start-stop-daemon --start --make-pidfile --pidfile /var/run/myservice.pid --exec /usr/bin/java — -jar myservice.jar

, и останавливаем:
start-stop-daemon --stop --quiet --oknodo --pidfile /var/run/myservice.pid

Команда --stop посылает JVM сигнал SIGTERM и сервис останавливается. Все как бы неплохо, JVM завершается в штатном порядке, если только вам не нужно выполнить по завершении работы сервиса какое-либо действие. Например явно освободить ресурс, или написать что-нибудь приятное в stdout.

Но все не так страшно, благо JVM начиная с 1.3.1 позволяет обрабатывать сигналы. За ответом как — под хабракат.
Читать дальше →

Вышел GlassFish v3

Время на прочтение1 мин
Охват и читатели3K
Одновременно с выходом NetBeans 6.8 состоялся выпуск финальной версии свободного (GPLv2 + CDDLv1.0) сервера приложений GlassFish v3. Позади остались более чем полтора года разработки и несколько «prelude»- и «preview»-релизов.

GlassFish v3 — первый сертифицированный сервер приложений, поддерживающий стандарт Java EE 6. Напомним, что недавно утвержденный стандарт Java EE 6 включает в себя:
  • enterprise-технологии: EJB 3.1, JPA 2.0, JDBC 4.0, CORBA 3.0;
  • Web-технологии: Servlet 3.0, JSP 2.2, JSTL 1.2, EL 2.2, JSF 2.0 (Facelets), RESTful web services;
  • вспомогательные технологии: Java Contexts and Dependency Injection (JCDI; ex-WebBeans), Bean Validation

Отличительными чертами собственно GlassFish v3 можно назвать:
  • микроядро на основе стандарта OSGi — обеспечивает старт сервера за считаные секунды;
  • Grizzly/Comet — поддержка неблокирующих обработчиков web-запросов и ответов на основе Java NIO и NIO.2
  • веб- и CLI-интерфейсы для управления и мониторинга;
  • веб-интерфейс Центра Обновлений, при помощи которого можно установить дополнительные, не входящие в основную поставку компоненты, такие как JRuby/Rails, Groovy/Grails, jMaki AJAX Framework, серверный JavaScript

Отныне именно GlassFish является официальной reference implementation (RI) для новых веб-технологий от Sun, переняв палочку эстафеты у Apache Tomcat. Также доступен корпоративный вариант Sun GlassFish Enterprise Server v3, отличающийся в первую очередь наличием Enterprise Manager — системы мониторинга и управления набором GlassFish-серверов. Заявлена поддержка средами разработки NetBeans 6.8, Eclipse 3.5.1 и IDEA 9.
Читать дальше →

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

Вышла NetBeans IDE 6.8

Время на прочтение1 мин
Охват и читатели988
С небольшим опозданием вышла новая версия популярной среды разработки с открытым исходным кодом NetBeans.

Некоторые из нововведений:
  • Поддержка Java EE 6;
  • Поддержка JavaFX 1.2.1, улучшены возможности редактирования .fx-файлов;
  • Новые возможности интеграции с kenai.com;
  • Полностью поддерживается PHP 5.3;
  • Поддержка Rails 2.3.4, усовершенствованный рефакторинг Ruby;
  • Улучшен профайлинг C/C++: определение утечек памяти, «узких мест»;


И многое другое…
качаем тут

Apache Maven — основы

Время на прочтение6 мин
Охват и читатели571K
После публикации топика о Maven в комментариях возникли вопросы о том, как начать с ним работать, с чего начать, как составлять файлы pom.xml, откуда брать плагины и т.п. Данный топик будет своего рода getting started или f.a.q.
Поехали!

boolean — боремся за Java память…

Время на прочтение2 мин
Охват и читатели37K
У Вас когда-либо случались такие ситуации, когда Ваше Java приложение трещит по швам? В моём случае это случилось из-за нехватки доступной оперативной памяти. И, естественно, обнаружилась нехватка в самый неподходящий момент: на носу очередной долгожданный релиз, один из серверов остановлен для обновления кода и данных и реинкарнация старого кода уже невозможна, в ближайшие дни запланировано несколько совещаний и собеседований, что сильно отвлекает от процесса оптимизации — в общем, ЧП не прошло незамеченным.

К слову сказать, сделай я правильный backup и экстренные работы по восстановлению жизнеспособности прошли бы гораздо более спокойно, но это была бы уже совсем другая история. Итак в моём распоряжении есть код, которому не хватает 15Gb оперативной памяти для нормального функционирования и очень длительный и дорогостоящий процесс запуска (около 5 часов), в ходе работы которого можно только сидеть со скрещенными пальцами и надеятся, что в этот раз заветные слова OutOfMemoryException не появятся в консоли удалённого сервера.
Не буду описывать всех ухищрений, которые пришлось проделать, чтобы восстановить остановленный сервер в течении трёх дней, но одним своим мини открытием поделюсь — boolean — это не тот тип данных, который Вы хотите использовать в высоконагруженных системах. Внимание вопрос:
Как Вы думаете, сколько памяти занимает boolean например на Ubuntu server x64?

Мой отчет по годовому изучению платформы Java EE

Время на прочтение6 мин
Охват и читатели119K
Этот пост – отчет по результатам годового изучения платформы Java EE.
Он будет полезен мне своей отчетностью. Может быть пост будет полезен тем читателям хабра, которые задумали учить Джаву.

подробности

Идея расширения модификаторов доступа

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

Проблема


Я — параноик. Кода я пишу код, я скрываю все переменные, методы и классы, которые только могу скрыть. Я стараюсь открыть лишь те методы и классы, которые необходимы.

Довольно часто, особенно при написании подсистем, скрыть те или иные методы и классы довольно непросто. Неприятности начинаются, кода подсистема достаточно большая, и для лучшей организации кода необходимо завести несколько под-пакетов.
Например, если есть класс com.system.InternalProperty, который используется и в com.system.persist.PropertyManager, и в com.system.network.PropertyUpdater, то InternalProperty должен быть объявлен public.

В этом посте я постараюсь рассказать о существующих решениях и предложить новую идею.

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

Делаем мэш-ап Twitter'а и Google Maps за 20 минут на Grails

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

Введение


Для многих разработчиков Java часто является синонимом ужасно занудных корпоративных приложений. Она ассоциируется с многочисленными конфигурационными файлами формата XML, шаблонным кодом и т.д. Поэтому как правило вместо нее разработчики используют динамические языки (такие как Ruby, Python, PHP) для разработки своих проектов, особенно для простых утилит, мэш-апов и т.п.

Однако в среде Java многое изменилось за последние несколько лет. Появилось много фрейморков освобождающих разрабочика от бремени корпоративных («энтерпрайзных») приложений. Grails вероятно — один из лучших. Он основан на Groovy, динамическом языке на платформе Java. Groovy создан специально для Java-программистов и переход на него максимально безболезненый. Grails используе хорошо известные, надежные и эффективные библиотеки Java (Spring, Hibernate и т.п.) для выполнения всей тяжелой работы. Существует также система плагинов и плагины для почти для всех широко используемых библиотек Java.

В этом посте я раскажу, как сделать мэш-ап из Twitter'а и Google Maps в течении всего 20 минут. Конечный результат будет выглядеть примерно следующим образом:
Geo Twitter Complete

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

RMI (Remote Method Invocation)

Время на прочтение5 мин
Охват и читатели89K
Случилось так, что поставленная задача требовала применения удалённого вызова методов. Порывшись на Хабре, ничего не нашел по данному вопросу (хотелось что-нибудь почитать в качестве первого знакомства, перед чтением документации). Изучив спецификации на java.sun.com спешу поделиться с вами своей первой статьей. :)

«Что такое RMI?»


Remote method Invocation — механизм, который позволяет вызывать метод удалённого объекта. Согласно ему, все операции по подготовке и передаче данных инкапсулируются в вызываемом методе клиентского объекта-заглушки (stub). Сам же вызов метода ничем не отличается от вызова метода обычного локального объекта, за небольшим исключением:
  • все параметры передаются по значению (т.е. копии объектов, а не ссылки на них, как это обычно происходит) — исправил ниже. Спасибо KonstantinSolomatov
  • локальные объекты передаются по значению (копии)
  • при передаче удалённого (Remote) объекта, если он экспортирован, передаётся stub этого объекта
  • передаваемые объекты должны быть Serializable
  • кроме всех прочих исключительных ситуаций, при вызове удалённого метода может возбуждаться исключение RemoteException (ошибки маршализации/демаршализации, передачи данных и другие возможные ошибки протокола)
Так же нужно отметить, что при вызове метода мы работаем с удалённым интерфейсом, а не с удалённым классом.

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

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