• Nenhum resultado encontrado

Computação Orientada aos Serviços. WF (parte 1) Semestre de Inverno 13/14

N/A
N/A
Protected

Academic year: 2021

Share "Computação Orientada aos Serviços. WF (parte 1) Semestre de Inverno 13/14"

Copied!
58
0
0

Texto

(1)

Computação Orientada aos Serviços

(2)

Workflow

} 

No desenvolvimento de software, o principal objetivo é

resolver problemas reais de negócio.

}  Normalmente parte-se a resolução do problema em partes, e

depois compõem as resoluções das partes.

} 

Um

workflow

é uma série de passos ordenados a realizar

com vista a concretizar determinado propósito, de

acordo com um conjunto de regras.

} 

Um workflow permite facilmente modelar interações de

sistemas e humanos.

}  As interações humanas são aquelas que envolvem pessoas

reais.

}  Que controlo é que se tem na ordem de execução realizadas por

(3)

Workflow

} 

Um workflow é uma atividade

} 

Uma ou mais atividades compõem um workflow

} 

A modelação de um processo como um workflow tem

como vantagem:

}  A transparência: um modelo bidimensional, que ilustra a lógica

(4)

Ciclo de vida do desenvolvimento de um

sistema

} 

Planeamento

} 

Descoberta

} 

Análise

} 

Desenho

} 

Testes

} 

Desenvolvimento

(5)

Processar o pedido de um cliente

(6)

Tecnologia Workflow

} 

WF foi desenvolvido para visar certos requisitos mais

complicados de implementar:

}  Processos de longa duração

}  Workflows declarativos permitem construir workflows que

visualmente processam uma lógica condicional complexa

}  Workflow persistence fornece uma mecanismo para libertar a

memória de processamento dos workflows que estão parados ou à espera de algum evento.

(7)

Componentes do WF

} 

As componentes são:

} 

Workflow Runtime

} 

 Activities

} 

Workflows

} 

Workflow Designer

} 

Workflow DataModel

} 

Persistência

} 

Monitorização

(8)

Workflow Hosts

} 

WorkflowApplication:

}  Permite às aplicações que fazem host de workflows gerir a

execução, nomeadamente a persistência ou o cancelamento de um workflow e subscrever as notificações do tempo de vida de um workflow.

} 

WorkflowServiceHost:

}  Utilizado para gerir configurações e endpoints para fazer

hosting de workflows como serviços WCF

} 

WorkflowInvoker:

}  Para facilmente fazer hosting de workflows sincronamente,

(9)

Workflow em WF

} 

WF fornece uma framework para desenvolver workflows;

} 

Um workflow pode ser desenhado em WF de 3 modos

diferentes:

}  Baseado em código;

}  Baseado em XAML

}  XAML é um linguagem declarativa utilizada na Framework Windows

}  É deste modo fornecido um modelo de programação declarativo

}  Parcialmente baseado em código e parcialmente baseado em

XAML

} 

Existem duas formas de desenvolver workflows em XAML:

}  Editor de WF

(10)

Ciclo de vida de um workflow

} 

Quando se executa um workflow

}  É criada uma instância designada por WorkflowInstance

}  Durante o seu processamento, podem ocorrer vários estados

}  WorkflowCreated }  WorkflowStarted }  WorkflowLoaded }  WorkflowIdled }  WorkflowUnLoaded }  WorkflowSuspended }  WorkflowResumed }  WorkflowTerminated }  WorkflowPersisted }  WorkflowCompleted

(11)

Atividades  

}  As atividades podem ser categorizadas em:

}  Control Flow:

}  Modelam o fluxo dos processos no contexto de um worflow.

}  Flowchart:

}  Fornecem modelação de árvores de decisão no contexto de um workflow.

}  State-machine:

}  Modelam transições entre estados possíveis, indicando interação humana e eventos no contexto de

workflows.

}  Messaging:

}  Fornecem funcionalidades de comunicação para construir workflows que são expostos como serviços e

