вторник, 12 января 2016 г.

Интеграция Spring В ADF (Integreation Spring in ADF)

Фрэймворк Spring очень популярен при разработке Java приложений.  И в какой то момент в вашем проекте может появиться необходимость его использовать. В этой статье я хочу объяснить как интегрировать Spring в ADF. Начнём

По умолчанию Jdev не даёт возможности работы со Spring. Сначала нужно установить extension: Spring & Oracle Weblogic Sca






После установки расширения для Spring-а, нужно  добавить в проект его библиотеку (нажимаем правой кнопкой по проекту, выбираем Project Properties, а там выбираем Libraries and Classpath)


В принципе проект готов к работе со  Spring-ом. Осталось настроить faces-config.xml (для разрешения Spring-у использовать EL выражения  )  и web.xml (для инициализации Spring контейнера при загрузке приложения)

faces-config.xml




<application>
  ...
  <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
</application>

web.xml







<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/hello-beans.xml</param-value>
</context-param>
<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>


где  /WEB-INF/hello-beans.xml  путь к конфигурационному файлу
Что бы продемонстрировать работу Spring в ADF создадим простое приложение, в котором будет выводиться "Hello world" с помощью Spring-a.


1. Создайте bean(java класс) с методом getMessage  :


package view;
public class Hello { public String getMessage(String quote) { return "Hello "+quote; } }

2. Создайте конфигурационный файл, в котором укажите путь к бину.















<?xml version="1.0" encoding="windows-1251" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:context="http://www.springframework.org/schema/context"
 xsi:schemaLocation="http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
 http://www.springframework.org/schema/context
 http://www.springframework.org/schema/context/spring-context-3.1.xsd">
  <bean id="helloBean" class="view.Hello">
  </bean>
</beans>

3. Создайте jspx страницу и добавьте outputText :

 <af:outputText value="Текст из Spring:#{viewScope.AdfBean.value}" id="ot1"/>


4. Создайте managed bean










package view; import javax.faces.context.FacesContext; import javax.servlet.ServletContext; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; public class AdfBean { private ApplicationContext ctx; public AdfBean() { } public String getValue() { Hello hello = (Hello) getBean("helloBean"); return hello.getMessage("World"); } protected Object getBean(String name){ if (ctx == null) { try { return WebApplicationContextUtils.getWebApplicationContext(
(ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext()).getBean(name); } catch (BeansException e) { System.out.println("Beans Exception" + e); } } try { return ctx.getBean(name); } catch (BeansException e) { System.out.println("Beans Exception" + e); } return null; } }



где метод getBean() получает доступ к Spring-овскому бину.


Готово. Если запустить приложение, то выведется следующее окно



Более детально интеграция Spring-а с web фрэймворками описана по следующей ссылке:
http://docs.spring.io/autorepo/docs/spring/3.2.x/spring-framework-reference/html/web-integration.html