Hi all,
I’ve checked the Manifest. If I put the Embed-Dependency to the 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 à 16:48, Łukasz Dywicki <l...@code-house.org> a écrit :
> 
> 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,
> Łukasz
> 
> 
>> 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 exported 
>> (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 <erobi...@apache.org> wrote: 
>>> Hi all,
>>> the faulty ClassLoader is the BundleDelegatingClassLoader(plc4x-test 
>>> [191]). Which means that the custom 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, Łukasz Dywicki <l...@code-house.org> 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 the
>>>> dependencies necessary to run logic and can be used to fix messed 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 driver,
>>>> 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/5ce379cf8d2f5dc91fdfb6d8a8e2c0531906e69f)
>>>> 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 calling class
>>>> loader or override classloader for thread to proper one.
>>>> 
>>>> Best,
>>>> Łukasz
>>>> 
>>>> 
>>>> On 03.04.2020 10:27, Etienne Robinet wrote:
>>>>> Hi Christian,
>>>>> you mean the code used in the Camel route? It is an blueprint:
>>>>> 
>>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>>> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";
>>>>>           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>>>>>           xsi:schemaLocation= "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";>
>>>>> 
>>>>> 
>>>>>    <camelContext id="PLC-IoTDB" 
>>>>> xmlns="http://camel.apache.org/schema/blueprint"; streamCache="true" >
>>>>>        <route id="plc-route" >
>>>>>            <from uri="timer://plcFetch?fixedRate=true&period=1000"/>
>>>>>            <pollEnrich>
>>>>>                
>>>>> <simple>plc4x:s7:tcp://192.168.178.10?address=#fields</simple>
>>>>>            </pollEnrich>
>>>>>            <log message="${body}"/>
>>>>>            <to uri="mock:test?retainLast=10"/>
>>>>>        </route>
>>>>>    </camelContext>
>>>>> 
>>>>> 
>>>>>    <bean id="fields" class="java.util.ArrayList">
>>>>>        <argument>
>>>>>            <list>
>>>>>               <bean class="org.apache.plc4x.camel.TagData">
>>>>>                   <argument index="0" value="IntTest"/>
>>>>>                   <argument index="1" value="%DB1.DBW254:INT"/>
>>>>>               </bean>
>>>>>               <bean class="org.apache.plc4x.camel.TagData">
>>>>>                   <argument index="0" value="StringTest"/>
>>>>>                   <argument index="1" value="%DB1.DBX0:STRING"/>
>>>>>               </bean>
>>>>>            </list>
>>>>>        </argument>
>>>>>    </bean>
>>>>> </blueprint>
>>>>> 
>>>>> 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 imports had to be 
>>>>> there before too
>>>>> 
>>>>> <plugin>
>>>>>                <groupId>org.apache.felix</groupId>
>>>>>                <artifactId>maven-bundle-plugin</artifactId>
>>>>>                <version>4.2.1</version>
>>>>>                <extensions>true</extensions>
>>>>>                <configuration>
>>>>>                    <instructions>
>>>>>                        
>>>>> <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
>>>>>                        <Bundle-Version>${project.version}</Bundle-Version>
>>>>>                        <Export-Package>
>>>>>                           *;version=${project.version}
>>>>>                        </Export-Package>
>>>>>                        <Import-Package>
>>>>>                            org.apache.plc4x.java.spi.transport,
>>>>>                            org.apache.plc4x.java.s7.readwrite,
>>>>>                            *
>>>>>                        </Import-Package>
>>>>>                    </instructions>
>>>>>                </configuration>
>>>>>            </plugin>
>>>>> 
>>>>> 
>>>>> Etienne
>>>>> 
>>>>> On 2020/04/03 08:17:45, Christian Schneider <ch...@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.feina...@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" <erobi...@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 <nic...@hedhman.org> 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 situation 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.d...@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 access
>>>>>>> their own
>>>>>>>>> classes.
>>>>>>>>> 
>>>>>>>>> Chris
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> Am 31.03.20, 16:07 schrieb "Etienne Robinet" <43...@etu.he2b.be>:
>>>>>>>>> 
>>>>>>>>>    Hi,
>>>>>>>>>    From the log the class is called outside the SPI by the
>>>>>>> transport
>>>>>>>>> 
>>>>>>>>>    Etienne
>>>>>>>>> 
>>>>>>>>>> Le 31 mars 2020 à 15:24, Julian Feinauer <
>>>>>>>>> j.feina...@pragmaticminds.de> a écrit :
>>>>>>>>>> 
>>>>>>>>>> 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.d...@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.feina...@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 bundles
>>>>>>> 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.d...@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" <
>>>>>>>>> erobi...@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
>>>>>> 
>>>> 
>>> 

Reply via email to