lunes, 30 de junio de 2014

Cómo funciona un session bean

Resumen: En este artículo vamos a ver cómo se ejecuta un session bean, observando su paso por el constructor.
En el artículo anterior (
) observamos que para un request bean, se pasaba por el constructor cada vez que se entraba en una página, o mejor dicho, que se entraba en el ciclo de ejecución o de generación de la página.

Nota: Puedes descargar el ejemplo (para 10g) en el siguiente enlace

Vamos a tomar el ejemplo anterior, y cambiamos el bean que era inicialmente de tipo Request a Session Bean.
Para ello modificamos desde el faces-config visualmente, aunque también lo podemos hacer a través de un editor.

vista faces-config
vista faces-config

cambio de Scope (ámbito)
cambio de Scope (ámbito)


Al modificarse el faces-config.xml, es recomendable hacer un " Rebuild" previo a una ejecución.
La razón, es que la ejecución toma ciertos cambios en la aplicación, pero no todos, mientra que un "rebuild" toma el proyecto y reconstruye la información interna que necesita para poder ejecutar la aplicación.
Es por esta razón, que en ocasiones, realizamos modificaciones, y la aplicaciones parece no darse cuenta de los cambios.

El "rebuild" se hace sobre la aplicación entera (Ejemplo01) o bien sobre un proyecto (Model o ViewController).

Tras hacer el "rebuild" ejecutamos la aplicación, y observamos el resutlado.

vista navegador
vista resultado en el navegador

mensajes durante ejecucion
mensajes durante ejecución

Como podemos ver aparentemente son similares los comportamientos.
Si pulsamos (F5 o Ctrol + R) y observamos la consola de mensajes, podemos ver que sólo tenemos una línea indicando que se ha pasado por el constructor.
La razón de esto, es que al ser un session bean, sólo se ejecuta el constructor una sóla vez durante esa sesión, que aunque refresquemos la página o nos vayamos a otra página de la aplicación, la instancia vigente será siempre la misma.

Esta diferencia es importante saberla, a la hora de guardar datos de la aplicación.
Por ejemplo, en una página que ejecute un proceso que tiene varios pasos (proceso de darse de alta en una aplicación, matriculación en un centro, asistente por pasos online etc), es importante saber en qué lugar colocar la información que se va recogiendo. Habrá alguna que sea propia de cada paso, y que podría estar en un bean de tipo request, pero otros datos, que son necesarios mantener hasta el final del proceso, sería entonces adecuado tenerla en un session bean.

Artículos relacionados:
-

-
-


Si te ha gustado este artículo, puedes seguir el blog por Blogger o Twitter

viernes, 27 de junio de 2014

Cómo funciona un bean request

Resumen: En este post vamos a ver el funcionamiento de un bean request. Veremos cuántas veces puede ser llamado durante la creación de una página hasta mostrar ésta.
Para ello utilizaremos el constructor del bean al que le pondremos un indicador que nos informe de que se ha ejecutado.
Esto lo haremos mostrando un mensaje en la consola (Messages - log), con la siguiente instrucción:

System.out.println("entrada al constructor");

codigo bean
vista del bean



En nuestro ejemplo, vamos a mostrar en pantalla dos valores que nos vendrá devueltos tras llamar a un método.
En este caso, los métodos los he llamado getTexto1() y getTexto2().
La razón de que sean métodos get ( accesors) es que desde la página jspx no podemos acceder al valor de una variable sino a través de un método "getter".

nuevas funciones get
funciones getter




Creamos la página (.jspx) en la cual vamos a mostrar los datos que se encuentran en los métodos indicados (ejemploBeanRequest.jspx).



creacion pagina jspx
creación de página jspx

Añadimos los OutputText que van a mostrar los textos que se encuentran en los métodos.

incluir outputtext
incluir OutputText


Enlazamos los outputText con los métodos que nos van a devolver el valor.

seleccionar binding
imagen de error al seleccionar binding


Típico error por despiste: Pulsando el atributo "Binding" (vincular), seleccionamos el bean, y la función correspondiente.
Como podemos observar en la siguiente imagen, no están disponibles los métodos que habíamos creado.
La razón es que esta vinculación se refiere a nivel de componente (CoreOutputText), y lo que hace es vincular el componente completo OutputText que tenemos en pantalla con un método que nos devuelve un componente.

binding funcion bean
binding a función de bean



Paso correcto: Se debe seleccionar el atribute "Value" que va a contener el valor que queremos que contenga el componente, con la opción "bind to data".

atributo value bind to data
atributo Value de OutputText

expression language binding
expresión del lenguaje (EL) que vincula el atributo Value con una función getter

expression language bind to funcion getter
expresión del lenguaje (EL) que vincula el atributo Value con una función getter


