Ir al contenido


Foto

Probar concurrencia DataSnap2010 y Firebird


  • Por favor identifícate para responder
31 respuestas en este tema

#1 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 28 noviembre 2009 - 01:25

Compañeros he desarrollado un pequeño y elemental ejemplo (que adjunto sin paquetes, ojala funcione), dbExpress,
una tabla con tres campos en Firebird 2.1, Delphi 2010, Windows 7 64bits,  4gb RAM.

Al arrancar el servidor solo hay que confirmar el  User_Name y el  Password que utilicen en Firebird.

En el cliente he dispuesto un DateTimePicker para colocar en el una hora mayor(prudencial) a la de su sistema, con el objeto
de poder abrir varios clientes simultánemente y tener el tiempo suficiente para programar una misma hora para ejecutar la transacción.

También en el cliente hay un TEdit dispuesto para colocar el número de registros que queremos insertar,
al hacer click en el botón (activar) se habilita un timer que compara la hora del sistema con la del DateTimePicker,
cuando la hora del sistema es mayor que la del Picker entonces se dispara la transacción y el Timer se desactiva.

He probado hasta con 6 clientes abiertos insertando un solo registro y no hay problema.

Las fallas inician cuando abro mas de 3 clientes y trato de insertar mas de 2 registros en cada uno, entonces se
bloquean todos los clientes y tambien  el servidor, sin disparar ninguna excepción. Comportamiento inesperado en caso
de en querer insertar por ejemplo las líneas de detalle de una factura en 5 puestos de pago diferentes de un almacén con mucha clientela.

El favor que pido es que hagan las pruebas que menciono, y echenle una mirada al código (el programa es lo mas sencillo y
elemental posible) a ver si me pueden ayudar a detectar que es lo que pasa, lo más desconcertante es que hice las mismas pruebas
sobre los propios ejemplos de Adreano en Embarcadero, y presentan los mismos problemas.

Gracias por su tiempo, solidaridad y paciencia.

Espero sus comentarios.

Archivos adjuntos


  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 28 noviembre 2009 - 04:21

Hola Wilson, ya lo descargué, mañana te comento, ahora voy saliendo ;)
  • 0

#3 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 28 noviembre 2009 - 05:46

Intenté abrirlo con D7 pero por ejemplo en la parte servidor me pide estos componentes:

TDSServer
TDSTCPServer
TDSServerClass

¿Solo estan en D2010?


Saludos!
  • 0

#4 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 28 noviembre 2009 - 05:59

Gracias Felipe por el intento, si está en D2010.
  • 0

#5 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 28 noviembre 2009 - 07:43

Me sucedió lo mismo, ya veo que me costará descargar el demo de D2010.
  • 0

#6 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 28 noviembre 2009 - 08:59

Gracias por el intento Enecumene.
  • 0

#7 axesys

axesys

    Advanced Member

  • Moderadores
  • PipPipPip
  • 640 mensajes
  • LocationLos Mochis

Escrito 28 noviembre 2009 - 11:31

Ya lo baje y sale este error

Remote error: TPersona.InsertaConTransaccion method not found in the server method list.
  • 0

#8 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 28 noviembre 2009 - 11:59

Gracias Axesys, podrías decirme en que momento te salió el error, te dejó insertar algún registro ?
Porque acá no me dá ese error, de hecho el método si está en la lista como puedes comprobarlo en el código. Ojalá no se haya corrompido el archivo.

Amigo si no es mucha molestia, intenta recompilarlo sin Runtime Packages, y si es del caso volver a generar el Proxy en el cliente y  por favor me comentas.

De todas formas si me puedes colaborar echandole una mirada al código y a la estructura del programa, a ver que encuentras mal.

Una vez mas muchímas gracias.
  • 0

#9 axesys

axesys

    Advanced Member

  • Moderadores
  • PipPipPip
  • 640 mensajes
  • LocationLos Mochis

Escrito 29 noviembre 2009 - 12:10

