Mostrando entradas con la etiqueta JDeveloper 11g. Mostrar todas las entradas

Filtrando Colecciones de Datos con ViewCriterias Utilizando Programación

1

Desde las primeras versiones de ADF 11g les había hablado acerca de uno de los componentes de los ViewObjects llamado ViewCriteria a través de los cuales podemos definir sentencias “FindBy” o en otras palabras sentencias para filtrar los datos de una colección con base en uno o más criterios.

En este articulo vamos a ver como trabajar con ViewCriterias utilizando programación para manualmente filtrar los resultados de una colección de datos, producto de una pregunta que se dio en el foro de OTN.

Nuestro punto de partida es una aplicación que tiene sus servicios de negocio basados en Business Components en donde tenemos un VO de Empleados el cual tiene 2 ViewCriterias definidas EmployeeViewCriteria1 y EmployeeViewCriteria2 –la primera filtra los salarios superiores a 10000 y la segunda filtra los empleados que tengan comisión por Ventas asignada (no null). Cabe aclarar que el comportamiento por defecto de las ViewCriterias es que al ser aplicadas van a sobre escribir cualquier otra ViewCriteria que se haya ejecutado previamente, sin embargo también se pueden configurar de tal forma que la ejecución de las mismas sea acumulable.

Lo primero que vamos a hacer es crear algunos métodos propios sobre nuestro VOImpl a través de los cuales vamos a invocar el API de los ViewObjects y de esta forma poder aplicar y remover VCs

    //En la clase EmployeesVOImpl.java
    public void applyVC(String name){
        setApplyViewCriteriaName(name,true);
        executeQuery();
    }
    public void removeVC(String name){
        removeApplyViewCriteriaName(name);
        executeQuery();
    }


Exponemos estos métodos para que hagan parte de las operaciones que se pueden invocar desde la interfaz. Luego necesitamos crear la lógica en la vista para invocar estos métodos y pasar los parámetros adecuados.



Para este ejemplo hemos creado una página sencilla que contiene 4 links – 2 para aplicar las VCs y otros 2 para removerlas.



image



Dentro de cada uno de los links hago uso de la operación setPropertyListener la cual me sirve para asignar el valor de la VC que quiero invocar a una variable dentro de un managed bean. El código de mi página queda entonces de la siguiente forma:



<af:commandLink text="applyVC1" id="cl1"
                actionListener="#{HRTestBean.applyVC_action}">
  <af:setPropertyListener from="EmployeesViewCriteria1"
                          to="#{HRTestBean.criteriaName}"
                          type="action"/>
</af:commandLink>
<af:commandLink text="applyVC2" id="cl1"
                actionListener="#{HRTestBean.applyVC_action}">
  <af:setPropertyListener from="EmployeesViewCriteria2"
                          to="#{HRTestBean.criteriaName}"
                          type="action"/>
</af:commandLink>


Dentro de mi managed bean todo lo que tengo que hacer es invocar el método respectivo por medio del OperationBindingContainer.



public class HRTestBean {
  
  public String criteriaName;
  
  public HRTestBean() {
  }
    public void setCriteriaName(String criteriaName) {
        this.criteriaName = criteriaName;
    }
    public String getCriteriaName() {
        return criteriaName;
    }
    public void applyVC_action(ActionEvent actionEvent) {
       executeCriteria("applyVC");
    }
    public void removeVC_action(ActionEvent actionEvent) {
        executeCriteria("removeVC");
    }
    
    public void executeCriteria(String name){
        String cName = getCriteriaName();
        BindingContext bctx = BindingContext.getCurrent();
        DCBindingContainer bc = (DCBindingContainer)bctx.getCurrentBindingsEntry();
        OperationBinding opb = (OperationBinding)bc.getOperationBinding(name);
        opb.getParamsMap().put("name",cName);
        opb.execute(); 
    }
}


Y finalmente asigno un partialTrigger a mi tabla para que se refresque cada vez que doy click a uno de los links.


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.



Matriz the Migración de Woodstock a ADF Faces RC

0

Para todos aquellos desarrolladores que estén utilizando los componentes de Woodstock que proporcionaba Sun, quien en días recientes anunció que no iban a continuar siendo desarrollados. Los invitamos a que conozcan los componentes del Framework ADF llamados ADF Faces Rich Client components.

Hemos publicado en OTN una página que contiene la matriz de migración de los componentes así como también enlaces de gran ayuda que le van ayudar a comenzar a trabajar con los ADF RC.

La página se encuentra en el siguiente enlace.

http://www.oracle.com/technology/products/adf/adffaces/woodstock2adfMatix.html


Aprendiendo Sobre Aplicaciones Empresariales Ricas

0

