ru.java на livejournal

Декабрь 29, 2011

 

Видео материалы Юрия Ткача:JAVA для тестировщиков, JEE технологии...

На minus.com залиты видео материалы Юрия Ткача:
1. JAVA для тестировщиков - видео курс уже есть в ютубе и на торренте, залитое было выпилено с ютуба. Компания, в которой я работаю, решила повысить уровень квалификации некоторых своих сотрудников, а именно тех, что работают в области тестирования программного обеспечения, а также проектных менеджеров, и предложила провести для них курсы по языку программирования Java. Для них Java необходима по разным причинам, но в основном, потому что они не могут выполнять некоторые задачи в рамках работы над проектами, в которых используется Java. Основная цель - научиться понимать Java-код и писать несложные Unit-тесты. Т.е. стать полноценными программистами от них никто не требует. Так как они все технически подкованы и большинство имеют опыт программирования на Visual Basic, то предполагается, что разобраться с Java до начально-продвинутого уровня им будет под силу. И вот вспомнив о моем опыте преподавания, компания предложила мне провести такие курсы для небольшой группы из 10 человек...

466.7 MB
Посмотреть/Скачать
_
__________________________________________________________________
263.2 MB
Посмотреть/Скачать
___________________________________________________________________
851.8 MB
___________________________________________________________________
Урок 8 - Eclipse IDE - Java для тестировщиков.mp4
343.9 MB
___________________________________________________________________
836.2 MB
Посмотреть/Скачать
___________________________________________________________________

___________________________________________________________________
995.1 MB
Посмотреть/Скачать
___________________________________________________________________
653.9 MB
Посмотреть/Скачать
___________________________________________________________________
652.9 MB
Посмотреть/Скачать
___________________________________________________________________
759.6 MB
Посмотреть/Скачать
___________________________________________________________________
722.5 MB
Посмотреть/Скачать
___________________________________________________________________
721.7 MB
Посмотреть/Скачать
___________________________________________________________________

2. JEE Технологии проектирования программных систем
 которые также есть в ютубе Аннотация
Юрия Ткача 
Работая преподавателем в Черниговском государственном технологическом университете на кафедре Информационных и компьютерных систем, я читал курс лекций по предмету ТППС (Технологии проектирования программных систем). В основном я старался делать упор на проектирование систем, рассказывая про разные шаблоны, подходы, многослойную архитектуру и т.п. Материал свой я основывал на замечательной книге Мартина Фаулера "Архитектура корпоративных программных приложений".

Однако, без рассказа о технологиях, которые применяются для создания систем уровня предприятия, этот курс был бы не таким интересным. Весь курс основывался на технологиях J2EE и связанными с ними, и поэтому включал в себя такие темы как Spring, AOP, JPA, Hibernate, JSF.



Примечание поповоду отсутсвия 1х 4х лекций
Yuriy Tkach said...

К сожалению, такой возможности нет, так как первые 4 лекции не записывались на видео. Записывать лекции я начал только с 5-ой лекции.

January 24, 2011 4:01 PMYuriy Tkach said...

Первая лекция - это просто вступление в курс - там ничего интересного. Слайды к следующим лекциям можно посмотреть тут: Лекция 2Лекция 3Лекция 4,

January 24, 2011 4:43 PM


138.2 MB
________________________________________
________________________________________
ТППС. Лекция 7. АОП.flv
183.8 MB
________________________________________
223.3 MB
________________________________________
,

Java на habrahabr

Декабрь 6, 2011

 

JAVA / [Опрос] Какие библиотеки компонент вы бы использовали на старте нового JSF проекта?

ru.java на livejournal

Октябрь 7, 2011

 

Вопросы по отправке form сервлету Spring MVC

Пытаюсь реализовать табличный ввод на веб-странице. Нужно будет отправлять в сервлет данные "таблицы" произвольной высоты. Количество колонок фиксировано. Сделал так:
JSP:
                <form:form name="tabtext" method="post" action="index.html"   >
                    <p>Введите:</p>
                    <table>
                        <tr>
                            <td><input type="file" name="column1" size="24" /></td>
                            <td><input type="text" name="column2" size="24" /></td>
                            <td><input type="checkbox" name="column3" /></td>
                        </tr>
                        <tr>
                            <td><input type="file" name="column1" size="24" /></td>
                            <td><input type="text" name="column2" size="24" /></td>
                            <td><input type="checkbox" name="column3" /></td>
                        </tr>
                    </table>
                    <input type="submit" id="sendbtn" value="Отправить" />
                </form:form>

