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, поэтому в этой статье, в отличие от двух предыдущих (второй и третьей частей), основное внимание уделяется тому, как получить информацию, требующуюся для процесса настройки. В этой статье содержится всего лишь несколько советов, но общее обсуждение эффективности инструментов в сочетании с этими советами даст достаточно информации для настройки производительности.

Использование Spring и Websphere MQ в Java приложениях

Использование Spring и Websphere MQ в Java приложениях

Spring (Spring Framework) — open source фреймворк для разработки приложений на Java.

IBM Websphere MQ (MQSeries) — коммерческий продукт всем известной компании IBM для обмена сообщениями.

Данный текст в основном предназначен для разработчиков приложений на базе Spring и интересующимися асинхронными средствами обмена.

Будем рассматривать отправку и прием сообщений из Websphere MQ средствами Spring-Jms.

Применение XStream для сериализации Java-объектов в XML

Применение XStream для сериализации Java-объектов в XML

XStream позволяет сериализовать большинство Java-объектов без всякого отображения. При этом имена элементов соответствуют именам объектов, а содержимое элементов – строковому представлению объектов. XStream способна сериализать объекты классов, не реализующих интерфейс Serializable. XStream представляет собой средство для сериализации объектов, а не связывания с данными, поэтому ее возможности не включают генерацию классов на основании документов XML или схем XML (XML Schema).

XStream обладает тремя свойствами, отличающими ее от любой другой библиотеки для сериализации.
Видимость полей класса не играет роли в процессе сериализации/десериализации.
Для сериализации/десериализации класса не требуется наличие get/set-методов для полей.
Для сериализации/десериализации класса не требуется наличие конструктора по умолчанию.

Компиляция исходного кода Java в объектах CharSequence

Компиляция исходного кода Java в объектах CharSequence

В этом разделе будет сконструирован фасад для класса javax.tools.JavaCompiler. Класс javaxtools.compiler.CharSequenceCompiler (см. Загрузка) может компилировать исходный код Java в любых объектах java.lang.CharSequence (таких как String, StringBuffer и StringBuilder), возвращая объект типа Class. Класс CharSequenceCompiler имеет следующий API:
public CharSequenceCompiler(ClassLoader loader, Iterable options): Этот конструктор принимает объект типа ClassLoader, который передается компилятору Java, позволяя ему находить зависимые классы. Параметр типа Iterable позволяет клиенту передать дополнительные параметры компилятора, которые соответствуют опциям компилятора javac.

Компиляция Java: принципы и реализация

Компиляция Java: принципы и реализация

Для понимания пакета javax.tools полезно ознакомиться с принципами компиляции в Java и тем, как они реализуются в пакете. Пакет javax.tools предоставляет абстракции для всех этих концепций в общем виде, что позволяет вводить исходный код из различных объектов-источников, а не только из файловой системы.

Компиляция исходного кода требует следующих компонентов:
Объект (переменная) classpath (путь к классам), через которую компилятор может найти классы библиотек. Объект classpath для компилятора обычно состоит из упорядоченного списка каталогов файлов системы и архивных файлов (JAR или ZIP), которые содержат уже скомпилированные .class файлы. Объект classpath реализуется объектом типа JavaFileManager, который управляет множество объектов JavaFileObject со скомпилированными классами и исходным кодом и объекта типа ClassLoader, передаваемым в конструктор JavaFileManager. JavaFileObject это потомок FileObject, специализированный с помощью одного из вариантов значения перечисляемого типа (enum) JavaFileObject.Kind, полезного для компилятора:
SOURCE (исходный код)

Создание динамических приложений с помощью javax.tools

Создание динамических приложений с помощью javax.tools

Пакет javax.tools, добавленный в Java SE 6 как стандартный API для компиляции исходного кода Java, позволяет добавлять динамическую функциональность для расширения статических приложений. Эта статья представляет обзор основных классов пакета и показывает, как использовать их для компиляции исходного кода Java из Java-объектов String, StringBuffer или CharSequence вместо файлов. Затем этот фасад используется для построения интерактивного приложения для построения графиков, которое позволяет пользователю задать числовую функцию y = f(x) с помощью любого правильного числового Java-выражения. В конце обсуждаются возможные угрозы безопасности, связанные с динамической компиляцией исходного кода, и способы для устранения этих рисков.

Генерация Web-приложений на основе J2EE и Ajax при помощи jpa2web

Генерация Web-приложений на основе J2EE и Ajax при помощи jpa2web

С появлением готовых средств, таких как Hibernate (см. Ресурсы), был сделан громадный шаг в направлении нивелирования противоречий между Java-объектами и их представлением в базе данных. Это особенно касается той легкости, с которой может описываться сохранение объектов путем добавления аннотаций к соответствующим классам. Это освобождает разработчиков от утомительной работы по сохранению и восстановлению объектов из базы данных. Данные проблемы берет на себя Hibernate, однако, разработчикам по-прежнему приходится создавать Web-страницы для отображения объектов. Типичным сценарием создания Web-приложения среднего уровня может быть следующий: сначала разработчик создает набор простых Java-классов (Plain Old Java Objects – POJO) для представления модели предметной области. Затем начинается работа над транзакциями и Web-интерфейсом. При этом часть объектов модели не содержит транзакционных данных. Клиенты, страны, адреса, сотрудники и компании – это типичные примеры объектов модели, которые участвуют лишь в небольшом числе операций.