Hace algunos días se lanzó el sitio rea.oracle.com para que se puedan probar, aprender y tener contacto con las tecnologías usadas para crear las aplicaciones empresariales ricas. Este sitio ha sido construido con componentes ADF Faces. Aquellos que han trabajado o visto los DVT o Data Visualization Components apreciarán que el componente principal de navegación es un nuevo componente no incluído en la versión actual de producción llamado el Hierarchy Viewer o visor de jerarquías.

image

Este sitio combina información tanto de ADF como de WebCenter y tiene los accesos directos a demostraciones, tutoriales y documentación.


Desplegando Aplicaciones ADF 11g en JBoss 5 parte 1

12

A través de una serie de artículos comenzamos en el 2009 hablando de la portabilidad de distintos tipos de aplicaciones ADF 11g en JBoss5. En este articulo voy a mostrar como desplegar una aplicación que utilice ADF Faces Rich Components únicamente, lo cual quiere decir que en este caso no vamos a hacer uso del ADFm para conectar la interfaz con la lógica de negocios. Para este ejemplo vamos a hacer uso de los backing beans para conectarnos programáticamente con los distintos servicios de negocio.

image

Requerimientos:

Para este ejemplo vamos a necesitar tener instalado en nuestros´máquinas JBoss 5.0GA y JDeveloper 11g. Para este ejemplo no voy a utilizar información almacenada en base de datos.

Estableciendo la conexión con JBoss

En las IDE Connections que se encuentran en la mano derecha de JDeveloper, cree una nueva conexión a un servidor JBoss la cual apunte al directorio deploy que se encuentra dentro del directorio de JBoss, para mi ejemplo yo utilicé la instancia default para desplegar mi aplicación por lo que apunto al directorio deploy dentro de la instancia de default.

image

Creando la aplicación de Ejemplo

He creado una aplicación sencilla que haga uso de los componentes de ADF Faces que contiene la siguiente estructura:

image

Como se puede apreciar, he creado un par de paginas JSPX (login.jspx and hello.jspx) las cuales tienen distintos componentes ADF Faces al igual que una plantilla propia que cree. Inicialmente intenté utilizar la plantilla de tres columnas que viene por defecto con JDeveloper, pero tuve problemas al desplegar ya que esta plantilla viene ya dentro de JDeveloper y WLS por lo que si se quiere utilizar tiene que ser incluida dentro del proyecto directamente.

Así mismo, he definido un caso de navegación desde la página de login a la página hello. La acción esta predeterminada por el caso pero la acción como tal esta definida a través de un ActionListener que se implementa dentro del backing bean llamado ADFLoginBean.java 

Librerias Requeridas

Adicione las siguientes librerías al la carpeta Lib de la misma instancia del servidor de JBoss y re-inicie el servidor una vez las haya adicionado.

<JDevHome>\jdeveloper\modules\oracle.adf.share_11.1.1\adflogginghandler.jar

<JDevHome>\jdeveloper\modules\oracle.adf.share_11.1.1\adf-share-support.jar

<JDevHome>\jdeveloper\modules\oracle.adf.share.ca_11.1.1\adf-share-base.jar

<JDevHome>\jdeveloper\modules\oracle.adf.share.ca_11.1.1\adf-share-ca.jar

<JDevHome>\jdeveloper\modules\oracle.bali.share_11.1.1\share.jar

<JDevHome>\jdeveloper\modules\oracle.adf.model_11.1.1\adfm.jar

<JDevHome>\jdeveloper\modules\oracle.adf.model_11.1.1\adflibfilter.jar

<JDevHome>\jdeveloper\modules\oracle.dms_11.1.1\dms.jar
<JDevHome>\jdeveloper\modules\oracle.javatools_11.1.1\javatools-nodeps.jar

<JDevHome>\jdeveloper\modules\oracle.javacache_11.1.1\cache.jar

<JDevHome>\jdeveloper\modules\oracle.jmx_11.1.1\jmxframework.jar

<JDevHome>\jdeveloper\modules\oracle.jmx_11.1.1\jmxspi.jar

<JDevHome>\jdeveloper\modules\oracle.jps_11.1.1\jps-api.jar

<JDevHome>\jdeveloper\modules\oracle.mds_11.1.1\mdsrt.jar

<JDevHome>\jdeveloper\modules\oracle.xdk_11.1.1\xml.jar

<JDevHome>\jdeveloper\modules\oracle.xdk_11.1.1\xmlparserv2.jar

<JDevHome>\jdeveloper\modules\oracle.xmlef_11.1.1\xmlef.jar

Desplegando la aplicación

Vaya a las propiedades del proyecto y edite el deployment profile, seleccionando JBoss como la plataforma de despliegue. Haga click derecho sobre el proyecto y elija deploy To y el nombre de la conexión a JBoss que creo inicialmente.

