B
biggo
Unregistered / Unconfirmed
GUEST, unregistred user!
Dcom应用服务器程序,采用MultiInstance/Apartment线程方式。问题是这样的:
应用服务器定义了接口A,接口A根据传递来的参数,对数据模块中间的某个公用DataSet有增加、删除和修改操作。
实际运行情况如下:
有两个用户甲和乙,他们刚好同时使用接口A修改数据库数据。
甲根据传递的参数,修改了DataSet的某些数据,刚好在提交数据保存之前,乙也修改了DataSet的某些数据,
那么甲在提交保存数据的时候是提交的甲的数据还是乙的数据?
结果估计有三种:
1,产生多用户冲突,甲提交的数据是乙修改的内容。
2,应用服务器本身能自动调节这种冲突,在甲没有使用完DataSet的时候,乙用户排队等待甲使用完毕,才会使用该DataSet,所以冲突没有发生。
3,在甲乙同时调用接口A的时候,应用服务器实际上在两个线程中间产生DataSet的一个副本,甲乙双方在使用的时候互不冲突,是最理想的情况。
现在请教下大家,在实际使用中间,到底结果是哪种呢??
如果不是第2种或者是第3种,怎么解决冲突问题,难道在接口A中不能使用共用的DataSet,而要把DataSet直接定义在接口A的内部?
应用服务器定义了接口A,接口A根据传递来的参数,对数据模块中间的某个公用DataSet有增加、删除和修改操作。
实际运行情况如下:
有两个用户甲和乙,他们刚好同时使用接口A修改数据库数据。
甲根据传递的参数,修改了DataSet的某些数据,刚好在提交数据保存之前,乙也修改了DataSet的某些数据,
那么甲在提交保存数据的时候是提交的甲的数据还是乙的数据?
结果估计有三种:
1,产生多用户冲突,甲提交的数据是乙修改的内容。
2,应用服务器本身能自动调节这种冲突,在甲没有使用完DataSet的时候,乙用户排队等待甲使用完毕,才会使用该DataSet,所以冲突没有发生。
3,在甲乙同时调用接口A的时候,应用服务器实际上在两个线程中间产生DataSet的一个副本,甲乙双方在使用的时候互不冲突,是最理想的情况。
现在请教下大家,在实际使用中间,到底结果是哪种呢??
如果不是第2种或者是第3种,怎么解决冲突问题,难道在接口A中不能使用共用的DataSet,而要把DataSet直接定义在接口A的内部?