You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2017/12/28 12:03:35 UTC

[incubator-plc4x] branch master updated (cbca3a3 -> c46f6e7)

This is an automated email from the ASF dual-hosted git repository.

sruehl pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git.


    from cbca3a3  add ASF header
     new a667e0e  Cleanup camel component: - Fixed shutdown - Async call in test - Added path variable for driver
     new c46f6e7  Bugfix: authenticated connection isn't connected by default

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../java/org/apache/plc4x/camel/PLC4XEndpoint.java |  9 ++++
 .../java/org/apache/plc4x/camel/PLC4XProducer.java | 57 +++++++++++-----------
 .../org/apache/plc4x/camel/PLC4XComponentTest.java |  6 ++-
 .../org/apache/plc4x/java/PlcDriverManager.java    | 10 ++--
 .../apache/plc4x/java/PlcDriverManagerTest.java    |  4 ++
 .../org/apache/plc4x/java/mock/MockConnection.java | 17 ++++++-
 6 files changed, 67 insertions(+), 36 deletions(-)

-- 
To stop receiving notification emails like this one, please contact
['"commits@plc4x.apache.org" <co...@plc4x.apache.org>'].

[incubator-plc4x] 02/02: Bugfix: authenticated connection isn't connected by default

Posted by sr...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

sruehl pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git

commit c46f6e72279dbb49080cc05c263383c3b6a1e8ae
Author: Sebastian Rühl <se...@codecentric.de>
AuthorDate: Thu Dec 21 13:27:34 2017 +0100

    Bugfix: authenticated connection isn't connected by default
---
 .../java/org/apache/plc4x/java/PlcDriverManager.java    | 10 +++++++---
 .../org/apache/plc4x/java/PlcDriverManagerTest.java     |  4 ++++
 .../java/org/apache/plc4x/java/mock/MockConnection.java | 17 +++++++++++++++--
 3 files changed, 26 insertions(+), 5 deletions(-)

