我的IDL看起来像:
interface TransactionResource {
void prepare() raises (NotPreparedException);
void commit() raises(TransactionException);
void rollback() raises(TransactionException);
};
interface ManageDemand : TransactionResource {
string createDemand(in string demand);
};
interface ManageAccount : TransactionResource {
string createDemand(in string demand);
};
我在Server上创建ManageDemand分布式对象,我使其持久化,并且可以通过CORBALOC地址访问。
在我的客户上,我有:
Object obj = orb.string_to_object(url.toString());
TransactionResource transactionResource = null;
if (obj._is_a("IDL:transaction/ManageDemand:1.0")){
transactionResource = ManageDemandHelper.narrow(obj);
} else {
transactionResource = ManageAccountHelper.narrow(obj);
}
当我尝试测试transactionResource对象(分布式引用)是否是ManageDemand的实例时,结果为true。
但是如果我调用Transaction对象,定义如下:
interface Transaction {
ProxyStream addResource(in TransactionResource resource);
}
我传入参数transactionResource分布式引用,在此方法中,当我测试此资源是否为ManageDemand的实例时,结果为false。
我要做的是,要认识到这个transactionResource是addResource方法的ManageDemand实例?
答案 0 :(得分:0)
我不知道如何测试transactionResource对象(TransactionResource资源)是否是一个ManageDemand的实例,在" addResource' Transaction Servant实现的方法。
我想也许,你测试它就像下面这样:
if(resource instanceof ManageDemand ) {
System.out.println("Yes, ManageDemand");
} else {
System.out.println("No, ManageDemand");
}
如果是,那么你不会'得到正确答案,因为资源'从客户端获得的对象是" _TransactionResourceStub"因此,你不能使用' instanceof'测试方法。
但是,您仍然可以使用' _is_a'测试它的方法,如下所示:
if (resource._is_a("IDL:transaction/ManageAccount:1.0")){
System.out.println("Yes");
} else {
System.out.println("No");
}
然后,您将得到正确答案。