Search in sources :

Example 1 with B4PCoordinationException

use of org.wso2.carbon.bpel.b4p.coordination.B4PCoordinationException in project carbon-business-process by wso2.

the class PeopleActivity method invoke.

public String invoke(ExtensionContext extensionContext) throws FaultException {
    BPELMessageContext taskMessageContext = new BPELMessageContext(hiWSDL);
    UUID messageID = null;
    int tenantId = B4PServiceComponent.getBPELServer().getMultiTenantProcessStore().getTenantId(processId);
    String tenantDomain = null;
    try {
        tenantDomain = B4PContentHolder.getInstance().getRealmService().getTenantManager().getDomain(tenantId);
    } catch (UserStoreException e) {
        log.error(" Cannot find the tenant domain " + e.toString());
    }
    if (tenantDomain == null) {
        tenantDomain = MultitenantConstants.SUPER_TENANT_DOMAIN_NAME;
    }
    PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain(tenantDomain);
    try {
        // Setting the attachment id attachmentIDList
        List<Long> attachmentIDList = extractAttachmentIDsToBeSentToHumanTask(extensionContext, taskMessageContext);
        taskMessageContext.setOperationName(getOperationName());
        SOAPHelper soapHelper = new SOAPHelper(getBinding(), getSoapFactory(), isRPC);
        MessageContext messageContext = new MessageContext();
        /*
            Adding attachment ID list as a method input to createSoapRequest makes no sense.
            Have to fix. Here we can't embed attachments in MessageContext, as we have only a
            list of attachment ids.
            */
        soapHelper.createSoapRequest(messageContext, (Element) extensionContext.readVariable(inputVarName), getOperation(extensionContext), attachmentIDList);
        // Coordination Context and skipable attribute is only valid for a Task.
        if (InteractionType.TASK.equals(activityType)) {
            // Note: If registration service is not enabled, we don't need to send coor-context.
            if (CoordinationConfiguration.getInstance().isHumantaskCoordinationEnabled() && CoordinationConfiguration.getInstance().isRegistrationServiceEnabled()) {
                messageID = UUID.randomUUID();
                soapHelper.addCoordinationContext(messageContext, messageID.toString(), getRegistrationServiceURL());
            }
            // Adding HumanTask Context overriding attributes.
            soapHelper.addOverridingHumanTaskAttributes(messageContext, isSkipable);
        }
        taskMessageContext.setInMessageContext(messageContext);
        taskMessageContext.setPort(getServicePort());
        taskMessageContext.setService(getServiceName());
        taskMessageContext.setRPCStyleOperation(isRPC);
        taskMessageContext.setTwoWay(isTwoWay);
        taskMessageContext.setSoapFactoryForCurrentMessageFlow(getSoapFactory());
        taskMessageContext.setWsdlBindingForCurrentMessageFlow(getBinding());
        taskMessageContext.setUep(getUnifiedEndpoint());
        taskMessageContext.setCaller(processId.getLocalPart());
        AxisServiceUtils.invokeService(taskMessageContext, getConfigurationContext());
    } catch (AxisFault axisFault) {
        log.error(axisFault, axisFault);
        throw new FaultException(BPEL4PeopleConstants.B4P_FAULT, "Error occurred while invoking service " + serviceName, axisFault);
    } catch (B4PCoordinationException coordinationFault) {
        throw new FaultException(BPEL4PeopleConstants.B4P_FAULT, "Error occurred while generating Registration Service URL" + serviceName, coordinationFault);
    }
    if (taskMessageContext.getFaultMessageContext() != null || taskMessageContext.getOutMessageContext().isFault()) {
        MessageContext faultContext = taskMessageContext.getFaultMessageContext() != null ? taskMessageContext.getFaultMessageContext() : taskMessageContext.getOutMessageContext();
        log.warn("SOAP Fault: " + faultContext.getEnvelope().toString());
        throw new FaultException(BPEL4PeopleConstants.B4P_FAULT, faultContext.getEnvelope().toString());
    }
    String taskID = SOAPHelper.parseResponseFeedback(taskMessageContext.getOutMessageContext().getEnvelope().getBody());
    // Ignore Notifications, since we are ignore coordination context for notification.
    if (CoordinationConfiguration.getInstance().isHumantaskCoordinationEnabled() && InteractionType.TASK.equals(activityType)) {
        Long instanceID = extensionContext.getProcessId();
        if (CoordinationConfiguration.getInstance().isRegistrationServiceEnabled()) {
            try {
                // Already coordinated with Registration service.
                updateCoordinationData(messageID.toString(), Long.toString(instanceID), taskID);
            } catch (Exception e) {
                log.error("Error occurred while updating humantask coordination data.", e);
            }
        } else {
            // Handler URL by manually.
            try {
                messageID = UUID.randomUUID();
                String protocolHandlerURL = generateTaskProtocolHandlerURL(taskMessageContext);
                if (log.isDebugEnabled()) {
                    log.debug("Generated Protocol Handler URL : " + protocolHandlerURL);
                }
                createCoordinationData(messageID.toString(), protocolHandlerURL, Long.toString(instanceID), taskID);
            } catch (Exception e) {
                log.error("Error occurred while creating humantask coordination data for coordinated task.", e);
            }
        }
    }
    return taskID;
}
Also used : AxisFault(org.apache.axis2.AxisFault) BPELMessageContext(org.wso2.carbon.bpel.core.ode.integration.BPELMessageContext) WSDL11Endpoint(org.apache.ode.bpel.epr.WSDL11Endpoint) UnifiedEndpoint(org.wso2.carbon.unifiedendpoint.core.UnifiedEndpoint) FaultException(org.apache.ode.bpel.common.FaultException) UserStoreException(org.wso2.carbon.user.api.UserStoreException) B4PCoordinationException(org.wso2.carbon.bpel.b4p.coordination.B4PCoordinationException) SocketException(java.net.SocketException) SOAPHelper(org.wso2.carbon.bpel.b4p.utils.SOAPHelper) FaultException(org.apache.ode.bpel.common.FaultException) B4PCoordinationException(org.wso2.carbon.bpel.b4p.coordination.B4PCoordinationException) UserStoreException(org.wso2.carbon.user.api.UserStoreException) BPELMessageContext(org.wso2.carbon.bpel.core.ode.integration.BPELMessageContext) MessageContext(org.apache.axis2.context.MessageContext) UUID(java.util.UUID)

