Archivo
Cabeceras personalizadas y procesos Oracle BPEL
En el momento de definir nuestros servicios web, nos podemos encontrar con la necesidad de incluir cabeceras personalizadas que aporten información añadida a las distintas operaciones del mismo.
Si estos servicios van a ser consumidos por una aplicación SCA, como puede ser un proceso BPEL, recomiendo seguir el siguiente consejo: incluir nuestra cabecera en la definición el mensaje.
Seguimos el orden de definición del WSDL para explicar nuestro caso. Si nos ceñimos a los elementos del contrato que nos conciernen, empezamos por la definición de mensajes.
Es común crear un mensaje que represente nuestra cabecera personalizada para reutilizarlo e implementar el siguiente formato:
<wsdl:message name="HeaderPersonalizado"> <wsdl:part name="cabecera" element="client:miCabecera"/> </wsdl:message> ... <wsdl:operation name="operacion1"> <soap:operation style="document" soapAction="http://xmlns.Avanttic.com/Blog/HeaderPersonalizado/operacion1"/> <wsdl:input> <soap:body use="literal" parts="payload"/> <soap:header message="client:HeaderPersonalizado" part="cabecera" use="literal"/> </wsdl:input> <wsdl:output> <soap:body use="literal" parts="payload"/> </wsdl:output> </wsdl:operation>
Aún siendo correcto, generar un contrato con este formato implica que el envío de la cabecera desde un proceso BPEL sea ligeramente más complejo. Veamos los pasos que realizaríamos para este caso:
- Generar una variable del tipo miCabecera:
<variable name="miCabecera" element="client:miCabecera"/>
- Asignar los valores correspondientes a la cabecera mediante la actividad Assign.
- Asignar esta variable a la cabecera de la actividad Invoke.
En este punto nos encontramos con la particularidad de que la IDE de JDeveloper no permite realizar este paso y es necesario acceder al código fuente de la actividad y agregar la propiedad bpelx:inputHeaderVariable:
<invoke name="Ejecutar" partnerLink="ServicioWeb" portType="client:HeaderPersonalizado" operation="operacion1" inputVariable="Ejecutar_InputVariable" outputVariable="Ejecutar_OutputVariable" bpelx:invokeAsDetail="no" bpelx:inputHeaderVariable="miCabecera"/>
Veamos ahora otra forma de pasar nuestra cabecera siguiendo la recomendación inicial: incluir la cabecera en la definición del mensaje.
Leer más…
ADF Essentials + GlassFish Server OSE + JDeveloper, un entorno de desarrollo Java EE completo a coste cero
Hace ya unos meses que Oracle puso a disposición de la comunidad de desarrolladores su framework ADF Essentials. Se trata de un conjunto de librerías de componentes que cubre todas las capas de la arquitectura JavaEE. Las aplicaciones que hagan uso de ADF Essentials podrán ejecutarse en cualquier servidor JavaEE (o en cualquier contenedor de servlets, siempre que no usemos elementos propios de Java Enterprise, tales como EJB u otros). En estos momentos Oracle lo soporta sobre Oracle WebLogic Server 11g (WLS), GlassFish 3.1 (GF), and WebSphere 7.
Como muchos de vosotros ya conocéis, Oracle ADF es un producto que lleva mucho tiempo en el mercado y requiere una licencia de pago, bien de forma separada (TopLink and Application Development Framework) o asociada sin coste adicional a la licencia de WebLogic Server. Ahora Oracle ofrece ahora una versión gratuita de ADF (ADF Essentials) que incluye una serie de limitaciones relativas a ciertos componentes pero que puede ser perfectamente válida en muchas ocasiones (ver documento de preguntas frecuentes)
Las librerías o componentes de ADF que no se incluyen en Essentials son las siguientes: Oracle ADF Mobile, Oracle ADF Desktop Integration, Oracle ADF Security, Oracle ADF Web Service Data Control, Oracle ADF Remote Taskflows, Oracle ADF Business Component’s Service Interfaces, Oracle ADF Data Controls for BI, Essbase y BAM, Características de Integration con Oracle Fusion Middleware tales como MDS, OPSS, OWSM, Enterprise Manager y MBeans, High Availability and Clustering.