Verifique en la consola de JBoss que no hayan errores de despliegue, luego ya puede acceder a su aplicación a través del navegador.

En siguientes entradas mostraré como hacer los mismo con aplicaciones que utilicen otras partes del framework.


Invocando un proceso Síncrono de Oracle BPEL PM desde Oracle BPM Studio

3

Una colaboración de un compañero y gran amigo - Carlos Toso desde Costa Rica. El es un Senior Sales Consultant especialista en los temas de SOA y BPM.

En los últimos meses ha estado trabajando con un producto nuevo de Oracle llamado Oracle BPM y en este artículo se explica cómo integrarlo con Oracle BPEL PM.

Objetivo

El propósito de este documento es mostrar la facilidad y flexibilidad de integrar las 2 herramientas de Oracle para el diseno de flujos humanos utilizando Oracle BPM Studio y Oracle BPEL para la integracion con aplicaciones o flujos estructurados, ambas herramientas forman parte de la nueva suite de Oracle denominada Oracle BPM Suite.

PreRequisitos:

  • Jdeveloper 11.1.0
  • Oracle BPM Studio 10.1.3.4
  • Oracle BPEL 11g

Software Descargable

- Oracle Bea Products Download : http://www.oracle.com/technology/software/products/ias/bea_main.html?rssid=rss_otn_soft

- Oracle Products Download:

http://www.oracle.com/technology/software/index.html

Nota Importante:

Si se quiere replicar esta misma nota con versiones anteriores de JDeveloper 10.1.3.x, Oracle BPEL 10.1.3.x y Oracle Business Process Management Studio 6.0 MP4 se puede hacer sin mayor diferencia tan solo cambian algunas pantallas por la version de los productos


Paso 1

Crear un proyecto SOA Project

Y crear un ejemplo de un proceso muy sencillo utilizando Oracle BPEL, en este ejemplo utilice un Proceso Sincronico que invoca una consulta a la base de datos atraves de un parametro.

clip_image002

Paso 2

Una vez contruido el proceso en Oracle BPEL ejecutar el proyecto desde el archivo composite.xml

clip_image004


Paso 3

Ingresar a la consola de Enterprise Manager, por ejemplo: http://maquina:8988/SOAConsole, donde maquina es el nombre del server o de la maquina donde se instalo y se configuro SOA 11g en Jdeveloper.

clip_image006

Paso 4

Se debe de hacer una primera prueba o testing del proceso hecho en BPEL. Para hacerlo se selecciona el proceso y en el boton Actions seleccionar Test Service - Client

clip_image008

Paso 5

Cuando hacemos Testing sobre el proceso esto nos abre una pagina para definir los parametros de entrada al proceso y la definicion y ubicacion del Service Description

clip_image010

Paso 6

Hacemos un click sobre Service Description para poder capturar el WSDL del servicio del proceso BPEL

Ejemplo:

http://ctosovoy-cr:8988/soa-infra/services/default/BPMinvocaBPEL!1.0*2008-08-28_13-56-33_078/client?WSDL

clip_image012

Paso 7

Abrimos un proyecto o creamos un nuevo proyecto de Oracle BPM Studio y en el proceso con el Rol de Developer creamos a nivel del Project Navigator en Catalog creamos un nuevo module al cual denominaremos OracleBPEL

clip_image014

Paso 8

Ahora a nivel del module OracleBPEL hacemos boton derecho y en la lista de valores seleccionamos Catalogue Component / Web Service

clip_image016

Paso 9

Ahora en la pantalla Catalog Component Wizard copiamos en WSDL Address el EndPoint del proceso BPEL que obtuvimos en el Paso 6 y si dejamos el nombre del Module que te crea apartir del WSDL y hacer click en el boton Next

clip_image018

Paso 10

Deberia de aparecer una pantalla de Instropesting y haber completado el 100% de analisis del WSDL y de generarlo en tu BPM Studio.

clip_image020

Paso 11

Ahora verificamos en el Project Navigator bajo el Catalog / OracleBPEL / el cliente ClienteWSDL (el nombre del cliente puede variar dependiendo del nombre que se le dio en el paso 9) fue generado automaticamente

clip_image022

Paso 12

Ahora agregamos una actividad automatica en el flujo del proceso y la llamamos InvocacionBPEL y hacemos double click en esa actividad

clip_image024

Paso 13

Ahora debemos de arrastrar al editor de codigo lo siguiente: el Service, el Request y el Response, que en nuestro ejemplo serian

BPELProcess2Service, BpelProcess2ProcessRequest, BpelProcess2ProcessResponse y esto genera automaticamente el siguiente codigo

bpelProcess2Service = OracleBPEL.ClientWSDL.BPELProcess2Service()

clip_image026

Paso 14

