Tiburon - mais novidades sobre DataSnap
DataSnap é uma das grandes novidades no Tiburon. Tenho certeza que vocês ficaram surpresos. Steve Shaughnessy começou a escrever sobre o novo DataSnap.
O novo DataSnap é completamente independente de COM/DCOM com a grande vantagem de utilizar o DBX Framework. Basicamente você irá transferir informações entre cliente e servidor, usando os tipos de dados do DBX Framework data types, também executar métodos através de DataSet e manipular retorno como DBXReader e ClientDataSet.
Criando um servidor
Para criar uma nova aplicação DataSnap, você precisa basicamente de 3 componentes.
- DSServer - Componente que representa o servidor, controla as conexões e permite gerenciar atividades no servidor através dos eventos onConnect, onDisconnect e onError.
- DSTCPServerTransport - Componente reponsável pela transferência de informação entre cliente e servidor, através de uma porta definida em uma propiedade do componente, assim como definir o tamanho do buffer kb.
- DSServerClass - Registra os métodos disponiveis para o cliente..
Mas como disponibilizar os métodos servidores para o cliente DataSnap?
Todos os métodos publicos descendentes de TPersistence podem ser disponibilizados, vale lembrar que a classe deve conter a directiva de compilação {$MethodInfo ON} e ser registrada pelo componente DSServerClass.
Sim, isso funciona com Remote Data Modul.
Abaixo um exemplo, uma classe disponibilziada no meu servidor DataSnap, contém 3 métodos publicos..
Lado cliente
Vamos ver agora o lado cliente. Como conectar e executar métodos no servidor?
A conexão a partir do lado cliente é baseada em DBXClient, isso quer dizer que você precisa apenas de um SQLConnection(dbExpress), definir o nome do servidor, porta e DBXClient driver.
Usando DBXClient como driver você irá obter todas as vantagens do DBX Framework, por exemplo: transferir um DBXReader entre client e server de maneira muito fácil.
Existem vários caminhos para executar métodos no servidor, abaixo alguns exemplos usando os métodos da figura 1.
Executando métodos através do componente SqlServerMethod
Um caminho para executar os métodos no seu servidor é usar o novo componente SqlServerMethod, este componente herda de CustomSQLDataSet, isso permite executar métodos servidor usando DataSet, onde os parâmetros de entrada/saída serão representados pela propriedade Params.
Executando métodos através do componente SQLDataSet
Um novo CommandType chamado DataSnap.ServerMethods foi adicionado ao componente SQLDataSet, permitindo executar métodos no servidor, ao retornar um DBXReader você poderá integrar este retorno a um ClientDataSet e assim ter um cursor bi-direcional.
Essa é uma pequena introdução sobre algumas novidades do novo DataSnap. Fique atento ao nosso blog, mais novidades e exemplos sobre DataSnap virão.
Share This | Email this page to a friend
Posted by Andreano Lanusse on July 21st, 2008 under Delphi, Portuguese |8 Responses to “Tiburon - mais novidades sobre DataSnap”
Leave a Comment
Server Response from: dnrh2.codegear.com



July 21st, 2008 at 4:29 pm
Ótimo, gostei…
Andreano, mandei um email te explicando um recurso que eu gostaria de vê no Delphi.
Com o DBX4, temos class de Conexão e DataSetRead via código bem facilitadas, agora para que isso seja bem aproveitado acredito eu (se tiver falando besteira me corrija) que os componentes DataWare, devam enxergar em design as class criadas em código sem termos que colocar componentes em design.
No caso seria opcional…
Abraço e aguardo mais novidades…
July 22nd, 2008 at 3:32 am
Olá Andreano. Se você puder responder, tenho algumas questões:
1) Existe somente o DSTCPServerTransport como mecanismo de transporte? Como pude observar ele usa o Indy (TCP/IP), certo? Existem outros mecanismos de transporte que usem protocolos de mais alto nível como HTTP, SOAP? E possível criar mecanismos de transporte baseados em outros protocolos e plugar no framework?
2) Os componentes ClientDataSet e DataSetProvider serão extendidos, ou existe um novo conjunto de componentes. Qual o nível de compatibilidade com relação ao que já existe?
3) Os servidores DataSnap poderão ser hospedados em que tipos de aplicação? Serviços Win32, por exemplo? Muito do suporte a multithreading em servidores DataSnap era oferecido pelo próprio COM. Como fica agora esta questão?
4) Last but not least
E quanto aos servidores DataSnap.NET? Gostaria de seu comentário sobre isto, uma vez que considero .NET especialmente viável em servidores e não em clientes.
Obrigado e um abraço.
Alexandre
July 23rd, 2008 at 2:16 pm
Olá Alexandre,
1) Para começar estamos suportando TCP através do DSTCPServerTransport, usando Indy 10, a idéia é suportar HTTP também.
2) ClientDataSet e DataSetProvider continuam compatíveis, você poderá continuar usando Remote Data Modules ou Data Modules convencionais no lado servidor.
3) Qualquer tipo de aplicação Win32 pode hospedar os servidores DataSnap, os 3 componentes sitados é que irão disponibilizar sua aplicação como servidor. O DataSnap tem seu próprio mecanismo de threads, em breve iremos trazer mais detalhes sobre isso.
4) Também considero servidores .NET muito importante, toda a nova estrutura do DataSnap é para permitir interoperabilidades de Client/Server Win32/.NET, e outras plataformas e linguages. Vamos começar com .NET.
Abraços
Andreano
July 25th, 2008 at 7:46 am
Rapaz, ficou bem parecido com o esquema de datasnap dinamico que montei e mostrei no Borcon 2007. Estamos utilizando json para serializar as coisas tabem. É bom saber que terei pouquissimo trabalho para converter minhas aplicações datasnap!
July 25th, 2008 at 9:48 am
Andreano, como será com o pessoal que já tem um sistema usando o famoso COM!? A migração vai ser automática ou terá que refazer o server todo?
Mais uma coisa. Aquela "ginástica" com a Type Library pra criar vários RDMs, vai continuar? ou a TLB já era!?
[]s
August 5th, 2008 at 2:01 pm
Será que essa versão do Delphi irá ter suporte a desenvolvimento para plataforma windows ce? coisa que o VS MS está muito na frente, e a code gear? Que não tem nada e está levando uma banho do VB.net e etc… ???????????
September 16th, 2008 at 1:46 pm
Andreano,
eu estou gostando muito do Delphi 2009 pelo trial q eu baixei, só que uma coisa que já está me tirando o sono.
Como faço para fazer atualizações/inserções via datasnap, utilizando dbexpress???
Eu montei o servidor e o cliente, conforme mostra seu artigo, e ele funcionou perfeitamente, eu consigo visualizar dados perfeitamente. Mas na hora de atualizar/inserir ele gera um erro dizendo não ser possível…
Gostaría se possível uma luz quanto a essa questão.
Muito Obrigado..
Cleiton
October 14th, 2008 at 3:35 pm
Andreano,
É possível instanciar objetos dentro da classe do servidor do datasnap?
Quero fazer a seguinte implementação:
Tenho a classe principal do datasnap no servidor, e dentro dela quero instanciar objetos das classes de acesso ao banco de dados. basicamente tenho uma classe de acesso para cada tabela no banco de dados, e quero acessar cada classe por meio de propriedades.