Trabajando con el Placeholder DataControl en ADF11g

0

Los DataControls son la implementación que hace el framework ADF del estándar JSR-227, a través de los cuales creamos la capa llamada ADF Model (ADFm) que básicamente nos permite exponer los servicios de negocio a la capa de interfaz de manera homogénea sin importar la tecnología en que estos servicios fueron creados.

El Placeholder datacontrol fue introducido a partir de ADF11g y su función principal es la de simular una capa de servicios de negocio basada en Business Components de forma rápida e incluyendo todas las operaciones y estructuras con que normalmente se cuentan. Los diseñadores de interfaces pueden sacar provechos de este componente para crear las páginas y taskflows sin necesidad de tener datos reales viniendo de la capa de servicios. En este articulo voy a presentar como hacer uso de esta funcionalidad que nos presenta ADF.

Creando el PlaceHolder:

Lo primero que hacemos en este caso es crear una Fusion Web Application luego todo lo que tenemos que hacer es en el proyecto de servicios de negocio vamos a la categoría Data Controls y escogemos Placeholder DC.ProjectStructure

Con esto estamos generando un DataControl vacio, como si fuera un AppcreateSampleVOlication Module más de nuestra aplicación, ahora vamos a crear los llamados DataTypes o estructuras de datos. Con ellos vamos a simular nuestros ViewObjects, aquí vamos a crear los atributos, definir listas de valores, llaves primarias, Maestros Detalles, UI Hints, etc. Click derecho sobre el Placeholder DC-> Create Placeholder Data Type.

image

Por ejemplo para crear un atributo como una Lista de valores, tenemos que tener un DataType base para basar nuestra lista.Para crear un una relación Maestro Detalle debemos seleccionar la propiedad searchable sobre el atributo y luego creamos un nuevo Data Type partiendo de la estructura que va a ser el padre.

Finalmente procedemos a insertar datos estáticos dentro de las estructuras de datos. Esta información puede ser insertada de forma manual o también a través de un archivos separado por comas CSV. Todos los datos van a quedar almacenados dentro del ResourceBundle en el Modelo.

Una vez creamos todas las estructuras podemos crear cualquier tipo de interfaces con ADF Faces, así mismo podemos simular las operaciones de los BCs.

Al final la estructura que cree contiene maestro-detalle, lista de valores y operaciones.

image

Al utilizarla dentro de las páginas obtengo todas las opciones de acuerdo al tipo de datos y estructura jerárquica que creé.

imageAhora a sacarle provecho a esta utilidad.


Nuevas Carácteristicas en JDeveloper11g R1

0

FMW11g R1 viene con una nueva versión de JDeveloper 11g que se conoce internamente como Bulldog. Esta versión contiene un gran número de nuevas características en todas las áreas funcionales. Así mismo con esta versión se puede desarrollar para todo lo que es SOA Suite y WebCenter que también hacen parte de FMW11g.

En este articulo presentaré algunas de las principales características de esta nueva versión asociadas a JDeveloper y ADF:

ADF Desktop Integration:

image

Un componente de ADF que nos va a permitir extender aplicaciones ADF 11g nuevas y existentes, ofreciendo una integración con hojas de cálculo en excel, las cuales se pueden utilizar para la administración de información que provenga de servicios de negocio expuestos con el ADF model.

Para más información pueden ver un video de introducción aquí y también les dejo el enlace para el tutorial de introducción

Oracle Metadata Services (MDS):

Con MDS se adiciona el tema de personalización de interfaces - los componentes visuales y funcionales de un documento base pueden ser modificados sin necesidad de crear nuevas versiones de un mismo documento.

Organizaciones las cuales requieren distintas versiones de una misma interfaz (e.j. departamentos) o personalizar aplicativos de acuerdo al cliente van a tener grandes beneficios utilizando esta nueva característica de ADF 11g.

Video de introducción y tutorial de ejemplo

Team Productivity Center:

Uno los componentes más grandes de este release. Adiciona funcionalidad para manejar el ciclo de vida de una aplicación a JDeveloper. A través de TPC se pueden utilizar repositorios de Bugs como Jira o MS Project y se puede hacer seguimiento en equipo a los desarrollos. Complementa la oferta de la funcionalidad ya conocida de soporte a controladores de versiones. Es una extensión que aporta bastantes beneficios a los equipos de desarrollo.

