Um Componente de Gerenciamento de Execução de

Propaganda
Um Componente de Gerenciamento de Execução de Workflow
Segundo a Abordagem de Linha de Produto de Software
Itana M. S. Gimenes1
Radames J. Halmeman1
Fabrício R. Lazilha2
Edson A. O. Junior1
[email protected]
[email protected]
[email protected]
[email protected]
1
Universidade Estadual de Maringá
Departamento de Informática
Maringá-PR, 87020-900
2
Centro Universitário de Maringá
Departamento de Informática
Maringá-PR, 87050-390
Resumo - A abordagem de linha de produto é aplicável a sistemas que compartilham um
conjunto gerenciado de características, que satisfazem necessidades específicas de um segmento
ou missão e que são desenvolvidos a partir de um núcleo de artefatos seguindo um plano
previamente definido. Deste modo, percebe-se que o domínio dos Sistemas Gerenciadores de
Workflow é propício à aplicação desta abordagem. Este artigo apresenta o projeto de um
componente de Gerenciamento de Execução de Workflow segundo a abordagem de linha de
produto de software. Este componente se caracteriza por executar um workflow previamente
instanciado através do gerenciamento de suas tarefas. Tal componente foi projetado para permitir
diferentes variantes de algorítmos de escalonamento possibilitando a instanciação de produtos
com características diferentes. A validação deste componente é realizada através da
implementação de um protótipo.
Palavras chave: Desenvolvimento Baseado em Componentes, Linha de Produto, Sistemas de
Gerenciamento de Workflow, Arquitetura de Software, Variabilidade.
Tema: Linha de Produto de Software
1. Introdução
Segundo Clements [1] uma linha de produto de software é uma coleção de sistemas que
compartilham um mesmo conjunto gerenciado de características que satisfazem as
necessidades específicas de um segmento ou missão e que são desenvolvidos a partir de um
núcleo de artefatos seguindo um plano previamente definido.
A abordagem de linha de produto de software tem por objetivos a redução de custos de
desenvolvimento e o incremento da qualidade dos produtos. Estes objetivos são atingidos
principalmente por meio da reutilização dos artefatos de software produzidos durante o
processo. Segundo Gimenes [2] um artefato de software é um item reutilizável de software
utilizado como bloco de construção de uma linha de produto.
Para a realização dos workflows são utilizados os Sistemas de Gerenciamento de
Workflow (WfMS), que definem, criam e gerenciam a execução de workflows através do uso
de produtos de software, executando uma ou mais máquinas de workflow, os quais estão aptos
a interpretar a definição de um processo, interagir com os participantes do workflow e, quando
necessário, invocar o uso de ferramentas da tecnologia da informação ou aplicativos[3].
Este artigo apresenta o projeto do componente Gerenciador de Execução de Workflow
(WorkflowExecutionMgr) segundo a abordagem de linha de produto de software. O propósito
do desenvolvimento deste componente está em incrementar um núcleo de artefatos para linha
de produto WfMS, identificar os pontos de variabilidade deste componente e revisar a
arquitetura de linha de produto de software para WfMS proposta por Lazilha [4], na qual o
componente está inserido. Esta arquitetura foi concebida de acordo com a abordagem de
Desenvolvimento Baseado em Componentes (DBC) e teve como método de apoio o
Catalysis[5]. A Figura 1 apresenta a arquitetura de componentes proposta por Lazilha.
Figura 1: Arquitetura de Componentes para WfMS [4].
Continuando o trabalho desenvolvido por Lazilha, cada um dos componentes deve ser
projetado e implementado. Deste modo, foi escolhido o componente WorkflowExecutionMgr
e foi realizado seu projeto.
O projeto do componente segue os estágios do Catalysis, acompanhando o método já
utilizado no desenvolvimento da arquitetura.
A validação do componente foi realizada através da implementação de um protótipo que
permite a avaliação do componente, de suas funcionalidades e interfaces.
Este artigo está organizado da seguinte maneira. A Seção 2 apresenta o projeto do
componente Gerenciador de Execução de Workflow segundo o método Catalysis. A Seção 3
apresenta o protótipo desenvolvido para o componente proposto, e a Seção 4 apresenta as
conclusões e contribuições acerca deste trabalho.
2. Projeto do Componente
O projeto do componente seguiu o método Catalysis e seus estágios: especificação de
requisitos, especificação do sistema, projeto da arquitetura e projeto interno dos componentes.
A seguir são apresentadas as etapas do projeto do componente WorkflowExecutionMgr
segundo o Catalysis.
2.1 Especificação de Requisitos
Para a especificação de requisitos foram elaborados diagramas de caso de uso da
Unified Modeling Language (UML) onde são apresentados estereótipos do tipo <<extend>>
conforme proposto por Jacobson [6] para representar aspectos de variação. O caso de uso
estendido recebe uma marca, representada por um círculo preenchido, para indicar a
variabilidade.
A Figura 2 apresenta o diagrama de casos de uso para o componente proposto,
permitindo visualizar as principais ações e os pontos de variação identificados. Nos casos de
uso WorkflowExecutionMgr e WorkflowMgr, a variabilidade esta representada conforme
proposto por Bachmann [7], estabelecendo que quando acontecer uma variação na relação
entre dois artefatos, esta deverá ser representada em ambos os artefatos.
User
WorkflowMgr
WorkflowManager
(from BusinessActors)
(from bBusinessUseCaseModel)
(from BusinessActors)
<<include>>
<<extend>>
WorkflowExecutionMgr
(from bBusinessUseCaseModel)
<<extend>>
ExecuteWorkflowWithPriorityControl
TaskScheduler
(from TaskScheduler)
(from Use Cases)
<<include>>
ExecuteWorkflowSerial
(from Use Cases)
<<include>>
<<include>>
TimerManager
(from Use Cases)
TransitionManager
PreConditionManager
(from Use Cases)
(from Use Cases)
Figura 2: Diagrama de Casos de Uso: WorkflowExecutionMgr.
Para o relacionamento entre o ator TaskScheduler e o caso de uso WorkflowManager foi
necessária a criação de um estereótipo para um ator que apresenta uma variação. Neste caso, a
indicação de variação é feita através de uma marca “V” junto ao estereótipo do ator.
2.2 Especificação do Sistema
Este estágio apresenta a solução de software identificada a partir dos diagramas de caso
de uso. As ações identificadas pelos casos de uso e o modelo de objetos do negócio permitem
a identificação das classes de software e respectivas interações entre os objetos. Neste estágio
a variação é representada através do estereótipo <<V>> junto ao tipo onde esta acontece.
A Figura 3 apresenta o diagrama estático de tipos do componente proposto, que
incrementa o diagrama de tipos para a arquitetura de linha de produto para WfMS. Neste
artigo, por questões de espaço, não será mostrado o diagrama estático de tipos a arquitetura.
<<V>>
WorkflowMgr
<<V>>
ExecuteWorkflowMgr
(from aWorkflowMgr)
(from bExecuteWorkflowMgr)
0..n
TaskTransition
(from bExecuteWorkflowMgr)
1..n
1..n
0..n
Workflow
PreConditionMgr
1..n
0..*
Task
User
0
(from bExecuteWorkflowMgr)
TimerMgr
(from bExecuteWorkflowMgr)
n
Figura 3: Modelo Estático de Tipos do Componente WorkflowExecutionMgr.
Com base nos diagramas de caso de uso e no modelo estático de tipos foi elaborado um
diagrama de seqüência que apresenta a ordem em que os eventos devem ocorrer permitindo a
identificação dos parâmetros dos métodos necessários.
: U s er
: Wor k flowMgr
: Tas k Sc heduler
: Wor k flowEx ec utionMgr
Tas k Tr ans itionManager :
Tas k Tr ans ition
Pr eC onditionManager :
Pr eC onditionMgr
: Timer Mgr
r eques tC onnec tion( Logic al View ::jav a::lang::Str ing, Logic al View ::jav a::lang::Str ing)
[s e c onex ao = OK]
s elec tU s er Tas k ( int)
c hoos eTas k ( Tas k )
ex ec uteTas k ( Tas k )
ex ec uteTas k ( Tas k )
[if don´ t hav e pr ec ondition]
getPr eC ondition( Tas k )
getTr ans ition( )
s etTimer (ty peTimer )
c hangeTas k Status ( Tas k )
c onc ludeTas k ( Tas k )
ex ec uteTas k ( Tas k )
getPr eC ondition( Tas k )
[if don´ t hav e pr ec ondition]
getTr ans ition( )
c hangeTas k Status ( Tas k )
c onc ludeTas k ( Tas k )
[time finis hed]
Figura 4: Diagrama de Seqüência do Componente WorkflowExecutionMgr.
2.3 Projeto da Arquitetura
A partir do diagrama estático de tipos e do diagrama de seqüência foi elaborado um
diagrama de classes de classes da UML, onde estão presentes os métodos, os atributos e as
interfaces necessárias à implementação da solução de software. A Figura 5 apresenta o
diagrama de classes, e omite alguns métodos por questões de espaço.
Task
User
IExecuteTask
Mgt
(from aStaticModel)
(from aStaticModel)
userId : int
userName : Logical View::java::lang::String
userPassword : Logical View::java::lang::String
_id : int
(from aWorkflowM...
executeTask()
cancelTask()
interruptTask()
restartTask()
finalizeTask()
visualizeTask()
selectUserTask()
User()
getId()
getUserName()
getUserPassword()
setUserId()
setUserName()
...
<<V>>
WorkflowExecutionMgr
0..n
setTaskTimer()
getTaskTimer()
getNextTransition()
selectTaskTransition()
getPreCondition()
chooseTask()
executeTask()
cancelTask()
interruptTask()
restartTask()
finalizeTask()
visualizeTask()
postponeTask()
ExecuteWorkflow()
...
TimerMgr
workflowId : int
userId : int
taskId : int
startAt : Logical View::java::lang::String
finishAt : Logical View::java::lang::String
_id : int
TimerMgr()
getId()
setId()
getWorkflowId()
setWorkflowId()
getUserId()
setUserId()
getTaskId()
setTaskId()
getStartAt()
setStartAt()
getFinishAt()
...
0..*
taskId : int
taskDescription : Logical View::java::lang::String
taskStatus : Logical View::java::lang::String
taskImplementation : Logical View::java::lang::String
taskCharacteristic : Logical View::java::lang::String
taskInstantiation : Logical View::java::lang::String
taskStartMode : Logical View::java::lang::String
taskFinishMode : Logical View::java::lang::String
taskDuraction : int
taskPreCondition : Logical View::java::lang::String
taskPostCondition : Logical View::java::lang::String
workflowId : int
userId : int
_id : int
getId()
setId()
getDuraction()
setDuraction()
getUserId()
getWorkflowId()
Task()
getImplementation()
setImplementation()
getDescription()
setDescription()
getCharacteristic()
setCharacteristic()
getInstantiation()
setInstantiation()
getStartMode()
setStartMode()
getFinishMode()
setFinishMode()
getPreCondition()
setPreCondition()
...
0..n
0..n
0..n
TaskTransition
workflowId : int
userId : int
taskId : int
transitionId : int
transitionFrom : int
transitionTo : int
transitionDescription : Logical View::java::lang::String
transitionDuraction : int
_id : int
TaskTransition()
getId()
setId()
getWorkflowId()
setWorkflowId()
getUserId()
setUserId()
getTaskId()
setTaskId()
getTransitionId()
setTransitionId()
getTransitionFrom()
setTransitionFrom()
getTransitionTo()
setTransitionTo()
getTransitionDescription()
setTransitionDescription()
...
PreConditionMgr
workflowId : int
userId : int
taskId : int
_id : int
Requirements()
getId()
setId()
getWorkflowId()
setWorkflowId()
getUserId()
setUserId()
getTaskId()
...
0..n
Workflow
(from aStaticModel)
workflowId : int
workflowVersion : Logical View::java::lang::String
workflowVendor : Logical View::java::lang::String
workflowCreated : Logical View::java::lang::String
workflowDescription : Logical View::java::lang::String
workflowDuraction : int
_id : int
Workflow()
getId()
setId()
getWorkflowId()
setWorkflowId()
getWorkflowVersion()
setworkflowVersion()
getWorkflowVendor()
setworkflowVendor()
getWorkflowCreated()
setworkflowCreated()
getDescription()
...
Figura 5: Diagrama de Classes do Componente WorkflowExecutionMgr.
3. Protótipo do Componente
Para validar o componente proposto foi desenvolvido um protótipo deste componente
que aciona os componentes relacionados através das interfaces externas e promove a
execução de um workflow previamente instanciado. A principal interface com o usuário está
diretamente relacionada ao componente TaskScheduler e mostra as tarefas que estão
disponíveis, a Figura 6 mostra esta interface.
Figura 6: Interface do Usuário - TaskScheduler.
A instanciação das variabilidades é feita através de um arquivo de configuração, no qual
é informado um parâmetro que indica qual o algoritmo de escalonamento deve ser utilizado.
3.1 Mecanismos Utilizados na Implementação do Protótipo
Para a implementação do protótipo foi escolhido: a plataforma Linux, a linguagem de
programação Java[8], o sistema gerenciador de banco de dados MySQL[9] e o framework que
faz o mapeamento dos objetos para uma base de dados relacional ObJectBridge [10].
4. Conclusões
Este artigo apresentou o projeto de um componente de Gerenciamento de Execução de
Workflow segundo a abordagem de linha de produto de software e o método de DBC
Catalysis. A principal contribuição deste trabalho está no projeto do componente
WorkflowExecutionMgr o que incrementa o núcleo de artefatos para a arquitetura de linha de
produto para WfMS. Consequentemente foram repensadas as funcionalidades dos
componentes da arquitetura relacionados a ele o que proporcionou um melhor entendimento e
separação das funcionalidades dos componentes.
Notou-se que o mapeamento das variabilidades se torna extremamente difícil devido ao
fato deste ser o primeiro componente da arquitetura a ser implementado de acordo com a
abordagem de linha de produto de software. Percebe-se que as variações existentes neste
componente influenciarão os demais componentes da arquitetura. No entanto o mapeamento
dessas variabilidades depende de um projeto mais detalhado dos demais componentes.
A implementação do protótipo contribuiu para o refinamento do projeto, validando tipos
e estruturas utilizadas no projeto e permitindo que o projeto fosse complementado com
detalhes relacionados à fase de implementação.
Referente a trabalhos futuros estão em desenvolvimento outros dois trabalhos
relacionados a arquitetura de linha de produto para WfMS. O primeiro refere-se à Geração de
Produtos numa abordagem de linha de produto e o segundo é o projeto do componente
Gerenciador de Interfaces Gráficas.
Referências
[1] P. Clements, “Software Product Line Fundamentals”, Addison-Wesley, 2001.
[2] I. M. S. Gimenes, G. Weiss, E. H. M. Huzita, “Um Padrão para Definição de um Gerenciador de
Processos de Software”, in 1999 Proc. II Workshop Ibero Americano de Engenharia de
Requisitos Y Ambientes de Software, San José, Costa Rica, Ideas’1999 Memorias, 1999, pp. 3046.
[3] Workflow Management Coalition. Workflow Reference Model. Document number TC00-1003,
January, 1995.
[4] F. R. Lazilha, “Uma Proposta de Arquitetura de Linha de Produtos para Workflow Management
Systems”. Universidade Federal do Rio Grande do Sul. Instituto de Informática. Porto Alegre.
Janeiro de 2002.
[5] D. F. D’Souza, A. C. Wills, Objects, Components and Frameworks with UML – The Catalysis
Approach. Addison Wesley Publishing Company, 1999.
[6] I. Jacobson, M. Griss, P. Jonsson, Software Reuse – Architecture Process and Organization for
Business Success, New York: Addison-Wesley, 1997.
[7] F. Bachmann, L. Bass, “Managing Variability in Software Architectures”, in 2001 Sysmposium on
Software Reusability, Toronto, Canada.
[8] SUN, Java, Available: http://java.sun.com/, June 2003.
[9] MySQL, Available: http://www.mysql.com/, June 2003.
[10] Jakarta Project, ObJectRelationBridge, Available: http://jakarta.apache.org/ojb, June de 2003.
Download