comunicam uns com os outros através de protocolos de transporte.

}  Runtime:

}  Fornecem instruções ao runtime de WF para gerir o comportamento de um workflow.

}  Primitives:

}  Fornecem funcionalidades gerais de execução.

}  Transaction:

}  Fornecem funcionalidades para permitir que as actividades sejam executadas no contexto de uma

transação.

}  Collection

}  Fornecem funcionalidades básicas para gerir os dados representados como coleções no contexto de um

workflow

(12)

Atividades

}  Control Flow:

}  DoWhile,  ForEach,  If,  Parallel,  ParallelForEach<T>,  Pick,  PickBranch,  Sequence,  

While,  Switch  

}  Flowchart:

}  FlowChart,  FlowDecision,  FlowSwitch.  

}  State-machine:

}  StateMachine,  State,  FinalState.    

}  Messaging:

}  CorrelationScope,  InitializeCorrelation,  Receive,  ReceiveAndSendReply,  Send,  

SendAndReceiveReply,  TransactionReceiveScope      

}  Runtime:

}  Persist,  TerminateWorkflow.  

}  Primitives:

}  Assign,  Delay,  InvokeMethod  ,WriteLine    

}  Transaction:

}  CancellationScope,  CompensableActivity,  Compensate,  Confirm,  TransactionScope    

}  Collection

}  AddToCollection<T>,  ClearToCollection<T>,  ExistsInCollection<T>,  

RemoveFromCollection<T>    

}  Error Handling:

(13)

Exemplo

 public  static  Activity  GetParallel(Activity[]  a)                  {  

                       Parallel  workflow  =  new  Parallel();                          for  (int  i  =  0;  i  <  a.Length;  i++)                          {  

                               workflow.Branches.Add(a[i]);                          }  

                       return  workflow;                  

}

(14)

Exemplo

Variable<ICollection<string>> fruitList = new Variable<ICollection<string>> { Name = "FruitList“ }; Variable<bool> result = new Variable<bool> { Name = "Result“ };

Activity wf = new Sequence { Variables = { fruitList, result }, Activities = {

new If {

Condition = new ExistsInCollection<string>{ Collection = fruitList, Item = "Pear” }, Then = new AddToCollection<string> { Collection = fruitList, Item = "Pear” },

Else = new RemoveFromCollection<string> { Collection = fruitList, Item = "Apple” } },

new RemoveFromCollection<string>{ Collection = fruitList, Item = "Apple”, Result = result }, new If{

Condition = result,

Then = new ClearCollection<string>{ Collection = fruitList, } }

} };

(15)

Tipos de workflow

} 

Sequencial

}  Caracteristicas incluem: fluxo predeterminado, sistemático,

menor flexibilidade

} 

Máquina de Estados

}  Caracteristicas incluem: Fléxiveis, modelam o comportamento

humano, reactivos

} 

Flowchart

}  Caracteristicas incluem: opções de decisão transparentes,

maior nível de transparência para tomar decisões, fluxo de voltar a atividades anteriores previamente executadas mais natural

(16)

Ciclo de vida de uma atividade  

Executar

Em falha Cancelada

(17)

Hello Workflow

(18)

HelloWorkflow utilizando código imperativo

} 

Uma definição de workflow pode ser criada através de

instanciar uma instância de um tipo de atividade e

configurando as propriedades do objecto atividade

Activity  wf  =    

     new  WriteLine(){  Text  =  "Hello  World."  };    

WorkflowInvoker.Invoke(wf

);

Activity -> namespace System.Activities  

WorkflowInvoker -> namespace System.Activities  

(19)

HelloWorkflow utilizando código imperativo

public  class  HelloWorkflow  :  Activity              {  

             public  HelloWorkflow()                {    

               this.Implementation  =  ()  =>  new  Sequence()                    {  

                             Activities  =  {  new  WriteLine()  

                                                                       {Text="Hello  Workflow"}                                                                      }  

                     };              }  

}  

(20)
(21)
(22)

Namespaces

Namespace Significado

System.Activities   Contém todas as classes necessárias para criar e trabalhar com atividades.

System.Activities.Statements   Contém atividades que podem ser utilizadas para criar workflows.

(23)

Estrutura dos Workflows

} 

As atividades são os blocos de construção do WF

} 