La página principal en OTN esta aquí, también tiene un demo de introducción y pueden ir al blog de Susan Duncan para un resumen en ingles

 

Active Data Services:

Funcionalidad del framework para soportar eventos tipo push en las interfaces ADF faces utilizando la plataforma Comet. De tal forma que las interfaces se pueden refrescar en el momento que los eventos del lado del servidor ocurran.

Otras grandes áreas en la que vamos a profundizar más es en las extensiones para WebCenter11g y SOA Suite 11g. Espero desde ya empiecen a trabajar con este release y que sigamos compartiendo conocimiento por este medio. Para la lista completa de las nuevas características en este release pueden ir a OTN en el siguiente enlace.


Oracle Fusion Middleware 11g está en Producción

0

Julio 1ero marca el nacimiento oficial de la más reciente generación de aplicativos de  Middleware de Oracle – FMW11g. Los productos que a partir del día de hoy se encuentran en producción son el resultado de un periodo de adaptación y continua evolución que ha caracterizado a las soluciones de Middleware de Oracle en los últimos años.

FMW 11g cuenta con productos y soluciones en categorias como Herramientas de Desarrollo,  SOA, Interacción con Usuario (Portales y Web2.0), Identity Management, Enterprise Management, Seguridad, Inteligencia de Negocios y Gestión de Contenido.

A partir de hoy pueden hacer uso de las herramientas usadas para la construcción de las Aplicaciones Fusion. Esperamos poder seguir escribiendo sobre esta nuevo release para sacarle todo el provecho y continuar generando un conocimiendo compartido.

image

Por el lado de herramientas de desarrollo estaré explorando la nueva versión de JDeveloper 11g, conocida internamente con el nombre Bulldog en los próximos articulos.



EL - Expression Language en ADF Faces

0

EL es un lenguaje de scripting que hace parte de la especificación de JSF con el objetivo de facilitar simplificar el acceso a los componentes de una página sin necesidad de utilizar código Java. Siendo ADF Faces un framework basdo en JSF vamos a ver en este articulo como podemos utilizar EL dentro de nuestras aplicaciones basadas en JSF.

Al ser EL un lenguaje tipo script, no requiere de compilación por lo que toda expresión es evaluada en runtime. El desarrollador puede interactuar con los atributos, metodos y propiedades de los ADF Faces Rich Components a través de expresiones. Así mismo en ADF todos los mapeos (bindigs) que se hacen al ADFm son implementados con EL.

Veamos algunos ejemplos de expresiones:

Si tenemos un inputText podemos invocar el setter de una variable apellido que esta dentro de un managed bean llamado cliente a través de EL

  1: <af:inputText id="apellido“ required="true" value="#{cliente.apellido}"/>


Ahora si queremos obtener el apellido y asignarlo a un outputText invocamos el getter



1: <af:outputText id="apellido“ value="#{cliente.apellido}"/>



Por otro lado podríamos realizar operaciones aritméticas y/o evaluar condiciones para determinar cierto comportamiento:



  1: <af:outputText value="#{backing_client.salario > 0? backing_client.salario*.12:0}"/>


JDeveloper cuenta con un Expression Builder a través del cual podemos armar expresiones de forma declarativa. El expression builder se lanza en el momento que queramos definir alguna propiedad de un componente diferente de los valores por defecto tales como true o false. Dentro del editor de codigo podemos armar expresiones con el asistente digitando #{ al definir el valor de una propiedad de un componente.



Veamos algunos ejemplos prácticos de expresiones que nos pueden ser útiles cuando trabajemos con los ADF Faces componentes:



<!--acceder al valor de los bindings de la pagina-->
<af:inputText id="text1" value="#{bindings.nombre.inputValue}/>
 
<!--Renderizar un componente basado en una codicion-->
<af:inputText id="text1" value="#{bindings.nombre.inputValue} rendered="#{binding.salario.inputValue > 0"/>
<!--variables que se definan en los scopes-->
<af:inputText id="text1" value="#{pageFlowScope.nombre}/>
<af:inputText id="text1" value="#{sessionScope.nombre}/>
<!--Este expresion evalua igual que las anteriores-->
<af:outputText value="#{requestScope['nombre']}"/>
  