El editor nos da un Warning donde nos solicita que las variables las debemos inicializar por tanto hacemos el siguiente cambio en el editor como a continuacion se describe

bpelProcess2Service as OracleBPEL.ClientWSDL.BPELProcess2Service = OracleBPEL.ClientWSDL.BPELProcess2Service()

bpelProcess2ProcessRequest as OracleBPEL.ClientWSDL.BpelProcess2ProcessRequest = OracleBPEL.ClientWSDL.BpelProcess2ProcessRequest()

bpelProcess2ProcessResponse as OracleBPEL.ClientWSDL.BpelProcess2ProcessResponse = OracleBPEL.ClientWSDL.BpelProcess2ProcessResponse()

clip_image028

Paso 15

Ahora escribimos a continuacion la variable que definimos bpelProcess2Service y le agregamos un punto al final para que nos muestre las opciones de los metodos y seleccionamos el que dice process y ENTER

clip_image030


Paso 16

Automaticamente nos crea un metodo para invocar al servicio de BPEL

process bpelProcess2Service

using payload = null

returning payloadOutput =

payloadOutput

Paso 17

Ahora le pasaremos un valor estatico al metodo que incorporamos en el paso anterios y para hacerlo escribimos la siguiente variable bpelProcess2ProcessRequest y le agregamos un punto al final para que nos muestre las opciones de los metodos y seleccionamos el que dice input y ENTER

clip_image032

Paso 18

A esta variable le asignamos un valor estatico por ejemplo :

bpelProcess2ProcessRequest.@input = "100"

Y reemplazamos el metodo que teniamos en el paso 16 de esta forma

process bpelProcess2Service

using payload = bpelProcess2ProcessRequest

returning bpelProcess2ProcessResponse =

payloadOutput

Paso 19

Dejando de esta manera el codigo en la actividad de invocacion de Oracle BPEL

clip_image034

Paso 20

Lo unico que nos hace falta para verificar el valor de respuesta del proceso de BPEL agregaremos al codigo la siguiente instruccion

Display bpelProcess2ProcessResponse.result

clip_image036

Con este ultimo paso el resultado del proceso de BPEL lo mostraremos en el LogViewer del Proceso BPM.

clip_image038

Listo!!! Ya tienen un ejemplo muy sencillo de como integrar tanto Oracle BPM Studio con Oracle BPEL.

Lo unico que hace falta es ejecutar el proceso de BPM Studio y tener el servicio de BPEL ejecutandose.

Conclusión:

A nivel de BPM (Business Process Management) que es una metodologia empresarial para la mejora de procesos hay muchos enfoques de abordar el modelaje de estos flujos por tanto se debe de contar diferentes alternativas de solucion y soporte a diferentes estandares que nos ayuden tanto en la flexibilidad como en la capacidad de integracion. Oracle BPM Suite incopora estandares tales como BPMN, XPDL, BPEL y el proposito final de esta nota tecnica es demostrar como en pocos pasos integramos ambas herramientas.

Links de interes:

http://www.oracle.com/technology/tech/soa/index.html (SOA)

http://www.oracle.com/technology/products/bpm/index.html (BPM)


Bienvenido JDeveloper 11g!!!

0

Andando corriendo de un lado a otro, con el Oracle Open World terminado y alistando todo para la puesta a producción de JDeveloper 11g, no pude ni siquiera hablar sobre el anuncio hecho durante el evento en relación a la puesta en producción de JDeveloper 11g.

Y que sucedió?........bueno que el día de hoy, luego de esta anhelada espera hemos salido a producción. Han sido algo más de dos años en los que fuimos liberando versiones de pre-producción que mostraban el progreso que se iba haciendo, pero que desafortunadamente no podían ser utilizadas para proyectos de producción por la naturaleza del contenedor principalmente.

JDeveloper 11g el cual es el primero de los productos pertenecientes al Fusion Middleware que sale en esta versión. Uno de los principales cambios en JDeveloper11g a diferencia de cualquier versión previa de JDeveloper es que a partir de esta, y tras la adquisición de BEA, el contenedor embebido que viene con la herramienta y naturalmente que está en producción es WebLogic Server 10.3.


Así mismo la herramienta cuenta con muchas nuevas características pero conservando la esencia en tiempo de desarrollo. En cuanto a la ejecución de aplicaciones, se presentan algunos pequeños cambios ya que al ejecutar una aplicación por primera vez esto inicia una instancia del contenedor embebido WLS y luego se hace un despliegue de la aplicación sobre esta instancia, la cual en el momento de ser detenida se desmonta (undeploy) de la instancia del servidor que esta corriendo. Con esto lo que se logra es que sobre una instancia del servidor se pueden ejecutar varias aplicaciones en simultanea.
Otro de los cambios comparado con versiones previas es que dada la naturaleza de WLS, este tiene que ser instalado, por lo que ahora JDeveloper cuenta con un instalador. El instalador de JDeveloper requiere in mínimo de JDK6u6. El instalador de JDeveloper se puede obtener como .EXE o en .JAR para el cual se debe tener el JAVA_HOME apuntando al JDK6 y luego a través de línea de comandos se lanza el instalador por medio de java -jar jdevstudio11110install.jar.


