Hello Alessio,

As I pointed out, with the new design of the drivers it is necessary to
make a few modifications so that the system allows communication with the
OSGi container.

In a default installation, the load of services in the SPI services are not
seen between the different bundles, and that is the problem that is
happening to you and, as Julian pointed out in his email, the Apache Aries
Fly project solves it.

By default Karaf does not integrate the Aries Fly project (although the
page indicates that it does), it can be added in a feature or you can
generate your own version of Karaf (I always start from a minimal
installation), so I complement the feature you published  and you can see
in[1].

Now each service / consumer must indicate within the manifest the methods
that it export or import as appropriate. In your case you need to specify
the transport services, specifically "PLC4J: Transports: TCP" and the
consumer "PLC4J: SPI", which are what cause the problem. Modifications in
[2] and [3] are made in the POMs.

At this point you should already see the transport and the registered by
spifly like in [4].

Well, here you can already use PLC4X in your bundle, in [5] leave an
example code, creating a Karaf command with which you can access the Modbus
or S7 driver indifferently (Just test the Modbus).

This could somehow be treated as a PR for the project, it should be
evaluated.

My grain of sand.

1. The feature

    <feature name='${project.artifactId}' description='${project.name}'
version='${project.version}'>
        <details>${project.description}</details>
        <details>Implementation of the protocol adapters for usage as Java
library.</details>
        <bundle>mvn:org.apache.plc4x/plc4j-osgi/0.8.0-SNAPSHOT</bundle>
        <bundle>mvn:org.osgi/osgi.core/6.0.0</bundle>
        <bundle>mvn:org.apache.plc4x/plc4j-api/0.8.0-SNAPSHOT</bundle>
        <bundle>mvn:org.apache.plc4x/plc4j-spi/0.8.0-SNAPSHOT</bundle>
        <bundle>mvn:io.netty/netty-codec/4.1.47.Final</bundle>
        <bundle>mvn:io.netty/netty-common/4.1.47.Final</bundle>
        <bundle>mvn:io.netty/netty-transport/4.1.47.Final</bundle>
        <bundle>mvn:io.netty/netty-resolver/4.1.47.Final</bundle>
        <bundle>mvn:commons-beanutils/commons-beanutils/1.9.4</bundle>
        <bundle>mvn:commons-logging/commons-logging/1.2</bundle>
        <bundle>mvn:commons-collections/commons-collections/3.2.2</bundle>
        <bundle>mvn:com.github.jinahya/bit-io/1.4.3</bundle>
        <bundle>mvn:commons-codec/commons-codec/1.12</bundle>
        <bundle>mvn:org.apache.plc4x/plc4j-driver-s7/0.8.0-SNAPSHOT</bundle>


<bundle>mvn:org.apache.plc4x/plc4j-driver-modbus/0.8.0-SNAPSHOT</bundle>


<bundle>mvn:org.apache.plc4x/plc4j-transport-tcp/0.8.0-SNAPSHOT</bundle>


<bundle>mvn:com.fasterxml.jackson.core/jackson-annotations/2.10.0</bundle>
        <bundle>mvn:org.apache.commons/commons-lang3/3.9</bundle>
        <bundle>mvn:io.netty/netty-buffer/4.1.47.Final</bundle>
        <bundle>mvn:io.vavr/vavr/0.10.2</bundle>
        <bundle>mvn:io.vavr/vavr-match/0.10.2</bundle>













*        <bundle>mvn:org.ow2.asm/asm/8.0.1</bundle>
<bundle>mvn:org.ow2.asm/asm-util/8.0.1</bundle>
<bundle>mvn:org.ow2.asm/asm-tree/8.0.1</bundle>
<bundle>mvn:org.ow2.asm/asm-commons/8.0.1</bundle>
<bundle>mvn:org.ow2.asm/asm-analysis/8.0.1</bundle>        <!--
<bundle>mvn:biz.aQute.bnd/aQute.libg/5.0.1</bundle>
<bundle>mvn:biz.aQute.bnd/biz.aQute.bndlib/5.0.1</bundle>        -->
<bundle>mvn:org.apache.aries.spifly/org.apache.aries.spifly.weaver-internal/1.3.0</bundle>

<bundle>mvn:org.apache.aries.spifly/org.apache.aries.spifly.core-internal/1.3.0</bundle>

<bundle>mvn:org.apache.aries.spifly/org.apache.aries.spifly.dynamic.bundle/1.3.0</bundle>
     *

    </feature>