diff --git a/plc4j/core/src/main/java/org/apache/plc4x/java/PlcDriverManager.java b/plc4j/core/src/main/java/org/apache/plc4x/java/PlcDriverManager.java
index c9a73f8..d038913 100644
--- a/plc4j/core/src/main/java/org/apache/plc4x/java/PlcDriverManager.java
+++ b/plc4j/core/src/main/java/org/apache/plc4x/java/PlcDriverManager.java
@@ -52,6 +52,7 @@ public class PlcDriverManager {
 
     /**
      * Connects to a PLC using the given plc connection string.
+     *
      * @param url plc connection string.
      * @return PlcConnection object.
      * @throws PlcConnectionException an exception if the connection attempt failed.
@@ -65,14 +66,17 @@ public class PlcDriverManager {
 
     /**
      * Connects to a PLC using the given plc connection string using given authentication credentials.
-     * @param url plc connection string.
+     *
+     * @param url            plc connection string.
      * @param authentication authentication credentials.
      * @return PlcConnection object.
      * @throws PlcConnectionException an exception if the connection attempt failed.
      */
     public PlcConnection getConnection(String url, PlcAuthentication authentication) throws PlcConnectionException {
         PlcDriver driver = getDriver(url);
-        return driver.connect(url, authentication);
+        PlcConnection connection = driver.connect(url, authentication);
+        connection.connect();
+        return connection;
     }
 
     private PlcDriver getDriver(String url) throws PlcConnectionException {
@@ -80,7 +84,7 @@ public class PlcDriverManager {
             URI connectionUri = new URI(url);
             String protocol = connectionUri.getScheme();
             PlcDriver driver = driverMap.get(protocol);
-            if(driver ==  null) {
+            if (driver == null) {
                 throw new PlcConnectionException("Unable to find driver for protocol '" + protocol + "'");
             }
             return driver;
diff --git a/plc4j/core/src/test/java/org/apache/plc4x/java/PlcDriverManagerTest.java b/plc4j/core/src/test/java/org/apache/plc4x/java/PlcDriverManagerTest.java
index 472e0a6..6aacb7b 100644
--- a/plc4j/core/src/test/java/org/apache/plc4x/java/PlcDriverManagerTest.java
+++ b/plc4j/core/src/test/java/org/apache/plc4x/java/PlcDriverManagerTest.java
@@ -41,6 +41,8 @@ class PlcDriverManagerTest {
     void getExistingDriverTest() throws PlcException {
         MockConnection mockConnection = (MockConnection) new PlcDriverManager().getConnection("mock://some-cool-url");
         Assertions.assertNull(mockConnection.getAuthentication());
+        Assertions.assertTrue(mockConnection.isConnected());
+        Assertions.assertTrue(!mockConnection.isClosed());
     }
 
     /**
@@ -54,6 +56,8 @@ class PlcDriverManagerTest {
         MockConnection mockConnection = (MockConnection) new PlcDriverManager().getConnection("mock://some-cool-url", authentication);
         Assertions.assertNotNull(mockConnection.getAuthentication());
         Assertions.assertTrue(mockConnection.getAuthentication() instanceof PlcUsernamePasswordAuthentication);
+        Assertions.assertTrue(mockConnection.isConnected());
+        Assertions.assertTrue(!mockConnection.isClosed());
     }
 
     /**
diff --git a/plc4j/core/src/test/java/org/apache/plc4x/java/mock/MockConnection.java b/plc4j/core/src/test/java/org/apache/plc4x/java/mock/MockConnection.java
index 09cde47..83e833e 100644
--- a/plc4j/core/src/test/java/org/apache/plc4x/java/mock/MockConnection.java
+++ b/plc4j/core/src/test/java/org/apache/plc4x/java/mock/MockConnection.java
@@ -28,6 +28,9 @@ public class MockConnection extends AbstractPlcConnection {
 
     private final PlcAuthentication authentication;
 
+    boolean connected = false;
+    boolean closed = true;
+
     public MockConnection(PlcAuthentication authentication) {
         this.authentication = authentication;
     }
@@ -36,14 +39,24 @@ public class MockConnection extends AbstractPlcConnection {
         return authentication;
     }
 
+    public boolean isConnected() {
+        return connected;
+    }
+
+    public boolean isClosed() {
+        return closed;
+    }
+
     @Override
     public void connect() throws PlcConnectionException {
-
+        connected = true;
+        closed = false;
     }
 
     @Override
     public void close() throws Exception {
-
+        connected = false;
+        closed = true;
     }
 
     @Override

-- 
To stop receiving notification emails like this one, please contact
"commits@plc4x.apache.org" <co...@plc4x.apache.org>.

[incubator-plc4x] 01/02: Cleanup camel component: - Fixed shutdown - Async call in test - Added path variable for driver

Posted by sr...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

sruehl pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git

commit a667e0ec643a720a3fc010fdb991b2e89a94d6f4
Author: Sebastian Rühl <se...@codecentric.de>
AuthorDate: Thu Dec 21 11:49:27 2017 +0100

    Cleanup camel component:
    - Fixed shutdown
    - Async call in test
    - Added path variable for driver
---
 .../java/org/apache/plc4x/camel/PLC4XEndpoint.java |  9 ++++
 .../java/org/apache/plc4x/camel/PLC4XProducer.java | 57 +++++++++++-----------
 .../org/apache/plc4x/camel/PLC4XComponentTest.java |  6 ++-
 3 files changed, 41 insertions(+), 31 deletions(-)

diff --git a/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/PLC4XEndpoint.java b/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/PLC4XEndpoint.java
index dd800e1..4fd84e4 100644
--- a/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/PLC4XEndpoint.java
+++ b/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/PLC4XEndpoint.java
@@ -32,10 +32,19 @@ import org.apache.plc4x.java.PlcDriverManager;
 public class PLC4XEndpoint extends DefaultEndpoint {
 
     /**
+     * The name 0f the PLC4X driver
+     */
+    @UriPath
+    @Metadata(required = "true")
+    @SuppressWarnings("unused")
+    String driver;
+
+    /**
      * The address for the PLC4X driver
      */
     @UriPath
     @Metadata(required = "true")
+    @SuppressWarnings("unused")
     String address;
 
     final PlcDriverManager plcDriverManager;
diff --git a/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/PLC4XProducer.java b/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/PLC4XProducer.java
index 29331d2..e11d1e5 100644
--- a/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/PLC4XProducer.java
+++ b/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/PLC4XProducer.java
@@ -21,22 +21,22 @@ package org.apache.plc4x.camel;
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
-import org.apache.camel.ShutdownRunningTask;
 import org.apache.camel.impl.DefaultAsyncProducer;
-import org.apache.camel.spi.ShutdownAware;
 import org.apache.plc4x.java.api.connection.PlcConnection;
 import org.apache.plc4x.java.api.connection.PlcWriter;
 import org.apache.plc4x.java.api.exceptions.PlcException;
 import org.apache.plc4x.java.api.messages.PlcWriteRequest;
+import org.apache.plc4x.java.api.messages.PlcWriteResponse;
 import org.apache.plc4x.java.api.model.Address;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
-public class PLC4XProducer extends DefaultAsyncProducer implements ShutdownAware {
-    private static final Logger LOG = LoggerFactory.getLogger(PLC4XProducer.class);
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.atomic.AtomicInteger;
 
+public class PLC4XProducer extends DefaultAsyncProducer {
+    @SuppressWarnings("unused")
     private PLC4XEndpoint endpoint;
     private PlcConnection plcConnection;
+    private AtomicInteger openRequests;
 
     public PLC4XProducer(PLC4XEndpoint endpoint) {
         super(endpoint);
@@ -47,6 +47,7 @@ public class PLC4XProducer extends DefaultAsyncProducer implements ShutdownAware
         } catch (PlcException e) {
             throw new RuntimeException(e);
         }
+        openRequests = new AtomicInteger();
     }
 
     @SuppressWarnings("unchecked")
@@ -57,13 +58,21 @@ public class PLC4XProducer extends DefaultAsyncProducer implements ShutdownAware
         Object value = in.getBody(Object.class);
         PlcWriteRequest plcSimpleWriteRequest = new PlcWriteRequest(datatype, address, value);
         PlcWriter plcWriter = plcConnection.getWriter().orElseThrow(() -> new IllegalArgumentException("Writer for driver not found"));
-        Object response = plcWriter.write(plcSimpleWriteRequest).get();
-        if (exchange.getPattern().isOutCapable()) {
-            Message out = exchange.getOut();
-            out.copyFrom(exchange.getIn());
-            out.setBody(response);
-        } else {
-            in.setBody(response);
+        CompletableFuture<PlcWriteResponse> completableFuture = plcWriter.write(plcSimpleWriteRequest);
+        int currentlyOpenRequests = openRequests.incrementAndGet();
+        try {
+            log.debug("Currently open requests including {}:{}", exchange, currentlyOpenRequests);
+            PlcWriteResponse plcWriteResponse = completableFuture.get();
+            if (exchange.getPattern().isOutCapable()) {
+                Message out = exchange.getOut();
+                out.copyFrom(exchange.getIn());
+                out.setBody(plcWriteResponse);
+            } else {
+                in.setBody(plcWriteResponse);
+            }
+        } finally {
+            int openRequestsAfterFinish = openRequests.decrementAndGet();
+            log.trace("Open Requests after {}:{}", exchange, openRequestsAfterFinish);
         }
     }
 
@@ -81,27 +90,17 @@ public class PLC4XProducer extends DefaultAsyncProducer implements ShutdownAware
     }
 
     @Override
-    public boolean deferShutdown(ShutdownRunningTask shutdownRunningTask) {
-        switch (shutdownRunningTask) {
-            case CompleteCurrentTaskOnly:
-                break;
-            case CompleteAllTasks:
-                break;
+    protected void doStop() throws Exception {
+        int openRequestsAtStop = openRequests.get();
+        log.debug("Stopping with {} open requests", openRequestsAtStop);
+        if (openRequestsAtStop > 0) {
+            log.warn("There are still {} open requests", openRequestsAtStop);
         }
         try {
             plcConnection.close();
         } catch (Exception ignore) {
         }
-        return false;
+        super.doStop();
     }
 
-    @Override
-    public int getPendingExchangesSize() {
-        return 0;
-    }
-
-    @Override
-    public void prepareShutdown(boolean suspendOnly, boolean forced) {
-
-    }
 }
diff --git a/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/PLC4XComponentTest.java b/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/PLC4XComponentTest.java
index cc3ae5f..0e3e8ea 100644
--- a/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/PLC4XComponentTest.java
+++ b/integrations/apache-camel/src/test/java/org/apache/plc4x/camel/PLC4XComponentTest.java
@@ -25,6 +25,8 @@ import org.apache.plc4x.java.s7.model.S7Address;
 import org.apache.plc4x.java.s7.netty.model.types.MemoryArea;
 import org.junit.Test;
 
+import java.util.concurrent.TimeUnit;
+
 public class PLC4XComponentTest extends CamelTestSupport {
 
     @Test
@@ -32,9 +34,9 @@ public class PLC4XComponentTest extends CamelTestSupport {
         MockEndpoint mock = getMockEndpoint("mock:result");
         mock.expectedMinimumMessageCount(1);
 
-        template.sendBody("direct:plc4x", 3);
+        template.asyncSendBody("direct:plc4x", "irrelevant");
 
-        assertMockEndpointsSatisfied();
+        assertMockEndpointsSatisfied(2, TimeUnit.SECONDS);
     }
 
     @Override

-- 
To stop receiving notification emails like this one, please contact
"commits@plc4x.apache.org" <co...@plc4x.apache.org>.