RemObjects SDK

Criando aplicações multi-camadas com Delphi/Kylix

 

Neste artigo darei uma visão-geral do framework RemObjetcs para a criação de aplicações multi-camadas usando Delphi/Kylix que se encontra na versão 2.0.3, veremos sua versão para a plataforma .NET, integração com Hydra, RemObjects Client for Java e como funciona seu mecanismo de integração com a tecnologia DataSnap. Na edição 35, uma matéria de minha autoria, pudemos ver a interoperabilidade que o framework nos proporciona utilizando como exemplo o tradutor BabelFish. Uma de suas características é o desenvolvimento remoto orientado a objetos, isso é o que difere dos demais frameworks (ASTA, DataSnap, etc).

Problemas encontrados nos frameworks existentes:

  - Só podemos trabalhar utilizando o protocolo padrão, não temos a opção de escolha.

  - Utiliza arquitetura orientada a eventos.

  - Utilizam protocolos proprietários o que dificulta a comunicação com clientes desenvolvidos em outras linguagens.

Estes são os problemas mais comuns na utilização dos frameworks existentes. Quando utilizamos RemObjects SDK não encontramos estes problemas pois sua arquitetura é aberta. Podemos criar Smart Services, aplicações servidoras que podem utilizar dois caminhos para a troca de dados. O primeiro utiliza o padrão SOAP para a troca de pacotes. E o segundo, utiliza um formato de mensagem binária otimizada.

Quando instalamos o framework automaticamente é adicionado à janela de News Items do Delphi uma guia chamada RemObjects DSK contendo os ícones dos projetos. Temos wizards para: Apache e Apache 2 shared modules, CGI Server, DLL Server, ISAPI/NSAPI Server, entre outros tipos de projetos. Após selecionarmos uma das opções é gerado um novo projeto vazio, então podemos adicionar funcionalidades de acordo com a necessidade do projeto. Veja na figura 1, a janela de News Items.

 

Figura 1 - Janela de News Items com a guia RemObjects SDK.

Service Builder

Service Builder é uma aplicação integrada ao Delphi, que é instalada juntamente com o framework. Nada mais é do que uma versão RemObjects SDK para o Type Library Editor do Delphi utilizado em aplicações COM. Ele é usado para definir os arquivos RODL, também cria tipos complexos, enumerados, vetores (arrays), exceções e serviços (interfaces). Cria a definição da aplicação para sua publicação. O Service Builder importa serviços dos seguintes tipos: WSDL, COM Type Libraries e Units Delphi. Na figura 2 temos o Service Builder.

 

Nota: RODL é uma versão RemObjects para definição de serviços, que é equivalente à arquivos WSDL, ou arquivos TLB para servidores COM.

 

Figura 2 - A tela principal do Service Builder.

Componentes

Com o RemObjects SDK instalado, temos a adição de uma nova paleta de componentes chamada de RemObjects. Nela, encontramos componentes de mensagens e servidores. Os componentes de mensagens são utilizados para encapsular mensagens entre aplicações clientes e servidoras.

O framework possui dois componentes para mensagens: TROSOAPMessage , que encapsula Web Services baseados em SOAP. TROBINMessage encapsula o formato de mensagem binária otimizada na aplicação o que elimina o overhead imposto pelo padrão SOAP.

Os componentes servidores são utilizados para realizar conexões, enviar resultados, etc. São criados automaticamente pelo wizard de criação de projetos. Veja na tabela1, temos alguns componentes de servidores.

 

Componente

Descrição

TROWinMessageServer

Se a aplicação cliente e a servidora residem na mesma máquina, podemos utilizar o rápido e eficiente formato de mensagens WM_COPYDATA, ao invés de TCP/IP ou HTTP.

TROWebBrokerServer

Usado quando sua aplicação servidora for uma ISAPI/NSAPI.

TROIndyHTTPServer

Implementa um servidor HTTP para buscar numa porta específica e interceptar as requisições feitas por clientes. Utilizando os componentes Indy sobre a implementação HTTP.

TROIndyTCPServer

Funciona da mesma forma que o componente TROIndyHTTPServer, mas sobre TCP/IP.

Tabela 1 - Componentes Servidores

Os componentes de canais (Channel), são utilizados em aplicações clientes para a conexão com o servidor e a especificação de um método para transporte dos dados. Veja na tabela 2 estes componentes.

Componente

Descrição

TROWinInetHTTPChannel

Conecta à um servidor HTTP usando a biblioteca wininet

TROWinMessageChannel

Conecta à um servidor utilizado o formato de mensagens WM_COPYDATA – utilizado quando cliente e servidor estão na mesma máquina.

TRODLLChannel

Conecta à um servidor do tipo DLL

TROIndyTCPChannel

Conecta à um servidor utilizando TCP/IP, utilizando Indy.

TROIndyHTTPChannel

Conecta à um servidor HTTP por meio do Indy.

Tabela 2 - Componentes Canais (Channels)

RemObjects Client For .NET

Em 2003 foi lançada a versão client do RemObjects SDK para a plataforma .NET, desenvolvida em C# e podendo ser instalada nas IDEs: Visual Studio.NET, C# Builder e Delphi For .NET.

Veja na figura 3 o exemplo que publiquei no CodeCentral da Borland, onde desenvolvi um servidor em Delphi 7 e o cliente no C#Builder.

 

Figura 3 - Aplicação desenvolvida no C#Builder com RemObjects SDK Client For .NET.