Pues bien, si miramos detenidamente la totalidad de características de las que no podemos disponer, nos daremos cuenta de que muchas limitaciones se refieren a necesidades de integración con WLS. Si disponemos de WLS podemos utilizar ADF en vez de ADF Essentials (como hemos comentado, tenemos cubierta la licencia de ADF dentro de WLS), así que estas limitaciones no son tales.
Con todo esto, comparándolo con el resto de frameworks a disposición de la comunidad, ADF Essentials se posiciona como una de las mejores soluciones en su categoría. Hay dos aspectos importantes para los que desarrollamos habitualmente en ADF que echaremos en falta si cambiamos WLS por GF (u otro servidor): la seguridad ADF y los DataControls para los Web Services, pero son dos aspectos para los que disponemos de estándares propios de JEE (por ejemplo JAAS).
Si tenemos en cuenta que la licencia de JDeveloper no supone coste alguno, tenemos a nuestra disposición uno de los mejores entornos de desarrollo Java Enterprise. Además, nos permitirá distribuir nuestras aplicaciones sobre cualquier plataforma sin cargar coste de licencias a nuestros clientes.
Leer más…
¿Por qué ADF Mobile y no otro framework?

Ya os expliqué en este post las características básicas de ADF Mobile. Hoy os voy a dar las (mis) razones por las que considero más productivo trabajar con este entorno en vez de utilizar otros frameworks.
La principal razón es que puedo escribir la lógica de la aplicación en Java en vez de usar JavaScript, Phyton u otro lenguaje:
1. Java me ofrece un tipado fuerte, por tanto las aplicaciones son menos propensas a errores
2. Trabajando con Java, depurar las aplicaciones es infinitamente más fácil que con JavaScript
3. El coste de mantenimiento de Java es menor que en el caso de JavaScript (el coste de desarrollo también es menor)
4. Las arquitecturas basadas en Java hoy por hoy ofrecen entornos basados en componentes y una robusta capa de binding que me va a permitir desarrollar con menos codificación al trabajar de forma declarativa. Me facilita la separación entre las capas de negocio y presentación (buenas prácticas de diseño) y dispongo de un enlazado automático y estándar entre ambas capas, con las ventajas que eso supone: mantenibilidad y fiabilidad.
5. Dispongo de un entorno de desarrollo que me ofrece herramientas de transformación de modelo, búsqueda y reemplazo de variables o de cualquier elemento del lenguaje (en javascript si por ejemplo busco y reemplazo en todos los archivos, luego tengo que testear, testear y testear), JavaDoc, etc.
6. Puedo reutilizar modelos de negocio de mis servidores corporativos (a través de web services)
7. Seguridad integrada
No se trata de una discusión de si Java es mejor que Javascript, sino de entender que cada lenguaje tiene unas características que lo hacen más adecuado para construir ciertos elementos pero no tanto para hacer otras cosas.
JavaScript es útil para manejar eventos de la Interfaz de usuario, y así lo utilizo en mis aplicaciones ADF Mobile. No renuncio a nada, pero por suerte tengo Java y lo utilizo para programar la lógica de la aplicación, con la solidez que nos da modelar y construir aplicaciones JEE (también hay otras tecnologías válidas para generar aplicaciones empresariales). De este modo mi lógica de negocio es independiente del cliente web que ejecute el Javascript. Estoy ganando en robustez.
¿Qué supone disponer un framework basado en estándares Java? Supone que podemos usar las facilidades de binding de Java, aprovecharnos del IDE de desarrollo (JDeveloper) y de sus herramientas de diseño.
Este apartado me sigue maravillando. Importo a mi proyecto un módulo de datos con sus JavaBeans correspondientes desde cualquier proyecto corporativo existente, hago click con el botón derecho sobre el JavaBean, selecciono Crear DataControl, arrastro una lista de datos y la suelto sobre la página que estoy diseñando, escojo que quiero que me lo genere como una lista y ya tengo mi lista de datos en la página. He tardado minuto y medio y tengo un diseño correcto basado en la capa de bindings de Java EE sin errores en el código.
Continúo creando mi aplicación: me voy a la lista y le digo que cuando se seleccione un elemento dispare la acción ir_a_elemento (previamente establezco gráficamente mediante el editor de propiedades el parámetro que indica qué elemento de la lista es el seleccionado) y diseño la navegación de la página en el editor de taskflows (gráficamente) para que la capa de control (una capa que no existe en Javascript, y que nos aporta diseño estructurado) sepa como navegar a la página del elemento. Una página que me ha costado otro minuto y medio diseñar partiendo de los objetos de datos que he creado en el apartado anterior.
Como la aplicación requiere más funcionalidad, seguramente tengo que escribir código: por ejemplo, necesitaré recuperar y guardar los clientes en la base de datos. Pues bien, tengo dos posibilidades: guardarlos en el servidor corporativo o en la base de datos local (se guardarían encriptados, viene de serie). Suponiendo el primer caso, necesitaré obtener el WSDL (contrato) del servicio y generar un componente de datos basado en SOAP o Rest. Ya sólo debo ligar las páginas con los atributos de este componente en vez de utilizar los del modelo de datos. Si necesito usar la base de datos local (no excluyente con el acceso remoto a datos), implemento las operaciones de guardar y recuperar en el JavaBean y me bastará arrastrar la operación de guardar sobre la página y decirle que quiero que me genere como un botón de comando.
En un momento dado, se produce un error en mi aplicación. ¿Qué hago? ¿Activo el log y añado trazas en el código? No tengo claro dónde está el error, pero ADF Mobile está integradísimo en JDeveloper y puedo activar la facilidad de debug (otra cosa que se complica cuando estoy desarrollando tan solo en Javascript).
Además, elijo ADF Mobile, porque ofrece todas estas ventajas en un entorno integrado. Si tu framework de desarrollo no incluye algunos elementos (librerías de cifrado, herramientas de binding, depuradores de código, capa de control, …) vas a tener que buscarlos fuera, y luego tendrás que responsabilizarte de la integración. Esto implica que con cada nueva versión de cada librería corres el riesgo de que otras partes dejen de funcionar, por lo que decidirás no actualizar nunca y tu tecnología de trabajo irá quedando obsoleta.
Si tu framework te ofrece todo lo que necesitas, y te permite desarrollar y mantener la facilidad y rapidez que tu deseas, sigue adelante con él. Ahora bien, si no estás del todo satisfecho, prueba el funcionamiento de ADF Mobile.
ADF tips: Validadores personalizados

