很久没有写东西了,这段时间忙得不可开交,心得也一大堆,比较散,所以整体的心得还是过段时间再写吧。
不过这个小问题还是比较独立的。
一句磨耳朵的话还要再提一遍,GT3实现Grid Service的思想是有状态的Service,而GT4是无状态的Service+有状态的Resource。这一点在Client端看似变化不大,但有个问题必须注意!在GT3中Client端都是通过Service的Handle访问Service;而在GT4中是通过一个类型为EndpointReferenceType的对象(通常我定义此变量名为epr,此后提epr,即指EndpointReferenceType对象)访问Service和Resource;EndpointReferenceType是WS-Addressing标准定义的一个类型,里面包含了Service的Handle及Resource的鉴别等信息。
Handle是字符串类型,很容易输出和保存。而EndpointReferenceType是一个复杂的类型,当创建一个Resource后,服务端会返回一个epr,通过这个epr对Resource进行读取,修改等操作。但client端程序退出前如果不想销毁Resource(以后还要用),epr将丢失,而epr的丢失将导致Resource的丢失。因此必须保存epr,保存的方法呢?在所有已发布的globus文档及示例代码中均没有考虑这个问题(都是用过Resource后在本程序中就销毁Resource),就这个问题我询问了Globus.org,感谢Ben Clifford和Jarek的回答,为了保证保存后的epr的通用性,最好把EndpointReferenceType Object输出为语言无关的XML文档,以后的globus文档中他们会讲解这个标准的保存epr的方法,也许只是一个建议,
也许是提供一个工具。
具体的做法,我就先说明了,
screen.width/2)this.width=screen.width/2" vspace=2 border=0。输出epr时,使用org.globus.wsrf.encoding.ObjectSerializer,
读入epr时,使用org.globus.wsrf.encoding.ObjectDeserializer。
如想参看代码,可以访问sourceforge.net,阅读gcsf项目的最新的QueuingServiceClient.java,测试平台:RedHat 9 , Globus Toolkit 3.9.3