Example 2 with B4PCoordinationException

use of org.wso2.carbon.bpel.b4p.coordination.B4PCoordinationException in project carbon-business-process by wso2.

the class B4PServiceComponent method initHumanTaskCoordination.

private void initHumanTaskCoordination() throws B4PCoordinationException {
    B4PContentHolder.getInstance().setCoordinationController(new CoordinationController());
    B4PContentHolder.getInstance().getCoordinationController().init();
}
Also used : CoordinationController(org.wso2.carbon.bpel.b4p.coordination.CoordinationController)

Example 3 with B4PCoordinationException

use of org.wso2.carbon.bpel.b4p.coordination.B4PCoordinationException in project carbon-business-process by wso2.

the class PeopleActivity method generateTaskProtocolHandlerURL.

private String generateTaskProtocolHandlerURL(BPELMessageContext taskMessageContext) throws FaultException, B4PCoordinationException {
    String tenantTaskService = taskMessageContext.getUep().getAddress();
    int tenantDelimiterIndex = tenantTaskService.indexOf("/t/");
    String tenantIdentifier = "";
    if (tenantDelimiterIndex != -1) {
        // 3 = length("/t/")
        String temp = tenantTaskService.substring(tenantDelimiterIndex + 3);
        int indexOfSlash = temp.indexOf('/');
        tenantIdentifier = "/t/" + ((indexOfSlash != -1) ? temp.substring(0, indexOfSlash) : temp);
    }
    // Else super tenant. -> tenantIdentifier = ""
    String protocolHandlerURL = generateServiceURLUpToWebContext() + tenantIdentifier + BPEL4PeopleConstants.CARBON_ADMIN_SERVICE_CONTEXT_ROOT + "/" + BPEL4PeopleConstants.HT_ENGINE_COORDINATION_PROTOCOL_HANDLER_SERVICE;
    return protocolHandlerURL;
}
Also used : WSDL11Endpoint(org.apache.ode.bpel.epr.WSDL11Endpoint) UnifiedEndpoint(org.wso2.carbon.unifiedendpoint.core.UnifiedEndpoint)

