Внедрение зависимостей с помощью Guice

Внедрение зависимостей с помощью Guice

Guice — это инфраструктура для внедрения или инъекции зависимостей (dependency injection или сокращенно DI). Я уже несколько лет являюсь активным сторонником использования DI, потому что это улучшает сопровождаемость, тестируемость и гибкость кода. Наблюдая за тем, как разработчики реагируют на Guice, я понял, что лучший способ убедить программиста начать применять новую технологию — сделать ее по-настоящему простой. Guice действительно предельно упрощает DI, и в результате этот подход получил в Google широкое распространение. Я надеюсь, что эта статья поможет сделать и ваше изучение Guice по-настоящему простым.
Для обзора, а не для споров

Guice — далеко не первая DI-инфраструктура. Есть целое множество замечательных инфраструктур (В разделе Ресурсы есть ссылка на страничку сайта PicoContainer, — одной из таких инфраструктур, — где рассказывается об истории развития и взаимоотношениях различных инфраструктур. Позднее появление Guice породило дискуссии о том, какая из существующих инфраструктур лучше и о том, нужна ли вообще еще одна DI-инфраструктура. Как при любом выборе технологии, каждая библиотека имеет свои плюсы и минусы. На мой взгляд, Guice содержит важные нововведения, но в этой статье я не буду ввязываться в споры, а сделаю обзор возможностей Guice. (В Интернете можно найти множество оживленных дискуссий, поискав по словам «guice vs spring».)

Java. Создание и сборка проектов с помощью Maven на примере Web-проекта

Java. Создание и сборка проектов с помощью Maven на примере Web-проекта

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

Рассмотрим, как с помощью maven можно создать и собрать проект.
В качестве примера возьмем пример Web-приложения имеющего 2 модуля, собственно сам WEB-проект (SimpleWEB) и модуль (SimpleLogic), в котором будет находиться логика.

Первое, что нам нужно сделать, это настроить maven. Полную инструкцию можно прочитать на сайте maven. Краткое описание:
Скачаваем дистрибутив с сайта maven. В нашем примере, версия 2.0.9.
Распаковываем на диск, например в c:\tools\apache-maven (в дальнейшем, ${maven.home})

Создание Web-сервиса в Java

Создание Web-сервиса в Java

Рассмотрим пример создания простого WEB-сервиса. Инструментов для создания WEB-сервисов в Java достаточно много, мы же будем использовать XFire. XFire — это Java SOAP фреймфорк, быстрый, расширяемый и т.д. Что для нас сейчас важно, так это то, что создать WEB-сервис «с нуля» можно достаточно просто.
Наш WEB-сервис будет совсем простой, а именно, будет иметь один метод без параметров и возвращать строку, например, «Привет — это WEB-сервис»
Для начало нужно подготовить инфраструктуру проектов, как описано в предыдущей статье -«Создание проектов с помощью maven».
Определим интерфейс (HelloService) и реализацию (HelloServiceImpl) сервиса в проекте SimpleLogic, разместим их в пакете com.dom.ws

Путеводитель по Scala для Java-разработчиков: Часть 2. Cоздание калькулятора

Путеводитель по Scala для Java-разработчиков: Часть 2. Cоздание калькулятора

На настоящий момент ситуация выглядит следующим образом: в процессе создания DSL (в нашем случае – простого языка арифметических выражений) мы определили структуру AST со следующими типами вершин:
бинарные операторы сложения, вычитания, умножения и деления;
унарный оператор смены знака (отрицания);
числовые константы.

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

При этом код интерпретатора выглядит следующим образом

Пример приложения: The RideSynergy

Пример приложения: The RideSynergy

В этом разделе приводится несколько примеров упрощенных моделей программирования в Java EE 5, помогающих повысить производительность разработчика. Из примеров можно увидеть, как эти модели позволяют быстро разработать приложение, содержащее конечную точку для Web-сервиса и клиент, используя EJB для бизнес-логики и JSF для разработки Web-интерфейса.
Java EE 5 на WAS CE 2.0

WebSphere® Application Server, Community Edition (WAS CE) версия 2.0 сертифицирована для Java EE 5. По этой ссылке можно узнать больше о WAS CE и скачать его бесплатно.

Java EE 5: Мощь и производительность при меньшей сложности

Java EE 5: Мощь и производительность при меньшей сложности

Технология Java EE является расширением языковой платформы Java, которое позволяет создавать масштабируемые, мощные и переносимые корпоративные приложения. В ней определено четыре типа контейнеров для компонентов приложения: Web, Enterprise JavaBean (EJB), клиентские приложения и аплеты. Эти контейнеры и поддерживаемые ими Java API подробно описаны в спецификации сервера приложений, что создает и поддерживает конкуренцию на рынке продуктов Java EE, гарантируя при этом серверную переносимость для приложений, которые придерживаются спецификации (см. врезку Краткая история Java EE).

Последняя версия платформы, Java EE 5, была выпущена в мае 2006 года. Сосредоточенная в первую очередь на производительности разработчика, Java EE 5 предоставляет простую модель программирования без ущерба для мощности и функциональности платформы. Упрощение моделей разработки обеспечивают по большей части два механизма — аннотации Java и разумные значения по умолчанию. Важнейшие функциональные усовершенствования включают расширение поддержки Web-сервисов, а также включение в платформу JavaServer Faces (JSF) и стандартной библиотеки тегов Java (JSTL — Java Standard Tag Library).
Краткая история Java EE

Grester облегчает JUnit-тестирование Java-приложений

Grester облегчает JUnit-тестирование Java-приложений

Jester, созданный Айвеном Муром (Ivan Moore), представляет собой превосходный инструмент, который тестирует unit-тесты, написанные программистами и разработчиками. Он основан на предположении, что в коде может существовать множество мест, содержащих операторы условных переходов, циклов и выбора, а также мест, в которых цикломатическая сложность классов в целом может резко возрастать или увеличиваться из-за множества возможных путей исполнения. Jester сосредоточен именно на таких участках кода. Но для его работы требуется хорошо отформатированный classpath к различным ресурсам.

Grester, который представляет собой оболочку Apache Maven вокруг Jester, упрощает рутинную работу по созданию classpath Java™ с учетом зависимостей проекта, облегчая тестирование с применением Jester. Кроме этого, Grester пытается реализовать некоторые преимущества Maven, который лежит в основе его инфраструктуры. Jester чрезвычайно полезен в качестве дополнительного средства проверки кода, написанного без учета требований разработки через тестирование. Это могут быть старые программы или код, недавно написанный программистами, которые считают методы разработки через тестирование, входящие в концепцию гибкой разработки ПО (Agile software development), слишком грубыми в качестве исходного принципа написания качественного кода.

Нетривиальные возможности Java

Нетривиальные возможности Java

Java — язык простой. И после года активного использования для Вас не остаётся секретов. Совершенно случайно я обнаружил, что на stackoverfow люди решили поделиться скрытыми возможностями (Hidden Features of Java). Вышло очень занимательно, получился своеобразный рейтинг нетривиальных возможностей, который я далее запротоколирую в вольном переводе на русский.

double brace

С большим отрывом лидирует «double brace», уже обсуждавшийся ранее в статье Эффект «double brace» by zeroed. Подробное описание метода —
http://www.c2.com/cgi/wiki?DoubleBraceInitialization
несомненно это самое забавное и неочевидное из списка. Однако как уже отмечалось, метод имеет свои минусы в виде анонимного класса на каждое использование этого метода. А также невозможности использования метода equals () для подобных объектов.

Работа с Grails: Cоздание первого Grails-приложения

Работа с Grails: Cоздание первого Grails-приложения

Знакомство с Grails я начну с другой бесплатной инфраструктуры для разработки Web-приложений: Ruby on Rails. Когда Rails появился, он увлек множество разработчиков. Возможности скаффолдинга, заложенные в Rails, позволяли запустить новый проект за меньшее время, чем раньше. Идея «соглашений по конфигурации» (convention over configuration), лежащая в основе Rails, позволяет приложению «собирать» себя самому, основываясь на разумных схемах именования, а не на громоздких и подверженных ошибкам конфигурационных XML-файлах. Возможности метапрограммирования Ruby позволяют объектам «магически» наследовать методы и поля, которые им требуются во время работы, без загромождения исходного кода.

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

Оптимизация производительности Java в AIX: Часть 4. Устранение узких мест ввода/вывода и сети

Оптимизация производительности Java в AIX: Часть 4. Устранение узких мест ввода/вывода и сети

Это четвертая статья из серии статей о настройке производительности Java на AIX, состоящей из пяти частей. Прежде чем продолжить чтение этой статьи, настоятельно рекомендуется еще раз просмотреть предыдущие статьи этой серии.

В этой статье рассказывается еще о двух областях, которые могут стать узким местом в производительности:
сеть;
дисковый ввод/вывод (I/O).

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