public gov.nih.nci.cagrid.dcqlresult.DCQLQueryResultsCollection execute(
     gov.nih.nci.cagrid.dcql.DCQLQuery query)
     throws RemoteException, gov.nih.nci.cagrid.fqp.stubs.types.FederatedQueryProcessingFault {
   FederatedQueryEngine engine = new FederatedQueryEngine();
   DCQLQueryResultsCollection results = null;
   try {
     results = engine.execute(query);
   } catch (FederatedQueryProcessingException e) {
     LOG.error("Problem executing query: " + e.getMessage());
     FederatedQueryProcessingFault fault = new FederatedQueryProcessingFault();
     fault.setFaultString("Problem executing query: " + e.getMessage());
     FaultHelper helper = new FaultHelper(fault);
     helper.addFaultCause(e);
     throw helper.getFault();
   }
   return results;
 }
 private gov.nih.nci.cagrid.fqp.results.stubs.types.FederatedQueryResultsReference createEPR(
     ResourceKey key) throws RemoteException {
   MessageContext ctx = MessageContext.getCurrentContext();
   String transportURL = (String) ctx.getProperty(org.apache.axis.MessageContext.TRANS_URL);
   transportURL = transportURL.substring(0, transportURL.lastIndexOf('/') + 1);
   // TODO: fix this somehow (pull from property or constant)
   transportURL += "FederatedQueryResults";
   try {
     EndpointReferenceType epr = AddressingUtils.createEndpointReference(transportURL, key);
     return new FederatedQueryResultsReference(epr);
   } catch (Exception e) {
     LOG.error("Problem returning reference to result:" + e.getMessage(), e);
     InternalErrorFault fault = new InternalErrorFault();
     fault.setFaultString("Problem returning reference to result:" + e.getMessage());
     FaultHelper helper = new FaultHelper(fault);
     helper.addFaultCause(e);
     throw helper.getFault();
   }
 }
  public gov.nih.nci.cagrid.fqp.results.stubs.types.FederatedQueryResultsReference
      executeAsynchronously(gov.nih.nci.cagrid.dcql.DCQLQuery query) throws RemoteException {

    // create a result resource
    FQPResultResourceHome resultHome = null;
    try {
      resultHome = (FQPResultResourceHome) getFederatedQueryResultsResourceHome();
    } catch (Exception e) {
      LOG.error("Problem locating result home: " + e.getMessage(), e);
      InternalErrorFault fault = new InternalErrorFault();
      fault.setFaultString("Problem locating result home:" + e.getMessage());
      FaultHelper helper = new FaultHelper(fault);
      helper.addFaultCause(e);
      throw helper.getFault();
    }

    FQPResultResource fqpResultResource = null;
    ResourceKey key = null;
    try {
      key = resultHome.createFQPResultResource();
      fqpResultResource = (FQPResultResource) resultHome.find(key);
    } catch (Exception e) {
      LOG.error("Problem creating and accessing resource:" + e.getMessage(), e);
      InternalErrorFault fault = new InternalErrorFault();
      fault.setFaultString("Problem creating and accessing resource:" + e.getMessage());
      FaultHelper helper = new FaultHelper(fault);
      helper.addFaultCause(e);
      throw helper.getFault();
    }

    // configure security on the resource so only the creator of the
    // resource (whoever is executing this) can operate on it
    try {
      // may be null if no current caller
      fqpResultResource.setSecurityDescriptor(
          SecurityUtils.createResultsResourceSecurityDescriptor());
    } catch (Exception e) {
      LOG.error("Problem configuring security on resource:" + e.getMessage(), e);
      InternalErrorFault fault = new InternalErrorFault();
      fault.setFaultString("Problem configuring security on resource:" + e.getMessage());
      FaultHelper helper = new FaultHelper(fault);
      helper.addFaultCause(e);
      throw helper.getFault();
    }

    LOG.info("Resource created for, and owned by: " + SecurityManager.getManager().getCaller());

    // set initial status
    fqpResultResource.setStatusMessage("Queued for processing");
    // set to terminate after lease expires
    Calendar termTime = Calendar.getInstance();
    termTime.add(Calendar.MINUTE, getLeaseDurationInMinutes());
    fqpResultResource.setTerminationTime(termTime);

    // create a worker thread to execute query
    Work work = new QueryExecutionWork(fqpResultResource, query);

    // add worker to pool
    try {
      getWorkManager().schedule(work);
    } catch (Exception e) {
      LOG.error("Problem scheduling processing:" + e.getMessage(), e);
      InternalErrorFault fault = new InternalErrorFault();
      fault.setFaultString("Problem scheduling processing:" + e.getMessage());
      FaultHelper helper = new FaultHelper(fault);
      helper.addFaultCause(e);
      throw helper.getFault();
    }

    // return handle to resource
    return createEPR(key);
  }