• Nenhum resultado encontrado

comportamento não-determinístico é uma 5-tupla op = h I,O,P re0,N D0,

K0i, tal que:

I = {i1, i2, . . . , in} refere-se a um conjunto de parâmetros de entrada.

O = {o1, o2, . . . , om} refere-se a um conjunto de parâmetros de saída.

P re0 = {p1, p2, . . . , pk} refere-se a um conjunto de pré-condições que

devem ser satisfeitas para que exista a chance da operação produ- zir os efeitos desejados. Caso as pré-condições sejam satisfeitas e nenhum erro ocorra em tempo de execução, então a operação produzirá um conjunto de efeitos desejados. Caso algum problema de execução ocorra, então algum conjunto de efeitos indesejados será produzido.

N D0 = {Effd, Effu} refere-se a um conjunto de efeitos não-determinís-

ticos, onde Effd denota um conjunto de efeitos desejados, isto é,

efeitos que ocorrem quando a operação finaliza a sua execução com sucesso, e Effu denota um conjunto de efeitos indesejados, isto

é, efeitos que ocorrem quando a operação não produz os efeitos desejados.

K0 refere-se ao custo de execução da operação.

Os componentes de uma dada operação op são identificados, ao longo deste texto, por I(op), O(op), P re0(op), N D0(op) e K0(op). Di- ferentes formas de mensurar o custo de execução K0 de operações vêm

sendo propostas. Dentre tais formas, o custo pode ser obtido dire- tamente das descrições do serviço (BENABOUD; MAAMRI; SAHNOUN, 2016;PAN; MAO, 2009), através de predição (CHEN et al., 2016b;WU et al., 2015) ou monitoramento e análise das execuções do serviços (ANGA-

RITA; RUKOZ; MANOUVRIER, 2015;HASAN; JAAFAR; HASSAN, 2014).

Fórmulas lógicas são utilizadas para descrever as condições neces- sárias para que as operações tenham chance de executar corretamente e as condições sobre as quais os efeitos desejados e indesejados ocorrem. Basicamente, tais fórmulas associam os parâmetros de entrada e saída das operações aos valores esperados, e podem ser usadas por um motor de execução auxiliando-os a identificar quando uma operação falhou em obter os efeitos desejados.

Como muitos parâmetros são de tipos complexos (i.e, elemen- tos em estruturas de dados), as fórmulas lógicas podem ser descritas utilizando os atributos de tais estruturas ou elementos, onde parâme-

troX.atributoY, por exemplo, indica o acesso ao atributo Y do parâ-

metro X. Qualquer conectivo lógico (i.e, ∧, ∨, ¬, →, ↔), operadores de comparação e aritméticos podem ser utilizados para expressar con- dições.

Como não é possível prever todos os efeitos indesejados em Web services, uma forma de expressar o conjunto de efeitos indesejados Effu é denotando-o como o complemento do conjunto de efeitos desejados Effd. Neste sentido, qualquer efeito produzido por uma operação que não pertence a Effd certamente pertence a Effu. A fórmula lógica para Effué construída a partir da fórmula lógica para Effd, onde substitui-se os operadores aritméticos e lógicos da fórmula de Effd por seus ope- rados inversos (i.e, a soma é substituída pela subtração, o ou lógico é substituído pelo e lógico, por exemplo) obtendo, assim, uma fórmula para Effu.

Logo, para saber a qual conjunto pertence o efeito produzido após uma operação executar, basta que os valores associados aos parâ- metros de saída contidos na mensagem de resposta SOAP sejam com- parados aos valores explicitados nas fórmulas lógicas descritas para os efeitos desejados (KHOLY; FATATRY, 2016). Entretanto, em certas si-

tuações, pode-se não obter uma resposta por parte do Web service invocado (como ocorre quando o servidor está indisponível ou proces- sos estão em estado de deadlock, por exemplo), logo não há produção de efeitos. Um mecanismo de timeout pode ser configurado para de- terminar o tempo máximo de espera por uma resposta. A ação a ser executada quando um conjunto de efeito indesejados for gerado, a fim de contornar problemas de execução, pode ser tomada quando o limite

de tempo de espera por uma resposta é extrapolado, pois esta também é uma situação na qual os efeitos desejados não foram produzidos. Exemplo 3. Suponha que uma certa operação libera acesso a streaming

de vídeos de acordo com a localização geográfica do usuário e que um de seus parâmetros é o endereço do usuário que é um tipo complexo. Uma mensagem SOAP enviada ao Web service detentor da operação pode ser descrita de acordo com o seguinte XML Schema:

<xs:complexType name="endereço"> <xs:sequence>

<xs:element name="país" type:"xs:string"/> <xs:element name="estado" type:"xs:string"/> <xs:element name="cidade" type:"xs:string"/> <xs:element name="CEP" type:"xs:int"/> <xs:element name="número" type:"xs:int"/> </xs:sequence>

</xs:complexType>

Uma fórmula lógica que descreve as pré-condições para que a operação seja executada pode ser:

endereço.país = "Brasil" ∧ endereço.estado = "SC"