<!--Acceder al contexto de seguridad via EL-->
<af:inputText id="text1" value="#{bindings.nombre.inputValue} rendered="#{securityContext.userInRole['fod-admin']}"/>
<!--Realizar alguna operacion aritmetica basado en una condicion-->
<af:outputText value="#{backing_client.salario > 0? backing_client.salario*.12:0}"/>
<!--Acceder al mapa de propiedades de un atributo del ADFm-->
#{bindings.empTable.labels}


Una de las carácteristicas especiales que descubrí recientemente es que a través de las expresiones se van a acceder a los métodos que estén definidos para el objecto. Un ejemplo de ello es el siguiente:



Quiero hacer una operación aritmética con 2 valores, uno viene desde la interfaz de usuario final digamos a traves de una variable en la sesión. El segundo valor viene de un atributo numérico que tengo en un ViewObject. El problema es que cuando hago la operación el numero que viene del ViewObject es de tipo oracle.jbo.domain.Number por lo cual si el valor que viene de la interfaz es de tipo java.lang.int o similar. La expresion no va a evaluar y va a causar un error de casting.



Ahora como a través de EL yo puedo acceder a los metodos de objecto Number para que mi expresion evalue correctamente hago



#{sessionScope.valor1 + bindings.valor2.inputValue.value}


Lo cual invoca el metodo getValue del objeto y este retorna un java.lang.double.



Para mayor información sobre EL pueden ir a los siguientes enlaces



1- API de Java para FMW: http://download.oracle.com/docs/cd/E12839_01/apirefs.1111/e10758/toc.htm



2- Unified Expression Language: http://docs.huihoo.com/java/ee/javaeetutorial5/doc/JSPIntro7.html#wp101877



Si alguno tiene más urls que quisiera compartir, lo puede hacer a través de los comentarios.


Error al hacer upgrade de SOA Suite 10.1.3.1 a 10.1.3.3 ó 10.1.3.4

1

Cuando se aplica la actualización de 10.1.3.1 a 10.1.3.4 ó bien de 10.1.3.3 a 10.1.3.4 es común encontrarse con el siguiente error al querer entrar al BPELConsole:

Oracle BPEL Process Manager Full CycleAn unexpected error has occurred while executing your request. This is most likely related to a defect in the Oracle BPEL Process Manager product. We apologize you can post the error to the OTN forum and we will get back to you as soon as possible.Attachments:Build Information:***************************************************************************** Oracle BPEL Server version 10.1.3.3.0Build: 0 Build time: Fri Jun 15 06:05:31 PDT 2007 Build type: release Source tag: PCBPEL_10.1.3.3.0_GENERIC_070615.0525 Exception Message:[java.lang.NoSuchMethodException] com.collaxa.cube.ejb.impl.FinderBean.tryLookupInstanceByReferenceId(java.lang.String, com.oracle.bpel.client.auth.DomainAuth) Exception Trace:java.lang.NoSuchMethodException: com.collaxa.cube.ejb.impl.FinderBean.tryLookupInstanceByReferenceId(java.lang.String, com.oracle.bpel.client.auth.DomainAuth) at java.lang.Class.getMethod(Class.java:1581) at com.evermind.server.ejb.interceptor.MethodStateFactory.createMethodState(MethodStateFactory.java:112) at com.evermind.server.ejb.deployment.ExposableBeanDescriptor.createMethodStates(ExposableBeanDescriptor.java:657) at com.evermind.server.ejb.deployment.ExposableBeanDescriptor.getRemoteComponentMethodStates(ExposableBeanDescriptor.java:723) at com.evermind.server.ejb.deployment.ExposableBeanDescriptor.getMethodState(ExposableBeanDescriptor.java:599) at com.evermind.server.ejb.AbstractEJBObject.OC4J_getMethodState(AbstractEJBObject.java:385) at FinderBean_RemoteProxy_4bin6i8.lookupDomain(Unknown Source) at com.oracle.bpel.client.Locator.lookupDomain(Locator.java:228) at _index._jspService(_index.java:78) at com.orionserver.http.OrionHttpJspPage.service(OrionHttpJspPage.java:59) at oracle.jsp.runtimev2.JspPageTable.service(JspPageTable.java:462) at oracle.jsp.runtimev2.JspServlet.internalService(JspServlet.java:594) at oracle.jsp.runtimev2.JspServlet.service(JspServlet.java:518) at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) at com.evermind.server.http.ResourceFilterChain.doFilter(ResourceFilterChain.java:65) at oracle.security.jazn.oc4j.JAZNFilter$1.run(JAZNFilter.java:396) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAsPrivileged(Subject.java:517) at oracle.security.jazn.oc4j.JAZNFilter.doFilter(JAZNFilter.java:410) at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:623) at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:370) at com.evermind.server.http.ServletRequestDispatcher.unprivileged_forward(ServletRequestDispatcher.java:259) at com.evermind.server.http.ServletRequestDispatcher.access$100(ServletRequestDispatcher.java:51) at com.evermind.server.http.ServletRequestDispatcher$2.oc4jRun(ServletRequestDispatcher.java:193) at oracle.oc4j.security.OC4JSecurity.doPrivileged(OC4JSecurity.java:283) at com.evermind.server.http.ServletRequestDispatcher.forward(ServletRequestDispatcher.java:198) at com.collaxa.cube.fe.DomainFilter.doFilter(DomainFilter.java:131) at com.evermind.server.http.EvermindFilterChain.doFilter(EvermindFilterChain.java:15) at oracle.security.jazn.oc4j.JAZNFilter$1.run(JAZNFilter.java:396) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAsPrivileged(Subject.java:517) at oracle.security.jazn.oc4j.JAZNFilter.doFilter(JAZNFilter.java:410) at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:621) at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:370) at com.evermind.server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:871) at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:453) at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:302) at com.evermind.server.http.AJPRequestHandler.run(AJPRequestHandler.java:190) at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260) at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303) at java.lang.Thread.run(Thread.java:595)

