Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ public class Plc4XEndpointConfigurer extends PropertyConfigurerSupport implement
public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) {
Plc4XEndpoint target = (Plc4XEndpoint) obj;
switch (ignoreCase ? name.toLowerCase() : name) {
case "autoreconnect":
case "autoReconnect": target.setAutoReconnect(property(camelContext, boolean.class, value)); return true;
case "bridgeerrorhandler":
case "bridgeErrorHandler": target.setBridgeErrorHandler(property(camelContext, boolean.class, value)); return true;
case "exceptionhandler":
Expand All @@ -39,6 +41,8 @@ public boolean configure(CamelContext camelContext, Object obj, String name, Obj
@Override
public Class<?> getOptionType(String name, boolean ignoreCase) {
switch (ignoreCase ? name.toLowerCase() : name) {
case "autoreconnect":
case "autoReconnect": return boolean.class;
case "bridgeerrorhandler":
case "bridgeErrorHandler": return boolean.class;
case "exceptionhandler":
Expand All @@ -58,6 +62,8 @@ public Class<?> getOptionType(String name, boolean ignoreCase) {
public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
Plc4XEndpoint target = (Plc4XEndpoint) obj;
switch (ignoreCase ? name.toLowerCase() : name) {
case "autoreconnect":
case "autoReconnect": return target.isAutoReconnect();
case "bridgeerrorhandler":
case "bridgeErrorHandler": return target.isBridgeErrorHandler();
case "exceptionhandler":
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ public class Plc4XEndpointUriFactory extends org.apache.camel.support.component.
private static final Set<String> SECRET_PROPERTY_NAMES;
private static final Set<String> MULTI_VALUE_PREFIXES;
static {
Set<String> props = new HashSet<>(8);
Set<String> props = new HashSet<>(9);
props.add("autoReconnect");
props.add("bridgeErrorHandler");
props.add("driver");
props.add("exceptionHandler");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
},
"properties": {
"driver": { "kind": "path", "displayName": "Driver", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "PLC4X connection string for the connection to the target" },
"autoReconnect": { "kind": "parameter", "displayName": "Auto Reconnect", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to reconnect when no connection is present upon doing a request" },
"tags": { "kind": "parameter", "displayName": "Tags", "group": "common", "label": "", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.Object>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The tags to read as Map containing the tag name associated to its query" },
"period": { "kind": "parameter", "displayName": "Period", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Interval on which the Trigger should be checked" },
"trigger": { "kind": "parameter", "displayName": "Trigger", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Query to a trigger. On a rising edge of the trigger, the tags will be read once" },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import org.apache.camel.Processor;
import org.apache.camel.support.DefaultConsumer;
import org.apache.plc4x.java.api.PlcConnection;
import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
import org.apache.plc4x.java.api.exceptions.PlcIncompatibleDatatypeException;
import org.apache.plc4x.java.api.messages.PlcReadRequest;
import org.apache.plc4x.java.scraper.config.JobConfigurationImpl;
Expand Down Expand Up @@ -85,6 +86,15 @@ protected void doStart() throws Exception {
}

private void startUnTriggered() {
if (plc4XEndpoint.isAutoReconnect() && !plcConnection.isConnected()) {
try {
plc4XEndpoint.reconnect();
LOGGER.debug("Successfully reconnected");
} catch (PlcConnectionException e) {
LOGGER.warn("Unable to reconnect, skipping request", e);
return;
}
}
PlcReadRequest.Builder builder = plcConnection.readRequestBuilder();
for (Map.Entry<String, Object> tag : tags.entrySet()) {
try {
Expand Down Expand Up @@ -116,9 +126,15 @@ private void startTriggered() throws ScraperException {

TriggeredScraperImpl scraper = new TriggeredScraperImpl(configuration, (job, alias, response) -> {
try {
if (plc4XEndpoint.isAutoReconnect() && !plcConnection.isConnected()) {
plc4XEndpoint.reconnect();
LOGGER.debug("Successfully reconnected");
}
Exchange exchange = plc4XEndpoint.createExchange();
exchange.getIn().setBody(response);
getProcessor().process(exchange);
} catch (PlcConnectionException e) {
LOGGER.warn("Unable to reconnect, skipping request", e);
} catch (Exception e) {
getExceptionHandler().handleException(e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,9 @@ public class Plc4XEndpoint extends DefaultEndpoint {
@UriParam
@Metadata(label = "consumer", description = "Interval on which the Trigger should be checked")
private int period;
@UriParam
@Metadata(description = "Whether to reconnect when no connection is present upon doing a request")
private boolean autoReconnect;

private PlcDriverManager plcDriverManager;
private PlcConnection connection;
Expand Down Expand Up @@ -86,6 +89,14 @@ public void setTrigger(String trigger) {
plcDriverManager = new PooledPlcDriverManager();
}

public void setAutoReconnect(boolean autoReconnect) {
this.autoReconnect = autoReconnect;
}

public boolean isAutoReconnect() {
return autoReconnect;
}

public PlcConnection getConnection() throws PlcConnectionException {
if (this.connection == null) {
this.connection = plcDriverManager.getConnection(this.uri);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import org.apache.camel.Message;
import org.apache.camel.support.DefaultAsyncProducer;
import org.apache.plc4x.java.api.PlcConnection;
import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
import org.apache.plc4x.java.api.exceptions.PlcException;
import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
import org.apache.plc4x.java.api.messages.PlcWriteRequest;
Expand Down Expand Up @@ -59,6 +60,15 @@ protected void doStart() throws Exception {

@Override
public void process(Exchange exchange) throws Exception {
if (plc4XEndpoint.isAutoReconnect() && !plcConnection.isConnected()) {
try {
plc4XEndpoint.reconnect();
log.debug("Successfully reconnected");
} catch (PlcConnectionException e) {
log.warn("Unable to reconnect, skipping request", e);
return;
}
}
Message in = exchange.getIn();
Object body = in.getBody();
PlcWriteRequest.Builder builder = plcConnection.writeRequestBuilder();
Expand Down