Uma DSL para declarar a Ordem de Execução de Aspectos

28
Uma DSL para declarar a ordem de execução de aspectos “A DSL to declare aspect execution order Antoine Marot Université Libre de Bruxelles (ULB) Roel Wuyts IMEC Leuven and KU Leuven Apresentação: Giorgio Prímola F. G. Torres Professor: Vladimir Oliveira Di Iorio Universidade Federal de Viçosa Centro de Ciências Exatas e Tecnológicas Departamento de Informática INF 442 Programação Orientada a Aspectos e Padrões de Projetos

description

Apresentação sobre o artigo "A DSL to declare aspect execution order" de Antoine Marot da Université Libre de Bruxelles e Roel Wuyts do IMEC Leuven and KU Leuven, para a disciplina de programação orientada a aspectos da Universidade Federal de Viçosa

Transcript of Uma DSL para declarar a Ordem de Execução de Aspectos

Page 1: Uma DSL para declarar a Ordem de Execução de Aspectos

Uma DSL para declarar a ordem de execução de aspectos

“A DSL to declare aspect execution order” Antoine Marot

Université Libre de Bruxelles (ULB)Roel Wuyts

IMEC Leuven and KU Leuven

Apresentação: Giorgio Prímola F. G. TorresProfessor: Vladimir Oliveira Di Iorio

Universidade Federal de ViçosaCentro de Ciências Exatas e Tecnológicas

Departamento de InformáticaINF 442 – Programação Orientada a Aspectos e Padrões

de Projetos

Page 2: Uma DSL para declarar a Ordem de Execução de Aspectos

Introdução – DSL• Quando se trabalha com um conjunto deoperações que aparecem freqüentemente aolidar com um determinado problema (domínio),surge a necessidade de abstrair essas operaçõespara torná-las mais práticas.

• Uma DSL trata da abstração de um conjunto deoperações complexas, ou apenas trabalhosas,por um outro conjunto mais prático.

Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia

Page 3: Uma DSL para declarar a Ordem de Execução de Aspectos

Introdução – Ordem de execução entre aspectos

• Quando dois ou mais aspectos executam emum mesmo join point, pode ser necessárioespecificar a ordem de execução entre eles.

• Tipo de problema semântico.

• Exemplo: aspectos VerificaPermissaoUsuario e MonitoraAcoes.

Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia

Page 4: Uma DSL para declarar a Ordem de Execução de Aspectos

Estudo de caso

• Uma empresa desenvolveu uma aplicação dotipo cliente-servidor para hospedagem dearquivos, que é amplamente usada. O sevidor équem hospeda os arquivos. Os usuários utilizamum aplicativo cliente para enviar arquivosatravés do método send(). Quando o arquivoestá sendo enviado, primeiro ele é encriptado edepois compactado, para acelerar o envio.

Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia

Page 5: Uma DSL para declarar a Ordem de Execução de Aspectos

Estudo de caso

• Porém, a companhia prevê que, em um futuropróximo, terá que dar suporte a novas técnicas desegurança e compactação, e também continuar aatender aqueles que utilizam o modelo antigo.

• A empresa adotou uma nova técnica de primeirocomprimir o arquivo e depois encriptá-lo, por causada adoção de um novo método de compactação.

Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia

Page 6: Uma DSL para declarar a Ordem de Execução de Aspectos

Estudo de caso• Como a compressão e a encriptação sãofuncionaliades transversais, foram identificadosdois aspectos:

• SecureUpload;

• CompressUpload.

• Ambos estão encarregados em fazer aoperação que cabe a eles, e desfazê-la, aochegar ao servidor.

Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia

Page 7: Uma DSL para declarar a Ordem de Execução de Aspectos

Estudo de caso

public aspect SecureUpload {before(File f) :

call(* Client.send(..)) && args(f) {encrypt(f);

}

before(File f) :call(* Server.receive(..)) && args(f) {

decrypt(f);}

}

Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia

Page 8: Uma DSL para declarar a Ordem de Execução de Aspectos

Estudo de caso

