sábado, 19 de septiembre de 2009

Usando "ServiceLocator" en aplicación Web (Oracle ADF)

En esta oportunidad expondré de manera muy simple el uso de un patrón básico conocido como "ServiceLocator" a través del cual "ocultaremos" el acceso a través de JNDI hacia el servicio. Para ello lo primero que expondremo será la clase del localizador, la misma que se puede ver en la siguiente figura.






Tomando como base esta clase consideramos que contamos con un EJB desarrollado bajo las siguientes especificaciones (ver listado siguiente).







De acuerdo con el diseño anterior, se presenta el siguienten listado de código para el EJB ProyectosSessionEJB.






Como puede apreciarse, en JNDI se encuentra registrado el EJB bajo el nombre ProyectosSessionEJB y localizado bajo java:comp/env/ejb/ProyectosSessionEJB. Debemos colocar la referencia al EJB dentro del web.xml de la aplicación Web ADF, tal y como se indica a continuación.







Ahora estamos en condiciones de utilizar la clase inicial ServiceLocator desde nuestra aplicación Web ADF de la siguiente forma.






En código anterior, se considera que el localizador de servicios es inyectado cuando se inicia el ciclo de vida de ADF sobre la propiedad del Bean del formulario denominada "serviceLocator". El archivo adf-config.xml deberá tener un contenido similar al siguiente:



domingo, 10 de mayo de 2009

Utility Services

Microsoft define a los Utility Services como servicios que "...provide generic, application-agnostic services that deal with aspects other than transporting application messages. Like Communication Services, the functionality they offer is part of the base infrastructure of an SOA and is unrelated to any application-specific logic or business process. For example, a discovery service may be used by components in a loosely coupled composite application to discover other components of the application based on some specified criteria; for example, a service being deployed into a preproduction environment may look for another service that implements a certain interface that the first service needs and that is also deployed in the preproduction environment. Examples of Utility Services include security and idEntity Services (for example, an Identity Federation Service or a Security Token Service), discovery services (such as a UDDI server), and message-transformation services."

Adicionalmente, los "...Utility Services may also be instructed or configured by a particular application on how to perform an operation on their behalf. For example, a message-transformation service may transform messages from one message schema to another message schema based on a transformation mapping that is provided by the application using the message-transformation service".


(Fuente:
http://msdn.microsoft.com/en-us/library/bb491121.aspx#jour11ontology_topic1)

Coreografía de Servicios

"...does not rely on a central coordinator. Rather, each Web service involved in the choreography knows exactly when to execute its operations and with whom to interact. Choreography is a collaborative effort focusing on the exchange of messages in public business processes. All participants in the choreography need to be aware of the business process, operations to execute, messages to exchange, and the timing of message exchanges". Ver la siguiente figura (fuente: Oracle).


"A technique used to characterize and to compose service-oriented business collaborations based on ordered message exchanges between peer entities in order to achieve a common business goal...Choreography differs from orchestration primarily in that each party in a business collaboration describes its part in the service interaction in terms of public message exchanges that occur between the multiple parties as standard atomic or composite services, rather than as specific service-oriented business processes that a single conductor/coordinator (e.g., orchestration engine) executes"

"...This typically involves use of a standards-based choreography scripting language. An example of such a language is the Web Services Choreography Description Language [WS-CDL]..."

(fuente: OASIS
http://docs.oasis-open.org/soa-rm/soa-ra/v1.0/soa-ra-pr-01.pdf)

Orquestación de Servicios

La Orquestación de Servicios constituye "A technique used to compose hierarchical and self-contained service-oriented business processes that are executed and coordinated by a single agent acting in a "conductor" role...An orchestration is typically implemented using a scripting approach to compose service-oriented business processes."
(fuente:
http://docs.oasis-open.org/soa-rm/soa-ra/v1.0/soa-ra-pr-01.pdf)


"...is usually used in private business processes, a central process (which can be another Web service) takes control of the involved Web services and coordinates the execution of different operations on the Web services involved in the operation. The involved Web services do not "know" (and do not need to know) that they are involved in a composition process and that they are taking part in a higher-level business process. Only the central coordinator of the orchestration is aware of this goal, so the orchestration is centralized with explicit definitions of operations and the order of invocation of Web services". Ver la siguiente figura (fuente Oracle).

Servicio de función técnica

"These are services that are reusable, but that do not provide business functions; rather, they provide the technical or infrastructure functions required to support service interactions in IT systems, such as auditEvent, checkUserPassword, or checkUserAuthorization. These services can then be implemented and coordinated (routed, choreographed, and aggregated) by dedicated application and infrastructure components in the SOA architecture." (IBM)

Estos servicios tienden a ser los habilitadores de la QoS (Quality of Services) y por ende incluye a aspectos relativos a: clustering, integridad transaccional, mensajería, disponibilidad, seguridad, failover, escalabilidad, entre otros. Son servicios preimplementados por middlewares (Messaging Queue, ESB, WSM, etc.)

Servicio de función de negocio

De acuerdo con IBM, un "Business function services represent business functions that return data or perform simple calculations, but do not by themselves change the state of the business. Such services might include calculateDollarValueFromYen or getStockPrice".

De acuerdo con IBM, en este tipo de servicio se incluyen a aquellos servicios cuyo propósito radica en proveer de información relacionada con los objetos de negocio a servicios de más alto nivel. Constituyen servicios de menor de nivel de granularidad que los "servicios de proceso de negocio" y de la composición de estos con los "servicios de transacción de negocio" y de "función técnica" debe resultar posible componer u orquestar un proceso de negocio (visto en término de una caja negra como un servicio de proceso de negocio).

Servicio de transacción de negocio

De acuerdo con IBM, un "Business transaction services represent business functions that change the state of the business in some way, such as by procuring materials of services from a supplier, or by recording a new transaction on behalf of a client. Such services might include orderStock or transferFunds."

Estos constituyen los casos de servicios que intervienen en la instrumentación de un proceso de negocio y que debido a su ejecucion permiten cambiar el estado de los objetos de negocio que participan del proceso. Estos objetos de negoci adquieren forma técnica durante la instrumentación a través de clases, objetos o simplemente en las tablas de las bases de datos donde los datos de los objetos persisten en el tiempo. Podríamos considerar a estos servicios, en término de granularidad, más finos que los servicios de proceso de negocio.