1、一个ICE对象在服务器端可以有多个表现方式,这种表现方式可称为facet,每个facet其实是servant对象
的一组功能集合的名称,在服务器端,操作对象的facet有如下API:
local interface ObjectAdapter
{
Object* addFacet(Object servant, Identity id, string facet);
Object* addFacetWithUUID(Object servant, string facet);
Object removeFacet(Identity id, string facet);
Object findFacet(Identity id, string facet);
FacetMap findAllFacets(Identity id);
FacetMap removeAllFacets(Identity id);
};
上述方法和servant的普通操作方法基本一样(如果facet参数填写成空其行为和普通方法一致)
2、在客户端使用facet时,一般主要用在对象的向下转型方法中:
checkCast(proxy, "facet");
uncheckCast(proxy, "facet");
3、传入错误的facet名称和使用错误的代理类型来调用checkCast都会返回空的代理对象,往往为了区分是那种错误可以如下操作:
Filesystem::FilePrx file = ...;
Ice::ObjectPrx obj = Ice::ObjectPrx::checkedCast(file, "Stat");
if (!obj) {
// facet不存在
} else {
FilesystemExtensions::StatPrx stat = FilesystemExtensions::StatPrx::checkedCast(file);
if (!stat) {
// 错误的代理类型
} else {
// Use stat...
}
}
4、在代理对象上调用ice_getFacet()方法可以返回其所代表的facet名称
的一组功能集合的名称,在服务器端,操作对象的facet有如下API:
local interface ObjectAdapter
{
Object* addFacet(Object servant, Identity id, string facet);
Object* addFacetWithUUID(Object servant, string facet);
Object removeFacet(Identity id, string facet);
Object findFacet(Identity id, string facet);
FacetMap findAllFacets(Identity id);
FacetMap removeAllFacets(Identity id);
};
上述方法和servant的普通操作方法基本一样(如果facet参数填写成空其行为和普通方法一致)
2、在客户端使用facet时,一般主要用在对象的向下转型方法中:
checkCast(proxy, "facet");
uncheckCast(proxy, "facet");
3、传入错误的facet名称和使用错误的代理类型来调用checkCast都会返回空的代理对象,往往为了区分是那种错误可以如下操作:
Filesystem::FilePrx file = ...;
Ice::ObjectPrx obj = Ice::ObjectPrx::checkedCast(file, "Stat");
if (!obj) {
// facet不存在
} else {
FilesystemExtensions::StatPrx stat = FilesystemExtensions::StatPrx::checkedCast(file);
if (!stat) {
// 错误的代理类型
} else {
// Use stat...
}
}
4、在代理对象上调用ice_getFacet()方法可以返回其所代表的facet名称