Hola amigos de DelphiAcces, estoy comenzando muy fuerte en el mundo de DataSnap y de a poco lo voy
comprendiendo gracias a pequeños ejemplos que voy haciendo. Pero estoy teniendo una duda
en cuanto a la forma de utilizacion del componente TDSServerClass:
Por lo que pude investigar es un compontente de la capa servidora que se aloja en el ServerContainer y que
representa una clase para exponer los metodos publicos al cliente.
Mis preguntas son:
1) Si desarrollo "X" cantidad de clases para manejar varios modulos del sistema y quiero disponibilizar a los clientes
los metodos de cada clase, tengo que tener "X" cantidad de TDSServerClass en el ServerContainer tambien enlazado a cada clase,
o se a cada clase le va a corresponder un TDSServerClass en el ServerContainer.
2) Del lado del cliente, con el TSQLConexion, al darle clic derecho la opcion "Generate DataSnap Client Classes, el
me generaria los metodos de que clase? o de todas las clases, o para estos casos ya debo utilizar el TSqlServerMethod.
Utilizo delphi XE5.
les agradeceria la aclaracion.
Utilizacion de los TDSServerClass
Comenzado por
Homero
, jun 27 2014 08:19
5 respuestas en este tema
#1
Escrito 27 junio 2014 - 08:19
#2
Escrito 27 junio 2014 - 09:55
Hola
Efectivamente debe existir un TDSServerClass para cada módulo que quieras exponer ante los clientes, hay manera de interceptar el evento y generar la clase por código, pero te recomiendo hacer uno por cada módulo.
Igualmente no creo que se deban crear varios módulos, con uno o dos puede ser más que suficiente, si es por accesos, te recomiendo ver la parte de seguridad y accesos del datasnap, así por cada perfil se le puede restringir que puede hacer o no. es bastante completo y robusto.
si la necesidad de crear varios módulos no es por accesos y seguridad, te agradecería me lo comentaras, he realizado varias aplicaciones bastante robustas y no he tenido la necesidad de crear más de dos módulos.
Desde el cliente, se crea un solo TSQLConnection y al importar clases se genera en la librería todas las clases que estén registradas en el servidor.
Algo importante que debes tener en cuenta es el lifecycle del DSServerClass, porque según ese modelo debes o no proveer el manejo multitarea de acceso a variables y a recursos compartidos.
Saludos.
Efectivamente debe existir un TDSServerClass para cada módulo que quieras exponer ante los clientes, hay manera de interceptar el evento y generar la clase por código, pero te recomiendo hacer uno por cada módulo.
Igualmente no creo que se deban crear varios módulos, con uno o dos puede ser más que suficiente, si es por accesos, te recomiendo ver la parte de seguridad y accesos del datasnap, así por cada perfil se le puede restringir que puede hacer o no. es bastante completo y robusto.
si la necesidad de crear varios módulos no es por accesos y seguridad, te agradecería me lo comentaras, he realizado varias aplicaciones bastante robustas y no he tenido la necesidad de crear más de dos módulos.
Desde el cliente, se crea un solo TSQLConnection y al importar clases se genera en la librería todas las clases que estén registradas en el servidor.
Algo importante que debes tener en cuenta es el lifecycle del DSServerClass, porque según ese modelo debes o no proveer el manejo multitarea de acceso a variables y a recursos compartidos.
Saludos.
#3
Escrito 27 junio 2014 - 02:07
Muchas gracias por tu respuesta, hace varios años que programo con delphi pero simpre en ambiente de dos capas,
asi que todo esto de DataSnap es nuevo para mi.
Cuando mencionas lo siguiente "Igualmente no creo que se deban crear varios módulos,
con uno o dos puede ser más que suficiente" lo que quieres decir es que con uno
o dos DSServerClass se pueden manajar varias clases servidoras, Modulo es igual a DSServerClass, esta parte
no lo comprendo.
Para Ejemplificarte mi razonamiento de desarrollo doy un ejemplo:
Tengo dos tablas cliente y proveedor, necesito crear una aplicacion para cargar ambas tablas,
entonces utilizando el esquema de DataSnap haria lo siguiente: crear dos clases (ServerMethods),
servermethodcliente, servermethoproveedor cada una con todos los metodos para manejar las tablas, y para
publicar estos metodos al cliente necesito poner dos DSServerClass en el ServerContainer, y asi
sucesivamente con otras clases que voy creaando para otras tablas.
Entonces es valido este esenario de desarrollo, o lo que me quieres decir es que dinamicamente
con un DSServerClass puedo manejar muchas clases.
O que las clase que desarrolle tiene que ser mas complejas
de manera a que manejen modulos completos como un modulo comercial de tesereria por ejemplo y no
una clase por tabla como lo estoy pensando.
Desde ya muchas gracias y espero que se haya entendido mi duda.
asi que todo esto de DataSnap es nuevo para mi.
Cuando mencionas lo siguiente "Igualmente no creo que se deban crear varios módulos,
con uno o dos puede ser más que suficiente" lo que quieres decir es que con uno
o dos DSServerClass se pueden manajar varias clases servidoras, Modulo es igual a DSServerClass, esta parte
no lo comprendo.
Para Ejemplificarte mi razonamiento de desarrollo doy un ejemplo:
Tengo dos tablas cliente y proveedor, necesito crear una aplicacion para cargar ambas tablas,
entonces utilizando el esquema de DataSnap haria lo siguiente: crear dos clases (ServerMethods),
servermethodcliente, servermethoproveedor cada una con todos los metodos para manejar las tablas, y para
publicar estos metodos al cliente necesito poner dos DSServerClass en el ServerContainer, y asi
sucesivamente con otras clases que voy creaando para otras tablas.
Entonces es valido este esenario de desarrollo, o lo que me quieres decir es que dinamicamente
con un DSServerClass puedo manejar muchas clases.
O que las clase que desarrolle tiene que ser mas complejas
de manera a que manejen modulos completos como un modulo comercial de tesereria por ejemplo y no
una clase por tabla como lo estoy pensando.
Desde ya muchas gracias y espero que se haya entendido mi duda.
#4
Escrito 30 junio 2014 - 09:28
Hola
El módulo donde realizas los procedimientos también se utiliza como un datamodulo, en el cual puedes adicionar varios datasets conectados a las bases de datos, estos datasets los publicas con un tdatasetprovider, así en un solo datamodulo en el servidor puedes porveer los procedimientos y los datos correspondientes.
Ahora estoy fuera de casa por vacaciones, pero el martes realizaré un ejemplo y lo analizaremos.
Saludos.
El módulo donde realizas los procedimientos también se utiliza como un datamodulo, en el cual puedes adicionar varios datasets conectados a las bases de datos, estos datasets los publicas con un tdatasetprovider, así en un solo datamodulo en el servidor puedes porveer los procedimientos y los datos correspondientes.
Ahora estoy fuera de casa por vacaciones, pero el martes realizaré un ejemplo y lo analizaremos.
Saludos.
#5
Escrito 12 febrero 2015 - 06:25
genriquez:
Hola, ya con concemos por mail, y estaba mirando este post. Si tengo gran cantidad de Querys y demas los organizo en varios ServerModule? o como lo haces. Es decir, en mi aplicacion de escritorio, tengo organizado ( intento ) en varios DataModule, aca en dataSnap, como lo hago, pues si hago un serverModule, debo configurar su sqlconnetcion y no se si esta bien eso. Como haces tu para estas situaciones?
Hola, ya con concemos por mail, y estaba mirando este post. Si tengo gran cantidad de Querys y demas los organizo en varios ServerModule? o como lo haces. Es decir, en mi aplicacion de escritorio, tengo organizado ( intento ) en varios DataModule, aca en dataSnap, como lo hago, pues si hago un serverModule, debo configurar su sqlconnetcion y no se si esta bien eso. Como haces tu para estas situaciones?
#6
Escrito 14 febrero 2015 - 07:36
Hola chaja
La verdad la solución la encontré haciendo mi propia implementación del servidor, así que no utilizo directamente esta arquitectura, y lo que te pueda contar es sobre la teoría, ya que no tengo ningún proyecto práctico ni andando con muchos datamodulos, lo máximo que he utilizado son dos y con sus respectivos componentes al lado del cliente.
Me gustaría escuchar las opiniones de quienes ya hayan tenido este problema y la implementación que hayan realizado.
Saludos.
La verdad la solución la encontré haciendo mi propia implementación del servidor, así que no utilizo directamente esta arquitectura, y lo que te pueda contar es sobre la teoría, ya que no tengo ningún proyecto práctico ni andando con muchos datamodulos, lo máximo que he utilizado son dos y con sus respectivos componentes al lado del cliente.
Me gustaría escuchar las opiniones de quienes ya hayan tenido este problema y la implementación que hayan realizado.
Saludos.