Uma Ferramenta Baseada em
MDA para a Especialização de
Mecanismos de Persistência
Fabio Seixas Marques
[email protected]
Seminário LES – 2 de setembro de 2005
www.les.inf.puc-rio.br
www.teccomm.les.inf.puc-rio.br
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
Exporta
Modelo 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
Exporta
Modelo PIM
Importa
Modelo 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
Cria o Modelo PIM
Adiciona Marcações
Exporta
Modelo PIM
Perguntas
Respostas
Importa
Modelo PIM
Transformação
Ferramenta
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,
nomeClassePersistente);
NEW_METHOD (classeFachadaPersistencia,
NEW_METHOD (classeFachadaPersistencia,
NEW_METHOD (classeFachadaPersistencia,
END_LOOP;
END_RECIPE;
END_COOKBOOK
Laboratório de Engenharia de Software – PUC-Rio
“selecionar” +
“inserir” + nomeClassePersistente);
“alterar” + nomeClassePersistente);
“deletar” + nomeClassePersistente);
Passos da Ferramenta
Cria o Modelo PIM
Adiciona Marcações
Exporta
Modelo PIM
Perguntas
Respostas
Importa
Modelo PIM
Exporta
Modelo PSM
Transformação
Ferramenta
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
Modelo PSM
Gerado!
Cria o Modelo PIM
Adiciona Marcações
Exporta
Modelo PIM
Perguntas
Respostas
Importa
Modelo PIM
Exporta
Modelo PSM
Transformação
Ferramenta
Laboratório de Engenharia de Software – PUC-Rio
Importa
Modelo PSM
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.
Laboratório de Engenharia de Software – PUC-Rio
Download

Media:fabioMarques - (LES) da PUC-Rio