"Você conhece alguém de Roraima?" Essa é uma frase comum quando queremos enfatizar que algo ou alguém jamais foi visto ou se há dúvidas se ele realmente existe. E olha que de fato, eu não conheço nínguem de Roraima ... acredito realmente que ela efetivamente não exista. Brincadeiras a parte, este post será dedicado a mostrar na prática, o que é a plataforma de Data Services da Red Hat conhecida mundialmente como MetaMatrix, e conhecida internamente como JBoss Data Services Platform. Acredito que muitas pessoas já ouviram coisas sobre o MetaMatrix, alguns já experimentaram seus conceitos na prática através do projeto Teiid, mas poucos, o viram realmente em sua plenitude, com todos os seus recursos, e até mesmo num cenário real. O MetaMatrix é líder mundial de soluções de EII (Enterprise Information Integration) porém sofre do mal de Roraima: Ele é bem pouco difundido e conhecido. Vou tentar explicá-lo através de uma demonstração que criei usando o MetaMatrix Platform versão 5.5, disponível para assinantes da subscrição da Red Hat, e que daqui um tempo, estará integralmente disponivel no site da JBoss.ORG no projeto Teiid.Um cenário típico para o MetaMatrix
O propósito geral do MetaMatrix é ser uma plataforma para integração de dados. Com este objetivo em mente, ele pode ser usado para resolver N problemas comuns no mundo dos dados. O cenário mais trivial possível seria por exemplo, usá-lo como Firewall de dados. Imagine por exemplo que você possui milhares de bases de dados (possivelmente de diferentes fabricantes) e que, você tenha informações nestas bases que sejam sigilosas. Mas você precisa dar acesso a um grupo de aplicações para que estas via SQL possam recuperar e modificar dados. Usando o MetaMatrix, você pode consolidar estes dados num banco de dados virtual, e este poderia ser acessado por estas aplicações.
Outro cenário interessante é a de MDM (Master Data Management). Uma questão crucial para muitas organizações é possuir uma visão 360 graus de uma dada informação, geralmente clientes e produtos. No ramo bancário por exemplo, é de extrema importância que você tenha uma visão holistica sobre determinada informação (um cliente por exemplo) para que você ganhe maior agilidade. A um tempo atrás por exemplo, participei de um projeto de automação de uma empresa do ramo de cartões, cujo problema era que um atendimento demorava cerca de 24 minutos por cliente(quase 15 minutos a mais do que o SLA contratado) e essa demora se dava porque as informações do cliente, faturas, atendimento de call center e dados de transações de cartões residiam em sistemas diferentes, alguns destes baseados em mainframe. Logo, atender um cliente era uma tarefa árdua para as pobres atendentes. Na ocasião, o projeto era justamente de criar uma interface adminstrativa que reunia dados de sistemas SQL, mainframe, sistemas em Websphere e Delphi, que reunia tudo isso numa única tela, bastando que o atendente digitasse o CPF do cliente. Através do MetaMatrix, isso também é possível.
Agregar dados de diferentes fontes de dados não é algo inovador. Sistemas baseados em OLAP ou Data warehouse já usam este conceito. Mas este tipo de solução sofre de dois problemas graves: Primeiro as informações não são de tempo real, os dados são atualizados quando programas ETLs são disparados (normalmente num período onde os transacionais estão em "descanso") e segundo, os dados são somente para consumo e leitura, eles não podem ser modificados. Usando o MetaMatrix, você agrega várias fontes de dados e ainda consegue ter dados em tempo real porque a transformação é online, e o acesso as fontes de dados é feito por conectores especiais que possibilitam transações na camada de EIS. Criar portanto soluções de BAM ou BI tendo o MetaMatrix como fundação é algo a se considerar, uma vez que o nível da informação se torna ainda mais interessante.
Vários cenários são interessantes para uso do MetaMatrix, e é justamente isso que o torna tão poderoso. Para fins de demonstração, considere o seguinte cenário: Uma empresa de seguros de vida possui um setor de atendimento que necessita visualizar todas as informações relativas a um cliente numa única interface rica escrita preferencialmente para estações de trabalho Windows. As informações a serem visualizadas são:
1) Os dados pessoais do cliente, atualmente mantidos por um sistema PHP acessando o MySQL
2) Os dados de contato do cliente, atualmente mantidos por um sistema Perl acessando o PostgreSQL
3) Os dados de apólices armazenados no DB2 do CICS, que exporta diariamente dados para TXT
A interface criada, originalmente usando a plataforma .NET, em especial, usando a tecnologia de Windows Forms é mostrada abaixo. Repare que a consulta feita é baseada apenas no CPF do cliente, e todas as informações citadas são reunidas nesta interface rica.
Bem, a pergunta seria: Como todos estes dados vieram parar numa aplicação cliente feita em .NET? E a resposta curta (e óbvia) seria: Através do MetaMatrix. Vamos ver como foi o processo de construção deste projeto de Data Services e como os dados foram disponibilizados.
Importação de Fontes de Dados, Criação de Entidades virtuais, VDBs
A primeira coisa a se fazer num projeto de federação de dados usando o MetaMatrix é realizar a importação de todas as fontes de dados que comporão um data service. Isso é feito através da ferramenta MetaMatrix Designer, um ambiente visual baseado no Eclipse altamente produtivo.
O modelo de trabalho do MM Designer é muito simples: Você cria um projeto de data services, constitui suas fontes (origens) dos dados, cria uma ou mais entidades virtuais (views) compostas das fontes de dados, e depois integra tudo isso num banco de dados virtual conhecido como VDB, sigla de Virtual Database. A importação dos dados é feita por um processo 100% visual e bem pouco complicado.
Depois que todas as fontes de dados são importadas para dentro de um projeto do MM Designer, é possível criar as entidades virtuais, ou seja, os data services. Data Services são como views de um banco de dados, só que são baseadas em tabelas, views ou procedures de diferentes tipos de bancos de dados ou de até mesmo coisas que não sejam bancos de dados, como sistemas de caixinha (Excel, PeopleSoft, Siebel, Oracle EBS), tecnologias (SOAP, HTTP, JMS) e formatos (XML, EDI, TXT). Através do MetaMatrix e seus conectores, qualquer fonte de dados vira um potencial data service, possibilitando inclusive, que transformações sejam aplicadas aos data services. Abaixo segue um exemplo de como, duas entidades virtuais foram constituídas das fontes de dados importadas, a saber, a tabela "TAB_CLIENTE" do MySQL, a tabela "TAB_ENDERECO" também do MySQL, a tabela "CONTATO" a partir de um arquivo TXT e a tabela "TAB_APOLICE" do PostgreSQL.
Criado os data services, é hora de consolidar tudo num VDB. Criei um VDB e inserir todos meus data services, web services e fontes de dados nele. A partir do VDB criado, por dentro do MM Designer, você pode testar se suas entidades virtuais estão funcionando corretamente. Basta compilar o VDB e solicitar a execução de testes.
Deployment: A hora mais temida de todas. Será?
Além do MM Designer, a plataforma MetaMatrix é também composta por dois outros elementos. Uma deles é o MetaMatrix Server, ou simplesmente, MM Server. É ele que mantêm os bancos de dados virtuais no ar e que faz todo o acesso as fontes de dados. O MM Server é na prática, um servidor de banco de dados como qualquer outro. Você conecta com ele, realiza autenticações, cria bases de dados (virtuais), executa consultas SQL, ele cria Query Plans para consultas pesadas ... enfim, tudo o que um SGBDR possui, ele também têm. É possível inclusive, criar stored procedures e trigger dentro dele usando a implementação de SQL dele nativa.
A única coisa que o difere dos demais bancos de dados, é que ele além disso, é um middleware de integração, que através dos conectores acessa várias fontes de dados, e pode, expor estes dados através de SQL (sua abordagem padrão) ou via SOAP, expondo as entidades virtuais na forma de Web Services.
O outro elemento da plataforma MetaMatrix é o MetaMatrix Console, ou simplesmente, MM Console. Ele é a interface gráfica de gerenciamento do MM Server. Através dele, você pode fazer deployments, gerar estatísiticas dos VDBS, parar e reiniciar conectores de EIS e claro, gerenciar questões de autenticação e autorização dos usuários. Fazer o deploymento de um VDB no MM Server é uma questão realmente trivial. Vamos aos detalhes. Primeiro, você deverá conectar no MM Console. O servidor do MetaMatrix deverá estar sendo executado em algum computador da rede que o MM Console possa acessar.
Estando logado no MM Console, basta clicar no item "Virtual Databases" e clicar no botão "Import VDB" para importar o banco de dados virtual que você criou. O mesmo VDB pode ser importando diversas vezes. Cada processo de import gera uma nova versão do VDB, o que torna o MetaMatrix ainda mais poderoso: Você pode ter várias versões do seu banco de dados em produção.
Depois de importar seu VDB, você deverá configurar os parâmetros especiais dos conectores que você usou durante a etapa de projeto. Por exemplo, como eu importei dados oriundos de uma base MySQL, outra PostgreSQL e de um arquivo TXT, uma instância de cada um destes conectores me foi gerada pelo MM Designer e incorporada dentro do VDB. Como o ambiente de desenvolvimento pode ser ligeiramente diferente do ambiente de produção, talvez se faça necessário a re-configuração dos parâmetros de acesso a dados a cada uma destas fontes de dados, dados como URL de conexão, endereço IP, usuários e senhas. Feito isso, seu banco de dados virtual está pronto para receber conexões de aplicações via SQL ou SOAP.
Acessando o banco de dados virtual criado via JDBC
Para fins de testes, criei este pequeno programa Java que realiza uma conexão com meu servidor do MetaMatrix, realiza uma consulta em minha entidade virtual "Cliente" e exibe os dados retornados no console. Repare que a consulta feita é uma consulta padrão baseada no puro e simples SQL. Nenhum código "mirabolante" teve que ser criado, e reparando nos imports da classe, dá pra ver que nada mais do que o JDK e o driver JDBC do MetaMatrix (que acompanha o produto) são necessários para criar um cliente destes. Um ponto interessante a se notar também, é que dentro do JAR que contêm o driver JDBC do MetaMatrix, existe uma classe de dialeto do Hibernate, portanto, é possível também criar clientes em Hibernate e JPA acessando MetaMatrix, caso desenho O.O de aplicações seja imperativo em sua organização.
Acessando o banco de dados virtual criado via SOAP
Finalmente, através do MetaMatrix é possível acessar as entidades virtuais através de SOAP. Se no seu VDB você habilitou esta opção, fazendo a distribuição dos XSDs que definem seu endpoint e os tipos complexos dos data services (facilmente gerados pelo MM Designer) você pode disponibilizar qualquer data service via SOAP. A infra-estrutura necessária para isso será ter um servidor de aplicações ou contêiner de Servlets que possa rodar um pequeno programa WAR (Web Archive). O MM Server disponibiliza uma aplicação Web Java que atua como Gateway entre o servidor de aplicações e o servidor do MetaMatrix.
Ao fazer o deploy deste pequeno WAR no servidor de aplicações de sua escolha, você apenas instrui a aplicação a saber qual é o endereço IP e porta que o MM Server estará escutando. Feito isso, basta acessar a seguinte URL: http://192.168.0.1:8080/metamatrix-soap/
Onde "192.168.0.1" é o servidor de aplicações que você escolheu para ser o gateway de SOAP. Ao acessar esta URL, você irá se deparar com a seguinte interface Web:
Clicando no link "Discover MetaMatrix Web Services" você fará com que a pequena aplicação Web (O Gateway) acesso o MM Server e pesquise em sua base de UDDI interna sobre os Web Services publicados. Uma lista será apresentada na tela com o resultado da consulta, e cada item da lista, terá um endereço WSDL disponibilizando, criado automaticamente pelo MM Server. Dai pra frente, qualquer requisição SOAP enviada para um destes endpoints, será enviada diretamente para o MM Server.
E desta forma, com as entidades virtuais (Cliente e Apólice) disponibilizadas via SOAP, pode ser criado o cliente rico em .NET. Acredito que este post mostrou um pouco do poder e robustez da plataforma MetaMatrix, que é a fundação do JBoss Data Services Platform disponibilizado pela Red Hat via subscrições. Se você achou esta solução interessante, e consegue ver soluções suas baseadas nela, não hesite em procurar a Red Hat do Brasil que possamos lhe auxiliar no que for preciso. Tão em breve, toda esta plataforma estará disponível para a comunidade. Neste meio tempo, é uma boa pedida exercitar os conceitos do MetaMatrix através do projeto Teiid.
Forte abraço e até a próxima!