Example 4 with B4PCoordinationException

use of org.wso2.carbon.bpel.b4p.coordination.B4PCoordinationException in project carbon-business-process by wso2.

the class PeopleActivity method generateServiceURLUpToWebContext.

private String generateServiceURLUpToWebContext() throws B4PCoordinationException, FaultException {
    String baseURL = "";
    if (CoordinationConfiguration.getInstance().isClusteredTaskEngines()) {
        baseURL = CoordinationConfiguration.getInstance().getLoadBalancerURL();
    } else {
        ConfigurationContext serverConfigurationContext = getConfigurationContext();
        String scheme = CarbonConstants.HTTPS_TRANSPORT;
        String host;
        try {
            host = NetworkUtils.getLocalHostname();
        } catch (SocketException e) {
            log.error(e.getMessage(), e);
            throw new B4PCoordinationException(e.getLocalizedMessage(), e);
        }
        int port = 9443;
        port = CarbonUtils.getTransportProxyPort(serverConfigurationContext, scheme);
        if (port == -1) {
            port = CarbonUtils.getTransportPort(serverConfigurationContext, scheme);
        }
        baseURL = scheme + "://" + host + ":" + port;
    }
    String webContext = ServerConfiguration.getInstance().getFirstProperty("WebContextRoot");
    if (webContext == null || webContext.equals("/")) {
        webContext = "";
    }
    return baseURL + webContext;
}
Also used : ConfigurationContext(org.apache.axis2.context.ConfigurationContext) SocketException(java.net.SocketException) B4PCoordinationException(org.wso2.carbon.bpel.b4p.coordination.B4PCoordinationException) WSDL11Endpoint(org.apache.ode.bpel.epr.WSDL11Endpoint) UnifiedEndpoint(org.wso2.carbon.unifiedendpoint.core.UnifiedEndpoint)

Example 5 with B4PCoordinationException

use of org.wso2.carbon.bpel.b4p.coordination.B4PCoordinationException in project carbon-business-process by wso2.

the class CoordinationController method initDataSource.

/**
 * Initialize Database util class.
 *
 * @throws B4PCoordinationException
 */
private void initDataSource() throws B4PCoordinationException {
    if (log.isDebugEnabled()) {
        log.debug("Initialising B4P Coordination database");
    }
    dbUtil = new DatabaseUtil();
    dbUtil.setTransactionManager(tnxManager);
    try {
        dbUtil.start();
    } catch (DatabaseConfigurationException e) {
        String errMsg = "B4P Coordination Database Initialization failed.";
        log.error(errMsg);
        throw new B4PCoordinationException(errMsg, e);
    }
}
Also used : DatabaseConfigurationException(org.wso2.carbon.bpel.b4p.coordination.db.DatabaseConfigurationException) DatabaseUtil(org.wso2.carbon.bpel.b4p.coordination.db.DatabaseUtil)

Aggregations

WSDL11Endpoint (org.apache.ode.bpel.epr.WSDL11Endpoint)3 UnifiedEndpoint (org.wso2.carbon.unifiedendpoint.core.UnifiedEndpoint)3 SocketException (java.net.SocketException)2 B4PCoordinationException (org.wso2.carbon.bpel.b4p.coordination.B4PCoordinationException)2 UUID (java.util.UUID)1 AxisFault (org.apache.axis2.AxisFault)1 ConfigurationContext (org.apache.axis2.context.ConfigurationContext)1 MessageContext (org.apache.axis2.context.MessageContext)1 FaultException (org.apache.ode.bpel.common.FaultException)1 CoordinationController (org.wso2.carbon.bpel.b4p.coordination.CoordinationController)1 DatabaseConfigurationException (org.wso2.carbon.bpel.b4p.coordination.db.DatabaseConfigurationException)1 DatabaseUtil (org.wso2.carbon.bpel.b4p.coordination.db.DatabaseUtil)1 SOAPHelper (org.wso2.carbon.bpel.b4p.utils.SOAPHelper)1 BPELMessageContext (org.wso2.carbon.bpel.core.ode.integration.BPELMessageContext)1 UserStoreException (org.wso2.carbon.user.api.UserStoreException)1