public aspect CompressUpload {before(File f) :

call(* Client.send(..)) && args(f) {zip(f);

}

before(File f) :call(* Server.receive(..)) && args(f) {

unzip(f);}

}

Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia

Page 9: Uma DSL para declarar a Ordem de Execução de Aspectos

Estudo de caso

• Os dois aspectos apresentados como soluçãopara o problema relatado, interceptam ummesmo join point.

• Problema: Qual aspecto executará primeiro?

Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia

Page 10: Uma DSL para declarar a Ordem de Execução de Aspectos

Estudo de caso• A ordem precisa ser de tal forma que:

• no envio do arquivo sejam feitas primeiro a operaçãode compactação e depois a de criptografia;

• no recebimento do arquivo, primeiro decriptografa edepois descompacta.

• A ordem estabelecida acima não diz respeito àordem dos aspectos, mas sim à ordem dos advicesdos aspectos.

Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia

Page 11: Uma DSL para declarar a Ordem de Execução de Aspectos

Estudo de caso

Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia

Page 12: Uma DSL para declarar a Ordem de Execução de Aspectos

Soluções

• O problema da ordem de execução deaspectos não é um problema novo, ele já vemsendo estudado, e já existem algumas técnicaspara esse problema:

• Ordenação dos Aspectos (ordering aspects);

• JAsCo;

• Composição declarativa de aspecto (declarativeaspect composition).

Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia

Page 13: Uma DSL para declarar a Ordem de Execução de Aspectos

Soluções

• Ordenação dos aspectos (ordering aspects):solução implementada na própria AspectJ pelocomando “declare precedence”.

• “Se um aspecto A deve preceder um aspecto B,então todos os adendos de A devem preceder os deB.”

• Problema: não é aplicável ao estudo de casoapresentado, pois este requer ordem na execuçãodos adendos.

Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia

Page 14: Uma DSL para declarar a Ordem de Execução de Aspectos

Soluções

• JAsCo: é uma linguagem orientada a aspectosestendida de Java, onde o escopo do aspecto éseparado do seu comportamento. Ocomportamento é descrito através de hooks,presente na própria linguagem.

• É possível determinar ordem de execução entre osadendos;

• É uma solução inviável para o problemaapresentado, pois o trata a um nível muito abaixo.

Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia

Page 15: Uma DSL para declarar a Ordem de Execução de Aspectos

Soluções

• Composição declarativa de aspecto: baseadoem declarações de restrições em um aspectoseparado.

• Restrição de ordenação: determina que umadendo deve ser executado antes de um outro;

• Restrição de controle: determina que um adviceserá executado somente se um outro foi executadocom sucesso.

Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia

Page 16: Uma DSL para declarar a Ordem de Execução de Aspectos

Solução proposta pelo artigo• Abordagem declarativa de aspectos baseado emregras de composição que declaram restrições. É asolução apresentada em uma nova DSL por estetrabalho.

• O problema da ordem de execução de aspectos étambém um problema transversal. É interessanteentão, criar um aspecto que lida com a ordenaçãoao invés de definir a ordem de execução dentro dospróprios aspectos que interceptam um mesmo joinpoint.

Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia

Page 17: Uma DSL para declarar a Ordem de Execução de Aspectos

Solução proposta pelo artigo• Regras de composição são restrições que oweaver leva em consideração enquanto tece osadendos nos pontos de junção.

• São declaradas em aspectos separados edescrevem o comportamento dos adendos dosaspectos envolvidos.

• Especificam o contexto nos quais estarãoativas. Se um join point atende ao contexto, aregra é executada.

Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia

Page 18: Uma DSL para declarar a Ordem de Execução de Aspectos

Solução proposta pelo artigo

• Existem quatro tipos de restrições possíveispara as regras:

1. Prec(a,b): especifica que o adendo ‘a’ tem queser executado antes do adendo ‘b’;

2. First(a): o adendo ‘a’ tem que ser o primeiro aser executado;

3. Last(a): o adendo ‘a’ tem que ser o último a serexecutado;

4. Ignore(a): o adendo ‘a’ não será executado.

Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia

Page 19: Uma DSL para declarar a Ordem de Execução de Aspectos

Solução proposta pelo artigo