Ejecutamos la página y observamos el resultado.

ejecutar la pagina
ejecución de la página

resultado ejecucion
resultado ejecución



Observemos en la consola "Running embedded OC4J - Log (o el correspondiente servidor en 11g).

consola log
consola log


Como podemos observar, sólo se ha ejecutado una vez el constructor.
Si refrescáramos la página (F5 o Ctrol + R), veríamos que se vuelve a ejecutar el constructor.

mensajes llamada constructor
Messages - tras pulsar F5


Como conclusión, un request bean se ejecuta o mejor dicho, su ciclo de vida comienza y termina con la página.

Artículos relacionados:
-

-
-


Si te ha gustado este artículo, puedes seguir el blog por Blogger o Twitter

viernes, 20 de junio de 2014

Beans scope - Ámbitos de los beans

Resumen: En este artículo se presentarán los tipos de beans que existen, de acuerdo al ámbito al que se definen en su declaración.

En los beans se define un ámbito ( bean scope). Este ámbito se refiere principalmente a la información que contiene y que es mantenida durante la vida del bean.
No se debe confundir con el ámbito de las variables dentro de un bean (variables locales y globales).

Los tipos que se definen son:
- Application
: La información que contienen está disponible durante todo el tiempo de vida de la aplicación, mientras ésta se encuentra en marcha, y no se ha llamado al destructor correspondiente.

- Request: Este tipo de beans se instancia cada vez que se llama a un método de ésta, y se destruye una vez se entrega el control al cliente. Es decir, que tiene validez durante la creación de la página que va a mostrar, y luego, cuando se termine de generar ésta, la información que contienen desaparece.

- session: En este tipo de beans, la informacion está disponible durante la sesión del usuario.
La sesión no significa exactamente con la pestaña del navegador abierta, pues se puede mantener la sesión incluso cuando se cierra la pestaña. Por ello se puede entender que la sesión termina, o bien cuando se hace de forma manual en la aplicación, cuando se produce un tiempo de inactividad (session_timout) o bien cuando se cierra completamente el navegador.

- none: Este bean es instanciado cada vez que se referencia.

En la versión 11g, se añaden otros nuevos ámbitos para los beans:

- Page Flow: Su duración se encuentra delimitada por la ejecución de un bounded task flow.
Este tipo de ámbito no es estándar de JSF.

- Ámbito de backing bean: Es usado por "managed beans" para fragmentos de página y declarative components. Estará disponible hasta que entregue al cliente el control de la página.
Este tipo de ámbito no es estándar de JSF.

-
View scope: Está disponible hasta que el ID de la view actual cambie. La información se mantiene en la aplicación hasta que el id de la view cambie.
Este tipo de ámbito no es estándar de JSF.

Fuentes para este artículo:
(PDF)
11.5.1 How to Create and Configure a Backing Bean


20.4 Using a managed Bean in a Fusion Web Application

Artículos relacionados
- Cómo funciona un bean request

miércoles, 11 de junio de 2014

Skin selectors 11g

Resumen:En esta artículo se hará una introducción a los selectores de skins para ADF 11g. Veremos algunas diferencias respecto a la documentación en 10g, haremos referencia al skin Editor e incluiremos enlaces a documentos de referencia de etiquetas (Tag reference skin selector ).
Si desea ver esta información para 10g, lo puede hacer en este artículo:

De acuerdo a la documentación se indica dos tipos de selectores:
- Selectores globales ( global selectors). Que afectan a más de un componente.

- Selectores especifico de componentes ( component-specific selectors). Selectores que afectan a un componente específico.

A la hora de referirnos a los skins, independientemente del ámbito (específico o global), podemos encontrarnos en los textos con:

- Global selector alias
Utiliza un alias de clase (en 10g se llamaban pseudoclasses).
Normalmente se nombre los aliases con los selectores globales en general.
A la hora de escribirlos se añade la partícula ":alias" al final del nombre de la clase, para indicar que se trata de una pseudoclase.

Ejemplos de esto sería: .AFDefaultFontFamily:alias


- Pseudoelementos ( pseudoelements)
Este tipo de selectores especifica un área o aspecto concreto de un componente sobre el cual podemos definir los estilos.
En su sintaxis se utiliza la partícula "::" y a continuación el nombre del aspecto que queremos modificar.
Ejemplos:
af|chooseDate::days-row
af|inputText::content

- Selectores para iconos ( icon selectors)
Este no se puede separar explícitamente de los pseudoelementos, pero si tienen un espacio propio en la documentación.
La razón es que aunque al igual que en los pseudoelementos estamos tratando de una parte específica de un componente, esta parte contiene un icono.
Un ejemplo de este tipo de iconos pueden ser las flechas de avance/retroceso en un componente chooseDate.

