use of cbit.vcell.solver.server.SimulationMessage in project vcell by virtualcell.
the class WorkerEventMessage method parseMessage.
/**
* Insert the method's description here.
* Creation date: (2/5/2004 2:19:48 PM)
* @param message javax.jms.Message
* @throws DataAccessException
* @throws SQLException
*/
private void parseMessage(UserResolver userResolver, VCMessage message) throws DataAccessException, SQLException {
if (message == null) {
throw new RuntimeException("Null message");
}
if (!message.propertyExists(VCMessagingConstants.MESSAGE_TYPE_PROPERTY)) {
throw new RuntimeException("Wrong message: expecting property " + VCMessagingConstants.MESSAGE_TYPE_PROPERTY);
}
String msgType = message.getStringProperty(VCMessagingConstants.MESSAGE_TYPE_PROPERTY);
if (msgType != null && !msgType.equals(MessageConstants.MESSAGE_TYPE_WORKEREVENT_VALUE)) {
throw new RuntimeException("Wrong message type: " + msgType + ", expecting: " + MessageConstants.MESSAGE_TYPE_WORKEREVENT_VALUE);
}
Object obj = message.getObjectContent();
if (obj != null) {
if (obj instanceof WorkerEvent) {
// from Java executable or htcWorker
workerEvent = (WorkerEvent) obj;
} else if (obj instanceof String) {
// from c++ executable (REST API where message stored as a single JSON object)
String jsonContent = (String) obj;
System.out.println("received JSON from message: " + jsonContent);
} else {
throw new IllegalArgumentException("Expecting object message with object " + WorkerEvent.class.getName() + ", found object :" + obj.getClass().getName());
}
} else {
// from c++ executable (activemq-cpp native protocol communication library)
int status = message.getIntProperty(MessageConstants.WORKEREVENT_STATUS);
String hostname = message.getStringProperty(MessageConstants.HOSTNAME_PROPERTY);
String username = message.getStringProperty(VCMessagingConstants.USERNAME_PROPERTY);
int taskID = message.getIntProperty(MessageConstants.TASKID_PROPERTY);
int jobIndex = message.getIntProperty(MessageConstants.JOBINDEX_PROPERTY);
Long longkey = message.getLongProperty(MessageConstants.SIMKEY_PROPERTY);
KeyValue simKey = new KeyValue(longkey + "");
// Simulation sim = null;
User user = userResolver.getUser(username);
VCSimulationIdentifier vcSimID = new VCSimulationIdentifier(simKey, user);
String statusMessage = null;
Double progress = null;
Double timepoint = null;
if (message.propertyExists(MessageConstants.WORKEREVENT_STATUSMSG)) {
statusMessage = message.getStringProperty(MessageConstants.WORKEREVENT_STATUSMSG);
}
if (message.propertyExists(MessageConstants.WORKEREVENT_PROGRESS)) {
progress = message.getDoubleProperty(MessageConstants.WORKEREVENT_PROGRESS);
}
if (message.propertyExists(MessageConstants.WORKEREVENT_TIMEPOINT)) {
timepoint = message.getDoubleProperty(MessageConstants.WORKEREVENT_TIMEPOINT);
}
SimulationMessage simulationMessage = SimulationMessage.fromSerializedMessage(statusMessage);
if (simulationMessage == null) {
switch(status) {
case WorkerEvent.JOB_ACCEPTED:
throw new RuntimeException("unexpected job_accepted status");
case WorkerEvent.JOB_STARTING:
if (statusMessage == null) {
simulationMessage = SimulationMessage.MESSAGE_WORKEREVENT_STARTING;
} else {
simulationMessage = SimulationMessage.workerStarting(statusMessage);
}
break;
case WorkerEvent.JOB_DATA:
simulationMessage = SimulationMessage.workerData(timepoint);
break;
case WorkerEvent.JOB_PROGRESS:
simulationMessage = SimulationMessage.workerProgress(progress);
break;
case WorkerEvent.JOB_FAILURE:
if (statusMessage == null) {
simulationMessage = SimulationMessage.MESSAGE_WORKEREVENT_FAILURE;
} else {
simulationMessage = SimulationMessage.workerFailure(statusMessage);
}
break;
case WorkerEvent.JOB_COMPLETED:
if (statusMessage == null) {
simulationMessage = SimulationMessage.MESSAGE_WORKEREVENT_COMPLETED;
} else {
simulationMessage = SimulationMessage.workerCompleted(statusMessage);
}
break;
case WorkerEvent.JOB_WORKER_ALIVE:
simulationMessage = SimulationMessage.MESSAGE_WORKEREVENT_WORKERALIVE;
break;
default:
throw new RuntimeException("unexpected worker event status : " + status);
}
}
ServiceName serviceName = VCMongoMessage.getServiceName();
workerEvent = new WorkerEvent(status, serviceName, vcSimID, jobIndex, hostname, taskID, progress, timepoint, simulationMessage);
}
}
Aggregations