/*
* $Id$
*
* Copyright 2008 Glencoe Software, Inc. All rights reserved.
* Use is subject to license terms supplied in LICENSE.txt
*/
package ome.services.throttling;
import ome.api.ServiceInterface;
import ome.services.blitz.util.IceMethodInvoker;
import ome.system.OmeroContext;
import omero.util.IceMapper;
import org.springframework.util.Assert;
/**
* Manages AMD-based method dispatches from blitz.
*
*/
public class Callback extends Task {
private final Boolean io;
private final Boolean db;
private final IceMethodInvoker invoker;
private final ServiceInterface service;
private final Object[] args;
private final IceMapper mapper;
public Callback(Boolean io, Boolean db, ServiceInterface service,
IceMethodInvoker invoker, Object cb, IceMapper mapper,
Ice.Current current, Object... args) {
super(cb, current, invoker.isVoid(current));
Assert.notNull(invoker, "Null invoker");
Assert.notNull(service, "Null service");
Assert.notNull(args, "Null argument array");
this.io = io;
this.db = db;
this.service = service;
this.invoker = invoker;
this.args = args;
this.mapper = mapper;
}
public Callback(ServiceInterface service, IceMethodInvoker invoker,
IceMapper mapper, Object cb, Ice.Current current, Object... args) {
this(null, null, service, invoker, cb, mapper, current, args);
}
public void run(OmeroContext ctx) {
try {
Object retVal = invoker.invoke(service, current, mapper, args);
response(retVal, ctx);
} catch (Throwable e) {
exception(e, ctx);
}
}
/**
* Callback can be either IO-intensive ({@link Boolean#TRUE}),
* IO-non-intensive ({@link Boolean#FALSE}), or it can be unknown ({@link <code>null</code>}).
*/
Boolean ioIntensive() {
return io;
}
/**
* Callback can be either database-intensive ({@link Boolean#TRUE}),
* database-non-intensive ({@link Boolean#FALSE}), or it can be unknown ({@link <code>null</code>}).
*/
Boolean dbIntensive() {
return db;
}
}