• As quatro restrições podem ser aplicadas noestudo de caso.

• Para isso, os adendos são nomeados daseguinte forma: zipFile, unzipFile, encryptFile edecryptFile.

Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia

Page 20: Uma DSL para declarar a Ordem de Execução de Aspectos

Solução proposta pelo artigo

• As restrições são montadas de acordo com osnomes dos adendos:

• Prec(zipFile, encryptFile);• Prec(decryptFile, unzipFile).

• Com estas restrições, a ordenação da execuçãodos aspectos é definida.• No entanto, os usuários antigos que utilizam osistema de encriptar primeiro e depois compactar,não são mais atendidos pelo sistema.

Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia

Page 21: Uma DSL para declarar a Ordem de Execução de Aspectos

Solução proposta pelo artigo• Para solucionar o problema de suporte a usuáriosdo sistema antigo, a DSL criada oferece a opção decriar uma outra regra que será ativada numcontexto específico.

• A parametrização de regras por pointcuts, permiteque uma regra seja bem específica para aqueleponto de junção.

• Uso do parâmetro advices(a1, a2, ..., an) identificao ponto de junção onde todos aqueles adendosinteragem.

Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia

Page 22: Uma DSL para declarar a Ordem de Execução de Aspectos

Solução proposta pelo artigopublic aspect AspectComposition {

public boolean isZipped(File f) {return f.isZipped();

}declare rule sendFile:

advices(zipFile, encryptFile) {Prec(zipFile, encryptFile);

}declare rule receiveFile:

advices(unzipFile, decryptFile) {Prec(decryptFile, unzipFile);

}declare rule oldVersion extends receiveFile:

advices(unzipFile, decryptFile) && if(isZipped(thisJoinPoint.getArgs()[0])) {

Prec(unzipFile, decryptFile);}

}

Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia

Page 23: Uma DSL para declarar a Ordem de Execução de Aspectos

Solução proposta pelo artigo

• O mecanismo de extensão (extends), usado naregra de recebimento do servidor para clientesantigos, é necessário pois ele define umaprioridade entre a regra nova de recebimentocom a do cliente antigo.

• Uma regra que extends uma outra regra, temprioridade sobre esta última, e pode ser vistacomo um caso de excessão.

Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia

Page 24: Uma DSL para declarar a Ordem de Execução de Aspectos

Outros exemplospublic aspect ChooseVisualization {

public boolean otherVis = false;before(String [] a) : execution(* Main.main(String[]))

&& args(a) {if(a[0].equals(“otherVis”))

otherVis = true;}declare rule defaultVis : advices(VisAspect1.*, VisAspect2.*) &&

if(!otherVis) {Ignore(VisAspect2.*);

}declare rule otherVis : advices(VisAspect1.*, VisAspect2.*) &&

if(otherVis) {Ignore(VisAspect1.*);

}}

Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia

Page 25: Uma DSL para declarar a Ordem de Execução de Aspectos

Outros exemplospublic aspect LogAspectCode {

public boolean log = false;before() beforeFirst: call(* *.foo(..)) {

log = true;}before() beforeLast: call(* *.foo(..)) {

log = false;}before() logAdvice: set(* *.*) && if(log) {

/* Log informations */}declare rule logBefore:

advices(beforeFirst, beforeLast) {First(beforeFirst);Last(beforeLast);

};}

Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia

Page 26: Uma DSL para declarar a Ordem de Execução de Aspectos

Conclusões

• A ordem de execução de aspectos em umpointcut é um problema transversal.

• A composição de aspectos é problemática apartir de quando as interações entre aspectosaparecem, pois estas podem levar a programas“tecidos” erroneamente pelo weaver dosaspectos.

Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia

Page 27: Uma DSL para declarar a Ordem de Execução de Aspectos

Dúvidas?

Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia

Page 28: Uma DSL para declarar a Ordem de Execução de Aspectos

Bibliografia

Antoine Marot and Roel Wuyts. 2008. A DSL to declare aspect execution order. In Proceedings of the 2008 AOSD workshop on Domain-specific aspect languages (DSAL '08). ACM, New York, NY, USA, 2008. ACM press.

Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia