Home > Delphi, RemObjects > Passo a Passo: RemObjects SDK e DataSnap

Passo a Passo: RemObjects SDK e DataSnap

Para ajudar quem deseja utilizar o RemObjects SDK como camada de comunicação de um aplicativo DataSnap, substituindo o BSS, aqui vai um passo a passo usando Delphi 2006 e RemObjects SDK 5 para criação de um servidor Combo (que pode funcionar como serviço ou como aplicativo standalone):

File, New, Other. Em Delphi Projects, procure por RemObjects SDK e selecione Combo Service/Standalone.

ro1.JPG

O wizard do RO aparece. Escolha uma pasta para o projeto, as outras configurações não precisam ser alteradas. Clique OK.

ro2.JPG

Nesse momento você já tem um servidor e um cliente prontos, organizados em um grupo de projetos na IDE.

ro3.JPG

Vamos criar um novo serviço no servidor que exponha nossos DataSetProviders do DataSnap. Dê um clique duplo no NewProject.exe para selecionar o servido de aplicação e no menu RemObjects da IDE selecione “Edit Service Library” ou Ctrl+Alt+U. Isso vai abrir o Service Builder já mostrando que seu servidor tem um serviço denominado “NewService”.

ro4.JPG

Para criar um serviço DataSnap, precisamos incluir um RODL que já acompanha o RO e que possui todas as definições da interface padrão de servidores DataSnap. Para isso, estando no Service Builder, selecione o menu Edit, Use Existing RODL e depois selecione DataSnap. Agora o nome “uRODataSnap” já deve aparecer na treeview ao lado esquerdo.

ro5.JPG

Agora crie o novo serviço clicando no botão Service e dê o nome de “DataSnapService”. Na combo Ancestor selecione AppServer. Isso diz para o RO que esse serviço é descendente de AppServer, que é a interface de servidores DataSnap.

ro6.JPG

Feche o Service Builder, e tente compilar o servidor (Ctrl+F9). Neste momento uma nova tela do RO aparece perguntando como você deseja implementar o novo DataSnapService. Utilize a opção recomendada, “RemObjects SDK Remote Datamodule”.

ro7.JPG

Agora você já tem um DataModule onde pode colocar seus componentes de dados e o DataSetProvider.

ro12.JPG

Coloque alguns, compile o servidor e execute usando a opção Launch Server Executable do menu RemObjects SDK na IDE ou usando o atalho Ctrl+Alt+F9. Seu servidor já está rodando.

ro9.JPG

Dê um duplo clique no NewProjectClient.exe para selecionar o cliente. Abra o form do cliente, apague o componente RORemoteService, que não utlizaremos e coloque um componente TRODataSnapConnection. Selecione o componente e ligue com o ROChannel e a ROMessage que já estão no form. Na propriedade ServerName, coloque o nome do serviço DataSnap que criamos no servidor, ou seja, “DataSnapService”.

ro10.JPG

Coloque um ClientDataSet no form, ligue ele ao RODataSnapConnection usando a propriedade RemoteServer e selecione o provider na propriedade ProviderName.

ro11.JPG

Pronto! Você já tem um aplicativo em 3 camadas DataSnap usando RO como camada de comunicação. Se desejar rodar o servidor como serviço do Windows, basta registrar o serviço usando “NewProject.exe /install” na linha de comando.