Ya funciono es que nomas corri el cliente me falto ejecutar el servidor

Estoy viendo el código y creo que lo que esta mal es que accedes a la variable ServerContainer


Saludos
  • 0

#10 axesys

axesys

    Advanced Member

  • Moderadores
  • PipPipPip
  • 640 mensajes
  • LocationLos Mochis

Escrito 29 noviembre 2009 - 12:16

Tambien sospecho de que el sqlconnection este junto con los componentes de datasnap


Saludos
  • 0

#11 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 29 noviembre 2009 - 12:18

Gracias por contestar axesys, hazle por favor todas las pruebas que planteo en el primer post (obviamente cuando tengas tiempo) a ver si al fin le doy salida a eso que me tiene bien aburrido.

Una vez mas gracias totales.
  • 0

#12 axesys

axesys

    Advanced Member

  • Moderadores
  • PipPipPip
  • 640 mensajes
  • LocationLos Mochis

Escrito 29 noviembre 2009 - 12:26

Pues si se traba con las pruebas, estoy moviendo el sqlconnection a tpersona y le quite todas las referencias a la variable ServerContainer haber que pasa


Saludos
  • 0

#13 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 29 noviembre 2009 - 12:40

Gracias mi hermano.
  • 0

#14 axesys

axesys

    Advanced Member

  • Moderadores
  • PipPipPip
  • 640 mensajes
  • LocationLos Mochis

Escrito 29 noviembre 2009 - 12:46

Estoy viendo que en ninguna parte se crea la instancia de Persona no será por eso, y por que no usas un TDSServerModule para poner los componentes de conexion, los querys, los sps y los server methods?
  • 0

#15 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 29 noviembre 2009 - 12:56

Estoy viendo que en ninguna parte se crea la instancia de Persona no será por eso, y por que no usas un datamodule para poner los componentes de conexion, los querys, los sps y los server methods?


Simplifiqué para hacer mas sencillo el ejemplo y mas evidente el problema, la instancia del TPersona, la crea y la destruye el TDSServerClass del dmcontainer. 

Con los componentes ocurre lo mismo via IAppServer haciendo los ApplyUpdates, por eso me decanté por utilizar la TDXTransaction para ver si allí radicaba el problema.

Lo mas desconcertante es que la prueba de conciurrencia se la hice a los ejemplos de Adreano Lanousse y tambien fallan, se bloquean sin lanzar excepción alguna.

Me gustaría que si dispones de tiempo hicieras un ejemplo muy pequeño con tu manera de trabajar y le realizamos la misma prueba con el Timer y el Picker a ver que pasa, de momento le he quemado tiempo a eso haciendole mil pruebas y todas me fallan.

Gracias por tu inetres mi hermano.
  • 0

#16 axesys

axesys

    Advanced Member

  • Moderadores
  • PipPipPip
  • 640 mensajes
  • LocationLos Mochis

Escrito 29 noviembre 2009 - 01:12

Así me funciona pongo de 1000 registros con dos clientes al mismo tiempo y si se desbloquea despues de hacer las incersiones solo cambie persona por un dsserverclass y le movi el sqlconnection ahí


Saludos

Archivos adjuntos


  • 0

#17 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 29 noviembre 2009 - 01:16

Voy a probarlo y te comento, gracias por todo mi hermano.
  • 0

#18 axesys

axesys

    Advanced Member

  • Moderadores
  • PipPipPip
  • 640 mensajes
  • LocationLos Mochis

Escrito 29 noviembre 2009 - 01:22

Voy a probarlo y te comento, gracias por todo mi hermano.


De nada ojala y si te sirva  :smiley:


Saludos
  • 0

#19 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 29 noviembre 2009 - 01:30

Anda perfecto lo probé con 10 clientes.  Muchas gracias por todo mi hermano. (y) (y)
  • 0

#20 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 29 noviembre 2009 - 07:22

Ah qué bien, ya podemos colocar el hilo como resuelto ¿no? (y)
  • 0




IP.Board spam blocked by CleanTalk.