JDeveloper 11g viene también con la versión en producción de ADF 11g el framework de desarrollo Java EE de Oracle con el cual se pueden desarrollar aplicaciones ricas en Internet utilizando tecnologías como AJAX, JSF, EJB/JPA, Business Components.


Para más información sobre JDeveloper se puede ir a la página principal
http://www.oracle.com/technology/products/jdev/index.html
El equipo de JDeveloper ha puesto una página de preguntas y respuestas bastante bueno que se puede acceder aquí
http://www.oracle.com/technology/products/jdev/htdocs/jdeveloper11g...

Voy a intentar cubrir nuevas características de JDeveloper11g en los próximos artículos ojalá antes de que se nos llegue otro release..... ;-)


Entrenamiento de 5 dias para Partners en ADF 11g

0

Como anunció Shay en su blog. Para todos los que trabajen en compañías Partners de Oracle y quieran tener un entrenamiento avanzado en ADF 11g, compren sus tíquetes para San Francisco para la semana del 27-31 de Octubre. Nos vemos en la Casa Matriz de Oracle (aka Headquarters). Aquí pueden encontrar más información al respecto.

Si están asistiendo al entrenamiento no duden en contactarme, podríamos realizar una cena con todo el grupo y extender los lazos de amistad entre la comunidad Hispana de ADF.


Pasando Parámetros a una Página desde un Bean

1

El requerimiento es que se quiere pasar algún tipo de información a la Interfase del Usuario, esta información es generada a través de un Bean. La idea es que en el momento que la página sea desplegada se presente la información.

En este ejemplo vamos a crear un Bean llamado myTest el cual contiene un método que retorna una cadena de caracteres. El objetivo es utilizar este método para asignar el título a una página. El codigo del Bean es:

public class MyTest {
    public MyTest(){
    }
        public String retornaCadena(String myString){
            String result = "Navegando en el Departamento: "+myString;
            System.out.println(result);
            return result;
        }
}DataControl

Luego creamos un Datacontrol para este bean el cual nos va permitir hacer el binding a este método. Esta no es la única forma en que podemos exponer la lógica para las interfaces, podríamos también empaquetar este bean y su data control dentro de un archivo JAR e importarlo en otros proyectos, esto nos va a permitir visualizar el Data control de la misma forma.

 

A continuación creamos un par de proyectos, uno para los serviciPaginaInicialos (lógica de negocio) y otro para el UI. Por el lado de los servicios para este ejemplo vamos a crear Business Components para la tabla Departments del esquema HR. Para la interfase de usuario creamos una nueva página JSF y adicionamos un panelHeader y una forma de lectura (Read Only Form) con opciones de navegación del Departamento.

methodBinding Para asignar el encabezado del panelHeader utilizando el método, vamos al tab de bindings, creamos un nuevo MethodAction binding donde seleccionamos le método del datacontrol y al parámetro de entrada vamos a utilizar el binding del nombre del departamento.

Este binding requiere de algún ejecutable para poder ser invocado por lo cual creamos también un nuevo ejecutable de tipo invokeAction, buscamos el methodBinding que acabamos de crear y damos un id cualquiera. Una vez lo hayamos definido ajuste la propiedad de refresh de este ejecutable a ifNeeded, esto hace que cada vez que naveguemos a otro departamento el método va a ser ejecutado.

Finalmente para asignar el encabezado tenemos que crear un variableIterator en los ejecutable que mapee la variable de retorno del método y un attributeValue binding. Sin embargo esta parte la podemos hacer de manera automática si dentro de la página arrastramos y soltamos el valor de retorno del método y lo mapeamos como un outPutText, luego si volvemos a los bindings vamos a poder ver la estructura creada de esta forma:resultado

 

 

 

 

El código objetivo en el pageDef es:

<executables>

...
    <invokeAction Binds="retornaCadena" id="invocaMetodo" Refresh="ifNeeded"/>
    <variableIterator id="variables">
      <variable Type="java.lang.String" Name="retornaCadena_Return"
                IsQueriable="false" IsUpdateable="0"
                DefaultValue="${bindings.retornaCadena.result}"/>
    </variableIterator>
  </executables>
  <bindings>
...       