Categories: Delphi, RemObjects Tags:
  1. Fausto
    August 3rd, 2007 at 07:38 | #1

    Muito bom Erick, acho que com este artigo pelo menos quem esta iniciando já pode dar o pontapé inicial, pois dai em frente é só complementar com o help e os artigos do site do RO..
    Me inscrevi no news do RO e fiquei contente de ver sua participação no news.
    Abraço
    Fausto

  2. Francisco
    August 3rd, 2007 at 08:44 | #2

    Parabens pelo artigo. atualmente uso bss, existe vantagens no remobsject que valeria a pena uma troca? abraços…

  3. August 3rd, 2007 at 08:57 | #3

    Francisco, essa é uma pergunta difícil para eu responder pois nunca trabalhei com BSS, mas já conversei com muita gente que migrou do BSS para o RemObjects e só falam maravilhas.

  4. Guilherme
    August 3rd, 2007 at 10:06 | #4

    Erick, conta pra nós algumas dessas maravilhas !
    Eu não trabalho a muito tempo com desenvolvimento, mas tenho usado o BSS e não tem ma apresentado problemas. Indepentente disso gostaria de conhecer melhor o Rem.
    Pelo menos dá uma luz melhor a respeito das vantagens.Vlw.

  5. August 3rd, 2007 at 10:13 | #5

    Guilherme, vou pedir para algumas pessoas me ajudarem nisso, pois como eu te disse nunca usei BSS e não posso sair falando algo sem ter certeza.

  6. Reuber
    August 3rd, 2007 at 10:33 | #6

    Erick, nós da comunidade Delphi só temos a agradecer por esta iniciativa. Há muito tempo ouço falar do RemObjects e não tive sucesso ao tentar aprender a usá-lo sozinho, mas com esse passo-a-passo, foi de primeira. Estou fazendo testes com a versão 4 e caso forem satisfatórios, prentendo adquirir a versão 5. O que há de melhoria e vantagens da versão 5 em relação à versão 4.

  7. August 3rd, 2007 at 11:01 | #7

    As novidades da versão 5 estão aqui: http://www.remobjects.com/product/page.asp?id={330FB1E9-D47C-47EE-B682-9CCBE9677C4D}

  8. Guilherme
    August 3rd, 2007 at 15:56 | #8

    Blz Erick, aproveitando vou dar uma pesquisada tb. Mas qualquer coisa que venha para ajudar será bem vindo. Se puder, expõe apenas alguns pontos que você acha legal no Rem e assim já vai ajudar a despertar mais o interesse dos colegas no assunto, não a caso de comparação com o BSS, apenas para conhecer melhor a suite.

  9. August 4th, 2007 at 12:22 | #9

    Farei mais posts em breve mostrando outros recursos interessantes.

  10. Luciano França
    August 4th, 2007 at 21:39 | #10

    Erick gostaria de saber como eu poderia fazer para criar um servidor generico com o RO, onde eu iria usar o Banco Firebird 2.0.
    Os componentes Asta tem um servidor generico.
    como existe algum já pronto no RO, nos exemplos dele eu não achei nada a respeito.

    Grato.
    Luciano França.

  11. Guilherme
    August 6th, 2007 at 07:50 | #11

    Blz Erick, estamos aguandando.

  12. Robert
    August 6th, 2007 at 22:24 | #12

    “Feche o Service Builder, e tente compilar o servidor (Ctrl+F9). Neste momento uma nova tela do RO aparece perguntando como você deseja implementar o novo DataSnapService. Utilize a opção recomendada, “RemObjects SDK Remote Datamodule”. ”

    Nesta etapa, não foi pedido para implementar o datasnapservice. Estou usando o Delphi 2007 com a versao 5.0.21.601

    Está faltando alguma coisa ?

    Robert.

  13. Tiago
    August 16th, 2007 at 18:51 | #13

    Olá Erick!
    A algum tempo tenho lido a respeito da RO e seus produtos, e tenho tentado entender como eles funcionam e tudo mais.
    Gostaria de saber se vc sabe se alguém já conseguiu implementar/desenvolver uma solução baseada em Firebird+IBO com o DataAbstract. Pelo o que eu li existe um driver que pode ser utilizado juntamente com o IBObjects.
    Atualmente trabalho com um sistema clássico 2 camadas, Delphi+Firebird+IBO. Funciona que uma blz, é estável como uma rocha, de tamanho considerável (450.000 linhas), mas já estamos pensando em como portá-lo (ou desenvolver um novo) para 3 camadas.
    Então se você souber de algo, eu fico muito agradecido.

    Tiago.

  14. August 18th, 2007 at 12:56 | #14

    Robert, tente forçar a recriação das units usando a opção “recreate units from RODL” no menu RemObjects da IDE. Veja se iso ajuda.

  15. Paulo Portella
    September 10th, 2007 at 17:52 | #15

    Erick/Robert,
    Tambem tive o mesmo problema, mas estou usando a versao 4.0.11.509, e nao consegui fazer a tela pra eu escolher RemObjects SDK Remote Datamodule.
    Porem, o exemplo funcionou mesmo assim…
    Agora vejo que tem muito, MAS MUITA COISA, pra ser descoberta.
    Entao vai a dica Erick.-> Tah em suas maos (dedos) distrinchar essa bagaça e ajudar a galera que tah precisando adentrar nesse mundo fascinante.
    Estou adorando cada vez mais.
    Poste mais exemplos principalmente sobre DA, pois lembrei-me que no exemplo DA02 nao estou conseguindo faze-lo funcionar….

  16. Marcello Dias
    September 16th, 2007 at 19:59 | #16

    Tenho orgulho de ter sido um dos primeiros a vislumbrar o poder do rem objects.
    Em 2002 escrevi um artigo no site Delphi 3000.
    Lembro de ter colocado um wish list no site da borland pedindo que este produto viesse junto com o Delphi 8.
    Se eles tivessem me ouvido…

    Agora faço as mesmas críticas que fazia na época,o software é muito mal documentado,sem exemplos mais complexos.

    Por exemplo gostária de ume xemplo que tivesse um datamodule e como invocar um método deste datamoude a paritr do cliente.
    Nos exemplos eles ensinam a chamar os métodos que são criados automáticamente,mas gostária de criar meu próprios métodos.

  17. September 16th, 2007 at 22:39 | #17

    Marcello, chamar seus próprios métodos é uma tarefa muito simples. Você realmente tem dúvidas nisso?

  18. Marcello Dias
    September 17th, 2007 at 13:21 | #18

    Eu quero definir um metódo dentro de um datamodule.
    E chamar a partir do cliente.
    No Dcom vocÊ tem que acessar a TLB,criar o método na unha,desristrar o servidor e depos registra o Servidor de novo.
    Eu não vi nenhum sample,falando passo a passo como declarar um novo método dentro de um datamodule.
    Sei que se peder algum tempo consigo,mas acho que é para isto que os Samples existem.

  19. Corlos Gonzaga
    October 17th, 2007 at 14:47 | #19

    Erick, vc poderia falar um pouco em relaçao a segurança deste…?

  20. Elieser
    December 21st, 2007 at 10:05 | #20

    Olá Eric! Se eu tiver vários clientes acessando bases diferentes no mesmo servidor, a melhor alternativa é fazer um serviço (executável) para cada cliente?

  21. December 25th, 2007 at 20:33 | #21

    Elieser, acho que a melhor alternativa seria guardar uma referencia para o banco de dados que o cliente está usando na sessão do usuário.

  22. January 16th, 2008 at 16:58 | #22

    Olá Erick,

    Parabéns pelo artigo!
    Este foi meu primeiro contato com o SDK e não tive problemas para implementar o exemplo.

    Abraços,

    Ulisses
    http://www.cyberconn.com

  23. Cristiano Costa
    August 27th, 2008 at 15:36 | #23

    Erick, eu tenho um procedimento me retornando um array, e dentro desse array tenho uma lista. Se eu faço um laço para ler esse array ele ta me retornando somente 1 valor desse array. O que pode ser? Aguardo…

  24. Mauricio
    November 23rd, 2008 at 13:00 | #24

    Erro ao compilar NewLibrary_Intf.dcu não achei em parte algum .
    Obrigado.

  25. Dércio
    March 23rd, 2009 at 16:49 | #25

    Erick..
    Estou com a versão trial do componente.
    Tentei fazer o passo a passo com Delphi 7, porém na segunda tela, quando clico no Ok, não acontece nada, ou seja, não abre a terceira tela que tem no passo a passo. Qual será o problema ?

  1. No trackbacks yet.