Para este ano está previsto lançamento da versão completa do RemObjects SDK for .NET, onde podermos criar aplicações 100% .NET, não se esqueça que esta pode ser uma boa alternativa quanto a utilização do .NET Remoting para aplicações multi-camadas no .NET. A versão atual do client For .NET não traz o suporte à WSDL, logo, só é possível a criação de aplicações baseadas em RODL.

Integração com o Framework Hydra

Recentemente a criadora do RemObjects SDK anunciou em seu site o lançamento de uma nova ferramenta o Framework Hydra para a criação de plugins visuais e não-visuais com Delphi e a possibilidade de integrar Hydra com RemObjects SDK. Para maiores informações e teste do produto acesse o endereço: www.remobjects.com?Hydra

RemObjects Client For Java

No último período deste ano, poderemos contar com mais um integrante na família RemObjects, desta vez o Client para a plataforma Java, para conferir sobre os lançamentos da empresa acesse seu site oficial.

Integração com DataSnap

DataSnap é a tecnologia da Borland para a criação de aplicações multi-camadas. Um servidor DataSnap pode ser acessado usando TCP/IP.

 

Nota: Se for distribuído sobre HTTP, basta colocar juntamente com a aplicação a biblioteca httpsrvr.dll por incompatibilidade do serviço de implementação da Borland e do COM.

 

O RemObjects SDK oferece uma integração com a tecnologia Borland DataSnap para que você possa continuar o desenvolvimento dessas aplicações. Utilizando toda infra-estrutura permitida pelo framework. Uma das vantagens de utilizar as duas tecnologias é que o RemObjects não necessita de registrar um servidor COM. Veremos agora como isso funciona na prática, para isso no Delphi crie uma nova aplicação, no formulário principal, adicione os componentes: 1 ROBPDXHTTPServer e 1 ROBinMessage ambos da paleta RemObjects. Selecione o componente ROBPDXHTTPServer em sua propriedade Dispatchers adicione o componente ROBinMessage, veja na figura 4 a janela para a configuração do objeto por onde os dados trafegarão.

 

Figura 4 - Configuração do Dispatcher.

Neste exemplo utilizamos o servidor HTTP do RemObjects, mas poderíamos utilizar o TCP, e escolhemos o canal BIN para o tráfego de dados, poderíamos ter selecionado a opção SOAP, para efetuar tal opção basta inserir no formulário um componente ROSOAPMessage e configurar a propriedade Dispatcher do ROBPDXHTTPServer ou ROBPDXTCPServer. No evento OnShow do formulário adicione o seguinte código:

 

procedure TForm1.FormShow(Sender: TObject);

begin

  ROBPDXHTTPServer1.Active := True;

end;

 

e em seu evento OnClose, insira a seguinte codificação:

 

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

  ROBPDXHTTPServer1.Active := False;

end;

 

Insira na aplicação um RemObjects DataSnap Server Module que pode ser acessado através do menu File | New | Other na guia RemObjects. Acabamos de adicionar ao nosso projeto um datamodule especial para a integração do RemObjects SDK com o DataSnap, nele insira os componentes da DBExpress para a conexão com o banco de dados employee.gdb do Interbase. Veja na figura 5 nosso RODataSnapModule.

 

Figura 5 - O RODataModule da aplicação.

Pronto! Já podemos compilar nossa aplicação servidora. Agora iremos desenvolver o cliente, para isso inicie uma nova aplicação, nela insira os componentes: RODataSnapConnection, ROWinInetHTTPChannel, ROBinMessage ambos da paleta RemObjects.

O componente RODataSnapConnection, equivale aos TwebConnection, TsocketConnection, DCOMConnection da arquitetura DataSnap. Já o ROWinInetHTTPChannel é componente responsável pelo canal de comunicação entre cliente e servidor. O componente ROBinMessage especifica o formato em que os dados trafegarão, neste caso em mensagens binárias.

Configure a propriedade Channel do RODataSnapConnection para ROWinInetHTTPChannel1 e Message para ROBinMessage1.

No ROWinInetHTTPChannel1 configure a propriedade Target URL para http://localhost:8099/bin e Connected para True. Adicione ao formulário um ClientDataSet e um DataSource (Data Access).

No ClientDataSet, configure sua propriedade RemoteServer para RODataSnapConnection1, ProviderName para DSPProvider e Active para True. No DataSource aponte sua propriedade DataSet para o ClientDataSet1.

Adicione ao formulário 1 DBGrid, 1 DBNavigator e 1 Button, no DBGrid e no DBNavigator configure suas propriedades DataSource para DataSource1 e no evento OnClick do Button digite o seguinte código:

 

procedure TForm1.Button1Click(Sender: TObject);

begin

ClientDataSet1.ApplyUpdates(0);

end;

 

Pronto! Aqui terminamos nossa aplicação cliente, agora basta executar a aplicação e conferir a integração com DataSnap! Veja na figura 6.

 

Figura 6 - A aplicação em execução.

Conclusão

RemObjects SDK é uma ferramenta para o desenvolvimento de aplicações multi-camadas usando Delphi e Kylix. Neste artigo pudemos obter uma visão-geral do que é o framework, de seus diferenciais em relação as demais tecnologias multi-camadas e as facilidades que a ferramenta nos proporciona. Além de conhecermos suas diferentes versões que extendem o desenvolvimento para as plataformas .NET e Java. Vimos também sua integração com DataSnap.