emalovecode
emalovecode

Reputation: 1

How can i make sure a bundle started after its dependency bundle

I worked on the onos framework, i upgraded some codes, i kept some old mechanism such as pom.xml here're three bundles, onos-api, onos-core-net and onos-app-config. onos-api provides interface, onos-core-net provides implementation, and onos-app-config use some service references in the onos-api.

    DynamicConfigManager.java(from bundle onos-app-config)
    package org.onosproject.config.impl

@Component(immediate = true, service = DynamicConfigService.class)
public class DynamicConfigManager
        extends AbstractListenerManager<DynamicConfigEvent, DynamicConfigListener>
        implements DynamicConfigService {
    @Activate
    public void activate() {
        
        log.info("DynamicConfigService eventDispatcher {}", eventDispatcher);
        eventDispatcher.addSink(DynamicConfigEvent.class, listenerRegistry);
        log.info("DynamicConfigService Started");
    }
......
AbstractListenerManager.java(from bundle onos-api)

package org.onosproject.event;
public abstract class AbstractListenerManager<E extends Event, L extends EventListener<E>>
    implements ListenerService<E, L> {

    protected final ListenerRegistry<E, L> listenerRegistry = new ListenerRegistry<>();

    @Reference(cardinality = ReferenceCardinality.MANDATORY)
    protected EventDeliveryService eventDispatcher;
......

CoreEventDispatcher.java (from bundle onos-core-net)
package org.onosproject.event.impl
@Component(immediate = true, service = EventDeliveryService.class)
public class CoreEventDispatcher extends DefaultEventSinkRegistry
        implements EventDeliveryService {


......

pom.xml (from bundle onos-app-config)

        <dependency>
            <groupId>org.onosproject</groupId>
            <artifactId>onos-api</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.onosproject</groupId>
            <artifactId>onos-core-net</artifactId>
            <version>${project.version}</version>
        </dependency>

when i started the project,the karaf log shows

877 2024-04-03T09:58:37,405 | INFO  | features-3-thread-1 | CoreEventDispatcher              | 22     8 - org.onosproject.onos-core-net - 3.0.0.SNAPSHOT | CoreEventDispatcher Started
......

1458 2024-04-03T09:58:54,568 | ERROR | SCR Component Actor | DynamicConfigManager             | 20     8 - org.onosproject.onos-app-config - 3.0.0.SNAPSHOT | bundle org.onosproject.onos-app-config     :3.0.0.SNAPSHOT (208)[org.onosproject.config.impl.DynamicConfigManager(133)] : The activate method has thrown an exception
1459 java.lang.NullPointerException: null
1460         at org.onosproject.config.impl.DynamicConfigManager.activate(DynamicConfigManager.java:61) 
1461         at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
1462         at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
1463         at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorI  mpl.java:43) 
1464         at java.lang.reflect.Method.invoke(Method.java:566)
1465         at org.apache.felix.scr.impl.inject.methods.BaseMethod.invokeMethod(BaseMethod.java:244) 
1466         at org.apache.felix.scr.impl.inject.methods.BaseMethod.access$500(BaseMethod.java:41)      
1467         at org.apache.felix.scr.impl.inject.methods.BaseMethod$Resolved.invoke(BaseMethod.java:685) 


1319 2024-04-03T09:58:51,901 | INFO  | SCR Component Actor | NetworkConfigManager             | 22     8 - org.onosproject.onos-core-net - 3.0.0.SNAPSHOT | NetworkConfigManager eventDispatcher:org     .onosproject.event.impl.CoreEventDispatcher@230992e5
1320 2024-04-03T09:58:51,902 | INFO  | SCR Component Actor | NetworkConfigManager             | 22     8 - org.onosproject.onos-core-net - 3.0.0.SNAPSHOT | Started

(another bundle that use eventDispatcher)

I've tried use Import-Package or DynamicImport-Package, but it has nothing to do with the null pointer exception

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <version>4.1.0</version>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Bundle-SymbolicName>
                            ${project.groupId}.${project.artifactId}
            </Bundle-SymbolicName>
                        <!--Import-Package>
                            org.onosproject.event,
                            org.onosproject.store,
                            org.onosproject.store.service,
                            org.onosproject.store.serializers,
                            org.slf4j,
                            org.onosproject.yang.model,
                            org.onosproject.config,
                            org.onlab.util,
                         </Import-Package-->
             <DynamicImport-Package>
                            org.onosproject.event.*,
                            org.onosproject.store.*,
                            org.slf4j.*,
                            org.onosproject.yang.model.*,
                            org.onosproject.config.*,
                            org.onlab.util.*
                        </DynamicImport-Package>
                    </instructions>
                </configuration>
             </plugin>
        </plugins>
    </build>

here's the order bundle started

bundle205/bundle.info:mvn:org.onosproject/onos-api/3.0.0-SNAPSHOT bundle208/bundle.info:mvn:org.onosproject/onos-app-config/3.0.0-SNAPSHOT bundle228/bundle.info:mvn:org.onosproject/onos-core-net/3.0.0-SNAPSHOT

Upvotes: 0

Views: 42

Answers (0)

Related Questions