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