develNotes

/*айтишные заметки*/

08.05.2012

JavaEE: EJB компонент на Jboss 7.1.

Кратко об Enterprise JavaBeans (EJB). EJB компонент представляет собой класс или набор классов, в которых используются специальные аннотации. Каждый EJB компонент выполняется на сервере приложений, и получить доступ к функциональности компонента можно различными способами: из JSP или JSF страницы, из сервлета, с помощью веб-сервиса, из другого EJB компонента, из апплета, а также из обычного приложения JavaSE.
 
Теги: programming java javaEE     Далее

03.11.2012

JSF: как изменить значение свойства класса из JavaScript.

Как правило, в JSF с каждым представлением (страницей) связан java класс (managed bean) веб-приложения, свойства которого связаны с компонентами JSF страницы - кнопками, полями ввода и пр. Веб-приложение на java выполняется на сервере приложений, но в тонкости отправки запросов от клиента к серверу вникать нет необходимости. Допустим, что нужно вызвать произвольную javascript функцию и из нее установить значение некоторого свойства класса. Вполне возможная ситуация, например когда какая-то часть интерфейса реализована на непосредственно на javascript, без использования JSF.

22.12.2012

Java EE: Загрузка классов в Jboss Application Server 7.

Когда приложение Java EE запускается на сервере - происходит поиск и загрузка необходимых классов. Сторонние зависимости могут находится в JAR библиотеках, которые поставляются с программой; в библиотеках которые предоставляются сервером; а иногда - в других приложениях, запущенных на данном экземпляре сервера. Если приложение содержит множество зависимостей, есть вероятность столкнуться с разными неприятными ситуациями. Что будет, если сервер предоставляет библиотеку, а в это же время другая версия этой библиотеки присутствует в приложении? Можно убрать ее из приложения и перейти на версию, поставляемую с сервером. В принципе, если это не получится, можно убрать библиотеку с сервера и использовать свою версию. А если другим запускаемым программам нужна именно та версия, которая есть на сервере? Говоря в общем, если зависимостей много, одни и те же библиотеки доступны в разных местах (на сервере, в приложении, в другом приложении и т.п.), встречайте - JAR hell. Для того чтобы избавиться от подобных проблем при использовании Jboss AS 7, нужно понять каким образом организована загрузка классов и как можно с успехом манипулировать зависимостями приложения.
Теги: jboss javaEE java     Далее

18.02.2013

JSF2: внедрение бина Spring в JSF managed bean.

Когда в JSF managed bean внедряется зависимость в виде другого managed bean - это указывается или с помощью аннотаций, или в файле managed-beans.xml. В JSF 2 рекомендуется использовать аннотации, и мне тоже кажется что это более удобный подход - отпадает небходимость в еще одном XML файле настроек, аннотации это наглядно - все сразу видно при просмотре исходного кода класса.
Теги: javaEE jsf     Далее

05.05.2013

Пример: Ajax с помощью JQuery в Spring MVC.

Для реализации Ajax в Spring MVC не принципиально, какую JavaScript библиотеку использовать, наверное самый распространенный способ - использование JQuery для создания Ajax запроса и обработки ответа от сервера. Посмотрим на простой пример, как можно это сделать. Сначала создаем простое веб-приложение Spring MVC, в данном случае используем Spring Tool SuiteДля того чтобы создать необходимый шаблонный веб-проект, нужно выбрать File > New > Spring Template Project > Spring MVC Project. После этого у нас есть полноценный проект, со всеми включенными зависимостями, которыми управляет Maven. STS автоматически создал необходимые файлы конфигурации, менять которые пока не нужно. Кроме того, у нас есть один контроллер - HomeController.java и домашняя страница - home.jsp. Для начала приступим к изменению контроллера:
@Controller
public class HomeController { 
 
 @RequestMapping(value = "/getCharNum", method = RequestMethod.GET)
 public @ResponseBody Response getCharNum(@RequestParam String text) { 
 
  Response result = new Response();

  if (text != null) {
   result.setText(text);
   result.setCount(text.length());
  }
  
  return result;
 }
 
 @RequestMapping(value = "/", method = RequestMethod.GET)
 public String home(Locale locale, Model model) {
  return "home";
 }
}
Теги: javaEE Spring     Далее

21.06.2013

Java web frameworks. JSF vs Spring MVC.

