use of cbit.vcell.message.VCRpcRequest in project vcell by virtualcell.
the class AbstractRpcServerProxy method rpc.
/**
* Insert the method's description here.
* Creation date: (12/5/2001 9:39:03 PM)
* @return java.lang.Object
* @param methodName java.lang.String
* @param args java.lang.Object[]
* @exception java.lang.Exception The exception description.
*/
public Object rpc(RpcServiceType serviceType, String methodName, Object[] args, boolean returnRequired, String[] specialProperties, Object[] specialValues) throws Exception {
VCRpcRequest vcRpcRequest = new VCRpcRequest(userLoginInfo.getUser(), serviceType, methodName, args);
// default to 2 minutes.
int timeoutMS = Integer.parseInt(PropertyLoader.getProperty(PropertyLoader.vcellClientTimeoutMS, "120000"));
return rpcSender.sendRpcMessage(queue, vcRpcRequest, returnRequired, timeoutMS, specialProperties, specialValues, userLoginInfo);
}
use of cbit.vcell.message.VCRpcRequest in project vcell by virtualcell.
the class TestBlobRpcMessages method main.
public static void main(String[] args) throws Exception {
try {
PropertyLoader.loadProperties();
// System.getProperties().setProperty(PropertyLoader.jmsURL,"tcp://nrcamdev5.cam.uchc.edu:61616");
VCMessagingService messagingService = new VCMessagingServiceActiveMQ();
messagingService.setDelegate(new SimpleMessagingDelegate());
// reading message and computing sum
// create N comsumers
MyRpcServer myRpcServer = new MyRpcServer();
for (int i = 0; i < NUM_COMSUMERS; i++) {
VCRpcMessageHandler rpcMessageHandler = new VCRpcMessageHandler(myRpcServer, VCellTestQueue.JimQueue);
VCQueueConsumer rpcConsumer = new VCQueueConsumer(VCellTestQueue.JimQueue, rpcMessageHandler, null, "Queue[" + VCellTestQueue.JimQueue.getName() + "] ==== RPC Consumer Thread " + i, 1);
messagingService.addMessageConsumer(rpcConsumer);
}
// creating one messageProducer session
ArrayList<VCMessageSession> sessions = new ArrayList<VCMessageSession>();
for (int i = 0; i < NUM_PRODUCERS; i++) {
sessions.add(messagingService.createProducerSession());
}
for (int i = 0; i < NUM_MESSAGES; i++) {
for (int s = 0; s < NUM_PRODUCERS; s++) {
VCMessageSession session = sessions.get(s);
try {
//
// create simple RPC request for service "Testing_Service"
//
User user = new User("schaff", new KeyValue("17"));
byte[] array1 = new byte[20000000];
byte[] array2 = new byte[20000000];
VCRpcRequest rpcRequest = new VCRpcRequest(user, RpcServiceType.TESTING_SERVICE, "concat", new Object[] { array1, array2 });
//
// send request and block for response (or timeout).
// RPC invocations don't need commits.
//
Object returnValue = session.sendRpcMessage(VCellTestQueue.JimQueue, rpcRequest, true, 20000, null, null, null);
//
if (returnValue instanceof byte[]) {
System.out.println("concat(byte[" + array1.length + "], byte[" + array2.length + "]) ===> byte[" + (((byte[]) returnValue).length) + "]");
} else {
System.out.println("unexpected return value of " + returnValue);
}
} catch (VCMessagingInvocationTargetException e) {
e.printStackTrace(System.out);
System.out.println("the rpc service threw an exception");
e.getTargetException().printStackTrace(System.out);
}
}
}
System.out.println("main program calling closeAll()");
messagingService.close();
System.out.println("main program exiting");
} catch (Exception e) {
e.printStackTrace(System.out);
}
}
use of cbit.vcell.message.VCRpcRequest in project vcell by virtualcell.
the class AbstractRpcServerProxy method rpc.
/**
* Insert the method's description here.
* Creation date: (12/5/2001 9:39:03 PM)
* @return java.lang.Object
* @param methodName java.lang.String
* @param args java.lang.Object[]
* @exception java.lang.Exception The exception description.
*/
public Object rpc(RpcServiceType serviceType, String methodName, Object[] args, boolean returnRequired, String[] specialProperties, Object[] specialValues) throws Exception {
VCRpcRequest vcRpcRequest = new VCRpcRequest(userLoginInfo.getUser(), serviceType, methodName, args);
// default to 2 minutes.
int timeoutMS = Integer.parseInt(PropertyLoader.getProperty(PropertyLoader.vcellClientTimeoutMS, "120000"));
return vcMessagingSession.sendRpcMessage(queue, vcRpcRequest, returnRequired, timeoutMS, specialProperties, specialValues, userLoginInfo);
}
use of cbit.vcell.message.VCRpcRequest 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 = VCellServiceHelper.getInstance().loadService(VCMessagingService.class);
vcMessagingService.setDelegate(new VCMessagingDelegate() {
@Override
public void onTraceEvent(String string) {
System.out.println("Trace: " + string);
}
@Override
public void onRpcRequestSent(VCRpcRequest vcRpcRequest, UserLoginInfo userLoginInfo, VCMessage vcRpcRequestMessage) {
System.out.println("request sent:");
}
@Override
public void onRpcRequestProcessed(VCRpcRequest vcRpcRequest, VCMessage rpcVCMessage) {
System.out.println("request processed:");
}
@Override
public void onMessageSent(VCMessage message, VCDestination desintation) {
System.out.println("message sent:");
}
@Override
public void onMessageReceived(VCMessage vcMessage, VCDestination vcDestination) {
System.out.println("message received");
}
@Override
public void onException(Exception e) {
System.out.println("Exception: " + e.getMessage());
e.printStackTrace();
}
});
lg.trace("rest database service (next)");
RestDatabaseService restDatabaseService = new RestDatabaseService(databaseServerImpl, localAdminDbServer, vcMessagingService);
lg.trace("rest event service (next)");
RestEventService restEventService = new RestEventService(vcMessagingService);
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");
OptServerImpl optServerImpl = new OptServerImpl();
optServerImpl.start();
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);
WadlApplication app = new VCellApiApplication(restDatabaseService, userVerifier, optServerImpl, 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) {
e.printStackTrace(System.out);
}
}
use of cbit.vcell.message.VCRpcRequest in project vcell by virtualcell.
the class RpcRestlet method handle.
@Override
public void handle(Request req, Response response) {
if (req.getMethod().equals(Method.POST)) {
String destination = null;
String method = null;
try {
VCellApiApplication application = ((VCellApiApplication) getApplication());
User vcellUser = application.getVCellUser(req.getChallengeResponse(), AuthenticationPolicy.prohibitInvalidCredentials);
HttpRequest request = (HttpRequest) req;
String username = vcellUser.getName();
String userkey = vcellUser.getID().toString();
destination = request.getHeaders().getFirstValue("Destination");
method = request.getHeaders().getFirstValue("Method");
String returnRequired = request.getHeaders().getFirstValue("ReturnRequired");
String timeoutMS = request.getHeaders().getFirstValue("TimeoutMS");
String compressed = request.getHeaders().getFirstValue("Compressed");
String klass = request.getHeaders().getFirstValue("Class");
StringBuffer buffer = new StringBuffer();
buffer.append("username=" + username + ", userkey=" + userkey + ", destination=" + destination + ", method=" + method + "\n");
buffer.append("returnRequired=" + returnRequired + ", timeoutMS=" + timeoutMS + ", compressed=" + compressed + "\n");
buffer.append("class=" + klass);
System.out.println(buffer.toString());
req.bufferEntity();
Serializable rpcRequestBodyObject = VCellApiClient.fromCompressedSerialized(req.getEntity().getStream());
if (!(rpcRequestBodyObject instanceof VCellApiRpcBody)) {
throw new RuntimeException("expecting post content of type VCellApiRpcBody");
}
VCellApiRpcBody rpcBody = (VCellApiRpcBody) rpcRequestBodyObject;
RpcServiceType st = null;
VCellQueue queue = null;
switch(rpcBody.rpcRequest.rpcDestination) {
case DataRequestQueue:
{
st = RpcServiceType.DATA;
queue = VCellQueue.DataRequestQueue;
break;
}
case DbRequestQueue:
{
st = RpcServiceType.DB;
queue = VCellQueue.DbRequestQueue;
break;
}
case SimReqQueue:
{
st = RpcServiceType.DISPATCH;
queue = VCellQueue.SimReqQueue;
break;
}
default:
{
throw new RuntimeException("unsupported RPC Destination: " + rpcBody.rpcDestination);
}
}
VCellApiRpcRequest vcellapiRpcRequest = rpcBody.rpcRequest;
Object[] arglist = vcellapiRpcRequest.args;
String[] specialProperties = rpcBody.specialProperties;
Object[] specialValues = rpcBody.specialValues;
VCRpcRequest vcRpcRequest = new VCRpcRequest(vcellUser, st, method, arglist);
VCellApiApplication vcellApiApplication = (VCellApiApplication) getApplication();
RpcService rpcService = vcellApiApplication.getRpcService();
Serializable result = rpcService.sendRpcMessage(queue, vcRpcRequest, new Boolean(rpcBody.returnedRequired), specialProperties, specialValues, new UserLoginInfo(username, null));
byte[] serializedResultObject = VCellApiClient.toCompressedSerialized(result);
response.setStatus(Status.SUCCESS_OK, "rpc method=" + method + " succeeded");
response.setEntity(new ByteArrayRepresentation(serializedResultObject));
} catch (Exception e) {
getLogger().severe("internal error invoking " + destination + ":" + method + "(): " + e.getMessage());
e.printStackTrace();
response.setStatus(Status.SERVER_ERROR_INTERNAL);
response.setEntity("internal error invoking " + destination + ":" + method + "(): " + e.getMessage(), MediaType.TEXT_PLAIN);
}
}
}
Aggregations