<methodAction id="retornaCadena" InstanceName="MyTest.dataProvider"
                  DataControl="MyTest" RequiresUpdateModel="true"
                  Action="invokeMethod" MethodName="retornaCadena"
                  IsViewObjectMethod="false"                  ReturnName="MyTest.methodResults.retornaCadena_MyTest_dataProvider_retornaCadena_result">
      <NamedData NDName="myString" NDValue="${bindings.DepartmentName}"
                 NDType="java.lang.String"/>
    </methodAction>
    <attributeValues IterBinding="variables" id="Return">
      <AttrNames>
        <Item Value="retornaCadena_Return"/>
      </AttrNames>
    </attributeValues>
  </bindings>

Para finalizar en la propiedad Text del panelHeader ya podemos hacer el binding del resultado del método #{bindings.Return.inputValue} y tendriamos como página terminada

resultadoFinal

Este ejemplo aplica cuando se quiere determinar de manera dinámica los strings de una página a través de un ResourceBundle o también enviar valores calculados bajo cierta lógica.


Los Tipos de Listas de Valores y Algunos Tips

1

En estos días estuve trabajando con un requerimiento de un proyecto en el cual detectamos algunas características especificas de las listas de valores en JDev11g, a partir de lo cual decidí crear esta entrada. Dado que en post anteriores ya he presentado las bases en como crear las listas de valores, en este articulo voy a explicar brevemente los distintos tipos que se tienen en JDev11g, así como también algunos tips para trabajarlas.

Vamos a presentar los distintos Departamentos de una organización como una lista de valores; internamente el atributo que nos interesa es el ID del departamento (departmentId), sin embargo para el UI la idea es presentar el nombre del mismo (departmentName).

Types

Los tipos que tenemos desde el Modelo en el cual definimos la lista son:

Choice List y Combo Box: Es la opción a elegir para obtener un af:selectOneChoice o la lista de valores tradicional. La unica diferencia es que con combo boxes se puede tener un historial de los elegidos previamente.

ComboBox with List of Values: Esta opción se renderiza como un af:inputComboboxListOfValues esta lista de valores se puede presentar directamente como un look and feel más AJAX, o también tiene la funcionalidad automática de presentar un componente de busqueda. comboInput

Muy util para cuando se requiere hacer un query sobre otra tabla para obtner este valor. Una característica de esta lista es que si en un backing bean hacemos ejecutamos getValue(), esta lista nos va a devolver por defecto el número correspondiente a la posición, más no el ID. Si queremos obtener el valor, en el binding de la lista ajustamos la propiedad includeSelectionAttr

binding

Input Text with List of Values: Parecido al anterior pero en este caso el UI se presenta como una lupa de busqueda, renderiza como un af:inputListOfValues, la cual puede activar una busqueda o puede hacer un query directo a la fuente de datos, si se quiere hacer la busqueda sobre otra tabla, es ideal.

inputTextWListList Box: Presenta la lista dentro de una caja de opciones, ideal cuando se quiere seleccionar más de un valor. Se renderiza como un af:selectOneListBox.

listBox

 

Estas presentaciones de listas pueden también ser intercambiadas en la interfaz gráfica así como también los tipos de bindigs, de las mismas.  Para cambiar una lista desde la interfaz, solo basta con ir a la estructura, seleccionar la lista de valores, click derecho y hacer click en Convert. Esto también se puede hacer directamente sobre el diseñador gráfico.