Uma fórmula lógica para descrever os efeitos desejados pode ser:

autorização = "concedida" ∧ transmissão.estado = "carregando"

A fórmula lógica que descreve os efeitos indesejados é:

autorização 6= ”concedida” ∨ transmissão.estado 6= ”carregando”

Ademais, os efeitos produzidos por uma operação podem estar relacionados a alterações no mundo real, como é o caso de uma transa- ção de créditos que, quando bem sucedida, diminui o saldo do usuário (entre outros efeitos), ou à mera produção de informações, como ocorre quando uma consulta a uma base de dados de uma loja determina se a loja possui em estoque um determinado produto (neste caso a ope- ração apenas produz saídas que indicam tal informação e não ocorrem alterações no mundo).

Alguns trabalhos como (HOFFMANN; WEBER; KRAFT, 2012;MAR-

RELLA; MECELLA; SARDINA, 2014) diferenciam possíveis efeitos deseja-

dos e indesejados em n conjuntos, e dependendo do conjunto de efeitos indesejados obtido após a execução da operação, uma regra para re- cuperação de falha é aplicada baseando-se nos problemas de execução

e erros por eles gerados que impediram a execução da operação com sucesso. Entretanto, como visto no capítulo de introdução e como será abordado no capítulo 4, este trabalho tem como principal objetivo a obtenção de composições resilientes de Web services semânticos e, para tal, este trabalho se concentra na obtenção de várias composições alter- nativas e na sobreposição das mesmas em uma estrutura (árvore binária de decisão) que permita a um motor de execução trocar, rapidamente e com custo mínimo, uma composição por outra tão compatível quanto possível ao que já foi executado com sucesso, quando uma operação não gerar os efeitos desejados. Deste modo, aumentam-se as chances de que os objetivos do usuário sejam satisfeitos e evita-se o custo de auferir composições alternativas em tempo de execução.

Exemplo 4. Considere que pagamentoViaCrédito é uma operação se-

mântica de um certo Web service que permite realizar pagamento via crédito. Os elementos que compõem tal operação podem ser definidos da seguinte forma: I = {cartãoDeCrédito, valor}; O = {transação}; P re = {cartãoDeCrédito.saldo ≥ valor}; N D = h{transação.estado = aprovado ∧ cartãoDeCrédito.saldo = cartãoDeCrédito.saldo-valor}, {transação.estado 6= aprovado ∨

cartãoDeCrédito.saldo 6= cartãoDeCrédito.saldo-valor}i;

K = 1

Para o exemplo 4 foi definido como pré-requisito que deve haver saldo suficiente para que o pagamento seja efetuado. O conjunto de efeitos desejados indica que a transação precisa ser aprovada e o saldo do cartão atualizado. O conjunto de efeitos indesejados indica qualquer situação em que um dos efeitos desejados não é alcançado.

Se em uma dada ontologia há uma conceitualização (descrições formais de conceitos, seus atributos e suas relações) para cartão de cré-

dito, valor e transação (como, por exemplo, as classes CartãoDeCrédito, Preço e Transação, respectivamente, ilustradas na ontologia da figura

3), então, pode-se usar tais conceitos da ontologia para definir os tipos dos parâmetros da operação pagamentoViaCrédito.

Na figura 3 os atributos das classes foram omitidos por simplici- dade e facilidade de compreensão. O símbolo ≡ é utilizado para indicar que duas classes (conceitos) são equivalentes, onde as relações perten- centes à classe do lado direito da relação foram ocultadas.

Figura 3 – Trecho de ontologia sobre passagens aéreas.

Linguagens como OWL-S, WSDL-S, WSMO, dentre outras, po- dem ser utilizadas para descrever semanticamente os Web services, seus componentes (e.g., operações, parâmetros de entrada e saída, pré- condições) e os seus comportamentos (e.g., efeitos). Basicamente, estas linguagens associam os componentes dos Web services à classes e obje- tos (instâncias de classes) de ontologias e bases de conhecimento. Neste sentido, as ontologias permitem que raciocinadores semânticos façam associações e inferências sobre os componentes dos Web services au- tomaticamente. Deste modo, pode-se determinar quando parâmetros sintaticamente distintos são semanticamente equivalentes e, assim, de- terminar, por exemplo, quando uma operação produz saídas que podem ser consumidas como entradas por outras operações.

3.2.1 Composições de Web Services Semânticos

A composição de Web services semânticos tem como objetivo combinar um conjunto de operações de tais serviços para formar servi- ços mais complexos e sofisticados a fim de atender requisições de usuá- rio para as quais não existem Web services que possam satisfazê-las. Basicamente, para que uma composição de Web services seja obtida é necessário descobrir um conjunto de Web services e operações que atendam parcialmente os objetivos do usuário, selecionar as operações mais apropriadas segundo um conjunto de critérios, determinar como

as invocações das operações estarão organizadas (i.e, um workflow),

executar a composição resultante e monitorar tal execução (LEMOS;

DANIEL; BENATALLAH, 2015).

Definição 3.19. (ZOU et al., 2014) Uma requisição de usuário é uma