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;
}
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();
}
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;
}
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;
}
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);
}
}
Aggregations