BindingReflections return a non-shared QNameModule instance, which means
that we may end up using suboptimal lookups when comparing QNames.
Furthermore it is not the QNameModule which we need in the fastpath, but
rather QName of the input statement, hence create a cached reference of
that -- leading to minimal object allocation in the fast path.
Change-Id: I97ceb43d80c50d53d21cc66a31bfaae6ff0193e9
Signed-off-by: Robert Varga <rovarga@cisco.com>
import org.opendaylight.yangtools.yang.binding.util.BindingReflections;
import org.opendaylight.yangtools.yang.binding.util.RpcServiceInvoker;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.binding.util.BindingReflections;
import org.opendaylight.yangtools.yang.binding.util.RpcServiceInvoker;
import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.common.QNameModule;
import org.opendaylight.yangtools.yang.common.RpcResult;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
import org.opendaylight.yangtools.yang.common.RpcResult;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
private final BindingNormalizedNodeCodecRegistry codec;
private final RpcServiceInvoker invoker;
private final RpcService delegate;
private final BindingNormalizedNodeCodecRegistry codec;
private final RpcServiceInvoker invoker;
private final RpcService delegate;
- private final QNameModule module;
+ private final QName inputQname;
public <T extends RpcService> BindingDOMRpcImplementationAdapter(final BindingNormalizedNodeCodecRegistry codec, final Class<T> type, final Map<SchemaPath, Method> localNameToMethod, final T delegate) {
try {
public <T extends RpcService> BindingDOMRpcImplementationAdapter(final BindingNormalizedNodeCodecRegistry codec, final Class<T> type, final Map<SchemaPath, Method> localNameToMethod, final T delegate) {
try {
this.codec = Preconditions.checkNotNull(codec);
this.delegate = Preconditions.checkNotNull(delegate);
this.codec = Preconditions.checkNotNull(codec);
this.delegate = Preconditions.checkNotNull(delegate);
- module = BindingReflections.getQNameModule(type);
- }
-
- public QNameModule getQNameModule() {
- return module;
+ inputQname = QName.cachedReference(QName.create(BindingReflections.getQNameModule(type), "input"));
if (input instanceof LazySerializedContainerNode) {
return ((LazySerializedContainerNode) input).bindingData();
}
if (input instanceof LazySerializedContainerNode) {
return ((LazySerializedContainerNode) input).bindingData();
}
- final SchemaPath inputSchemaPath = rpcPath.createChild(QName.create(module,"input"));
+ final SchemaPath inputSchemaPath = rpcPath.createChild(inputQname);
return codec.fromNormalizedNodeRpcData(inputSchemaPath, (ContainerNode) input);
}
return codec.fromNormalizedNodeRpcData(inputSchemaPath, (ContainerNode) input);
}
private ListenableFuture<RpcResult<?>> invoke(final SchemaPath schemaPath, final DataObject input) {
return JdkFutureAdapters.listenInPoolThread(invoker.invokeRpc(delegate, schemaPath.getLastComponent(), input));
}
private ListenableFuture<RpcResult<?>> invoke(final SchemaPath schemaPath, final DataObject input) {
return JdkFutureAdapters.listenInPoolThread(invoker.invokeRpc(delegate, schemaPath.getLastComponent(), input));
}