boolean response_expected, IOR ior,
short addrDisp, String operation,
ServiceContexts service_contexts, Principal requesting_principal) {
RequestMessage requestMessage = null;
IIOPProfile profile = ior.getProfile();
if (addrDisp == KeyAddr.value) {
// object key will be used for target addressing
profile = ior.getProfile();
ObjectKey objKey = profile.getObjectKey();
byte[] object_key = objKey.getBytes(orb);
requestMessage =
createRequest(orb, gv, encodingVersion, request_id,
response_expected, object_key,
operation, service_contexts,
requesting_principal);
} else {
if (!(gv.equals(GIOPVersion.V1_2))) {
// only object_key based target addressing is allowed for
// GIOP 1.0 & 1.1
throw wrapper.giopVersionError(
CompletionStatus.COMPLETED_MAYBE);
}
// Note: Currently we use response_expected flag to decide if the
// call is oneway or not. Ideally, it is possible to expect a
// response on a oneway call too, but we do not support it now.
byte response_flags = 0x03;
if (response_expected) {
response_flags = 0x03;
} else {
response_flags = 0x00;
}
TargetAddress target = new TargetAddress();
if (addrDisp == ProfileAddr.value) { // iop profile will be used
profile = ior.getProfile();
target.profile(profile.getIOPProfile());
} else if (addrDisp == ReferenceAddr.value) { // ior will be used
IORAddressingInfo iorInfo =
new IORAddressingInfo( 0, // profile index
ior.getIOPIOR());
target.ior(iorInfo);
} else {
// invalid target addressing disposition value
throw wrapper.illegalTargetAddressDisposition(
CompletionStatus.COMPLETED_NO);
}
requestMessage =
new RequestMessage_1_2(orb, request_id, response_flags,
new byte[] { 0x00, 0x00, 0x00 }, target,
operation, service_contexts);
requestMessage.setEncodingVersion(encodingVersion);
}
if (gv.supportsIORIIOPProfileComponents()) {
// add request partitioning thread pool to use info
int poolToUse = 0; // default pool
IIOPProfileTemplate temp =
(IIOPProfileTemplate)profile.getTaggedProfileTemplate();
Iterator iter =
temp.iteratorById(ORBConstants.TAG_REQUEST_PARTITIONING_ID);
if (iter.hasNext()) {
poolToUse =
((RequestPartitioningComponent)iter.next()).getRequestPartitioningId();