Мне хотелось сделать обобщенный и краткий обзор недостатков и плюсов фреймворков для разработки веб-приложений на Java, на примере JSF и Spring MVC. А если точнее - обзор двух концептуально разных подходов к разработке, на примере вышеуказанных фреймворков. Я выбрал Java Server Faces потому что это в своем роде "официальный" стандарт для разработки веб-приложений на Java, и потому что я уже существенное время имею дело именно с этим фреймворком. Spring MVC - исключительно потому что я с ним знаком. И наконец, краткий и обобщенный - потому что это очень обширная и многогранная тема, на которую можно смотреть с разных сторон, оценивать преимущества того или иного фреймворка по очень разным критериям, зачастую субъективно и в зависимости от области использования. В принципе можно было назвать пост "почему JSF не лучший выбор", так как я считаю, что концепция JSF сама по себе не самая удачная, мне видится в ней больше минусов, чем плюсов. Возможно в других фреймворках, ориентированных на работу с компонентами, эта идея реализована удачнее, но из-за того, что я знаком с JSF - я буду говорить о нем.
Теги: java javaEE     Далее

12.08.2014

Java: Аспектно-ориентированное программирование с помощью Spring Framework.

АОП - парадигма программирования, которая расширяет возможности существующих концепций, конкретнее - ООП. Она служит для удобной и четкой реализации сквозной функциональности в программе. Сквозная функциональность - это то, что происходит во всей программе в различных местах - в методах, конструкторах класса и т.п., что-то такое что можно было бы логически выделить в одну "сущность", но сделать это с помощью обычных средств ООП сложно, а то и вовсе невозможно. Не смотря на то, что программа всегда разбита на какие-то модули - классы, методы классов и т.п., случается, что в каждом из этих мест нужно выполнять схожие действия. И используя традиционный подход к проектированию, получаются весьма запутанные и сложные для поддержки и отладки конструкции. АОП предлагает некоторые концепции проектирования приложений, с помощью которых можно такие конструкции превратить в простые, стройные и удобные для поддержки и отладки. На первый взгляд, идея АОП может показаться слишком сложной и запутанной, но достаточно понять идею и использовать АОП будет очень просто - особенно с помощью Spring Framework. Spring предлагает ограниченную поддержку АОП в Java, но этого достаточно для множество задач, к тому же преимуществом использования Spring для АОП является простота. Сначала я хотел бы привести несколько ключевых терминов из концепции АОП, а потом рассмотреть простой, но очень детальный пример реализации АОП с помощью Spring.
Теги: programming javaEE java     Далее

12.10.2014

JavaEE: Пример использования Spring Security.

UPDATE: Возможно вам будет интересен пример использования Spring Security 4 и AngularJS.

Spring Security - фреймворк, предоставляющий удобную реализацию механизмов аутентификации и авторизации в Java EE приложениях. Раньше был известен как Acegi Security, а в 2008 году был включен в проект Spring. Является стандартом де-факто для веб-приложений Spring MVC. Использовать Spring Security очень удобно и просто - без особых усилий можно создать гибкую систему управления правами в вашем веб-приложении.

Для того, чтобы показать как это работает - приведу простой, но подробный пример приложения, которое использует Spring Securtiy. Приложение будет состоять из страницы входа и закрытой страницы, доступ к которой имеет только один пользователь. Как нетрудно догадаться, это будет веб-приложение Spring MVC. Итак, цель поставлена, инструменты определены, приступаем к делу!

Для примера создаем шаблонный проект веб-приложения Spring MVC, используя Spring Tool Suite (File > New > Spring Template Project > Spring MVC Project ).

После этого у нас уже есть простое веб-приложение, которое можно запустить на сервере (ссылку на полный код примера можно найти в конце поста). Первое что необходимо сделать - добавить в pom.xml необходимые зависимости:

<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-core</artifactId>
			<version>${org.springframework-version}</version>
</dependency>

<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-web</artifactId>
			<version>${org.springframework-version}</version>
</dependency>

<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-config</artifactId>
			<version>${org.springframework-version}</version>
</dependency>

25.04.2015

Spring Security и Mysql - практический пример.

UPDATE: Возможно вам будет интересен пример использования Spring Security 4 и AngularJS.

Я уже упоминал про JavaEE фреймворк Spring Security и приводил простой пример его использования. Этот пример включает в себя создание веб приложения с двумя страницами - страница логина и закрытая страница. Для авторизации, как ясно, там используется Spring Security. Однако имя пользователя и пароль (точнее SHA-1 хэш) в этом примере хранятся в XML файле настройки контекста Spring Security. Понятно, что в реальных задачах данные пользователя, как и его роли, хранятся в базе данных. 