Para resolverlo hay que realizar lo siguiente:

  1. Todo consiste en remplazar el ejb_ob_engine.jar con una copia que se encuentra en otra carpeta. Lo siguiente asume que la SOA Suite (BPEL) está ejecutándose en el container OC4J_SOA.
  2. Primero hay que parar el container con: opmnctl stopproc process-type=OC4J_SOA
  3. Cambiarse a la carpeta $ORACLE_HOME/j2ee/OC4J_SOA/applications/orabpel
  4. Borrar el archivo: ejb_ob_engine.jar
  5. Copiar el archivo $ORACLE_HOME/bpel/system/j2ee/ejb/ejb_ob_engine_oc4j.jar a la carpeta $ORACLE_HOME/j2ee/OC4J_SOA/applications/orabpel
  6. Renombrarlo de ejb_ob_engine_oc4j.jar a ejb_ob_engine.jar
  7. Iniciar la SOA SUITE: opmnctl startproc process-type=OC4J_SOA

Con esto al entrar al BPELConsole ya no se tendrá el problema anteriormente mencionado.



Proxima Semana en el Chile OUG y Developers Day en Argentina

0

El próximo Lúnes y Martes estaré participando en el primer Chile OUG que se llevará a cabo en Santiago. El evento cuenta con la participación de varios de los directores ACE de Oracle para América Latina como Plinio Arbizu de Perú, Mauricio Naranjo de Colombia y Francisco Muñoz Alvarez de Chile quien hace parte del comite organizador. Así mismo habran distintos invitados internacionales Tim Hall y Dennis Remmer.

Desde ya este evento promete ser el más grande de su tipo realizado en la región. Por mi lado estaré presentando 2 charlas sobre Fusion Development y Desarrollo de Aplicaciones Empresariales Ricas. Así mismo estaremos liderando un Masterclass sobre ADF durante el evento.

Terminado Chile estaré desplazandome a Argentina donde participaré de un evento para Desarrolladores en la ciudad de Buenos Aires presentando la plataforma de desarrollo para Oracle Fusion. Una semana bastante agitada la que se viene.

Nos vemos en Chile y Argentina!!



Excelente Podcast Sobre ADF/JDeveloper y JDeveloperLA

0

El portal JavaHispano ha realizado un Podcast con la participación de Pedro Gallardo quien es responsable del área de Middleware en BBR Ingineria en España. En el Podcast Pedro nos relata la historía del sitio JDeveloperLA, la fuerza que ha adquirido este portal dentro de la comunidad hispana en torno a JDeveloper y también nos habla sobre muchas de las caráctecistas de ADF y su importancia estratégica dentro del mundo Oracle así como dentro del mundo de los frameworks JavaEE.

Material recomendado que se puede ir escuchando mientras van camino a su casa, o en la oficina mientras se responden emails... ;-)  El Podcast lo pueden encontrar aqui.


Post navigation