uma ferramenta baseada em mda para a especialização de mecanismos de persistência fabio seixas...
TRANSCRIPT
Uma Ferramenta Baseada em
MDA para a Especialização de
Mecanismos de Persistência
Fabio Seixas [email protected]
Seminário LES – 2 de setembro de 2005
www.les.inf.puc-rio.br www.teccomm.les.inf.puc-rio.br
Laboratório de Engenharia de Software – PUC-Rio
Sumário
• Motivação;
• Objetivo;
• OMG Model Driven Architecture (MDA);
• RDL (Reuse Description Language);
• Passos da Ferramenta;
• O que já foi feito;
• O que falta fazer;
• Bibliografia.
Laboratório de Engenharia de Software – PUC-Rio
Motivação
• Os sistemas ainda são desenvolvidos com o foco em somente uma linguagem de programação, uma arquitetura, um framework, entre outras tecnologias;
• E se algum desses fatores mudarem?
• Normalmente o sistema é parcialmente refeito, pois a modelagem está “amarrada” a essas tecnologias;
• O MDA (Model Driven Architecture) foi criado com o intuito de resolver esse tipo de problema. Os sistemas são desenvolvidos com o pensamento de possíveis mudanças;
• Ao invés de um modelo preso a tecnologias, é feito um modelo de mais alto nível, para caso alguma tecnologia seja alterada, esse modelo não seja afetado.
Laboratório de Engenharia de Software – PUC-Rio
Objetivo
• Criação de uma ferramenta que faça a transformação de um modelo independente de plataforma (PIM), em um modelo específico para uma plataforma (PSM), sendo a parte de persistência o foco da ferramenta;
• O desenvolvedor informa através de marcações no modelo PIM, onde e qual o tipo de transformações que devem ocorrer;
• Durante a transformação a ferramenta efetua perguntas, de modo a criar um modelo específico para o desenvolvedor.
Laboratório de Engenharia de Software – PUC-Rio
OMG Model Driven Architecture (MDA)
•Criação de um modelo independentemente de plataforma;
•“Configuração” do modelo através de marcações;
•Transformação do modelo anterior em um modelo baseado em plataforma.
PIM – Platform Independent Model
PSM – Platform Specifc Model
Laboratório de Engenharia de Software – PUC-Rio
RDL (Reuse Description Language)
• A linguagem RDL foi criada para mapear os diversos casos possíveis à instanciação de um Framework;
• Ela funciona na forma de scripts contendo regras para a manipulação de modelos orientados a objetos (criação de classes, atributos, métodos, etc…);
• Existe uma máquina virtual que gera as regras dos arquivos RDL na forma de tags XMI.
Laboratório de Engenharia de Software – PUC-Rio
Por que utilizar RDL?
• As transformações da nossa ferramenta são bem definidas;
• A forma de obter e alterar informações dos modelos é feita através de arquivos XMI;
• Então RDL se encaixa bem no nosso contexto, pois com ela podemos guardar nossas transformações em forma de regras e utilizar uma máquina virtual para gerar essas regras em tags XMI.
Laboratório de Engenharia de Software – PUC-Rio
Passos da Ferramenta
Cria o Modelo PIM
Laboratório de Engenharia de Software – PUC-Rio
Exemplo de um Modelo PIM
Laboratório de Engenharia de Software – PUC-Rio
Passos da Ferramenta
Cria o Modelo PIM
Adiciona Marcações
Laboratório de Engenharia de Software – PUC-Rio
Modelo PIM Configurado
Classes Persistentes
Laboratório de Engenharia de Software – PUC-Rio
Passos da Ferramenta
Cria o Modelo PIM
Adiciona Marcações
ExportaModelo PIM
Laboratório de Engenharia de Software – PUC-Rio
Modelo PIM Exportado Como um Arquivo XMI
<UML:Class xmi.id = 'I1bc2e06m1060e5e7e0cmm7f51' name = 'Comprador' visibility = 'public‘ isSpecification = 'false' isRoot = 'false' isLeaf = 'false' isAbstract = 'false‘ isActive = 'false'>
<UML:ModelElement.stereotype> <UML:Stereotype xmi.idref = 'I1bc2e06m1060e5e7e0cmm7dbd'/> </UML:ModelElement.stereotype> <UML:Classifier.feature> <UML:Attribute xmi.id = 'I1bc2e06m1060e5e7e0cmm7f04' name = 'nome' visibility = 'private‘ isSpecification = 'false' ownerScope = 'instance' changeability = 'changeable'> <UML:StructuralFeature.type> <UML:Class xmi.idref = 'I1bc2e06m1060e5e7e0cmm7f16'/> </UML:StructuralFeature.type> </UML:Attribute> <UML:Attribute xmi.id = 'I1bc2e06m1060e5e7e0cmm7e77' name = 'email' visibility = 'private‘ isSpecification = 'false' ownerScope = 'instance' changeability = 'changeable'> <UML:StructuralFeature.type> <UML:Class xmi.idref = 'I1bc2e06m1060e5e7e0cmm7f16'/> </UML:StructuralFeature.type> </UML:Attribute> </UML:Classifier.feature></UML:Class>
<UML:Stereotype xmi.id = 'I1bc2e06m1060e5e7e0cmm7dbd' name = 'Persistencia‘ visibility = 'public' isSpecification = 'false' isRoot = 'false' isLeaf = 'false‘ isAbstract = 'false'>
<UML:Stereotype.baseClass>Class</UML:Stereotype.baseClass></UML:Stereotype>
Laboratório de Engenharia de Software – PUC-Rio
Passos da Ferramenta
Cria o Modelo PIM
Adiciona Marcações
ExportaModelo PIM
ImportaModelo PIM
Ferramenta
Laboratório de Engenharia de Software – PUC-Rio
Ferramenta Importa o Modelo PIM
• A ferramenta importa o modelo PIM em forma de um arquivo XMI;
• Ela pode vir a retirar algumas informações do arquivo como:– Esteriótipos;– Nome;– Atributos;– Métodos;– Relacionamentos;– Herança.
Laboratório de Engenharia de Software – PUC-Rio
Passos da Ferramenta
Transformação
Cria o Modelo PIM
Adiciona Marcações
ExportaModelo PIM
ImportaModelo PIM
Ferramenta
RespostasPerguntas
Laboratório de Engenharia de Software – PUC-Rio
O Momento da Transformação
• É neste ponto que a ferramenta começa o trabalho de perguntas e respostas ao desenvolvedor;
• A primeira pergunta é sempre sobre a escolha da plataforma;
• Após a escolha da plataforma, começam as perguntas específicas a plataforma escolhida, como:– Que tipo de Framework de Persistência o mesmo deseja utilizar;– Dependendo do Framework de Persistência escolhido, a ferramenta
pode perguntar ao desenvolvedor se o mesmo deseja que sejam gerados os arquivos XML de configuração do banco e de mapeamento tabela-classe;
– O desenvolvedor pode escolher entre padrões listados pela ferramenta;– Entre outras perguntas menos ou mais específicas.
• As perguntas são formuladas de acordo com as respostas do desenvolvedor.
Laboratório de Engenharia de Software – PUC-Rio
Exemplo de perguntas e respostas
• Qual a plataforma desejada? (Java, .NET)– R. Java
• Qual o Framework de Persistência a ser utilizado? (Hibernate, Castor, outros específicos para a plataforma Java)– R. Hibernate
• Deseja gerar o XML de configuração do banco?– R. Sim
• Qual o endereço, usuário e senha do banco?– R. 10.0.0.1, admin, admin
• Deseja gerar o XML de mapeamento tabela-classe?– R. Sim
• Deseja incluir uma Fachada de Persistência?– R. Sim
Laboratório de Engenharia de Software – PUC-Rio
Analisando e mapeando as respostas do desenvolvedor
• Framework de Persistência Hibernate– Necessita saber as classes persistentes para configurar o arquivo RDL
correspondente a transformação para o Framework Hibernate.
• XML de configuração do banco Hibernate– Insere no arquivo as informações do banco informadas pelo
desenvolvedor, do contrário as deixa em branco.
• XML de mapeamento tabela-classe do banco Hibernate– Necessita saber as classes persistentes e seus atributos para construir
esse arquivo XML.
• Fachada de Persistência– Necessita saber as classes persistentes para configurar o arquivo RDL
correspondente a inclusão da Fachada de Persistência.
Laboratório de Engenharia de Software – PUC-Rio
Exemplo de um Arquivo RDL
COOBOOK FachadaPersistencia RECIPE main classeFachadaPersistencia = NEW_CLASS (FachadaPersistencia); NEW_METHOD (classeFachadaPersistencia, abrirConexaoBanco); NEW_METHOD (classeFachadaPersistencia, fecharConexaoBanco);
LOOP nomeClassePersistente = ?; NEW_METHOD (classeFachadaPersistencia, “selecionar” +
nomeClassePersistente); NEW_METHOD (classeFachadaPersistencia, “inserir” + nomeClassePersistente); NEW_METHOD (classeFachadaPersistencia, “alterar” + nomeClassePersistente); NEW_METHOD (classeFachadaPersistencia, “deletar” + nomeClassePersistente); END_LOOP; END_RECIPE;END_COOKBOOK
Laboratório de Engenharia de Software – PUC-Rio
Passos da Ferramenta
Transformação
Cria o Modelo PIM
Adiciona Marcações
ExportaModelo PIM
ImportaModelo PIM
ExportaModelo PSM
Ferramenta
RespostasPerguntas
Laboratório de Engenharia de Software – PUC-Rio
Modelo PSM Exportado Como um Arquivo XMI
• Arquivo XMI com novas classes, atributos e outras características relacionadas as configurações feitas pelo desenvolvedor;
• Esse modelo não contêm mais as configurações antes adicionadas pelo desenvolvedor.
Laboratório de Engenharia de Software – PUC-Rio
Passos da Ferramenta
Transformação
Cria o Modelo PIM
Adiciona Marcações
ExportaModelo PIM
ImportaModelo PIM
ExportaModelo PSM
ImportaModelo PSM
Ferramenta
RespostasPerguntas
Modelo PSMGerado!
Laboratório de Engenharia de Software – PUC-Rio
PSM Gerado
Classe gerada pelo arquivo RDL correspondente a Fachada Persistência
Classes geradas pelo arquivo RDL correspondente ao Framework Hibernate
Laboratório de Engenharia de Software – PUC-Rio
XMLs Gerados pela Ferramenta (Tabela-Classe)
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate
Mapping DTD 3.0//EN“ "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping> <class name="Comprador" table="Comprador"> <property name="nome"/> <property name="email"/> </class></hibernate-mapping>
Laboratório de Engenharia de Software – PUC-Rio
XMLs Gerados pela Ferramenta (Configuração)
<?xml version='1.0' encoding='utf-8'?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration> <session-factory> <!-- Database connection settings --> <property name="connection.driver_class">org.hsqldb.jdbcDriver</property> <property name="connection.url">10.0.0.1</property> <property name="connection.username">admin</property> <property name="connection.password">admin</property>
<!-- JDBC connection pool (use the built-in) --> <property name="connection.pool_size">1</property>
<!-- SQL dialect --> <property name="dialect">org.hibernate.dialect.HSQLDialect</property>
<!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property>
<!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.auto">create</property>
<mapping resource="Event.hbm.xml"/> </session-factory></hibernate-configuration>
Laboratório de Engenharia de Software – PUC-Rio
O que já foi feito
• Definição dos Frameworks de Persistência suportados pela ferramenta;
• Extração de dados do arquivo XMI;
• Geração de arquivos XML (configuração de banco, tabela-classe, etc…);
• Comunicação entre a ferramenta e a máquina virtual RDL;
• Início do levantamento das perguntas e respostas feitas ao usúario;
• Em relação a parte escrita da dissertação a mesma está em torno de 60% pronta.
Laboratório de Engenharia de Software – PUC-Rio
O que falta fazer
• Fechar as perguntas e respostas feitas ao desenvolvedor;
• Terminar de colocar as regras de transformações em scripts RDL;
• Implementar a comunicação entre a ferramenta e o desenvolvedor;
• Terminar a parte escrita da dissertação.
Laboratório de Engenharia de Software – PUC-Rio
Bibliografia
• FLORE, F. MDA: The proof is in automating transformations between models (White Paper). 2003.
• KLEPPE, A.; WARMER, J.; BAST, W. MDA Explained: The Model Driven Architecture: Practice and Promisse. Addison-Wesley Professional, 25 de Abril de 2003.
• MILLER, J.; MUKERJI, J. MDA Guide. Version 1.0.1. 2003. • Toacy C. Oliveira, Paulo S. C. Alencar, Carlos J.P. de Lucena, Donald
D. Cowan. RDL: A Software Process Language for Framework Instantiation Representation.
• BROWN, A. W. Large-Scale, Component-Based Development. Prentice Hall, 2000.
• GREENFIELD, J.; SHORT, K.; COOK, Steve; KENT, S. Software Factories. Wiley, 2004.