Otro de los elementos que se puede configurar desde la definición a través del VO es la opción de búsqueda. Esta opción permite crear un pop-up para realizar una búsqueda la fuente de datos de la lista (lo cual puede ser otro VO y en este caso lo que se hace es ejecutar el query con base en ciertos parámetros.

El o los valores que se retornan, una vez se escoge un elemento de la lista es también configurable, lo cual es una opción es muy útil si requerimos asignar más de un valor sobre atributos del VO base.

returnValues 

El binding de las listas de valores puede ser de 2 tipos List binding o ListOfValue binding. El segundo nos da una serie de opciones avanzadas para configurar el comportamiento de la lista, normalmente de acuerdo como se defina la lista desde el VO este binding se hace de manera automática, sin embargo a través del PageDef podríamos cambiar entre uno y otro.


¿Cómo comenzar con ADF/JSF/SOA/WebCenter?

0

Los Cue Cards, son una serie de 26 tutoriales, los cuales están divididos por tecnologías y a diferencia de las guías del desarrollador y los Oracle-By-Example, estos tutoriales son cortos y muy enfocado en proporcionar aspectos básicos de la tecnología.  En JDeveloper se pueden acceder los tutoriales a través del  menú Help->Cue Cards

A partir del TP4 de JDeveloper estos tutoriales se publicaron también en OTN y están ubicados en el siguiente link: http://www.oracle.com/technology/products/jdev/11/cuecards/index.html

 

Esta es una excelente herramienta para todos aquellos que quieran comenzar a familiarizarse con las distintas herramientas de desarrollo en Oracle Fusion Middleware de manera rápida.


JDeveloper TP4 Liberado en OTN

0

Acaba de ser liberado en OTN una nueva versión de JDeveloper 11g, justo a tiempo para JavaOne que va a ser la próxima semana en San Francisco. Esta versión es un Technical Preview4 lo cual indica que no es la versión final de JDeveloper 11g release1; Sin embargo, esto no quiere decir que no estemos trabajando activamente en los bugs de versiones anteriores y en las mejoras solicitadas, el detalle de las nuevas características de este release esta disponible en este enlace.

El software lo pueden descargar de aqui y esperamos nos den su retroalimentación a través del foro en OTN, contamos con ustedes para que JDev se ajuste de la mejor forma a sus requerimientos, recuerden que si tienen algún problema que quieran reportar el cual esta presente en alguno los TP pasados, es necesario que lo reproduzcan en este último TP4 para asegurarse que el bug no ha sido corregido.

Espero poder sacar tiempo para que continuemos evaluando más características nuevas de JDev11g.


Trabajando con Listas de Valores en JDev11g - Parte 2

5

Tenia desde hace bastante tiempo este articulo planeado, pero una combinación de carga laboral, más otras actividades tienen mi horario bastante ajustado, sin embargo el blog es algo que por ahora no voy a dejar de un lado y espero continuar de manera activa la publicación de artículos.

Dejando un poco la introducción y entrando al tema, vimos en el post pasado como crear listas de valores. Esta vez vamos a ver como podemos asociar listas de valores a partir del modelo, lo cual se llama Listas de Valores en Cascada. Esta es una funcionalidad asociada con requerimientos tipo País/Estado/Ciudad, Ordenes/Detalle/Producto, etc.

Para este ejemplo vamos a tomar el esquema HR utilizando las tablas Locations, Regions y Countries. Y el objetivo final es el de crear/editar las distintas ubicaciones de los departamentos en este caso basándonos en la región, luego al país y finalmente al estado.

Nuestra estructura objetivo a nivel del modelo tiene los EOs y VOs que se crean con base en el modelo de datos a través del asistente. Adicionalmente se necesitan crear 2 VOs de lectura basados en un Query, estos son, FilterRegions y FilterState, los cuales cumplen la misión de filtrar las listas de valores con base en el elemento seleccionado.

Una características importante de los VOs que creamos para filtrar es que estos van a tener una clausula Where asociada que se implementa como una ViewCriteria, lo cual lo vimos en la primera parte de esta serie. Nuestros 2 VOs de filtrado quedan así

Ahora dentro del VO de Locations, lo que hice fue crear un atributo nuevo para efectos del demo llamado Region, este atributo va a filtrar las regiones con base en el regionID, la cual tiene varios países y luego miramos los estados del país. La parte importante aqui es que cuando creamos la Lista de valores para el país (CountryId) y estado(StateProvince) tenemos que primero asociar el VO de filtrado respectivo así

luego se edita la relación del View Accessor en donde vamos a seleccionar la viewCriteria que tiene el VO que filtra para así mapear la variable de la clausula where con uno de los atributos del VO Locations así:

Hacemos los mismo para el estado y con esto tendríamos el modelo listo. Para la parte del UI lo unico adicional que se tiene que hacer es especificar en las listas de valores las propiedades autosubmit para que así la acción de seleccionar sea enviada al servidor y este re-ejecute el query, la segunda propiedad es PartialTriggers en la cual vamos a especificar sobre que componente la lista de valores va a invocar un recarga (refresh) parcial para que se actualicen los valores con base en los datos del nuevo query que fue ejecutado.


SOA Suite 11g Technical Preview

0

Tal como Juan había comentado en uno de sus posts previos, en http://otn.oracle.com pueden encontrar varios previews de lo que FMW 11g va a ser.
He tenido la oportunidad de probar Jdeveloper 11g, sobre todo en lo que se refiere a componentes de SOA.

Pueden descargarlo de aquí y un primer tutorial lo pueden encontrar en esta ubicacion, ahí mismo viene cómo instalarlo.

La primer parte que me llamó mucho la atención es que ahora con tener JDeveloper y una Base de Datos Oracle, que bien pudiera ser XE, es suficiente para probar tus aplicaciones SOA. No necesitas instalar una capa media de Oracle AS y sobre de eso los productos como BPEL PM, ESB ,etc.
Todo lo puedes correr con el OC4J embedded que viene con el JDEV.

Así los pasos de instalación para tener un ambiente de desarrollo se reducen a:
1. Descargar JDev 11g
2. Instalar Base de Datos Oracle, como sugerencia XE
3. Desempaquetar el zip del JDEV
4. Correr el script de creación de usuario y esquema del repositorio SOA
5. Ir al Menú Tools de JDev, y escoger "Configure SOA..."


Como recomendación, antes de hacer la configuración, declaren la variable de ambiente:
JDEV_USER_DIR=d:\jdev11

donde d:\jdev11 es la ubicación en donde descomprimieron el de Jdev 11g.

Si no hacen ésto, al configurar los servicios de SOA, lo va a querer hacer abajo del directorio "Documents and Settings" y por los espacios les marcará errores.

Otro punto a resaltar es el uso del "Mediator", éste componente que antes lo veíamos como el propio ESB, ha evolucionado a ser el lugar en donde declaras todos tus servicios.
Básicamente se inicia el desarrollo de una aplicación pensando en:
1. Qué voy a exponer como servicio
2. A qué me voy a conectar y cómo (un Adapter, un Web Service por SOAP, WSIF, etc)
3. Cómo los voy a llamar. Aquí son los Servicios de Ruteo, Transformaciones y Flujos BPEL.


En los siguientes posts vamos a platicar mas sobre las nuevas características de la versión 11g de SOA Suite.


Algunos Tips para Trabajar con JDeveloper

0

El día de ayer estuve escuchando un podcast de Andrew Binstock sobre el mercado de los IDEs de Java durante el 07 y que viene para el 08 sobre el cual escribiré un articulo posterior, sin embargo en el reportaje se menciona que una de las áreas más sobresalientes de JDeveloper es el buen trabajo que se viene haciendo con respecto a la usabilidad del producto y la forma intuitiva en que se trabaja con el IDE de acuerdo a los roles del programador.


No solo la parte de usabilidad ha sido mejorada a través del tiempo sino que hoy en día JDeveloper cuenta con una interfaz rica no solo desde el diseño visual/asistido sino también desde el teclado el desarrollador tiene a disposición una serie de atajos de teclado bastante útiles como también se cuenta con mini asistentes mientras se codifica que ayudan a que la experiencia de productividad sea aún mayor. A continuación presento algunas con las que he estado trabajando últimamente que se encuentran presentes en JDeveloper 11g, así mismo si usted tiene más tips que quiera compartir puede adicionar su comentario o me puede enviar un mail a j c r u i z (arroba) g m a i l y con mucho gusto la publico.


Asistentes:


Quick Outline (ctr + shift + back quote)

quickOutline

Dentro de una clase normal se tienen muchos métodos de acceso a los atributos (getters y setters) así como los métodos propios que se vayan creando, cuando necesitamos buscar un método dentro de ya varias lineas de codigo, podemos hacer un search, mirar dentro del panel de extructura o con JDeveloper podemos utilizar el Quick Outline, el cual nos presenta de manera rápida y sencilla todos los métodos que tenemos en la clase así como también los parámetros de entrada y el retorno.

Tiene una caja de busqueda y al dar doble click sobre un método nos lleva a la definición del mismo dentor de la clase.





Find Usages (ctrl + alt + u)

Usages

Es una excelente herramienta para hacer el seguimiento de código que otros desarrolladores hayan creado y poder hacer debugging. Uno puede buscar las llamadas de los métodos dentro del proyecto o dentro de toda la aplicación. Así mismo ofrece la posibilidad de buscar dentro de código que haya sido comentariado o buscar dentre de librerias.







Opciones de Compleción

autoCompletion

Existen distintas opciones para autocompletar codigo, para acceder a estas opciones

click der -> source

Dentro de las que más me gustan está el Complete statement con el cual uno empieza a definir un Objeto ya existente y con este asistente el auto completa la definición. Comportamientos similares tienen el Parameter y Smart Completion Insight. Ya contamos con más opciones fuera del Completion Insight que ya de por si es bastante útil.

Javadoc Rápido (ctrl + d)

javaDoc

Importante cuando se tienen los objectos propios de la aplicación con sus respectivo Javadocs. El asistente busca dentro de la definición de cualquier objecto para se pueda entender la utilización de algún método. Una herramienta valiosa para aquellos que utilizamos el Javadoc con frecuencia.


Plantillas Pre-definidas


Existen palabras pre-definidas que basicamente son atajos de teclado combinados con una serie de plantillas pre-definidas para ciertas instrucciones que se utilizan frecuentemente en la codificación de clases. En JDeveloper también se puede hacer uso de estas herramientas para aumentar la productividad al momento de programar:


codeTemplates

Para acceder a esta pantalla hay en que entrar

tools-> preferences -> code editor -> code templates

En esta pantalla se pueden ver las plantillas predefinidas así como tambien se puede crear nuevas. por ejemplo si al programar digito sop y luego tecleo ctrl + enter voy a tener toda la sentencia System.out.println();

Si se tienen más tips de JDeveloper que se quieran compartir me los hacen llegar y con mucho gusto los publicaré.


Post navigation