CompositeService compositeService = (CompositeService)service.getService();
component = getPromotedComponent(compositeService);
service = getPromotedComponentService(compositeService);
}
ImplementationProvider provider = ((RuntimeComponent)component).getImplementationProvider();
if (provider != null) {
Invoker invoker = null;
RuntimeComponentService runtimeService = (RuntimeComponentService)service;
if (runtimeService.getName().endsWith("_asyncCallback")){
if (provider instanceof ImplementationAsyncProvider){
invoker = (Invoker)((ImplementationAsyncProvider)provider).createAsyncResponseInvoker(operation);
} else {
// TODO - This should be an error but taking account of the
// existing non-native async support
invoker = provider.createInvoker((RuntimeComponentService)service, operation);
/*
throw new ServiceRuntimeException("Component " +
this.getComponent().getName() +
" Service " +
getService().getName() +
" implementation provider doesn't implement ImplementationAsyncProvider but the implementation uses a " +
"refrence interface with the asyncInvocation intent set" +
" - [" + this.toString() + "]");
*/
}
} else if (isAsyncInvocation() &&
provider instanceof ImplementationAsyncProvider){
invoker = (Invoker)((ImplementationAsyncProvider)provider).createAsyncInvoker((RuntimeComponentService)service, operation);
} else {
invoker = provider.createInvoker((RuntimeComponentService)service, operation);
}
chain.addInvoker(invoker);
}
List<PolicyProvider> pps = ((RuntimeComponent)component).getPolicyProviders();