From dev-return-3862-apmail-plc4x-dev-archive=plc4x.apache.org@plc4x.apache.org Tue May 5 03:06:46 2020 Return-Path: X-Original-To: apmail-plc4x-dev-archive@minotaur.apache.org Delivered-To: apmail-plc4x-dev-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [207.244.88.153]) by minotaur.apache.org (Postfix) with SMTP id 09F6519788 for ; Tue, 5 May 2020 03:06:44 +0000 (UTC) Received: (qmail 28380 invoked by uid 500); 5 May 2020 03:06:44 -0000 Delivered-To: apmail-plc4x-dev-archive@plc4x.apache.org Received: (qmail 28326 invoked by uid 500); 5 May 2020 03:06:43 -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 28312 invoked by uid 99); 5 May 2020 03:06:41 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd2-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 05 May 2020 03:06:41 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd2-us-west.apache.org (ASF Mail Server at spamd2-us-west.apache.org) with ESMTP id 120991A321A for ; Tue, 5 May 2020 03:06:41 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd2-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 0.102 X-Spam-Level: X-Spam-Status: No, score=0.102 tagged_above=-999 required=6.31 tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.2, KAM_SHORT=0.001, NUMERIC_HTTP_ADDR=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=disabled Authentication-Results: spamd2-us-west.apache.org (amavisd-new); dkim=pass (1024-bit key) header.d=etu.he2b.be Received: from mx1-ec2-va.apache.org ([10.40.0.8]) by localhost (spamd2-us-west.apache.org [10.40.0.9]) (amavisd-new, port 10024) with ESMTP id 2FPojtU6tdzQ for ; Tue, 5 May 2020 03:06:38 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=209.85.208.194; helo=mail-lj1-f194.google.com; envelope-from=43823@etu.he2b.be; receiver= Received: from mail-lj1-f194.google.com (mail-lj1-f194.google.com [209.85.208.194]) by mx1-ec2-va.apache.org (ASF Mail Server at mx1-ec2-va.apache.org) with ESMTPS id C17F0BB85A for ; Tue, 5 May 2020 03:06:37 +0000 (UTC) Received: by mail-lj1-f194.google.com with SMTP id g4so77349ljl.2 for ; Mon, 04 May 2020 20:06:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=etu.he2b.be; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=5FvNd/2Lf4XOvz9lWY1Uwdgx5KSo3D/88qTVH8US/Ew=; b=achg8eEE917FynkUTPPIqkuui77NCf/507k4W9DFuz8PbQD4cb6ZeYthYSlvLGlPs0 fNr+wFlxHxW128aBWr0E6DOKcpF8i86dzQdmbMP1wEHXLYCARFn43WNafK3ck2LosSOA FmTMRTW+YUoKnj2Ts1xM/MnCBDBLqMr4CaG4U= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=5FvNd/2Lf4XOvz9lWY1Uwdgx5KSo3D/88qTVH8US/Ew=; b=ddUaBU5QDrwW3PuH7hyZniROg0GqS5NjpECq7xnmlAdh7fA168RiBbLP9G/pQzzjws HUno1tqv7Yum5D16sSZaai2wLw2XPhyRMGT/swWRP3/guaIaSsZaGOe4kCEpztdw5c+E zg8LkkoK2KU79cXOXMlqgdKP1bUP0Ow/9PmxEJ4/FnCQDI2CJ49Fjh4MI8VBT1CBBLJR 0IwQbMgy4GFxlyptG1sITQtgzlxWWaq1g5mDKe7kELjl1j6zXkoaZEGXAeVFLj5YXowz 1STMuaMhY5qgaPxjGAcpJKZny6okT/IKogyHfQiGv8ANj0qkNTOz4YzrZkdUpKW+BP3C +DgA== X-Gm-Message-State: AGi0PubMZZtt3wDlSrD8E7wjcbsI0pjIE7sRwot7rafd54OhfhH7Dopr /WYHXLBIVWqZQXu70EzvkbudceBQAk6TnWS33jeNToIkSA== X-Google-Smtp-Source: APiQypL+eRqmaYtGVqPbc5IHprJCMeOS7v10LhDjb2CME6rXoT9O0utHIFy4dx4X3MamkcdTkepPVczoGEdPltWvsKA= X-Received: by 2002:a2e:9712:: with SMTP id r18mr440882lji.225.1588647995669; Mon, 04 May 2020 20:06:35 -0700 (PDT) MIME-Version: 1.0 References: <1654492C-E920-4FDE-BADA-400D3AC0EA1A@c-ware.de> In-Reply-To: <1654492C-E920-4FDE-BADA-400D3AC0EA1A@c-ware.de> From: "Robinet, Etienne" <43823@etu.he2b.be> Date: Tue, 5 May 2020 05:06:22 +0200 Message-ID: Subject: Re: SPI Module - OSGi Bundle To: dev@plc4x.apache.org Content-Type: multipart/alternative; boundary="00000000000074918105a4ddefb7" --00000000000074918105a4ddefb7 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi all, With the change of Christofer this problem got solved. Nonetheless, I kept the work I did (inspired by the work of Lukasz) to make an Activator for API (Driver Services) and SPI (Transport Services). I also tested it, but as I am pretty new to this, if anyone could just give me a feedback on the code: API Activator: https://github.com/apache/plc4x/blob/feature/osgi/plc4j/api/src/main/java/o= rg/apache/plc4x/java/osgi/ApiActivator.java SPI Activator: https://github.com/apache/plc4x/blob/feature/osgi/plc4j/spi/src/main/java/o= rg/apache/plc4x/java/osgi/SpiActivator.java If everything is alright, I could merge this today. Etienne Le mar. 7 avr. 2020 =C3=A0 17:52, Christofer Dutz a =C3=A9crit : > Hi folks, > > I just pushed a change that might get rid of this error. > > I added the Plc4xBootstrap in an attempt to get the TestTransport working= . > For some reasons the netty folks created the EmbeddedChannel differently > than the rest. > However as the TestTransport is the only one needing this change, I moved > these classes to the test-transport module > and extended NettyChannelFactory with a createBootstrap method which is > simply overridden in TestTransport. > > So please give everything a try if it now works as planned. > > Chris > > > > =EF=BB=BFAm 07.04.20, 17:36 schrieb "Etienne Robinet" <43823@etu.he2b.be>= : > > Hi all, > I=E2=80=99ve checked the Manifest. If I put the Embed-Dependency to t= he > plc4j-spi artifact it does not find the Transport Service. And if I dont > it does not find the Plc4xBootstrap. > > Etienne ROBINET > > > Le 7 avr. 2020 =C3=A0 16:48, =C5=81ukasz Dywicki a > =C3=A9crit : > > > > I was updating my local checkout yesterday. Can't promise if I will > be > > able to help, but will give a try with 0.7 snapshot. > > > > Best, > > =C5=81ukasz > > > > > >> On 07.04.2020 15:39, Etienne Robinet wrote: > >> Hi again, > >> I've been looking at this issue all day, and I am back to the > initial error: > >> https://i.imgur.com/LLfan8H.png > >> > >> The difference is I used and Activator for API and SPI to register > the driver and transports Service, which are then loaded by the custom > blueprint. The error now is caused again because this class is not export= ed > (I think?) by the SPI, but is used by one of the dependency (io.netty). > >> Any ideas on how to solve this? > >> > >> Etienne > >> > >>> On 2020/04/07 06:53:54, Etienne Robinet > wrote: > >>> Hi all, > >>> the faulty ClassLoader is the > BundleDelegatingClassLoader(plc4x-test [191]). Which means that the custo= m > bundle can not find the class right? > >>> > >>> I'm sorry if it's a silly question but I am pretty new to this. > >>> > >>> Etienne > >>> > >>> On 2020/04/06 20:28:17, =C5=81ukasz Dywicki > wrote: > >>>> I haven't used Camel for a while, but to me it seems to be a > problem > >>>> caused by caller's classloader. > >>>> > >>>> See that in stack trace you have a thread which is started by > camel, so > >>>> there are 3 or even 4 classloaders to be considered: > >>>> - plc4x, definitely not a faulty one > >>>> - netty, could be troublesome but unlikely to be used > >>>> - camel-core, or component itself > >>>> - custom bundle which started the route > >>>> > >>>> Anything beside last one which knows all the dependencies will > blow up > >>>> whole universe. Here is why - only the custom bundle knows all t= he > >>>> dependencies necessary to run logic and can be used to fix messe= d > up > >>>> classpath. In most of the cases, that's the "trick" you have to > make in > >>>> order to get OSGi happy. > >>>> Camel component may not, and should not depend on specific drive= r, > >>>> however in your case it does. Possibly due to new APIs in > transport > >>>> layer its shouldn't be used for adhoc fixes. > >>>> > >>>> We can try to turn drivers into services (see here > >>>> > https://github.com/splatch/plc4x/commit/5ce379cf8d2f5dc91fdfb6d8a8e2c0531= 906e69f > ) > >>>> in order to cut concrete class dependency and rely on isolated > APIs. > >>>> This code was done before new abstractions over netty were > introduced, > >>>> but it should cut in half API and caller side (not sure if we're > on > >>>> declarative services). > >>>> > >>>> My tip to you Etienne - please verify which class loader is used > in your > >>>> polling cycle. You can do that by making breakpoint in faulty > method of > >>>> S7Driver and evaluating expression > >>>> "Thread.currentThread().getContextClassLoader()". > >>>> Once you know that you can either fix classloading in the callin= g > class > >>>> loader or override classloader for thread to proper one. > >>>> > >>>> Best, > >>>> =C5=81ukasz > >>>> > >>>> > >>>> On 03.04.2020 10:27, Etienne Robinet wrote: > >>>>> Hi Christian, > >>>>> you mean the code used in the Camel route? It is an blueprint: > >>>>> > >>>>> > >>>>> >>>>> xmlns:xsi=3D"http://www.w3.org/2001/XMLSchema-instanc= e" > >>>>> xsi:schemaLocation=3D " > http://www.osgi.org/xmlns/blueprint/v1.0.0 > https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd > >>>>> http://camel.apache.org/schema/blueprint > http://camel.apache.org/schema/blueprint/camel-blueprint-2.24.2.xsd"> > >>>>> > >>>>> > >>>>> http://camel.apache.org/schema/blueprint" streamCache=3D"true" > > >>>>> > >>>>> uri=3D"timer://plcFetch?fixedRate=3Dtrue&period=3D1000"/> > >>>>> > >>>>> plc4x:s7:tcp:// > 192.168.178.10?address=3D#fields > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> This code used to wrok actually, I just wanted to test the new > TagData of the integration. This is the bundling in the pom, these import= s > had to be there before too > >>>>> > >>>>> > >>>>> org.apache.felix > >>>>> maven-bundle-plugin > >>>>> 4.2.1 > >>>>> true > >>>>> > >>>>> > >>>>> > ${project.artifactId} > >>>>> > ${project.version} > >>>>> > >>>>> *;version=3D${project.version} > >>>>> > >>>>> > >>>>> org.apache.plc4x.java.spi.transport, > >>>>> org.apache.plc4x.java.s7.readwrite, > >>>>> * > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> Etienne > >>>>> > >>>>> On 2020/04/03 08:17:45, Christian Schneider < > chris@die-schneider.net> wrote: > >>>>>> The code in plc4x directly uses the class (not a String of the > name). This > >>>>>> is good. Normally such a class reference should work fine. > >>>>>> > >>>>>> Can you show your code as a complete example? > >>>>>> > >>>>>> Christian > >>>>>> > >>>>>> > >>>>>> Am Fr., 3. Apr. 2020 um 09:58 Uhr schrieb Julian Feinauer < > >>>>>> j.feinauer@pragmaticminds.de>: > >>>>>> > >>>>>>> I am off with my knowledge. > >>>>>>> You could ask the Karaf friends (#karaf in Slack). They are > all OSGi > >>>>>>> experts and very friendly and helpful. > >>>>>>> Or perhaps Christian has an idea here? > >>>>>>> > >>>>>>> Best > >>>>>>> Julian > >>>>>>> > >>>>>>> Am 03.04.20, 09:50 schrieb "Etienne Robinet" < > erobinet@apache.org>: > >>>>>>> > >>>>>>> Hi again, > >>>>>>> I've been struggling with this issue for 2 days now... I > still don't > >>>>>>> get it why it can not find classes. here is the current > problem: > >>>>>>> https://i.imgur.com/LtZMdsu.png > >>>>>>> > >>>>>>> We can see that the classes are available and exported, I > don't know > >>>>>>> why the Camel Context can't find it. I even tried to add an > Activator to my > >>>>>>> bundle, and load these classes there and it works! But not in > the > >>>>>>> blueprint. If anyone had any idea on where the problem is... > >>>>>>> > >>>>>>> Etienne > >>>>>>> > >>>>>>> On 2020/04/01 01:31:15, Niclas Hedhman > wrote: > >>>>>>>> It happens that OSGi classloading result in the wrong NCDFE > and that > >>>>>>> one of > >>>>>>>> the classes "used" (i.e. return type, parameter, throws, > extends, > >>>>>>>> implements) in the reported class is not visible by the > classloader. > >>>>>>> And > >>>>>>>> occasionally, it is a "diamond problem", i.e. that the > Constraints > >>>>>>> (IIRC, > >>>>>>>> see chapter 3.8 in OSGi spec) can't be satisfied. > >>>>>>>> > >>>>>>>> Sorry that I don't have time to dig into the actual situatio= n > here, > >>>>>>> but I > >>>>>>>> thought I could share some of my past (dark) history.... ;-) > >>>>>>>> > >>>>>>>> Cheers > >>>>>>>> Niclas > >>>>>>>> > >>>>>>>> On Wed, Apr 1, 2020 at 12:43 AM Christofer Dutz < > >>>>>>> christofer.dutz@c-ware.de> > >>>>>>>> wrote: > >>>>>>>> > >>>>>>>>> Hi all, > >>>>>>>>> > >>>>>>>>> But If I search for uses of that class, it's only in the > >>>>>>>>> org.apache.plc4x.java.spi.connection.NettyChannelFactory > which is > >>>>>>> in the > >>>>>>>>> SPI module. > >>>>>>>>> > >>>>>>>>> So I am not sure where this is accessed directly from the > outside. > >>>>>>> I know > >>>>>>>>> every driver would use the NettyChannelFactory, but that > shouldn't > >>>>>>> be an > >>>>>>>>> OSGi type problem as the SPI classes should be able to acce= ss > >>>>>>> their own > >>>>>>>>> classes. > >>>>>>>>> > >>>>>>>>> Chris > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> Am 31.03.20, 16:07 schrieb "Etienne Robinet" < > 43823@etu.he2b.be>: > >>>>>>>>> > >>>>>>>>> Hi, > >>>>>>>>> From the log the class is called outside the SPI by the > >>>>>>> transport > >>>>>>>>> > >>>>>>>>> Etienne > >>>>>>>>> > >>>>>>>>>> Le 31 mars 2020 =C3=A0 15:24, Julian Feinauer < > >>>>>>>>> j.feinauer@pragmaticminds.de> a =C3=A9crit : > >>>>>>>>>> > >>>>>>>>>> Hi, > >>>>>>>>>> > >>>>>>>>>> yes, if ist only needed internally its fine.But why does > >>>>>>> someone > >>>>>>>>> then get a Class Not Found Exception? > >>>>>>>>>> This is usually a hint to some class loader issue in OSGi > >>>>>>> which is > >>>>>>>>> related to exports/ imports. > >>>>>>>>>> > >>>>>>>>>> J > >>>>>>>>>> > >>>>>>>>>> Am 31.03.20, 15:23 schrieb "Christofer Dutz" < > >>>>>>>>> christofer.dutz@c-ware.de>: > >>>>>>>>>> > >>>>>>>>>> As this package is only referenced from within SPI, > >>>>>>> couldn't we > >>>>>>>>> just exclude it from the package exports? > >>>>>>>>>> > >>>>>>>>>> Chris > >>>>>>>>>> > >>>>>>>>>> Am 31.03.20, 15:17 schrieb "Julian Feinauer" < > >>>>>>>>> j.feinauer@pragmaticminds.de>: > >>>>>>>>>> > >>>>>>>>>> Hi, > >>>>>>>>>> > >>>>>>>>>> the issue is that if we export it, then we break > >>>>>>> Nettys OSGi > >>>>>>>>> integration as we get a split package situation (two bundle= s > >>>>>>> exporting the > >>>>>>>>> same package, which is forbidden in OSGi). > >>>>>>>>>> > >>>>>>>>>> So I see no easy solution (but had to do the same > >>>>>>> once as > >>>>>>>>> Netty is pretty... private). > >>>>>>>>>> > >>>>>>>>>> J > >>>>>>>>>> > >>>>>>>>>> Am 31.03.20, 15:15 schrieb "Christofer Dutz" < > >>>>>>>>> christofer.dutz@c-ware.de>: > >>>>>>>>>> > >>>>>>>>>> Hi all, > >>>>>>>>>> > >>>>>>>>>> I just discussed this issue with Etienne and I > >>>>>>> thought it > >>>>>>>>> was important for all, so I asked him to bring it here. > >>>>>>>>>> > >>>>>>>>>> In my effort to get the EmbeddedChannel working > >>>>>>> as a full > >>>>>>>>> "transport" module, I had to override the Netty Bootstrap > >>>>>>> mechanism. > >>>>>>>>>> Unfortunately in order to do so, I need to call > >>>>>>> "init" > >>>>>>>>> from the derived class. Unfortunately this is package > private in > >>>>>>> Netty so I > >>>>>>>>> had > >>>>>>>>>> To add it to the same package. > >>>>>>>>>> > >>>>>>>>>> Would it help to just not export these packages > >>>>>>> to OSGi? > >>>>>>>>>> > >>>>>>>>>> But I'm also open for alternatives (Please none > >>>>>>> involving > >>>>>>>>> mega-evil reflection hackery). > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> Chris > >>>>>>>>>> > >>>>>>>>>> Am 31.03.20, 15:10 schrieb "Etienne Robinet" < > >>>>>>>>> erobinet@apache.org>: > >>>>>>>>>> > >>>>>>>>>> Hi all, > >>>>>>>>>> I've been working on the Camel Component and > >>>>>>> decided > >>>>>>>>> to test it inside Karaf, but I noticed that I've got this > error > >>>>>>> now: > >>>>>>>>>> https://i.imgur.com/kUZPwZ5.png > >>>>>>>>>> > >>>>>>>>>> Seems like this class is not exported by the > >>>>>>> bundle > >>>>>>>>> so it can not be found. Anyone has an idea on how we could > solve > >>>>>>> this? > >>>>>>>>>> > >>>>>>>>>> Etienne > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>> > >>>>>> -- > >>>>>> -- > >>>>>> Christian Schneider > >>>>>> http://www.liquid-reality.de > >>>>>> > >>>>>> Computer Scientist > >>>>>> http://www.adobe.com > >>>>>> > >>>> > >>> > > > --00000000000074918105a4ddefb7--