вторник, 16 декабря 2008 г.

Создаем веб-приложение на базе Tapestry в Eclipse WTP


Здравствуйте, уважаемые читатели. Суровый челябинский программист все еще жив, он по прежнему очень суровый и временами даже челябинский.

Сегодня мы поговорим о том, как развернуть простое Tapestry-приложение в эклипсе и как вообще работать в этой замечательной среде с Tapestry-фрэймворком.

Вообще есть плагин под эклипс для работы с Tapestry, но плагин очень старый, для 3й версии фреймворка. Соответственно, никаких преимуществ в его использовании я не вижу, поэтому работать будем без специальных tapestry-плагинов.

Начнем с того, что определимся с инструментарием. Итак, будем иметь:

  • Eclipse 3.4 (впрочем не принципиально, 3.2 и 3.3 тоже подойдут) с установленным WTP

  • Tapestry 5.0.15

  • Tomcat 6 (хотя работать будет и на 5-й версии)



Для тестового приложения я создаю отдельный воркспэйс. Также устанавливаю томкат, просто распаковывая zip-архив в отдельную папку (это под Windows). Папка с томкатом находится, естественно, вне воркспэйса.

вторник, 25 ноября 2008 г.

Интегратор vs Вендор


Бывают моменты когда перед человеком встают вопросы, которые можно отнести к философским. Например, куда идти работать - в интегратор или в вендор? Кто-то может дать ответ на этот вопрос сходу, кому-то же приходится долго и мучительно думать.

Так получилось, что сейчас я работаю в компании Naumen, которая совмещает эти две бизнес-модели. Мы являемся вендорами таких решений, как Naumen Service Desk (который кстати недавно прошел сертификацию на соответствие ITIL), Naumen Call Center и конечно же Naumen DMS (в группе разработки которого я и тружусь рук своих не покладая). Чем хорошо жить вендору? Он разрабатывает некую "коробку" и все силы разработчиков тратит только на это. Соответственно, внедрением этой "коробки" занимаются или его партнеры (не знаю была ли Майкрософт на этом пути первой, но успешность подхода очевидна), либо вообще сами клиенты. Цимес тут в том, что одну разработанную "коробку" можно продавать многократно.

Но у любой медали, как известно, две стороны. Минусами вендорства является то, что пока ты не разработал эту самую "коробку" тебе надо на что-то жить. Пока ты не вывел ее на рынок - тебе надо на чтото жить. Пока ты не оброс жирком, т.е. сетью партнеров, ну тут вы уже поняли... Выхода 2 - или привлечь венчурный капитал, или получать деньги с интеграторства.

среда, 29 октября 2008 г.

Включаем логирование в веб-приложении, основанном на Spring, через Log4j


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

Поэтому сегодня мы поговорим о двух вещах - о том, как подключить log4j к веб-приложению, основаному на Spring и как использовать эту библиотеку для того, чтобы посмотреть, что происходит внутри фреймворка.

Для того, чтобы подключить log4j к веб-приложению необходимо указать спрингу где лежит файл с настройками библиотеки. Для этого в дескриптор развертывания (web.xml) необходимо добавить строки, устанавливающие параметр сервлет-контекста log4jConfigLocation и подключить Log4jConfigListener. Выглядит все это примерно так:

    <context-param>

        <param-name>log4jConfigLocation</param-name>

        <param-value>/WEB-INF/log4j.properties</param-value>

    </context-param>

   

    <listener>

        <listener-class>

            org.springframework.web.util.Log4jConfigListener

        </listener-class>

    </listener>

 


После этого можно корректно использовать log4j в своих классах.

Если хочется посмотреть, что происходит в самом Spring фреймворке возникают сложности. Дело в том, что spring использует не log4j, а commons-logging. Но commons-logging обладает приятной особенностью - она позволяет делегировать логгирование log4j. Для такого делегирования необходимо в classpath приложения (в случае веб-приложения - в /WEB-INF/classes/) создать файл commons-logging.properties, содержащий следующую строку:

org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger


Ну и конечно же, нужно не забыть в log4j.properties указать нужный уровень логгирования для Spring, например такой:

log4j.logger.org.springframework=debug


Все, после этого можно увидеть много нового и интересного о том, как работает Spring-фреймворк.

Если есть вопросы или пожелания - прошу оставлять их в комментариях.

Понравилось сообщение - подпишись на блог

понедельник, 27 октября 2008 г.

Подключаем Hibernate Interceptor через Spring


Hibernate довольно интересный и кастомизируемый фреймворк. Одной из интересных его особенностей является возможность подключения так называемых интерцепторов - классов, реализующих интерфейс Interceptor, соответствующие методы которых будут вызываться до непосредственной работы с данными. Т.е. в интерцепторе можно изменять сгенерированные sql-запросы, поля у entity-объектов, вести учет колличества выполненных запросов, собирать статистику и делать другие не менее интересные вещи.

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

вторник, 15 июля 2008 г.

Тестируем Spring-приложение с помощью JUnit


В рамках разработки своей социальной сети решил освоить такую замечательную вещь как юнит-тесты. Точнее не столько освоить (с концепцией юнит-тестирования и базисом использования JUnit я знаком), сколько научиться повсеместно применять для тестирования многоуровневого Spring-приложения (DAO, сервисы, страницы и компоненты веб-интерфейса).

Соответственно в рамках данной задачи можно выделить такую проблему, как поднятие контекста Spring-приложения, т.е. создание всех бинов и естественно инъекцию зависимостей в них. После этого тестирующему коду должны стать доступны все необходимые зависимости, которые он и должен протестировать.

суббота, 12 июля 2008 г.

Совместное использование Tapestry и Spring


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

Впрочем выбор Java в качестве платформы для реализации приложения ставит перед нами еще одну проблему выбора - проблему выбора библиотек и фреймворков. Так как я имею опыт работы с Tapestry (не сильно большой, но все же) и этот опыт положительный, для реализации веб-части я выбрал именно данный фреймворк. Tapestry основан на IoC-контейнере Hivemind, но я отказался от его использования в пользу более мощного Spring. Почему Spring, а не например Guice? Потому что Spring позволяет не изобретать велосипед - определение источников данных, подключение Hibernate, AOP, управление транзакциями - это все есть в Spring (точно так же как и возможность определения Generic DAO, интерцепторов и многих других вкусностей). Собственно разобраться со Spring это тоже одна из целей моего проекта.

Так же не маловажную роль сыграл тот факт, что Spring поддерживается Tapestry "из коробки". А вот о том, как подключить Spring к Tapestry и инъектить эти бины на страницы и в компоненты, мы и поговорим.

пятница, 13 июня 2008 г.

Верстаем диплом в LaTeX: заключение - полезные мелочи


Пришла пора для последней статьи серии о верстке диплома в LaTeX. Сегодня мы поговорим о всяких мелочах, в то же время имеющих очень важное значение в глазах любого нормоконтролера. Ведь, как известно, вся наша жизнь складывается из мелочей.

Рассмотрим следующие моменты:
1. Верстка аннотации.
2. Добавление в оглавление разделов без номера (Введение, Заключение, Библиография)
3. Среднее тире в перечислениях (ненумерованых списках)
4. Использование арабских цифр для нумерованых списков, подавление точки после номера
5. Подавление точки после номера в списке литературы
6. Подчеркивание интернет-ссылок.

Итак, пожалуй начнем.

Верстаем диплом в LaTeX: таблицы


Сегодня суровый челябинский программист расскажет еще об одной (наверное самой сложной) составной части процедуры верстки диплома - о работе с таблицами.

Сначала разберемся, какие сложности возникают при работе с таблицами. Прежде всего -это длинные таблицы, т.е. таблицы, которые не помещаются на одну страницу. По хорошему нас не должно интересовать, поместится таблица на одну страницу или нет, наша задача - набрать правильное содержимое. К счастью, LaTeX сам может переносить строки таблицы на новую страницу, снабжать ее соответствующими подписями и комментариями. Надо лишь его настроить, чем мы и займемся.

четверг, 12 июня 2008 г.

Верстаем диплом в LaTeX: рисунки и подрисуночные надписи


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

  • Сам рисунок выравнивается по-центру

  • Подрисуночная надпись делается тем же шрифтом, что и основной текст

  • Подрисуночная надпись также выравнивается по центру

  • Подрисуночная надпись состоит из слова "Рисунок", номера рисунка, среднего тире и названия рисунка. Точка в конце названия НЕ ставится. Пример: Рисунок 1 - Сервисы программы Naumen DMS



понедельник, 9 июня 2008 г.

Верстаем диплом в LaTeX: шрифты и заголовки


Продолжаем серию статей о верстке диплома в LaTeX. Сегодня суровый челябинский программист расскажет о том, как правильно настроить шрифты и заголовки в LaTeX.

Итак, прежде всего определимся с тем, какие должны использоваться шрифты и как должны выглядеть заголовки. По стандартам ЮУрГУ (впрочем уверен что в других ВУЗах так же) шрифты должны быть следующими:

  • Основной текст - Times New Roman, 14й

  • Заголовки первого, второго, третьего уровней (а больше уровней и не допускается) - Arial, 16й

  • Оглавление (да, да, весь текст оглавления) - Arial, 16й



Замечу, что заголовки НЕ ДОЛЖНЫ выделяться жирным или курсивом, как и оглавление. Да, сразу скажу, слово "Аннотация" в аннотации это не заголовок.

воскресенье, 8 июня 2008 г.

Верстаем диплом в LaTeX: делаем рамки в соответствии с ГОСТ


Продолжаем серию статей о верстке диплома в LaTeX и сегодня поговорим о рамках и настройках страницы.

В состав пакета eskdpz входит класс G2-104-68, который и занимается отрисовкой рамок. Сами рамки находятся в файлах

- gost_frame1.eps - рамка для титульника, просто рамка
- gost_frame2.eps - рамка для аннотации, содержит штампик с названием и кодом проекта, литерой, номером страницы (3 или 4), числом страниц в проекте, названием ВУЗа и кафедры, а также подписями разработчика, руководителя, нормоконтролера и заведующего кафедрой.
- gost_frame3.eps - рамка для всех страниц проекта, содержит код проекта и номер страницы.

