07 May 2012

Publicando servicios de Spring como ADF Data Controls

El título de este post en inglés sería algo como: "Exposing Spring Services with ADF Data Controls".

Una de las características de ADF es que nos permite exponer cualquier clase java como un "Data Control"; por otra parte Spring mediante su API nos permite acceder al contexto de la aplicación mediante la clase FacesContextUtils, ahora solo nos queda el como pegarlas para que funcionen al unísono, y de eso va este post.

Para quienes me conocen, utilizaré un ejemplo que seguro les será familiar, la implementación de una calculadora :-)

Lo primero es crear nuestra clase de negocio que publicaremos como un bean de Spring.


Lo segundo es registrar la clase dentro del fichero de configuración de Spring.


Lo tercero es crear una clase "facade"/"delegate" que nos permitira conectar Spring con ADF. Esta clase implementa la interfaz "Calculadora" (que corresponde a este ejemplo), en su constructor obtiene el contexto de spring mediante la utilización de la clase FacesContextUtils y recupera el bean que queremos publicar ("myCalculadora"), finalmente en sus métodos publicados, invocamos al bean recuperado de spring.


Ahora, sobre esta clase "facade"/"delegate" crearemos el "Data Control" (Debemos hacer click con el boton derecho del ratón y elegir la opción "Create Data Control").


A partir de este momento la clase esta accesible como un data control (es decir: aparece en la paleta de data controls); a partir de este punto podemos crear una página, luego arrastramos y soltamos, por ejemplo, el método de suma en la página y se crearan los controles visuales de Faces que nos permiten invocar a la funcionalidad.


Ahora solo queda ejecutar la aplicación; en la siguiente imagen, se muestra el resultado de la ejecución de la página.


Enlaces relacionados:
- FIN -

01 May 2012

ADF Faces con Spring 3.1

Desde hace ya mucho tiempo la utilización de Spring esta muy extendida en el mundo del Open Source, y existen muchos frameworks que se integran fácilmente, poniendo al alcance unos de otros toda su funcionalidad; así que por que no aprovechar todo este ecosistema desde ADF? A continuación veremos como configurar Spring 3.1 en una aplicación ADF 11g.

Realmente la integración no tiene ningún secreto, solo hay que seguir los pasos que marca el manual de Spring:
  1. Añadir las librerías de Spring al proyecto ViewController
  2. Crear el fichero de configuración de Spring(E.j.: /WEB-INF/applicationContext31.xml)
  3. Registrar los recursos necesarios en el fichero /WEB-INF/web.xml
  4. Hacer disponibles los beans de Spring desde Expression Language
Lo primero es crear una librería con los jar de Spring que necesitemos utilizar y añadirla a nuestro proyecto.
Lo segundo es crear nuestro fichero de configuración de Spring con el registro de nuestros beans.
Lo tercero, registrar el parámetro de contexto y el listener de Spring en el fichero /WEB-INF/web.xml.
Cuarto, para poner al alcance de Expression Languge la utilización de los beans de Spring, hay que registrar la clase SpringBeanFacesELResolver dentro del fichero faces-config.xml.
A partir de este momento utilizando Expression Language podremos acceder a todos los beans y sus propiedades de Spring, una expresión válida, por ejemplo sería: #{mybean31.mensaje}.

Finalmente hay que indicar en el fichero de configuración de weblogic que de preferencias a nuestras clases de spring:


Durante el despliegue de la aplicación surgio un problema con la definición de los ficheros de Spring.
XML-24509: (Error) Definición duplicada para: 'annotation'
XML-24509: (Error) Definición duplicada para: 'typedParameterType'
XML-24509: (Error) Definición duplicada para: 'exportsType'
XML-24509: (Error) Definición duplicada para: 'registersScopeType'
Solución:
Indicar como paramétro de la MV que Spring 3.1 utilice el parser de xerces. Es recomendable reiniciar el servidor despúes de esto.

-Djavax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl


Y apartir de este momento empiezan otros quebraderos de cabeza :-)

Enlaces relacionados:
- FIN -