- в JSP с помощью JavaScript могу удалять и добавлять куски <tr>...</tr>, т.е. количество строк может быть произвольным..
Поскольку в колонках таблицы у соответствующих input-ов одинаковый name, то данные получаю в сервлете в виде массивов с соответствующими именами.
Вот как это делается у меня:

    @RequestMapping(value = "/index", method = RequestMethod.POST)
    public ModelAndView getInputText(
                        @RequestParam("column1") String[] column1,
                        @RequestParam("column2") String[] column2,
                        @RequestParam("column3") String[] column3) {
        //  TODO
    }

И тут возникает 2 проблемы, которые я пока не придумал как решить без использования костылей..

1. Имена файлов приезжают без пути. А мне обязательно нужен полный путь и имя файла! Потому что в дальнейшем это имя будет использоваться в апплете. Как же всё-таки передавато полное имя файла?

2. column3 у нас соответствуют чекбоксы. Но в массиве я получаю только включенные чекбоксы, а не все. Например, если в таблице 3 строки, а включены только первый  и третий чекбокс, то результирующий массив не из 3, а из двух элементов "on". Соответственно, при разборе массива не удастся это сопоставить их column1 - поди разбериьс к какой именно строке относя включенные чекбоксы. А можно как-то передавать и "on" и "off"? Чтобы в массиве таки были все 3 значения column3.

Подозреваю, что и то и другое можно пофиксить с помощью hidden полей, куда жабаскриптом подставлять всё, что мне нужно.. (Gjrf yt ghjdthzk)/ Но что-то пока надеюсь на наличие стандартных методов решения моих проблем..
Помогите, пожалуйста, разобраться!

ru.java на livejournal

Сентябрь 24, 2011

 

Веб-фреймворк

В свободное время потихоньку пилю свой фреймворк. По сути, в общем и целом ничего нового там нет. Но я предлагаю свой взгляд на некоторые моменты, прежде всего обусловленный моими собственными тараканами. Например, я панически боюсь всего, что напоминает динамическую типизацию и потому вместо строк у меня повсюду интерфейсы. В принципе, можно проводить какие-то параллели с Spring MVC, но Spring монструозен и требует на каждый чих писать много XML, мой фреймворк ведёт себя попроще. И да, я решил, что раз уж велосипедить, то велосипедить по полной, потому многие компоненты я сам же и написал, вместо того, чтобы взять готовый. Но никто не мешает прикрутить что-то готовое к фреймворку - всё-таки модульность какая-никакая есть. Можно, наоборот, использовать компоненты фреймворка отдельно от него.

Если проект кого-то заинтересует, готов писать более развёрнутые посты. А пока не вижу смысл дублировать здесь свой туториал, его можно почитать на google code (раз и два). Так же я работаю над созданием вики-движка на основе фреймворка.

Java на habrahabr

Сентябрь 17, 2011

 

JAVA / Модульное веб-приложение с использованием CGLib


Вступление


В процессе разработки одного из проектов мы достигли той точки, когда новый функционал так или иначе задевает старый.
Каскадные изменения десятка файлов ради нескольких новых кнопочек на форме — что может быть ужасней?
На общем собрании команды было принято волевое решение — переписать!
Была разработана модульная структура, которая позволяет добавлять функционал в виде отдельных модулей, не трогая при этом ни ядро, ни другие подсистемы, с возможностью hook ( aka callback )-функций, для реализации различной пре- или пост- обработки.
Итак, базовый набор:
Apache Tomcat 7.0.21, Hibernate 3, CGLib 2, JSF 2.0

ru.java на livejournal

Август 30, 2011

 

Доступ к локальным данным на компе пользователя из веб-приложения.