Todas as atividades derivam de

Activity

.

} 

Atividades são unidades de trabalho em WF.

} 

As atividades podem ser compostas em atividades maiores

} 

Quando uma atividade é utilizada como atividade de topo, é

(24)

Modelo de Dados WF

} 

Para processamento de informação, o workflow obtém os

dados de 3 formas diferentes:

}  Quando um workflow inicia

}  Os argumentos de input são passados ao workflow através do

runtime WF

}  O nome de cada argumento de input tem de ser explicitamente

atribuído a um argumento no contexto do workflow para que os dados podem passar para o workflow

}  Lê de eventos externos

}  Ex: processamento de uma encomenda

}  Recebe através de eventos externos

(25)

Modelo de Dados WF

Modelo de Dados Descrição

Variável Utilizadas como áreas de armazenamento, definidas pelo tipo de objeto e, opcionalmente, por nome. Os valores das variáveis são atribuídos em tempo de execução e armazenados como parte do estado da

instância de workflow.

Argumento Controlam como os dados fluem, aceitando e retornando dados de input e de output de uma atividade.

Expressão Uma atividade com um valor de retorno utilizado em

(26)

Argumentos

} 

Os argumentos são utilizados para receber e retornar

dados para o WF runtime.

} 

Os argumentos em WF podem ser de um dos 3 tipos:

}  InArgument -> envia um argumento para uma atividade através

do WF runtime.

}  OutArgument -> retorna um valor como argumento afetado

no contexto de uma atividade em runtime.

}  InOutArgument -> é um referenced value que pode ser passado

a uma atividade, afetado com um valor e retornado outra vez para o WF runtime.

(27)

InArgument

}  Um conectivo terminador que representa fluxo de dados para uma atividade

}  WithAnArgument

public  class  WorkflowInCode:Activity  {    

   public  InArgument<string>  FirstName  {  get;  set;  }        public  InArgument<string>  SecondName  {  get;  set;  }        public  WorkflowInCode()  {    

       this.Implementation  =  ()  =>  new  Sequence()  {                    Activities  =  {    

                       new  WriteLine(){    

                           Text=new  InArgument<string>(    

                     activityContext=>"My  name  is  "+FirstName.Get(activityContext)                                      )                            },                          new  WriteLine(){                            Text=new  InArgument<string>(                                        ActivityContext=>SecondName.Get(ActivityContext)                                    )                              }                  }  };

(28)

OutArgument

(29)

Computação Orientada aos Serviços

(30)

If-Else

} 

UseIfElse

(31)

Parallel Activity

} 

Se apenas existirem atividades síncronas no contexto de

uma atividade

Parallel

, as atividades do workflow serão

executadas na mesma thread do workflow.

} 

Exemplos:

}  Parallel

}  ParallelWithDelays

(32)

A actividade Pick

} 

A atividade

Pick

executa uma das suas subactividades

paralelas, e apenas uma das atividades será executada

antes da actividade

Pick

terminar.

}  É tipicamente utilizada para definir um time-out para uma

actividade.

}  A actividade Pick contém uma coleção de atividades

PickBranch, onde cada PickBranch é um par de atividades

Trigger e Action .

}  Em tempo de execução, os triggers de todos os branches são

executados em paralelo. Quando um trigger termina, a sua action correspondente é executada e todos os outros triggers são

cancelados.

}  PickActivity

}  PickCodeActivity

(33)

A actividade Sequência

} 

É considerada uma

actividade composta

}  É um contentor para atividades }  As atividades contidas

numa sequência são executadas de modo sequencial

(34)
(35)

InOutArguments

} 

Este tipo de argumento é utilizado para receber valores e

também passar valores para quem invoca este workflow.

} 

Exemplos:

}  InOutArguments

(36)

Variáveis

} 

Têm de ser declaradas de modo a poderem ser utilizadas

por elementos do workflow.

}  O workflow é stateless, isto é, não armazena elementos

}  As variáveis são apenas definição de dados

O contexto da variável está disponível para a atividade Sequência e para todas as suas descendentes.

§  UseVariable

(37)

FlowChart Workflow

} 

Num workflow

Flowchart

