use of cbit.vcell.message.VCDestination in project vcell by virtualcell.
the class SimulationControllerImpl method startSimulation.
/**
* This method was created by a SmartGuide.
* @exception java.rmi.RemoteException The exception description.
*/
public void startSimulation(Simulation simulation) throws Exception {
LocalVCMessageListener localVCMessageListener = new LocalVCMessageListener() {
public void onLocalVCMessage(VCDestination destination, VCMessage vcMessage) {
if (destination == VCellTopic.ClientStatusTopic && vcMessage.getObjectContent() instanceof SimulationJobStatus) {
onClientStatusTopic_SimulationJobStatus(vcMessage);
} else if (destination == VCellQueue.SimJobQueue && vcMessage.getStringProperty(VCMessagingConstants.MESSAGE_TYPE_PROPERTY).equals(MessageConstants.MESSAGE_TYPE_SIMULATION_JOB_VALUE)) {
onSimJobQueue_SimulationTask(vcMessage);
} else {
throw new RuntimeException("SimulationControllerImpl.startSimulation().objectMessageListener:: expecting object message with SimulationJobStatus to topic " + VCellTopic.ClientStatusTopic.getName() + ": received \"" + vcMessage.show() + "\"");
}
}
};
LocalVCMessageAdapter vcMessageSession = new LocalVCMessageAdapter(localVCMessageListener);
removeSimulationJobStatusListener(localVCellConnection.getMessageCollector());
addSimulationJobStatusListener(localVCellConnection.getMessageCollector());
VCSimulationIdentifier vcSimID = new VCSimulationIdentifier(simulation.getKey(), simulation.getVersion().getOwner());
simulationDispatcherEngine.onStartRequest(vcSimID, localVCellConnection.getUserLoginInfo().getUser(), simulation.getScanCount(), simulationDatabase, vcMessageSession, vcMessageSession);
vcMessageSession.deliverAll();
for (int jobIndex = 0; jobIndex < simulation.getScanCount(); jobIndex++) {
SimulationJobStatus latestSimJobStatus = simulationDatabase.getLatestSimulationJobStatus(simulation.getKey(), jobIndex);
simulationDispatcherEngine.onDispatch(simulation, latestSimJobStatus, simulationDatabase, vcMessageSession);
vcMessageSession.deliverAll();
}
}
use of cbit.vcell.message.VCDestination in project vcell by virtualcell.
the class SimulationControllerImpl method stopSimulation.
/**
* This method was created by a SmartGuide.
* @throws JMSException
* @throws AuthenticationException
* @throws DataAccessException
* @throws SQLException
* @throws FileNotFoundException
* @exception java.rmi.RemoteException The exception description.
* @throws VCMessagingException
*/
public void stopSimulation(Simulation simulation) throws FileNotFoundException, SQLException, DataAccessException, AuthenticationException, JMSException, VCMessagingException {
LocalVCMessageListener localVCMessageListener = new LocalVCMessageListener() {
public void onLocalVCMessage(VCDestination destination, VCMessage objectMessage) {
String messageTypeProperty = VCMessagingConstants.MESSAGE_TYPE_PROPERTY;
String stopSimulationValue = MessageConstants.MESSAGE_TYPE_STOPSIMULATION_VALUE;
if (destination == VCellTopic.ClientStatusTopic && objectMessage.getObjectContent() instanceof SimulationJobStatus) {
onClientStatusTopic_SimulationJobStatus(objectMessage);
} else if (destination == VCellTopic.ServiceControlTopic && objectMessage.getStringProperty(messageTypeProperty).equals(stopSimulationValue)) {
lg.error("SimulationControllerImpl.stopSimulation() exercising serviceControl topic ... should be removed");
onServiceControlTopic_StopSimulation(objectMessage);
} else {
throw new RuntimeException("SimulationControllerImpl.startSimulation().objectMessageListener:: expecting message with SimulationJobStatus to topic " + VCellTopic.ClientStatusTopic.getName() + ": received \"" + objectMessage.show() + "\" on destination \"" + destination + "\"");
}
}
};
LocalVCMessageAdapter vcMessageSession = new LocalVCMessageAdapter(localVCMessageListener);
VCSimulationIdentifier vcSimID = new VCSimulationIdentifier(simulation.getKey(), simulation.getVersion().getOwner());
simulationDispatcherEngine.onStopRequest(vcSimID, localVCellConnection.getUserLoginInfo().getUser(), simulationDatabase, vcMessageSession);
vcMessageSession.deliverAll();
}
use of cbit.vcell.message.VCDestination in project vcell by virtualcell.
the class VCMessagingServiceEmbedded method createConsumer.
@Override
public MessageConsumer createConsumer(Session jmsSession, VCDestination vcDestination, VCMessageSelector vcSelector, int prefetchLimit) throws JMSException, VCMessagingException {
if (!initialized) {
initialized = true;
init();
}
Destination jmsDestination;
MessageConsumer jmsMessageConsumer;
if (vcDestination instanceof VCellQueue) {
jmsDestination = jmsSession.createQueue(vcDestination.getName() + "?consumer.prefetchSize=" + prefetchLimit);
} else {
jmsDestination = jmsSession.createTopic(vcDestination.getName() + "?consumer.prefetchSize=" + prefetchLimit);
}
if (vcSelector == null) {
jmsMessageConsumer = jmsSession.createConsumer(jmsDestination);
} else {
jmsMessageConsumer = jmsSession.createConsumer(jmsDestination, vcSelector.getSelectionString());
}
return jmsMessageConsumer;
}
use of cbit.vcell.message.VCDestination in project vcell by virtualcell.
the class VCMessagingServiceActiveMQ method createConsumer.
@Override
public MessageConsumer createConsumer(Session jmsSession, VCDestination vcDestination, VCMessageSelector vcSelector, int prefetchLimit) throws JMSException {
Destination jmsDestination;
MessageConsumer jmsMessageConsumer;
if (vcDestination instanceof VCellQueue) {
jmsDestination = jmsSession.createQueue(vcDestination.getName() + "?consumer.prefetchSize=" + prefetchLimit);
} else {
jmsDestination = jmsSession.createTopic(vcDestination.getName() + "?consumer.prefetchSize=" + prefetchLimit);
}
if (vcSelector == null) {
jmsMessageConsumer = jmsSession.createConsumer(jmsDestination);
} else {
jmsMessageConsumer = jmsSession.createConsumer(jmsDestination, vcSelector.getSelectionString());
}
return jmsMessageConsumer;
}
use of cbit.vcell.message.VCDestination in project vcell by virtualcell.
the class VCellApiMain method main.
/**
* @param args
*/
public static void main(String[] args) {
try {
if (args.length != 2) {
System.out.println("usage: VCellApiMain javascriptDir port");
System.exit(1);
}
File javascriptDir = new File(args[0]);
if (!javascriptDir.isDirectory()) {
throw new RuntimeException("javascriptDir '" + args[0] + "' is not a directory");
}
// don't validate
PropertyLoader.loadProperties();
lg.debug("properties loaded");
String portString = args[1];
// was hard-coded at 8080
Integer port = null;
try {
port = Integer.parseInt(portString);
} catch (NumberFormatException e) {
e.printStackTrace();
throw new RuntimeException("failed to parse port argument '" + portString + "'", e);
}
lg.trace("connecting to database");
lg.trace("oracle factory (next)");
ConnectionFactory conFactory = DatabaseService.getInstance().createConnectionFactory();
KeyFactory keyFactory = conFactory.getKeyFactory();
lg.trace("database impl (next)");
DatabaseServerImpl databaseServerImpl = new DatabaseServerImpl(conFactory, keyFactory);
lg.trace("local db server (next)");
LocalAdminDbServer localAdminDbServer = new LocalAdminDbServer(conFactory, keyFactory);
lg.trace("admin db server (next)");
AdminDBTopLevel adminDbTopLevel = new AdminDBTopLevel(conFactory);
lg.trace("messaging service (next)");
VCMessagingService vcMessagingService_int = VCellServiceHelper.getInstance().loadService(VCMessagingService.class);
VCMessagingDelegate delegate = new VCMessagingDelegate() {
@Override
public void onTraceEvent(String string) {
if (lg.isTraceEnabled())
lg.trace("onTraceEvent(): " + string);
}
@Override
public void onRpcRequestSent(VCRpcRequest vcRpcRequest, UserLoginInfo userLoginInfo, VCMessage vcRpcRequestMessage) {
if (lg.isTraceEnabled())
lg.trace("onRpcRequestSent(): " + vcRpcRequest.getMethodName());
}
@Override
public void onRpcRequestProcessed(VCRpcRequest vcRpcRequest, VCMessage rpcVCMessage) {
if (lg.isTraceEnabled())
lg.trace("onRpcRequestProcessed(): " + vcRpcRequest.getMethodName());
}
@Override
public void onMessageSent(VCMessage message, VCDestination desintation) {
if (lg.isTraceEnabled())
lg.trace("onMessageSent(): " + message);
}
@Override
public void onMessageReceived(VCMessage vcMessage, VCDestination vcDestination) {
if (lg.isTraceEnabled())
lg.trace("onMessageReceived(): " + vcMessage);
}
@Override
public void onException(Exception e) {
lg.error(e.getMessage(), e);
}
};
String jmshost_int = PropertyLoader.getRequiredProperty(PropertyLoader.jmsIntHostInternal);
int jmsport_int = Integer.parseInt(PropertyLoader.getRequiredProperty(PropertyLoader.jmsIntPortInternal));
vcMessagingService_int.setConfiguration(delegate, jmshost_int, jmsport_int);
lg.trace("rest database service (next)");
RestDatabaseService restDatabaseService = new RestDatabaseService(databaseServerImpl, localAdminDbServer, vcMessagingService_int);
lg.trace("rest event service (next)");
RestEventService restEventService = new RestEventService(vcMessagingService_int);
lg.trace("use verifier (next)");
UserVerifier userVerifier = new UserVerifier(adminDbTopLevel);
lg.trace("mongo (next)");
VCMongoMessage.enabled = true;
VCMongoMessage.serviceStartup(ServiceName.unknown, port, args);
System.out.println("setting up server configuration");
lg.trace("register engine (next)");
Engine.register(true);
WadlComponent component = new WadlComponent();
// Server httpServer = component.getServers().add(Protocol.HTTP, 80);
// Server httpsServer = component.getServers().add(Protocol.HTTPS, 443);
// Client httpsClient = component.getClients().add(Protocol.HTTPS);
// Client httpClient = component.getClients().add(Protocol.HTTP);
lg.trace("adding FILE protcol");
@SuppressWarnings("unused") Client httpClient = component.getClients().add(Protocol.FILE);
lg.trace("adding CLAP protcol");
@SuppressWarnings("unused") Client clapClient = component.getClients().add(Protocol.CLAP);
lg.trace("adding CLAP https");
File keystorePath = new File(PropertyLoader.getRequiredProperty(PropertyLoader.vcellapiKeystoreFile));
String keystorePassword = PropertyLoader.getSecretValue(PropertyLoader.vcellapiKeystorePswd, PropertyLoader.vcellapiKeystorePswdFile);
try {
//
// keystorePassword may be encrypted with dbPassword, if it is decypt it.
//
String dbPassword = PropertyLoader.getSecretValue(PropertyLoader.dbPasswordValue, PropertyLoader.dbPasswordFile);
SecretKeyFactory kf = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
SecretKey key = kf.generateSecret(new PBEKeySpec(dbPassword.toCharArray()));
Cipher pbeCipher = Cipher.getInstance("PBEWithMD5AndDES");
pbeCipher.init(Cipher.DECRYPT_MODE, key, new PBEParameterSpec(new byte[] { 32, 11, 55, 121, 01, 42, 89, 11 }, 20));
keystorePassword = new String(pbeCipher.doFinal(DatatypeConverter.parseBase64Binary(keystorePassword)));
} catch (Exception e) {
System.out.println("password unhashing didn't work - trying clear text password");
e.printStackTrace();
}
Server httpsServer = component.getServers().add(Protocol.HTTPS, port);
Series<Parameter> parameters = httpsServer.getContext().getParameters();
parameters.add("keystorePath", keystorePath.toString());
parameters.add("keystorePassword", keystorePassword);
parameters.add("keystoreType", "JKS");
parameters.add("keyPassword", keystorePassword);
parameters.add("disabledCipherSuites", "SSL_RSA_WITH_3DES_EDE_CBC_SHA " + "SSL_DHE_RSA_WITH_DES_CBC_SHA " + "SSL_DHE_DSS_WITH_DES_CBC_SHA");
parameters.add("enabledCipherSuites", "TLS_DHE_DSS_WITH_AES_128_CBC_SHA " + "TLS_DHE_RSA_WITH_AES_128_CBC_SHA " + "TLS_RSA_WITH_AES_128_CBC_SHA " + "TLS_DHE_DSS_WITH_AES_256_CBC_SHA " + "TLS_DHE_RSA_WITH_AES_256_CBC_SHA " + "TLS_RSA_WITH_AES_256_CBC_SHA");
lg.trace("create config");
Configuration templateConfiguration = new Configuration();
templateConfiguration.setObjectWrapper(new DefaultObjectWrapper());
// lg.trace("verify python installation");
// PythonSupport.verifyInstallation(new PythonPackage[] { PythonPackage.COPASI, PythonPackage.LIBSBML, PythonPackage.THRIFT });
//
// lg.trace("start Optimization Service");
lg.trace("create app");
boolean bIgnoreHostProblems = true;
boolean bIgnoreCertProblems = true;
User testUser = localAdminDbServer.getUser(TEST_USER);
// lookup hashed auth credentials in database.
UserInfo testUserInfo = localAdminDbServer.getUserInfo(testUser.getID());
HealthService healthService = new HealthService(restEventService, "localhost", port, bIgnoreCertProblems, bIgnoreHostProblems, testUserInfo.userid, testUserInfo.digestedPassword0);
AdminService adminService = new AdminService(adminDbTopLevel, databaseServerImpl);
RpcService rpcService = new RpcService(vcMessagingService_int);
WadlApplication app = new VCellApiApplication(restDatabaseService, userVerifier, rpcService, restEventService, adminService, templateConfiguration, healthService, javascriptDir);
lg.trace("attach app");
component.getDefaultHost().attach(app);
System.out.println("component start()");
lg.trace("start component");
component.start();
System.out.println("component ended.");
lg.trace("component started");
lg.trace("start VCell Health Monitoring service");
healthService.start();
} catch (Exception e) {
lg.error(e.getMessage(), e);
}
}
Aggregations