En este tip explicaremos cómo se puede crear un validador personalizado en la capa de vista utilizando una clase java propia, siendo reutilizable en tantas páginas como queramos.
ADF permite validaciones desde nivel de entity hasta nivel de vista; en este caso nos centraremos en la parte de vista, heredada de JSF. El primer paso es crear la clase Java que implemente la interfaz de javax.faces.validator.Validator; lo que nos obliga a implementar su método abstracto validate:
Una vez creada la clase, debemos registrarla en el fichero faces-config.xml de nuestro proyecto utilizando el wizard:
Ahora sólo queda hacer uso de este validador en una de nuestras páginas. Para ello hay que añadir el tag de <af:validator> dentro de uno de nuestros inputText:
Arquitectura orientada a componentes (SCA): El enfoque de Oracle
En la versión 11g, Oracle ha rediseñado su SOA Suite integrando la arquitectura orientada a componentes (SCA por sus siglas en inglés) al desarrollo de aplicaciones. La finalidad principal del cambio es reducir la dificultad en las fases de desarrollo, despliegue y gestión de las aplicaciones SOA, que han ido ganando en sofisticación y complejidad a lo largo del tiempo.
¿Qué es SCA?
La complejidad de los sistemas actuales y sus necesidades a la hora de desarrollar servicios, impiden una rápida puesta en marcha de los desarrollos. La arquitectura orientada a componentes es una especificación que define cómo crear y ensamblar los diversos componentes de negocio como componentes modulares, con la finalidad de incrementar la flexibilidad y facilidad de mantenimiento de los sistemas de información.
Acogiendo el símil de una placa base de PC, la arquitectura SCA está formada por componentes internos integrados entre sí, que se comunican con sistemas externos mediante conectores, todo ello a través de cables (wires). Ya sea en grandes sistemas SOA (Enterprise SOA) como pequeños (uso de Web Services para conectar sistemas), la pieza restante es un estándar que agrupe los servicios individuales en un servicio compuesto de alto nivel. Esta pieza es SCA.
Oracle, junto con otros fabricantes de software, ha formado parte de la creación de este estándar bajo el patrocinio del Open SOA Group. Actualmente es el consorcio OASIS el que se encarga de mantenerlo y evolucionarlo.
Oracle SCA
El principal beneficio de implementar SCA en Oracle SOA Suite 11g es la simplificación del ciclo de vida de las aplicaciones desde el desarrollo, pasando por el despliegue y su posterior gestión. La herramienta JDeveloper que Oracle pone a disposición de los desarrolladores, permite crear e integrar todos aquellos componentes necesarios para crear aplicaciones compuestas, con SCA como framework de unión. El plug-in para desarrollos SOA de JDeveloper hace que entender y desarrollar aplicaciones compuestas sea sencillo e intuitivo, agrupando las diferentes piezas o componentes de la aplicación en un único elemento denominado composite, siendo éste el único elemento a desplegar mediante un fichero SAR.
Todo esto se traduce en varios beneficios tangibles en el diseño, ejecución y posterior gestión / monitorización.
Los tres elementos principales que apoyan el desarrollo de aplicaciones compuestas SCA son:
- Herramienta de desarrollo en JDeveloper
- Infraestructura de ejecución unificada en SOA Suite
- Capacidad de gestión y configuración desde Enterprise Manager
La infraestructura unificada se presenta como un conjunto de motores de ejecución que proporcionan la funcionalidad necesaria para la ejecución de los elementos que componen el compuesto SCA (BPEL, Reglas de negocio, invocaciones, etc.).
Conectores
Debido a la naturaleza y filosofía que ha generado el estándar, es obvia la necesidad que puede encontrarse de integrar sistemas de terceros con las aplicaciones compuestas. Por defecto la SOA Suite 11g provee un conjunto de conectores tales como mySAP, PeopleSoft, Siebel, CICS, Tuxedo, etc. Todos estos conectores están desarrollados, siguiendo con la filosofía de utilizar estándares, en Java EE Connector Architecture (JCA) permitiendo el desarrollo de conectores propios integrables en los desarrollos.