as atividades estão conectadas

por árvores de decisão

}  Numa sequence, as atividades são executadas por ordem

sequencial

}  O padrão de workflow sequence é implementado através da atividade

sequence

}  Num flowchart, a ordem de execução de atividades pode variar

consoante a decisão tomada.

} 

E outros padrões de workflow básicos?

}  Exclusive choice

(38)

Flow Chart

} 

FlowChart

} 

FlowChartExplicit

(39)

Computação Orientada aos Serviços

(40)

Atividade Máquina de estado

(41)

Atividade Máquina de Estados

} 

As atividades máquina de estados fornecem uma alternativa

para modelar comportamento humano quando fluxo de

eventos não é passível de ser previsto

} 

As máquinas de estados incluem:

}  Um estado inicial

}  Um estado final

} 

Estado: cada estado num workflow tem uma entry e uma

exit action

} 

Cada transição representa um evento disparado

externamente.

(42)

Exemplos

} 

StateMachineExample1

} 

StateMachineExample2

} 

Um estado pode ter mais do que uma transição para outro

estado

(43)

BookMarks

} 

Os métodos para resumir bookmarks

} 

http://msdn.microsoft.com/en-us/library/

system.activities.workflowapplication.resumebookmark.as

px

(44)

Fluxo de controlo

State Machine Sequence FlowChart

Fluxo Event driven Predeterminado Flexível Tipo do Modelo Interacção humana Ordenadas Tarefas Tomador de decisões Comportamento Reactivo Sistemático Opções

(45)

Exemplo

public    class  ImperativeCodeWorkflow  {      public  void  AdditionActivity()  {    

     Variable<int>Add1  =  new  Variable<int>  {  Name  =  "Add1",  Default  =  5  };          Variable<int>Add2  =  new  Variable<int>  {  Name  =  "Add2",  Default  =  5  };          Variable<int>Sum=new  Variable<int>  {  Name  =  "Sum"  };    

(46)

Exemplo

Activity  wfSequence  =  new  Sequence  {        Variables  =  {  Add1,Add2,Sum  },          Activities  =  {  

           new  Assign<int>  {                                  To  =  Sum,      

                               Value  =  new  InArgument<int>(ad)  =>  Add1.Get(ad) +Add2.Get(ad))  

             },    

         new  WriteLine  {    

                             Text  =  new  InArgument<string>(  

                                           (sm)  =>string.Format("The  sum  of  {0}  and  {1}  is  {2}  ",                                                                      Add1.Get(sm),Add1.Get(sm),Sum.Get(sm))                                                      )                }     }     };     WorkflowInvoker.Invoke(wfSequence);     }    

 

(47)

Padrões básicos de workflow

}  Os padrões de fluxo de controlo básicos capturam os aspectos

elementares do controlo de processos.

}  Sequence; Parallel Split; Synchronization; Exclusive Choice

}  Sequence:

}  É utilizado para construir uma sequência de actividades consecutivas, que são

executadas em sequência.

}  Em WF, este padrão é implementado através:

}  da actividade Sequence }  da actividade FlowChart }  Exemplo: Permite serem adicionadas actividades que serão executadas sequencialmente.

(48)

Padrões básicos de workflow:Parallel Split

}  Parallel Split

}  Permite que uma única thread de execução seja partida em dois ou mais

branches, de modo a pode executar tarefas concorrentemente.

}  Em WF, este padrão é implementado através da actividade Parallel

}  Exemplo:

Permite serem adicionadas

actividades que serão executadas em paralelo.

}  Exemplo:

}  Após cobrar o cartão de crédito, enviar o recibo por e-mail ao cliente e

começar o processo de envio da ordem.

}  Mais exemplos:

}  ParallelSplitPattern

(49)

Padrões básicos de workflow:Parallel Split

}  Synchonization

}  Permite a reconvergência da execução de threads de dois ou mais branches em

paralelo.

}  Em WF, este padrão é implementado através:

}  das actividades Sequence e Parallel

}  das actividades Sequence e ParallelForEach

}  Exemplo:

Após sincronização, o controlo de execução é dado à actividade que for adicionada sequencialmente

