4. ARAġTIRMA SONUÇLARI ve TARTIġMA
4.4. Moleküler Karakterizasyon
Esta seção descreve o processo de tradução do documento XML gerado na etapa anterior para um documento WS-BPEL. Nessa geração foi utilizada a ferramenta jDOM, a qual oferece métodos para leitura, edição e criação de elementos XML.
Elemento process
Em um documento WS-BPEL o elemento principal é o <process>. Esse elemento possui os atributos targetNamespace, que se refere a URI do processo descrito no docu- mento, como também possui atributos referentes aos <namespaces> das URI’s dos serviços que compõem o processo. O elemento <process> tem outros elementos obrigatórios como <variables>, <partnersLinks> e pelo menos um elemento <sequence>.
Elemento variables
Esse é o elemento responsável por declarar as variáveis utilizadas durante todo o processo. Possui uma série de elementos <variable>, onde cada um descreve uma variável. Cada elemento tem dois atributos name e messageType. O primeiro é gerado a partir do nome do serviço utilizado, o segundo se obtém a partir do nome da operação a que a variável se refere.
Para cada combinação de serviço/operação são gerados dois elementos <variable>, um para representar os parâmetros de entrada e outro para representar os parâmetros de saída. Em cada variável de entrada acrescentou-se aqui, tanto ao nome do serviço quanto ao nome da operação, a palavra Request e em cada variável de saída a palavra Response. Como mostrado nos exemplos abaixo.
Exemplo 16. Para o serviço S1 que possui uma operação op1 o elemento <variable>
é gerado da seguinte forma.
<variable name="S1Request" messageType="op1Request"/> <variable name="S1Response" messageType="op1Response"/>
Se o processo utilizar mais de uma operação do serviço o nome da variável ganha um incremento:
Exemplo 17. O serviço S1 possui duas operações op1 e op2, os elementos <variable>
ficam da ser.
<variable name="S1Request" messageType="op1Request"/> <variable name="S1Response" messageType="op1Response"/>
<variable name="S1Request1" messageType="op2Request"/> <variable name="S1Response1" messageType="op2Response"/>
Os nomes dos serviços são determinados através de uma busca no arquivo XML vindo do módulo de análise de dependência. Nos elementos invokes podemos obter o nome do serviço e a da operação que será invocada, bem como as variáveis de entrada e saída. É importante destacar que os nomes dos serviços estão ligados ao nome da opera- ção que aquele elemento invoke faz referência, da seguinte forma: <nome do serviço> . <nome da operação>(parâmetros). Sendo assim, é necessário fazer um desmembramento na informação para separar o nome do serviço e a operação invocada.
Sempre que ocorrer alguma chamada a operação op1, será verificada qual variável está ligada a esta operação para geração do elemento <invoke> desse serviço.
Elemento partnerLinks
É o elemento responsável por declarar quais os serviços que participarão do pro- cesso. Consiste em um elemento <partnerLinks> que contêm um ou mais elementos <partnerLink>, por sua vez, esses elementos representam um serviço utilizado no pro- cesso. Um elemento partnerLink possui o atributo name para declarar o nome do serviço, um atributo partnerLinkType, que define a porta via a qual esse serviço irá se comunicar e os atributos role ou myRole, que definem o papel desse serviço no processo.
O atributo name é obtido fazendo uma busca por todos os serviços dentro do documento XML vindo do módulo de refinamento. Uma vez obtido o nome do serviço, procura-se em seu documento WSDL pela porta de comunicação lá definida para compor o atributo partnerLinkType.
Exemplo 18. Vejamos o caso de um serviço S1, o elemento ficaria assim:
<partnerLink name="S1" partnerLinkType="ns:S1PortType" role="S1Role"/>
Para o atributo role é acrescentado a palavra “Role” ao nome do serviço, dessa forma, todos os nomes dos serviços e nome roles são definidos de uma forma padronizada.
Elementos sequence e flow
Esses elementos tem como função definir uma ordem de execução de outras ativida- des no processo. O sequence define uma sequencia de execução, enquanto o flow especifica uma execução de atividades em paralelo.
A única mudança necessária nesse elemento, quanto à estrutura obtida na análise de dependência é a adição do atributo name para identificar os elementos.
Exemplo 19. Exemplos das estruturas sequence e flow.
<sequence name="main" ... </sequence> <flow name="flow" ... </flow>
Elemento invoke
O elemento <invoke> possui cinco atributos: partnerLink, portType, operation, inputVariable, outputVariable. O atributo partnerLink refere-se ao serviço invocado, o atributo portType define o tipo da porta usada pela operação, o atributo operation mostra a operação e os atributos inputVariable e outputVariable fazem referência às variáveis de entradas e saídas, respectivamente, definidas no ambiente <variables>.
Para a geração desse elemento foram utilizadas as informações vindas do docu- mento XML obtidas do módulo de análise de dependência. A informação contida em cada invoke vindo da identificação das dependências possui os dados necessário para extrairmos os valores dos atributos. Essa informação tem a da seguinte forma: <nome do serviço> . <nome da operação>(parâmetros).
O atributo “partnerLink” é exatamente o nome serviço (campo antes do flag “:”), tendo o nome do serviço, basta apenas consultar o “portType” desse serviço definido no início do documento WS-BPEL. O atributo “operation” é obtido pelo nome da operação vinda do módulo de geração de dependência (campo depois do flag “:”). Tendo o nome da operação faz-se um link com as variáveis e operações definidas no começo do documento, os atributos “inputVariable” e “outputVariable” são os nomes das variáveis definidas no ambiente <variables> referente a operação do invoke.
Exemplo 20. Vejamos como fica a conversão de um “invoke” com a informação
S1:op1(<parâmetros>) 1 <invoke partnerLink="S1" portType="ns:S1portType" 3 operation="op1" inputVariable="S1Request" 5 outputVariable="S1Response" />
Elemento if e while
Esses elementos são estruturados, ou seja, agregam outros elementos em sua com- posição. O elemento <if> possui os elementos <condition>, <then>, <elseif> e <else>, sendo que apenas os dois primeiros são obrigatórios. Os elementos <then>, <elseif> e <else> são agregadores de atividades e dependem do retorno do elemento <condition> para serem executados.
O elemento <while> possui um elemento <condition> e logo após as atividades que participam da sua estrutura.
Esses elementos não necessitam de uma tradução direta, pois na geração do grafo é criada uma estrutura igual à estrutura utilizada em WS-BPEL. Aplica-se regra de tradução apenas no elemento <condition>.
Elemento condition
O elemento <condition> descreve uma função que deve retornar um valor verda- deiro ou falso. Para consultar o parâmetro WS-BPEL utiliza da linguagem de consulta a documentos XML chamada XPath.
Elemento assign
O elemento <assign> é responsável pela atribuição do valor de uma variável para outra. Possui um atributo <copy>, que por sua vez tem os atributos <from> e <to>. Esses atributos indicam qual a variável origem e a variável destino da cópia.
Os elementos <assign> e <copy> são apenas agregadores de atividades, sendo assim, os elementos <from> e <to> são os responsáveis por indicar, de fato, a transferência de valor. Cada um desses elementos possui dois atributos variable e part, o primeiro mostra qual variável declarada no inicio do documento participará da transferência, o segundo indica qual parte dessa variável será utilizada.
Dentro de elemento <from> e <to> é criado um novo elemento <queryLanguage> que especifica qual linguagem será utilizada para consultar os valores literais dessas variá- veis. É criado também um novo elemento do tipo “CDATA” para indicar qual o parâmetro será copiado.
Essa atividade é construída sempre que temos a combinação de uma atividade invoke, receive ou reply. Nas arestas comparamos as variáveis de mesmo nome obtidas no refinamento, por exemplo um serviço S1(X?,Y!) e um serviço S2(Y?,Z!). Nesse caso, a variável Y é a ligação entre os dois serviços, assim, caracteriza a criação de uma aresta no grafo de dependências. Em processos WS-BPEL é preciso buscar o valor literal de Y
na saída de S1 e na entrada de S2. Essa busca é feita nos documentos WSDL de ambos os serviços.
Na listagem 3.12, nas linhas 3 e 6 os atributos variable indicam as variáveis que guardam o valor a ser transferido e o atributo parameters indica em que parte da variável está o parâmetro. Os parâmetros output e input, encontrados nas linas 4 e 7, representam o parâmetro de saída em S1 e entrada em S2 respectivamente. Note que as informações input e output são representações concretas do parâmetro Y descrito anteriormente.
Se essa dependência for atribuída por mais de um parâmetro, pode-se criar um par de copy e to para cada um dos parâmetros dentro do mesmo copy.
1 <assign>
<copy>
3 <from part="parameters"variable="S1Response">
<queryLanguage="wsbpel:2.0:sublang:xpath1.0"><![CDATA[ns:output]]>
5 </from>
<topart="parameters" variable="S2Request">
7 <queryLanguage="wsbpel:2.0:sublang:xpath1.0"><![CDATA[ns:input]]>
</to>
9 </copy>
</assign>
4 Experimentos
Neste capítulo são apresentados os resultados obtidos com os testes de duas com- posições abstratas, uma mostra o funcionamento de uma estrutura utilizando a instrução de controle if e a outra utiliza a instrução de controle while. Essas composições serão refinadas pelo método proposto neste trabalho. Os resultados desses testes serão compa- rados aos resultado gerados automaticamente com a especificação oficial da linguagem WS-BPEL [ALVES et al., 2006].