La evolución de SOA a SCA llega con la ventaja principal de agrupar los distintos elementos que componen las aplicaciones compuestas de manera ordenada y proporcionando claridad sobre la interacción, tanto interna como externa, de todos sus componentes.Con Oracle SOA Suite 11g, se obtienen las herramientas necesarias para adentrarse en el desarrollo basado en componentes. Su herramienta de diseño, presentada como plug-in de JDeveloper, permite obtener una visión clara y sencilla de las aplicaciones composite, a la par de simplificar el desarrollo de las mismas.
Incluir Ayuda/Help en las aplicaciones ADF
El pasado 22-06-2011 se liberó la versión 11.1.2 de Oracle Help, alineada con la misma versión de JDeveloper que había aparecido 2 semanas antes.
The Oracle Help technologies provide the means for developing and displaying HTML-based help systems for Java and web applications. Authors can create a single help system that can be displayed – without modification – both in a Java environment, using Oracle Help for Java (OHJ); and in a web environment, using Oracle Help for the Web.
Oracle Help for Java(OHJ)
OHJ está formado por un conjunto de componentes Java, un API de Java, y una especificación de los formatos de archivo para el desarrollo y visualización de contenido HTML de ayuda en entornos Java.
Leer más…
Mantenimiento de una tabla n:m en ADF con SelectManyShuttle
Un ejemplo de cómo hacer un mantenimiento de una tabla de forma usable para el usuario seria utilizar el componente SelectManyShuttle. Uno de los casos que podemos utilizarlo es cuando tenemos una tabla que sale de una relación n:m, por ejemplo:
Tenemos la tabla de usuarios, roles y ahora queremos guardar en la tabla usuarioRoles los roles asignados aún usuario. Para realizar esto crearemos una pantalla donde tendremos la tabla de usuarios y seleccionaremos uno de los usuarios y con el componente SelectManyShuttle le asignaremos los roles. En la pantalla también pondremos la tabla UsuariosRoles para ver los cambios.
Pasos a seguir
Creamos una aplicación Fusion Web Application (ADF) y creamos los business components desde nuestra base de datos: nos pedirá la conexión a la base de datos y elegiremos las entidades que queremos utilizar. En este ejemplo: Usuario, Roles y UsuarioRoles. Obtendremos los siguientes business components:
Oracle ADF Faces Components Demo actualizada a versión 11gR2
La demo de ADF Faces Components ha sido revisada y actualizada con las nuevas funcionalidades de JDeveloper 11.1.2. Han aumentando hasta 169 los componentes disponibles.

