Package org.teiid.net.socket

Examples of org.teiid.net.socket.Message


  /**
   * main entry point for remote method calls.
   */
  public void run() {
    Message result = null;
    String loggingContext = null;
    final boolean encrypt = message.getContents() instanceof SealedObject;
        try {
            message.setContents(this.socketClientInstance.getCryptor().unsealObject(message.getContents()));
      if (!(message.getContents() instanceof ServiceInvocationStruct)) {
        throw new AssertionError("unknown message contents"); //$NON-NLS-1$
      }
      final ServiceInvocationStruct serviceStruct = (ServiceInvocationStruct)message.getContents();
      final ClientService clientService = this.csr.getClientService(serviceStruct.targetClass.getName());     
      loggingContext = clientService.getLoggingContext();
      Method m = clientService.getReflectionHelper().findBestMethodOnTarget(serviceStruct.methodName, serviceStruct.args);
      Object methodResult;
      try {
        methodResult = m.invoke(clientService.getInstance(), serviceStruct.args);
      } catch (InvocationTargetException e) {
        throw e.getCause();
      }
      if (ResultsFuture.class.isAssignableFrom(m.getReturnType()) && methodResult != null) {
        ResultsFuture<Object> future = (ResultsFuture<Object>) methodResult;
        future.addCompletionListener(new ResultsFuture.CompletionListener<Object>() {

              public void onCompletion(
                  ResultsFuture<Object> completedFuture) {
                Message asynchResult = new Message();
                try {
                  asynchResult.setContents(completedFuture.get());
                } catch (InterruptedException e) {
                  asynchResult.setContents(processException(e, clientService.getLoggingContext()));
                } catch (ExecutionException e) {
                  asynchResult.setContents(processException(e.getCause(), clientService.getLoggingContext()));
                }
                sendResult(asynchResult, encrypt);
              }

            });
      } else { // synch call
        Message resultHolder = new Message();
        resultHolder.setContents(methodResult);
        result = resultHolder;
      }
    } catch (Throwable t) {
      Message holder = new Message();
      holder.setContents(processException(t, loggingContext));
      result = holder;
    }
   
    if (result != null) {
      sendResult(result, encrypt);
View Full Code Here

TOP

Related Classes of org.teiid.net.socket.Message

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.