Upload
gprimola
View
503
Download
2
Embed Size (px)
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
Citation preview
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
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
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
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
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
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
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
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
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
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
Estudo de caso
Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Dúvidas?
Introdução – Estudo de caso – Soluções – Solução proposta pelo artigo – Outros Exemplos – Conclusão – Dúvidas – Bibliografia
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