La demo puede descargarse desde este link y desplegarse sobre Oracle JDeveloper o sobre Oracle WebLogic Server.
Demo Source Code: The war file also contains the demo source files for developers to study and learn from. All JSPX files and Java sources can be looked at in the Oracle JDeveloper project that is created when importing the WAR file. Note that the ADF Faces component demo does not contain the ADF Faces RC sources and ADF binding sources. These can be request from customer support, requiring a customer support contract for ADF.
También puede ejecutarse online desde aquí.

En la sección Tab Guide aparecen todos los componentes ordenados de diferentes formas. Al probar cada uno de ellos se dispone de un editor que permite comprobar cómo afectan los valores de cada atributo al componente.

Nuevo JDeveloper 11.1.2.0.0 (¿11gR2 o 12g?)
El pasado lunes 6 de junio fue lanzado JDeveloper 11.1.2.0.0 y twitter echa humo con links a posts explicando sus mejoras (en avanttic twitter encontraréis nuestra selección).
Incorpora tantos cambios que en vez de 11gR2 bien podría haberse llamado 12g !!!
… ¿o deberíamos empezar a hablar de 12c (con “c” de cloud)?
Aquí tenéis el post oficial de Oracle con el detalle de las nuevas funcionalidades:
Oracle JDeveloper and Oracle ADF 11g Release 2 (11.1.2.0.0): New Features
Y tutoriales “calentitos” actualizados a la nueva versión:
Un poco de formación ADF online (ampliación)
Hace un año publicamos este post con links a vídeo-cursos de formación sobre Oracle Application Framework (ADF).
Desde entonces hemos añadido más de 50 vídeos en nuestro canal de YouTube:
avanttic vídeo – Oracle Fusion Development
Como complemento, en este fantástico post de John Brunswick encontrarás multitud de material para aprender o profundizar en ADF: blogs, tutoriales, demos, maquinas virtuales, links de descarga y libros. Es la recopilación más interesante que hemos encontrado durante este último año y fue publicada hace sólo 3 semanas.
Y si quieres estar al día de novedades relacionadas con ADF y con otras tecnologías Oracle, nos puedes seguir en avanttic twitter.