Пишу не шпионскую программу и не троян. ))
Разрабатываем приложение на Spring MVC.
И всё шло хорошо.. Пока заказчику не понадобилось загружатьть файлы на сервер с клиента и перед этим их обрабатывать. То есть нужен доступ к локальным файлам и возможно реестру Windows на компьютере пользователя из веб-приложения.
Первое, что пришло в голову - апплеты. Но это требует наличия установленного JRE, причем подходящей версии и будут постоянные "глупые вопросы" от локальной системы безопасности. Гемор, я считаю!
А какие альтернативы? Flash? Flex? А что такое Spring BlazeDS?
Короткое гугление не привело к пониманию, можно ли решить данную задачу с использованием этих технологий.. ((
Если не трудно, друзья, "наставьте на путь истинный"!

Java на habrahabr

Май 20, 2011

 

JAVA / Сервлеты — маленький трюк с Reflection

Задача:


Необходимо написать сервлет, который содержит кучу методов, имена которых совпадает с URL.
Например, у нас 3 URL адреса:

myhost/userservice/registration
myhost/userservice/login
myhost/userservice/anotherAction


которые обрабатывает сервлет UserServiceServlet, вот так:

ru.java на livejournal

Май 3, 2011

 

AOP на примере JSF 2 приложения

В этой статье я познакомлю читателей с аспектно-ориентированным программирование на примере JSF 2 приложения.

AOP (Аспектно-ориентированное программирование) является одной из самых интересных парадигм абстрактной разработки с тех пор, как была разработана объектно-ориентированная. Как и объектно-ориентированное программирование, AOP позволяет разделять и повторно использовать код, однако расширяя эти возможности во многих областях программы, где это либо сложно, либо не возможно при объектно-ориентированном программировании. Как правило, эти области называют взаимно пересекающимися блоками (cross cutting concerns). Хорошим примером применения взаимно пересекающихся блоков можно назвать периодически повторяющийся код, например, для сбора статистики, трассировки приложения, управления соединениями с базой данных, удаленными соединениями, и др. Используя AOP, эти элементы могут быть выделены из каждого метода и применены через AOP, используя pointcut'ы. Pointcut — это код применимости аспекта, который отвечает на вопросы где (в каких точках соединения (join point)) может быть применена функциональность данного аспекта, которая задаётся с помощью советов (advice). В роли точки соединения может выступать поле класса, конструктор, либо метод. Аспект (aspect) – это набор некоторой сквозной функциональности (периодически повторяющийся код), нацеленный на решение конкретной задачи (сбора статистики, трассировки приложения, управления соединениями с базой данных и т.д.). С помощью совета (advice) можно контролировать изменение полей классов, когда они будут вызываться, вести журнал трассировки вызовов, статистику, выбрасывать исключения, обходить прерванный метод (при возникновении исключительной ситуации) и др. Также стоит заметить, что в контексте ООП сквозной функциональностью можно назвать функциональность, по которой не была проведена декомпозиция.

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

Далее в статье будет рассматриваться библиотека AspectJ™ 5, при работе с которой в Eclipse лучше использовать этот плагин, а для NetBeans - этот.

Чаще встречаются следующие типы pointcut'ов:

Тип pointcut'а Описание
execution(void SomeClass.someMethod(..)) Выполнение метода someMethod в классе SomeClass
call(void SomeClass.someMethod(..)) Вызов метода someMethod в классе SomeClass
handler(IOException) Pointcut для обработки исключительной ситуации IOException
this(SomeType) Текущий объект, который принадлежит типу SomeType
target(SomeType) Объект назначения, который принадлежит типу SomeType
within(SomeClass) Выполняемый код, который принадлежит классу SomeClass
withincode(*SomeClass.someMethod(..)) Выполняемый код над методом по стеку вызовов из метода someMethod, который принадлежит классу SomeClass
args(*, int) любая точка соединения, где есть два аргумента, второй из которых типа int
@this(SomeAnnotation) Текущий объект, который имеет аннотацию типа SomeAnnotation
@target(SomeAnnotation) Объект назначения, который имеет аннотацию типа SomeAnnotation
@within(SomeAnnotation) Выполняемый код над типом, имеет аннотацию типа SomeAnnotation
@withincode(SomeAnnotation) Выполняемый код над методом либо конструктором, который имеет аннотацию типа SomeAnnotation
@args(SomeAnnotation) любая точка соединения, где есть один аргумент, который имеет аннотацию типа SomeAnnotation

Чаще встречаются следующие типы advice'ов:

Тип advice'а Описание
@Before("get(someType SomeClass.someField)") Выполнение определенного действия до вызова чтения поля someField класса SomeClass
@AfterReturning("call(someType SomeClass.someMethod(someType))") Выполнение определенного действия после вызова возвращения результата (выполниттся только при нормальном завершении метода (без исключения)) из метода someMethod класса SomeClass
@AfterThrowing("call(someType SomeClass.someMethod(someType))") Выполнение определенного действия после возникновения исключения при выполнении метода someMethod класса SomeClass
@After("call(someType SomeClass.someMethod(someType))") Выполнение определенного действия после вызова выполнения метода someMethod класса SomeClass
@Around("call(someType SomeClass.someMethod(someType))") Выполнение определенного действия вместо вызова выполнения метода someMethod класса SomeClass. В теле для их выполнения можно воспользоваться proceedingJoinPoint.proceed()

Логические операции pointcut'ов:

Логическая операция Описание
&& Логическое объединение двух pointcut'ов с помощью операции AND
|| Логическое объединение двух pointcut'ов с помощью операции OR
! Логическое отрицание pointcut'а

Групповые символы (wildcards) pointcut'ов:

Групповой символ Описание
* Удовлетворяет любому числу символов, как части шаблона
.. При определении пакета удовлетворяет любому количеству дочерних пакетов. Например: com.demo..* – означает, что в любом подпакете пакета com.demo. В определении аргумента удовлетворяет любому количеству аргументов. Например: call(void SomeClass.someMethod(..)) - удовлетворяет вызову из класса SomeClass метода someMethod с любым количеством аргументов, который возвращает тип void
+ При определении класса, добавленный как приставка, удовлетворяет всем подклассам данного класса. Например: handler(Exception+) – означает, что pointcut будет удовлетворять условию обработки исключений для всех подклассов класса Exception

AOP на примере вызова (call) и выполнения (execution) метода показано ниже в виде рисунка, на котором с помощью толстой линии показан вызов метода, тогда как возвращение результата/исключение - пунктирной линией:

В библиотеки AspectJ™ 5 можно определять pointcut как внутри advice'а (@Before("get(someType SomeClass.someField)")), так и отдельным методом (@Pointcut("execution(void SomeClass.someMethod(..))")).

Графически пример применения AOP на базе библиотеки AspectJ™ 5 можно показать следующим образом:

Из рисунка видно, что у нас определён аспект TraceAspect, у которого есть два pointcut'а: loggableTypePointcut – используется для трассировки в случае, если аннотация @Loggable стоит над классом; loggableMethodPointcut - используется для трассировки в случае, если аннотация @Loggable стоит над методом или конструктором. Также есть два advice метода: public Object log(ProceedingJoinPoint proceedingJoinPoint) throws Throwable – отвечает за обработку действий до и после метода; public void log(Throwable t) – отвечает за обработку исключительной ситуации после её возникновения. Из данного примера advice методы работают исключительно в контексте вызовов методов и/или классов, помеченных аннотацией @Loggable, по соответствующим pointcut'ам.

Рабочий пример проекта с использованием AOP (реализована трассировка вызовов) можно скачать здесь. Для того, чтобы можно было запустить данное приложение, нам необходимо:

  • Java SDK
  • Maven
  • По отношению к предыдущему примеру приложения, который был приложен к прошлой статье, в этом сделаны следующие изменения:

    • Добавлена поддержка AOP (при компиляции проекта используется плагин aspectj-maven-plugin)
    • Добавлена локализация валидаторов, которые указываются через аннотации над полями POJO классов
    • Добавлены юнит-тесты
    • Улучшен код

    Статью на русском языке по AOP можно посмотреть здесь. Презентацию по AOP можно скачать здесь. Reference Card к библиотеки AspectJ™ 5 можно скачать здесь.

    Для тех, кто всё же заинтересовался технологией JSF 2, хотелось бы обратить внимание на одно из лучших обучающих руководств для быстрого и качественного вхождения в понимания и работу технологии. Это руководство можно посмотреть здесь. Много нестандартных ситуаций, с которыми можно столкнуться при работе с JSF 2, хорошо описаны здесь. Другие, не менее достойные, источники приведены в предыдущих моих статьях (первая и вторая).

    Благодарю за внимание.

    Литература

  • http://en.wikipedia.org/wiki/Aspect-oriented_programming
  • http://www.eclipse.org/aspectj/doc/released/adk15notebook/index.html
  • ru.java на livejournal

    Январь 14, 2011

     

    Vaadin Developer Meetup в Санкт-Петербурге 24 Января

    Коллеги,

    тем, кто не равнодушен к веб приложениям и Vaadin-фреймворку в частности, возможно будет интересно посетить мини-конференцию разработчиков Vaadin в Санкт-Петербурге, 24 Января 2011 г. На конференции будут собственно создатели фреймворка, с которыми можно будет пообщаться лично на все насущные проблемы.

    Можно так же сделать свой мини-доклад на 10-15 минут по тематике.

    Подробности программы и регистрация (бесплатная) на сайте http://vaadin.com/meetup

    ru.java на livejournal

    Декабрь 22, 2010

     

    Реинкарнация WEB приложения, или как дальше жить?

    "Как дальше жить и где нам парковаться?"

    Есть вэб приложение в котором используется SpringMVC и JSP. На данной стадии в проекте бардак - немного смешались презентация с логикой, и одновременно настал переломный момент и возможность выбрать технологию для разработки клиента с нулья.

    Личный опыт таков: до недавнего времени писал серверные приложения (Java SE) с использованием Spring-а. Обширных познаний в области вэб приложений пока не имеется. В JSP вроде разобрался. Можно почистить Авгиевы Конюшни и жить спокойно, но смушает наличие разнообразных фреймворков для вэб разработки с которыми я пока не знаком. Теперь собственно вопрос: как дальше жить?

  • Навести порядок в JSP и не дёргаться.

  • Перейти на фреймворк и написать клиент заново, следуя всем правилам MVC.

  • Начать с '1' для наиболее быстрого приведения приложения в товарный вид и в последствии перейти на фреймворк, и пользоваться приимуществами высокоуровнего интерфейса.



  • * если '2', то на какой фреймворк стоит обратить внимание? (Из личного опыта)
    * если '3', то на сколько процесс перехода на фреймворк безболезненный? не подразумевает ли он написаное с нуля?

     
    << < 1 из 2 > >>