Integracja JRules po stronie jPALIO wygląda następująco:
@WebServiceClient(name = "SncmWSRunnerImplService", targetNamespace = "http://SncmRuleApp/",
wsdlLocation = "http://192.168.1.210:8080/jaxws-SncmRuleApp/SncmWS?wsdl")
public class SncmWSRunnerImplService {....}
static {
URL url = null;
try {
url = new URL("http://192.168.1.210:8080/jaxws-SncmRuleApp/SncmWS?wsdl");
} catch (MalformedURLException e) {
e.printStackTrace();
}
SNCMWSRUNNERIMPLSERVICE_WSDL_LOCATION = url;
}
Wywołanie JRules w jDesignerze odbywa się przez wywołanie obiektu groovy. Przykładem takiego obiektu może być:
package application.jrules;
import java.util.LinkedList;
import java.util.List;
public class SncmWSRunnerClient {
public static Double getProvisionFromJRules(final String flow, final Event event) {
SncmWSRunner port = new SncmWSRunnerImplService().getSncmWSRunnerImplPort();
return port.sncmRules(event, flow);
}
public static Event createEvent(
final String entityCode, final double amount, final String eventDate,
final String eventTypeCode, final String organizationCode, final String productCode,
final List<String> parameterCodes, final List<String> parameterFieldType, final List<Object> parameterFieldValue) {
Event eventItem = new Event();
eventItem.setAmount(amount);
eventItem.setEntityCode(entityCode);
eventItem.setEventDate(eventDate);
eventItem.setEventTypeCode(eventTypeCode);
eventItem.setOrganizationCode(organizationCode);
eventItem.setProductCode(productCode);
List<Parameter> parameters = new LinkedList<Parameter>();
if ((parameterCodes.size() == parameterFieldType.size()) &&
(parameterCodes.size() == parameterFieldValue.size())) {
for (int i = 0; i < parameterCodes.size(); ++i) {
parameters.add(createParameter(parameterCodes.get(i), parameterFieldType.get(i), parameterFieldValue.get(i)));
}
} else {
System.out.println("\nWrong parameter initialization");
System.out.println("\n parameterCodessize= " + parameterCodes.size());
System.out.println("\n parameterFieldType size= " + parameterFieldType.size());
System.out.println("\n parameterFieldValue size= " + parameterFieldValue.size());
}
eventItem.setParameters(parameters);
return eventItem;
}
private static Parameter createParameter(final String codeValue, final String field, Object value) {
Parameter parameter = new Parameter();
parameter.setCode(codeValue);
if (field.equals("dateValue")) {
parameter.setDateValue((String) value);
} else if (field.equals("fractionalValue")) {
parameter.setFractionalValue((Double) value);
} else if (field.equals("numericValue")) {
parameter.setNumericValue((Double) value);
} else if (field.equals("textValue")) {
parameter.setTextValue((String) value);
} else {
return null;
}
return parameter;
}
public Object run(String methodName, Object... methodArguments) {
return this."$methodName"(*methodArguments)
}
public void run() {
}
}
W tym groovy obiekcie metoda "getProvisionFromJRules" wywołuje reguły w przepływie o nazwie zdefiniowanej w atrybucie flow z parametrami zdefiniowanymi w parametrze event. Natomiast metody "run" pozwalają z poziomu jPALIO wywoływać groovy metodę "getProvisionFromJRules". Przykładem takiego wywołania z inicjacją parametrów może być:
$=(@parameterCodes, $util.emptyList())
$=(@parameterFieldType, $util.emptyList())
$=(@parameterFieldValue, $util.emptyList())
$util.add($@parameterCodes, "code1")
$util.add($@parameterFieldType, "dateValue")
$util.add($@parameterFieldValue, "2010-01-01 00:00:00")
$util.add($@parameterCodes, "code2")
$util.add($@parameterFieldType, "fractionalValue")
$util.add($@parameterFieldValue, 2.2)
$util.add($@parameterCodes, "code3")
$util.add($@parameterFieldType, "numericValue")
$util.add($@parameterFieldValue, 2)
$util.add($@parameterCodes, "code4")
$util.add($@parameterFieldType, "textValue")
$util.add($@parameterFieldValue, "Parameter->text value")
$try({
$=(@commission, $toBigDecimal(
$toString($*application.jrules.SncmWSRunnerClient("getProvisionFromJRules", "multipliedFlow",
$*application.jrules.SncmWSRunnerClient("createEvent", "EntityCode", 100.0,
"2010-01-01", "EventTypeCode", "OrganizationCode", "ProductCode",
$@parameterCodes, $@parameterFieldType, $@parameterFieldValue)
))
))
$@commission
}, {
$error.stackTrace()
})