En la sintaxis de este tipo de selectores, se suele terminar con la partícula "-icon" y "icon-style". Para el primer caso, se refiere a la imagen que se encuentra como fondo o que se utiliza en el componente, mientras que la segunda partícula se refiere a estilos que se aplican sobre el icono.

Junto a todo esto 11g incluye una novedad que no tenía la versión anterior de ADF: el Skin Editor
.

Si venías del 10g, el abrir el 11g y encontrarse con el skin Editor es como si te hubieran hecho un regalo. De un vistazo tienes todos los selectores, así como skins con los que viene el 11g y las características de cada uno de sus aspectos.
Recomiendo que en vez de leerte el manual directamente, juegues con la herramienta libremente para familiarizarte. Luego sí, puedes seguir el manual e integrarla en el proyecto que estás creando.

Se puede descargar el skin editor desde la misma página donde se pude descargar el JDeveloper.

Hay un manual específico para el skin Editor de 11g es el siguiente :




Nota: la url también la puedes encontrar en la sección de .

Para terminar el artículo incluyo dos páginas de referencia con todas las etiquetas que se utilizan en los skins.
La primera contiene casi todos los componentes en general y la segunda es específica de los componentes DVT (Data Visualization Tools - herramientas para visualizacion de datos)








Fuente del artículo:
Working with ADF Skins Selectors
Dentro del documento Oracle® Fusion Middleware Skin Editor User's Guide for Oracle Application Development Framework 11g
.

sábado, 7 de junio de 2014

Skin Selectors 10g

Resumen: En este artículo se va a introducir a los distintos tipos de selectores que ofrece ADF. En este primer artículo lo veremos desde la óptica de 10g, y en el siguiente artículo desde 11g (Skins Selectors 11g).
El cambio no es sustancial, pero si quiero reseñar la evolución del ADF, y las herramientas con las que se cuenta. También para indicar las referencias que se puede encontrar en Internet para estas dos versiones.

Los selectores ( selectors
) nos permite modificar un aspecto de un componente o conjunto de componentes.
Comparten en parte la sintaxis de CSS, aunque con pequeñas diferencias, especialmente en los selectores a nivel de componente, pseudoclases y pseudoelementos.

En algunos textos, los selectores se dividen en tres bloques:

- Selectores globales ( global selectors)
Estos selectores nos permiten modificar propiedades de estilo para múltiples componentes.
No de un conjunto específico de componentes, sino de todos los componentes que compartan cierta característica en común.
Por lo tanto, hay que tener cuidado con este tipo de selectores porque podemos cambiar propiedades que no deseamos.

- Selectores de botones ( button selectors)
Se usan para dar estilo a todos los botones de la aplicación.

- Selectores a nivel de componentes ( component-level selectors o simplemente, component selectors)
Modifican componentes o partes de los componentes.
Un tipo de selector que aparece dentro de este grupo son los dedicados a los iconos, que permiten cambiar imágenes o iconos que se utilizan en el componente.


Dentro de cada sección nos podemos encontrar a su vez, tres tipos de selectores
:
- Selectores estandar ( standard selectors). Representan directamente un elemento.
Ejemplo:
af|body representa al elemento af:body.
Nota: no ponemos af:body en el skin, sino que ponemos la sintaxis af|body.

- Selectores con pseudoelementos ( selectors width pseudo elements). Se suelen utilizar para un aspecto específico o un área de un componente.
Ejemplos de pseudoelementos:
af|column::cell-text
En este ejemplo estamos queriendo modificar el aspecto del texto que se encuentra contenido en la celda de un elemento af|column (columna).

- Selectores que usan el alias de pseudo clases.
Se utilizan para asignar estilos a más de un componente o a más de una porción de un componente.
Ejemplo: .AFMenuBarItem:alias puede definir propiedades que luego serán compartidas por:
- af:menuBar
- af|menuBar::enabled
- af|menuBar::selected
- etc

Tal como se puede ver en esta última clasificación, parece referirse más a la forma en que está escrita que a una clasificación en sí.
De hecho, es bastante fácil terminar asociando los selectores estándar o con pseudo elementos con los selectores a nivel de componentes, y los que usan alias de pseudoclases con selectores globales.
Lo dicho, es muy fácil realizar esta asociación.

Dependiendo del ámbito al que queramos llegar utilizaremos una forma u otra. Si queremos cambiar sólo un componente, utilizaremos una notación, y si queremos modificar varios o una faceta de todos los componentes, utilizaremos otra.


Referencia con todos los selectores, aliases, pseudoelementos, etc....
Oracle ADF Faces - Selectors for Skinning ADF Faces subsections
http://docs.oracle.com/cd/E12483_01/webcenter.1013/b31074/jpsdg_skins.htm



Fuente para el artículo