В этом посте я хочу привести усовершенствованный пример, в котором имя пользователя, хэш пароля и роль пользователя в системе будут храниться в БД Mysql. Для основы возьму код предыдущего примера, а полный код для этого поста можно найти ниже. 

Итак, как можно связать авторизацию с помощью Spring и Mysql. Сделать это можно немного по разному, посмотрим на один из способов. Первым делом установим Mysql и создадим тестовую БД, в которой будет одна таблица. В таблице содержится имя пользователя, название его роли в системе, и хэш пароля. Обычно в БД хранят и другую информацию - например дату, до которой аккаунт активен и пр. Но в этом примере этого не будет. 


28.06.2015

Codenvy - облачная IDE для Java и не только

В поисках стоящей облачной IDE для JavaEE наткнулся на интересный проект - Codenvy. Codenvy это полнофункциональная облачная среда разработки, которая поддерживает различные языки и платформы. Поскольку меня интересовала именно возможность разработки веб-приложений JavaEE, я расскажу свои впечатления именно об этом. 

В процессе поиска, я посмотрел на разные облачные IDE, но это первый и единственный проект, который мне действительно понравился. Во первых, мне хотелось получить именно IDE, а не просто модный_текстовый редактор аля Sublime Text. Во вторых, мне хотелось чтобы среда позволяла вести отладку JavaEE приложений, используя например Tomcat. Так вот, что мы имеем с Codenvy.

Codenvy поддерживает много платформ - Tomcat, Jboss и пр. Разумеется, можно запустить и standalone Java проект, собрав его с помощью Maven. Можно импортировать готовый Maven-проект, сделанный например в Eclipse. После чего останется лишь выбрать чем проект собирать (я выбрал maven) и на чем запускать (я выбрал Tomcat). После таких минимальных настроек, проект сразу запустился! В IDE есть:

Теги: java programming javaEE     Далее

10.02.2016

Сжатие JS и CSS с помощью Maven

Чем меньше размер загружаемых скриптов и css файлов - тем лучше. Для того чтобы сжать файлы, можно пользоваться разными утилитами и плагинами, в зависимости от используемой технологии/среды разработки. Я хочу привести пример того, как можно использовать Maven для сжатия CSS/JS файлов. Я предполагаю ситуацию, в которой у вас есть веб-приложение, которое выкладывается на сервер в виде WAR архива. Понятно, что для ведения разработки сжатые файлы не подходят, но сжимать отдельно каждый файл до сборки продакшн версии проекта - решение не особо удобное. Поэтому хотелось бы сделать так, чтобы при сборке приложения CSS/JS файлы автоматически сжимались. Здесь отлично подойдет Maven с его профилями и плагинами!

На всякий случай отмечу, что я использовал Maven 3.0.4, со сборкой проекта в Eclipse Mars. Для решения задачи я использую два плагина: minify-maven-plugin и maven-war-plugin. Первый сжимает указанные в pom файлы, а второй перезаписывает их в WAR архиве. Таким образом получается, что больше не нужно держать две версии всех скриптов - аля file.js и file.min.js, аналогично и с CSS. Это избавляет от головной боли! Просто при разработке используются несжатые версии файлов, а при сборке продакшн версии проекта файлы сжимаются и перезаписываются в WAR архиве.

Теги: javascript web javaEE     Далее

17.07.2016

Spring Security 4 и AngularJS. Аутентификация в AJAX веб-приложении.

Spring Framework можно назвать стандартом де-факто в мире Java. Еще бы, ведь некоторые концепции, реализованные в этом фреймворке повлияли на саму спецификацию JavaEE. Spring Security является дочерним проектом Spring, и предоставляет средства аутентификации и авторизации для Java/JavaEE приложений. С другой стороны, в мире фронтенда победил JavaScript и фреймворки, позволяющие создавать SPA веб-приложения - AngularJS, ReactJS, BackboneJS и другие. Я хочу привести пример, как можно успешно использовать Spring Security 4 совместно с Angular. В этом примере мы напишем REST бекенд, используя Spring MVC. Также мы реализуем аутентификацию и авторизацию с помощью Spring Security, в то время как на фронтенде будет использоваться AngularJS. 

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

В примере будет использоваться Java 8, Tomcat 8, Spring 4.3, Spring Security 4.1, AngularJS 1.4.9. В конце поста вы можете найти ссылку на полный код проекта.