(50)

Padrões básicos de workflow

}  Exclusive Choice

}  Permite direccionar a thread de controlo para uma determinada actividade, dependendo do resultado

produzido pela actividade precedente.

}  Em WF, pode ser implementado, dependendo do caso concreto, através:

}  Da actividade Sequence e da actividade If

}  Da actividade Sequence e da actividade Switch

}  Da actividade Sequence e da actividade Pick

}  Da actividade FlowChart e da actividade FlowDecision

}  Da actividade FlowChart e da actividade FlowSwitch

}  Exemplos:

(51)

Exemplo: OrderDelivery

}  Dada uma encomenda de alguns produtos, o workflow a desenvolver,

correspondente à logistica, deverá determinar o custo total da encomenda, tendo em conta o peso da encomenda (50 ct por kg) e da urgência na

entrega (no próprio dia, no dia seguinte, 8 ou mais dias).

public  class  OrderItem{  

     public  int  OrderItemID{  get;  set;  }        public  int  Quantity{  get;  set;}  

     public  string  ItemCode{  get;  set;}        public  string  Description{  get;  set;}   }  

 

public  class  Order{  

   public  List<OrderItem>  Items{  get;  set;}      public  Order(){    

       Items=new  List<OrderItem>();      }  

   public  string  Description{  get;  set;}      public  double  TotalWeight{get;  set;}      public  string  ShippingMethod{get;  set;}  

Quais os

padrões

de

workflow

envolvidos na

implementação

deste workflow?

(52)

Exemplo: OrderDelivery

}  Padrões utilizados em Order:

}  Sequence Pattern: apenas

receber a ordem, calcular quanto é que deve ser cobrado pelo peso

}  Exclusive Choice Pattern:

dependendo a urgência da entrega, é cobrado 5, 10 ou 15 euros)

(53)
(54)

Exemplo

} 

Leitura de um número:

(55)

Manipulação de Excepções

}  Além da actividade TryCatch, também existe a actividade Throw.

}  Através da actividade TryCatch, pode-se implementar os padrões Cancel Task e

(56)

Invocar métodos

} 

Invocar métodos sem parâmetros

public  void  Method()  {    

   Console.WriteLine("'void  Method()'  is  called");     }  

(57)

Invocar métodos com parâmetros

public  void  Method(string  message1,  string  message2)  {    

 Console.WriteLine("'void  Method(string  message1,  string  message2)'  is  called");      Console.WriteLine("Hello,  this  is  your  message1:"  +  message1);    

 Console.WriteLine("Hello,  this  is  your  message2:"  +  message2);     }  

(58)

Invocar métodos com retorno

public  string  MethodWithReturn(string  message1,  string  message2)  {    

 Console.WriteLine("'string  MethodWithReturn(string  message1,string  message2)'  is            called");    

   return  "message1:"  +  message1  +  "  "  +  "message2:"  +  message2;        }  

Referências

Documentos relacionados

O Sistema Nacional de Avaliação SINAES definiu a autoavaliação interna como instrumento central para a qualidade do ensino superior, articulando-a como requisito para as

O trabalho está organizado conforme segue: na seção II são apresentados os conceitos de desenvolvimento baseado em modelo (MBD), na seção III é demonstrada a formulação

Assim, esperando divulgar este trabalho para que outros grupos sejam estimulados a reconhecer a preciosidade do texto de Wedekind e a explorarem o teatro

A política pública que visa coibir a violência doméstica e familiar contra a mulher far-se-á por meio de um conjunto articulado de ações da União, dos Estados, do Distrito Federal

Por isso, os estudos sobre a Dimensão da Educação Ambiental no Ensino Superior é emergente, principalmente, quando se analisa a teoria e a prática pedagógica. É necessário,

Acrescida pela Emenda Constitucional n. 19/1998, a eficiência que antes não tinha previsão expressa na Constituição Federal, passou a ser a mais nova obrigação da

 Caminho simples que contém todas as arestas do grafo (e,. consequentemente, todos os

Our contributions are: a set of guidelines that provide meaning to the different modelling elements of SysML used during the design of systems; the individual formal semantics for