@SuppressWarnings("unchecked") <T> LocalObjectEntry registerLocalObject(RemoteReference reference) { return localObjects.computeIfAbsent(reference, ref -> createLocalObjectEntry((RemoteReference<T>) ref, null)); }
@SuppressWarnings("unchecked") private <T> Class<T> resolveObjectClass(Class<T> iClass, final T object) { if (iClass == null) { iClass = (Class) findRemoteInterface(ActorObserver.class, object); if (iClass == null) { iClass = (Class) findRemoteInterface(Actor.class, object); } } if (iClass == null) { throw new IllegalArgumentException("Can't find a remote interface for " + object); } return iClass; }
@Override public Task<Long> getActorCount() { return Task.fromValue(objects.getLocalActorCount()); }
RemoteReference reference = createReference(address, resolveObjectClass(iClass, (T) o), objectId != null ? objectId : IdUtils.urlSafeString(128)); final LocalObjectEntry existing = localObjects.get(reference); if (existing != null) LocalObjectEntry localObject = createLocalObjectEntry(reference, o); final LocalObjectEntry previous = localObjects.putIfAbsent(reference, localObject); if (previous != null && localObject != previous) return registerLocalObject(reference); }).getRemoteReference();
private Task<Void> onActivate(HandlerContext ctx, final Invocation invocation) { // this must run serialized by the remote reference key. LocalObjects.LocalObjectEntry<Object> entry = objects.findLocalObjectByReference(invocation.getToReference()); if (entry == null) { objects.registerLocalObject(invocation.getToReference()); entry = objects.findLocalObjectByReference(invocation.getToReference()); } // queues the invocation final LocalObjects.LocalObjectEntry<Object> theEntry = entry; final Task result = entry.run(target -> performInvocation(ctx, invocation, theEntry, target)); if (invocation.getCompletion() != null) { InternalUtils.linkFuturesOnError(result, invocation.getCompletion()); } // yielding since we blocked the entry before running on activate (serialized execution) return Task.done(); }
public Task writeInvocation(final HandlerContext ctx, final Invocation invocation) throws Exception { LocalObjects.LocalObjectEntry localObjectEntry = objects.findLocalObjectByReference(invocation.getToReference()); if (localObjectEntry != null) { return scheduleLocalInvocation(localObjectEntry, invocation); } return ctx.write(invocation); }
@Override public Task deactivateActor(final Actor actor) { final LocalObjects.LocalObjectEntry<?> actorRef = localObjects.findLocalActor(actor); if(actorRef != null) { return deactivateEntry((ActorBaseEntry<?>)actorRef); } return Task.done(); }
@Override public <T extends ActorObserver> T registerObserver(final Class<T> iClass, final String id, final T observer) { final RemoteReference<T> reference = objects.getOrAddLocalObjectReference(null, iClass, id, observer); RemoteReference.setRuntime(reference, this); //noinspection unchecked return iClass != null ? iClass.cast(reference) : (T) reference; }
@SuppressWarnings("unused") public long getLocalObjectCount() { return objects.getLocalObjectCount(); }
@Override public <R> Task<R> run(final TaskFunction<LocalObjects.LocalObjectEntry<T>, R> function) { lastAccess = runtime.clock().millis(); ActorEntry<T> actorEntry = tryPop(); if (actorEntry == null) { actorEntry = new ActorEntry<>(reference); actorEntry.setExecutionSerializer(executionSerializer); actorEntry.setLoggerExtension(loggerExtension); actorEntry.setRuntime(runtime); actorEntry.setConcreteClass(concreteClass); actorEntry.setStorageExtension(storageExtension); actorEntry.setKey(actorEntry); localObjects.registerEntry(actorEntry, actorEntry); } final ActorEntry<T> theEntry = actorEntry; return actorEntry.run(entry -> doRunInternal(theEntry, entry, function)); }
@SuppressWarnings("unchecked") protected void onInvoke(final HandlerContext ctx, final Invocation invocation) { LocalObjects.LocalObjectEntry localObjectEntry = objects.findLocalObjectByReference(invocation.getToReference()); if (localObjectEntry != null) { scheduleLocalInvocation(localObjectEntry, invocation); return; } ctx.fireRead(invocation); }
? actor : RemoteReference.from(actor); final ActorEntry localActor = (ActorEntry) objects.findLocalActor((Actor) actor);
@Override public <T extends ActorObserver> T registerObserver(Class<T> iClass, String id, final T observer) { final RemoteReference<T> reference = objects.getOrAddLocalObjectReference(hosting.getNodeAddress(), iClass, id, observer); RemoteReference.setRuntime(reference, this); //noinspection unchecked return iClass != null ? iClass.cast(reference) : (T) reference; }
protected void onInvoke(final HandlerContext ctx, final Invocation invocation) LocalObjects.LocalObjectEntry localObjectEntry = objects.findLocalObjectByReference(invocation.getToReference()); if (localObjectEntry != null)
final ActorEntry<AbstractActor> actorEntry = (ActorEntry<AbstractActor>) objects.findLocalActor((Actor) actor);
final LocalObjects.LocalObjectEntry<Object> entry = objects.findLocalObjectByReference(toReference); if (entry != null)