From dev-return-2150-archive-asf-public=cust-asf.ponee.io@plc4x.apache.org Mon May 6 15:20:10 2019 Return-Path: X-Original-To: archive-asf-public@cust-asf.ponee.io Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [207.244.88.153]) by mx-eu-01.ponee.io (Postfix) with SMTP id 1AC4C18060F for ; Mon, 6 May 2019 17:20:09 +0200 (CEST) Received: (qmail 52753 invoked by uid 500); 6 May 2019 15:20:09 -0000 Mailing-List: contact dev-help@plc4x.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@plc4x.apache.org Delivered-To: mailing list dev@plc4x.apache.org Received: (qmail 52583 invoked by uid 99); 6 May 2019 15:20:09 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd1-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 06 May 2019 15:20:09 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd1-us-west.apache.org (ASF Mail Server at spamd1-us-west.apache.org) with ESMTP id 79571C2ED3 for ; Mon, 6 May 2019 15:20:08 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd1-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 0 X-Spam-Level: X-Spam-Status: No, score=0 tagged_above=-999 required=6.31 tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001] autolearn=disabled Authentication-Results: spamd1-us-west.apache.org (amavisd-new); dkim=pass (2048-bit key) header.d=code-house-org.20150623.gappssmtp.com Received: from mx1-lw-us.apache.org ([10.40.0.8]) by localhost (spamd1-us-west.apache.org [10.40.0.7]) (amavisd-new, port 10024) with ESMTP id A5Rcd7YMQiEJ for ; Mon, 6 May 2019 15:20:06 +0000 (UTC) Received: from mail-wr1-f65.google.com (mail-wr1-f65.google.com [209.85.221.65]) by mx1-lw-us.apache.org (ASF Mail Server at mx1-lw-us.apache.org) with ESMTPS id 5D5545F403 for ; Mon, 6 May 2019 15:20:06 +0000 (UTC) Received: by mail-wr1-f65.google.com with SMTP id h4so17785535wre.7 for ; Mon, 06 May 2019 08:20:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=code-house-org.20150623.gappssmtp.com; s=20150623; h=to:from:subject:openpgp:autocrypt:message-id:date:user-agent :mime-version:content-language:content-transfer-encoding; bh=hEwUGjez6PYKmuXkzy5w+VveTm+bnBKp+WeoUKKxKko=; b=cB9Mk1MSpZWxDnijKYSfco3uqy0bohJYcdevkEiJw7agziP66ZvBRbTdQhjIxRLd+s ZJ8pOXMz4GXwkLzOfEG+RsRsrljtUg0+5L93dPZuZ6eId7zKc06jF0o0vCG6AuZ9cQDR x+AVxqweJMQJdBMY7j4+6c8dLnyLwLcsDHG1KfysF/C+7CviwFQH0q/Nuzdq6t5FfnyY 2KHYRyMUdlxj08i9MDprxeY7CGNsoONVkmBwGC9rWLyABAOkdXMGIKAAlRWfNAHWeZKL BnfQa9DQ4s8mcLECz0fomrTcp8W1ajnFz68Hy2upVJpSuz0hK0ROljJrX6vXlMlL0MYg e42g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:to:from:subject:openpgp:autocrypt:message-id :date:user-agent:mime-version:content-language :content-transfer-encoding; bh=hEwUGjez6PYKmuXkzy5w+VveTm+bnBKp+WeoUKKxKko=; b=YbwCl2CFsy8AcMBHbut3RLgZMz0MJvzjtuR3C9l+2gzL8XxTGuk0PrgQDJhMiRkt81 ofPq5LWexrSW/68DVYRABhienTRd5ZEqVoWqSafz7e4ZwacusRZ3XFAcuOmVtaNi38+t z2vyh+mQBw0FUlmCLf942k5qcT5mJk/IxNz0GvcTNHm0gg5OSeafiKeFWxBVgUgEX73r NQIKK5KU3lP9vrNjiTYH5VQ+OXGOvwFHGXGu2iNbom31AmZe+fl6E4H51G+/bnXw8FBX sZh7rO/FHazTfLfCvjs3EvnrxgZGS6EPEBuHYD8S4JV8f/pga0Hj+DWAk1FkRPdztQlZ emvw== X-Gm-Message-State: APjAAAWjvybCaQaQaXe38Pn+Ff4QoRXC+6VbJJCq8wIkAm0MBAqePk/R sal76r/XVyh1He4Db6vrhZdUWRkxxOZZJw== X-Google-Smtp-Source: APXvYqxe4zCwqxWq5qEjyYQeFQHZzxO7LvzSYwI43qdlY6rIiS/z3Ib74hiJ12ykpFxx/PdvXxoPSA== X-Received: by 2002:adf:8bc5:: with SMTP id w5mr18093999wra.226.1557156004732; Mon, 06 May 2019 08:20:04 -0700 (PDT) Received: from [192.168.2.106] (18.ip-217-182-76.eu. [217.182.76.18]) by smtp.gmail.com with ESMTPSA id y3sm1626522wrh.90.2019.05.06.08.20.02 for (version=TLS1_3 cipher=AEAD-AES128-GCM-SHA256 bits=128/128); Mon, 06 May 2019 08:20:02 -0700 (PDT) To: "dev@plc4x.apache.org" From: =?UTF-8?Q?=c5=81ukasz_Dywicki?= Subject: [EU-FOSSA 2 2019 Hackathon] Improved OSGi and Apache Karaf integration Openpgp: preference=signencrypt Autocrypt: addr=luke@code-house.org; prefer-encrypt=mutual; keydata= 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 qwvPGScZ+o90/cZnGejc4RA7NRAfrQkk+ts= Message-ID: Date: Mon, 6 May 2019 17:20:00 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Language: en-US-large Content-Transfer-Encoding: 8bit Dear all, I had pleasure to meet PLC4X representatives in past weekend (4-5 May 2019) thanks to EU FOSSA 2 event. Thanks to time given to work on Karaf-PLC4X integration I reached a point where I will be able to submit first contribution to your project. In below mail I will briefly describe what been done (from technical perspective) and what are questions which needs to be answered in order to finalize OSGi support. Things which I found during FOSSA was that: - Generated feature sets were failing, modbus and ethernet-ip been problematic due to some weird slf4j dance. - `PlcDriverManager` does not work under OSGi out of the box. I solved first one by turning feature sets in manually maintained file which gives a complete control over how features are structured, what are common parts and so on. Second issue with driver manager requires a moment to introduce you to a case. I turned every single `PlcDriver` into OSGi service. Trick is fairly simple - each and every bundle which gets started is checked for presence of `PlcDriver` META-INF/services entries. Any driver found there will be registered as OSGi service: https://github.com/ConnectorIO/plc4x/blob/eufossa/plc4j/api/src/main/java/org/apache/plc4x/java/osgi/Activator.java#L70 When connection attempt is made a special kind of driver manager which is OSGi aware look up for matching service: https://github.com/ConnectorIO/plc4x/blob/eufossa/plc4j/api/src/main/java/org/apache/plc4x/java/osgi/OsgiDriverManager.java#L62 For ease of use I decided to register `OsgiDriverManager` as OSGi service: https://github.com/ConnectorIO/plc4x/blob/eufossa/plc4j/api/src/main/java/org/apache/plc4x/java/osgi/Activator.java#L49 This means that as soon as plc4x-api is installed within OSGi framework a matching service will be present waiting for other bundles which would like to obtain connections. However, a general recommendation for OSGi support is to defined interface which is used by service implementer and later used by service consumer. Currently *PlcDriverManager* is a class so I had to declare a `DriverManager` interface which I used only for OSGi related testing. I believe what such separation would be helpful for project and all AOP related frameworks which could be used with typical Spring/Java EE setups. I know these days mocking frameworks are quite powerful and do not require interface, yet such separation adds additional boundary to project APIs/SPIs. Are you up for: 1) Declaring new interface to represent `PlcDriverManager` functionality? 2) Renaming existing `PlcDriverManager` to `BasicPlcDriverManager`? 3) Moving `BasicDriverManager` to new module `plc4x/plc4j/core`? 4) Creation of plc4j/osgi module where OSGi integration will be kept? Steps 2 and 3 will turn plc4j/api into interface only module, meaning a proper API bundle. :-) I am aware that it will have impact on existing java code thus would like to hear what is your opinion. Kind regards, Ɓukasz -- http://connectorio.com