[2] "PLC4J: Transports: TCP"

      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <extensions>true</extensions>
        <configuration>
          <instructions>

<Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>

<Bundle-Activator>org.apache.plc4x.java.osgi.TransportActivator</Bundle-Activator>

<Export-Service>org.apache.plc4x.java.spi.transport.Transport,org.apache.plc4x.java.transport.tcp.TcpTransport</Export-Service>
           * <SPI-Provider>*</SPI-Provider>*
          </instructions>
        </configuration>
      </plugin>

[3] "PLC4J: SPI"
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <extensions>true</extensions>
        <configuration>
          <instructions>
            <Export-package>io.netty.bootstrap,*</Export-package>
            *<SPI-consumer>*</SPI-consumer>*
          </instructions>
        </configuration>
      </plugin>
    </plugins>

[4] karaf@root()> service:list Transport
[org.apache.plc4x.java.spi.transport.Transport]
-----------------------------------------------
 org.apache.plc4x.transport.code = tcp
 org.apache.plc4x.transport.name = IP/TCP Transport
 service.bundleid = 89
 service.id = 207
 service.scope = singleton
Provided by :
 PLC4J: Transports: TCP (89)
Used by:
 TestPLC4XOsgiWay Blueprint Bundle (51)

[org.apache.plc4x.java.spi.transport.Transport]
-----------------------------------------------
 .org.apache.aries.spifly.provider.discovery.mode = SPI_PROVIDER_HEADER
 .org.apache.aries.spifly.provider.implclass =
org.apache.plc4x.java.transport.tcp.TcpTransport
 service.bundleid = 89
 service.id = 208
 service.scope = bundle
 serviceloader.mediator = 45
Provided by :
 PLC4J: Transports: TCP (89)

[5] *https://github.com/glcj/TestPLC4X <https://github.com/glcj/TestPLC4X>*


El mar., 9 jun. 2020 a las 5:23, Alessio Bernesco Làvore (<
alessio.berne...@gmail.com>) escribió:

> Thank you Cesar,
> thanks for your insight, but i think i'm still lost somewhere.
>
> I've registered the driver inside my bundle context, at least i think so:
>
> [org.apache.plc4x.java.api.PlcDriver]
> -------------------------------------
>  org.apache.plc4x.driver.code = modbus
>  org.apache.plc4x.driver.name = Modbus
>  service.bundleid = 165
>  service.id = 247
>  service.scope = singleton
> Provided by :
>  PLC4J: Driver: Modbus (165)
> Used by:
>  edgecontroller Bundle (164) <--
>
> Anyway starting the bundle the PLC Driver Manager is unable to find the
> driver:
>
> 2020-06-09T09:17:50,132 | INFO  | pipe-bundle:update edgecontroller |
> PlcDriverManager                 | 152 - org.apache.plc4x.plc4j-api -
> 0.8.0.SNAPSHOT | Instantiating new PLC Driver Manager with class loader
> sun.misc.Launcher$AppClassLoader@764c12b6
> 2020-06-09T09:17:50,132 | INFO  | pipe-bundle:update edgecontroller |
> PlcDriverManager                 | 152 - org.apache.plc4x.plc4j-api -
> 0.8.0.SNAPSHOT | Registering available drivers...
> 2020-06-09T09:17:50,133 | ERROR | pipe-bundle:update edgecontroller |
> Activator                        | 164 - edgecontroller - 1.0.0 | Unable to
> find driver for protocol 'modbus'
>
> Greetings,
> Alessio
>
> On Mon, Jun 8, 2020 at 10:52 PM Cesar Garcia <cesar.gar...@ceos.com.ve>
> wrote:
>
> >  Hello Alessio,
> >
> > Perform the test with the "feature" that you put online, and I can see
> that
> > the services associated with the drivers are active.
> >
> > karaf@root()> service:list PlcDriver
> > [org.apache.plc4x.java.api.PlcDriver]
> > -------------------------------------
> >  org.apache.plc4x.driver.code = modbus
> >  org.apache.plc4x.driver.name = Modbus
> >  service.bundleid = 59
> >  service.id = 98
> >  service.scope = singleton
> > Provided by :
> >  PLC4J: Driver: Modbus (59)
> >
> > [org.apache.plc4x.java.api.PlcDriver]
> > -------------------------------------
> >  org.apache.plc4x.driver.code = s7
> >  org.apache.plc4x.driver.name = Siemens S7 (Basic)
> >  service.bundleid = 60
> >  service.id = 97
> >  service.scope = singleton
> > Provided by :
> >  PLC4J: Driver: S7 (Step7) (60)
> >
> > The solution is to use the "BundleContext" with a filter and take the
> field
> > "org.apache.plc4x.driver.name " or  the field
> > "org.apache.plc4x.driver.code" ( They are the same ). I think that is the
> > way to do it in an OSGi environment.
> >
> > Loading the services with SPI is redundant, and it may happen that the
> SPI
> > service does not see the PlcDriver Services (typical OSGi problem).
> >
> > My grain of sand,
> >
> > Best regards,
> >
> >
> >
> >
> > El lun., 8 jun. 2020 a las 15:41, Alessio Bernesco Làvore (<
> > alessio.berne...@gmail.com>) escribió:
> >
> > > Thank you Julian,
> > > i've tried to install th Aries SPI Bundle:
> > >
> > > 176 │ Active   │  80 │ 1.3.0              │ Apache Aries SPI Fly
> Dynamic
> > > Weaving Bundle
> > >
> > > But i'm still unable to resolve the drivers.
> > >
> > > Ale
> > >
> > > On Mon, Jun 8, 2020 at 8:13 PM Julian Feinauer <
> > > j.feina...@pragmaticminds.de>
> > > wrote:
> > >
> > > > Hi Alessio,
> > > >
> > > > if I remember correctly you need the Aries SPI Fly package loaded.
> > > > In Plain PLC4X we use ServiceLoader to discover drivers.
> > > > If you have nothing like Aries SPI Fly which mediates and "immitates"
> > the
> > > > ServiceLoader then you dont get a wiring between the DriverManager
> and
> > > the
> > > > driver.
> > > > But I don’t checked the lastst implementation to be honest.
> > > >
> > > > Perhaps @Robinet, Etienne can help?
> > > >
> > > > Julian
> > > >
> > > > Am 08.06.20, 20:00 schrieb "Alessio Bernesco Làvore" <
> > > > alessio.berne...@gmail.com>:
> > > >
> > > >     Hello everyone,
> > > >     i've created a simple class reading values from a ModBus PLC.
> > > >
> > > >     I'm trying to use it inside Karaf, but at start the class is
> unable
> > > to
> > > > find
> > > >     the modbus driver. I've compiled and installed in Karaf the
> > > >     "driver-s7-feature", with added the modbus driver:
> > > >
> > > >     <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
> > > >     <features xmlns="http://karaf.apache.org/xmlns/features/v1.6.0";
> > > >     name="driver-s7-feature">
> > > >         <feature name="driver-s7-feature" description="PLC4J:
> > > > Karaf-Features:
> > > >     S7" version="0.8.0.SNAPSHOT">
> > > >             <details>Implementation of the protocol adapters for
> usage
> > as
> > > > Java
> > > >     library.</details>
> > > >
> > >  <bundle>mvn:org.apache.plc4x/plc4j-osgi/0.8.0-SNAPSHOT</bundle>
> > > >             <bundle>mvn:org.osgi/osgi.core/6.0.0</bundle>
> > > >
> > >  <bundle>mvn:org.apache.plc4x/plc4j-api/0.8.0-SNAPSHOT</bundle>
> > > >
> > >  <bundle>mvn:org.apache.plc4x/plc4j-spi/0.8.0-SNAPSHOT</bundle>
> > > >             <bundle>mvn:io.netty/netty-codec/4.1.47.Final</bundle>
> > > >             <bundle>mvn:io.netty/netty-common/4.1.47.Final</bundle>
> > > >
>  <bundle>mvn:io.netty/netty-transport/4.1.47.Final</bundle>
> > > >             <bundle>mvn:io.netty/netty-resolver/4.1.47.Final</bundle>
> > > >
> > >  <bundle>mvn:commons-beanutils/commons-beanutils/1.9.4</bundle>
> > > >             <bundle>mvn:commons-logging/commons-logging/1.2</bundle>
> > > >
> > > > <bundle>mvn:commons-collections/commons-collections/3.2.2</bundle>
> > > >             <bundle>mvn:com.github.jinahya/bit-io/1.4.3</bundle>
> > > >             <bundle>mvn:commons-codec/commons-codec/1.12</bundle>
> > > >
> > > > <bundle>mvn:org.apache.plc4x/plc4j-driver-s7/0.8.0-SNAPSHOT</bundle>
> > > >
> > > >
> > > >
> > <bundle>mvn:org.apache.plc4x/plc4j-driver-modbus/0.8.0-SNAPSHOT</bundle>
> > > >
> > > >
> > > >
> > <bundle>mvn:org.apache.plc4x/plc4j-transport-tcp/0.8.0-SNAPSHOT</bundle>
> > > >
> > > >
> > > >
> > >
> >
> <bundle>mvn:com.fasterxml.jackson.core/jackson-annotations/2.10.0</bundle>
> > > >             <bundle>mvn:org.apache.commons/commons-lang3/3.9</bundle>
> > > >             <bundle>mvn:io.netty/netty-buffer/4.1.47.Final</bundle>
> > > >             <bundle>mvn:io.vavr/vavr/0.10.2</bundle>
> > > >             <bundle>mvn:io.vavr/vavr-match/0.10.2</bundle>
> > > >         </feature>
> > > >     </features>
> > > >
> > > >     Inside Karaf i can find all the active bundles:
> > > >
> > > >     152 │ Active   │  80 │ 0.8.0.SNAPSHOT     │ PLC4J: API
> > > >     153 │ Active   │  80 │ 0.8.0.SNAPSHOT     │ PLC4J: Driver: S7
> > (Step7)
> > > >     154 │ Active   │  80 │ 0.8.0.SNAPSHOT     │ PLC4J: OSGi
> > > >     155 │ Active   │  80 │ 0.8.0.SNAPSHOT     │ PLC4J: SPI
> > > >     156 │ Active   │  80 │ 0.8.0.SNAPSHOT     │ PLC4J: Transports:
> TCP
> > > >     157 │ Active   │  80 │ 6.0.0.201403061837 │ osgi.core
> > > >     164 │ Active   │  80 │ 1.0                │ edgecontroller Bundle
> > > >     165 │ Active   │  80 │ 0.8.0.SNAPSHOT     │ PLC4J: Driver: Modbus
> > > >
> > > >     Anyway at startup the bundle doesnt find any driver:
> > > >
> > > >     2020-06-08T17:47:43,391 | INFO  | FelixStartLevel  |
> > PlcDriverManager
> > > >               | 152 - org.apache.plc4x.plc4j-api - 0.8.0.SNAPSHOT |
> > > >     Instantiating new PLC Driver Manager with class loader
> > > >     sun.misc.Launcher$AppClassLoader@764c12b6
> > > >     2020-06-08T17:47:43,391 | INFO  | FelixStartLevel  |
> > PlcDriverManager
> > > >               | 152 - org.apache.plc4x.plc4j-api - 0.8.0.SNAPSHOT |
> > > > Registering
> > > >     available drivers...
> > > >     2020-06-08T17:47:43,392 | ERROR | FelixStartLevel  | Activator
> > > >                | 164 - edgecontroller - 1.0.0 | Unable to find driver
> > for
> > > >     protocol 'modbus'
> > > >
> > > >     edgecontroller is my bundle, looking at the Karaf log the
> > > > PlcDriverManager
> > > >     is unable to find any driver.
> > > >
> > > >     I cannot understand were i'm failing, could anyone provide some
> > > > insight?
> > > >
> > > >     Thank you,
> > > >     Ale
> > > >
> > > >
> > >
> >
> >
> > --
> > *CEOS Automatización, C.A.*
> > *GALPON SERVICIO INDUSTRIALES Y NAVALES FA, C.A.,*
> > *PISO 1, OFICINA 2, AV. RAUL LEONI, SECTOR GUAMACHITO,*
> >
> > *FRENTE A LA ASOCIACION DE GANADEROS,BARCELONA,EDO. ANZOATEGUI*
> > *Ing. César García*
> >
> > *Cel: +58 414-760.98.95*
> >
> > *Hotline Técnica SIEMENS: 0800 1005080*
> >
> > *Email: support.aan.automat...@siemens.com
> > <support.aan.automat...@siemens.com>*
> >
>


-- 
*CEOS Automatización, C.A.*
*GALPON SERVICIO INDUSTRIALES Y NAVALES FA, C.A.,*
*PISO 1, OFICINA 2, AV. RAUL LEONI, SECTOR GUAMACHITO,*

*FRENTE A LA ASOCIACION DE GANADEROS,BARCELONA,EDO. ANZOATEGUI*
*Ing. César García*

*Cel: +58 414-760.98.95*

*Hotline Técnica SIEMENS: 0800 1005080*

*Email: support.aan.automat...@siemens.com
<support.aan.automat...@siemens.com>*

Reply via email to