суббота, 7 июня 2008 г.

Верстаем диплом в LaTeX


Пришло время поделиться сакральным знанием и рассказать, как же все таки сделать ЭТО - сверстать диплом в замечательной среде LaTeX.

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

С философией покончено, переходим к практике. Перед нами стоит задача: сверстать диплом так, чтобы он понравился нормоконтролеру. В качестве средства мы выбираем LaTeX и приступаем.

пятница, 9 мая 2008 г.

Развивая тему Guice: прикручиваем Velocity с помощью Guice.


Данный пост написан не с целью развития холивара на тему, что лучше Velocity или JSP, но здесь я хочу продемонстрировать как можно подключать такой удобный шаблонный движок, как Velocity к приложению, построенному на базе Guice.

О том, что такое Velocity и многих аспектах его использования можно почитать на форуме программистов и конечно же официальной странице проекта.

пятница, 2 мая 2008 г.

Строим сервлеты на базе Guice


Компания google - основной разработчик IoC контейнера GUICE позиционирует его как легковесное решение для построения Java-приложений различных типов, в том числе и веб-приложений. Для этого существует пакет com.google.inject.servlet, о котором мы сегодня и поговорим.

Прежде всего хочу отметить тот факт, что снапшот guice-servlet в SVN и пакет, включенный в guice 1.0 отличаются - версия в SVN имеет более расширенный функционал. В частности - базовый сервлет, обеспечивающий инъекцию зависимостей и контекст-листенер, обеспечивающий подключение Guice.Injector. Поэтому для примеров в данном посте я использовал версию из SVN.

среда, 23 апреля 2008 г.

Пишем плагинную шину с использованием Guice


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

Сегодня мы поговорим о реализации примитивной плагинной шины с помощью IoC-контейнера от гугл - Guice. Реализация плагинной шины с помощью IoC-контейнера дает нам все преимущества паттерна Inversion Of Control. Мы легко можем реализовывать с использованием этого паттерна как базовые какие-то механизмы (API приложения, доступное плагинам), так и сами плагины, что очень удобно. Так-же использование Guice облегчает сам процесс подключения плагинов к системе, как именно - об этом поговорим чуть позже.

воскресенье, 6 апреля 2008 г.

Знакомимся: Guice - IoC контейнер от Google


Перед любым проектировщиком и/или разработчиком более-менее сложного приложения встает вопрос: "Как уменьшить связность кода?" Собственно, уже давно ни для кого не секрет, что излишняя связность кода приложения - верный путь к увеличению энтропии и сложности поддержки. Особенно, если код криво написан, что, к сожалению, не редкость.

Одним из наиболее популярных (на мой взгляд - лучших) способов уменьшения связности кода является использование паттерна Inversion Of Control (Инверсия управления). Очень часто данный паттерн описывают основным правилом Голливуда: "не звони мне, я сам тебе позвоню". При всей философичности данного описания оно является правильным.

Без философии же данный паттерн описывается следующим образом: взаимодействовать должны не реализации (классы), а абстракции (интерфейсы). Не должно быть такого (без фанатизма конечно же), когда класс зависит от класса. Классы должны зависить от интерфейсов. Возникает вопрос - когда создавать инстансы интерфейсов, ведь понятно, что в рантайме интерфейсов не будет, а будут классы. Так вот, вся прелесть IoC проявляется именно в этом. Вы в одном месте описываете правила, по которым будут созданы объекты для реализации интерфейсов. Остальное за вас сделает используемая IoC-подсистема, в частности - IoC-контейнер.

среда, 12 марта 2008 г.

Интероперабельный веб-сервис с использованием XFire, Spring и Hibernate

В рамках проходящей в Южно-Уральском государственном университете конференции "ITFest" был проведен эксперимент по интеграции приложений написаных на Java и .NET. Единственный способ интеграции столь разнородных платформ - веб-сервисы. Соответственно был написан веб-сервис на Java и клиент к нему на .NET. Собственно о веб-сервисе, написаном на Java и хочется поговорить.

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

суббота, 19 января 2008 г.

Возвращаемся к истокам: LaTeX


Давно - давно, горячей зимой 2005-го, когда учился на третьем курсе - фанател я FreeBSD и держал ее в качестве единой ОС на своем компе. Проблема оформления курсовых, лаб и прочей учебной чухни (а их было ох как не мало...) решалась с помощью замечательной издательской системы LaTeX, а точнее ее реинкарнации под названием teTeX.

Была куча наработок, в том числе и свой пакет стилей для оформления курсачей в соответствии с СТП ЮУрГУ.

Вчера под давлением оформления курсовой работы по ТАУ решил, что ворд дико сливает при наборе текста со множеством формул и поставил себе замечательную штуку - MiKTeX.

пятница, 11 января 2008 г.

Пишем свой загручик java-классов

Продолжаю изучать как устроена и работает Java-машина. Тем более что при приеме на работу очень любят спрашивать различные тонкости и вкустности. В одной из предыдущих заметок я уже писал про то, как создаются объекты в Java. Пришло время разобраться из чего они создаются.