在组件工厂示例中未显示任何错误

在组件工厂示例中未显示任何错误

本文介绍了karaf 在组件工厂示例中未显示任何错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经尝试过这个链接.界面:

i have tried component factory example from this link.interface:

package com.java.examplefactoryservice;

public interface ExampleFactoryService {
    public void start();

    public void stop();
}

工厂供应商:

package com.java.examplecomponentfactoryserviceprovider;

import java.util.Map;

import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;

import com.java.examplefactoryservice.ExampleFactoryService;

@Component(name = "ExampleComponentFactoryServiceProvider", factory = "example.factory.provider")
public class ExampleComponentFactoryServiceProvider implements ExampleFactoryService {

    @Activate
    public void activate(Map<String, Object> properties) {
        System.out.println("Actiavted!!!");
    }

    @Override
    public void start() {
        System.out.println("Started !!!!");
    }

    @Override
    public void stop() {
        System.out.println("Stopped!!!");
    }

}

工厂经理:

package com.java.examplecomponentfatorymanager;

import java.util.Map;

import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.osgi.service.component.ComponentFactory;
import org.osgi.service.component.ComponentInstance;

import com.java.examplefactoryservice.ExampleFactoryService;

@Component(name = "ExampleComponentFactoryManager", enabled = true, immediate = true)
public class ExampleComponentFactoryManager {

    @Reference(target = "(component.factory=example.factory.provider)", bind = "setFactory", unbind = "unsetFactory")
    private ComponentFactory factory;

    private ComponentInstance instance;

    private ExampleFactoryService service;

    @Activate
    public void activate(Map<String, Object> properties) {
        System.out.println("activate in manager !!!!");
        instance = factory.newInstance(null);
        service = (ExampleFactoryService) instance.getInstance();
        System.out.println("service  = " + service.toString());
    }

    public void setFactory(final ComponentFactory factory) {
        this.factory = factory;
        System.out.println("setfactory called");
    }

    public void unsetFactory(ComponentFactory factory) {
        this.factory = null;
        System.out.println("Unset factory called");
    }

}

一切都很好编译并安装在 karaf 2.3.10 中.工厂注册成功.但是什么都没有显示.

Everything compiled fine and installed in karaf 2.3.10. factory is registered successfully. But nothing has been displayed.

卡拉夫输出:

[  71] [Active     ] [            ] [   80] osgi.cmpn (4.3.1.201210102024)
[  79] [Active     ] [            ] [   80] testI (0.0.1.SNAPSHOT)
[  80] [Active     ] [            ] [   80] testImpl (0.0.3.SNAPSHOT)
[ 110] [Active     ] [            ] [   80] Apache Felix Declarative Services (1.6.0)
[ 140] [Active     ] [            ] [   80] ExampleFactoryService (0.0.1.SNAPSHOT)
[ 152] [Active     ] [            ] [   80] ExampleComponentFactoryServiceProvider (0.0.1.SNAPSHOT)
[ 158] [Active     ] [            ] [   80] ExampleComponentFatoryManager (0.0.1.SNAPSHOT)

scr:list 输出

scr:list output

[9   ] [FACTORY         ] ExampleComponentFactoryServiceProvider

scr:详细信息

scr:deactivate    scr:details
karaf@root> scr:details ExampleComponentFactoryServiceProvider
Component Details
  Name                : ExampleComponentFactoryServiceProvider
  State               : FACTORY
  Properties          :
    service.vendor=The Apache Software Foundation
    component.factory=example.factory.provider
    component.name=ExampleComponentFactoryServiceProvider
References

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>ExampleComponentFatoryManager</groupId>
    <artifactId>ExampleComponentFatoryManager</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <build>
        <sourceDirectory>src</sourceDirectory>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <extensions>true</extensions>
                <version>2.3.5</version>
                <configuration>
                    <instructions>
                        <Import-Package>
                            *,
                            javax.servlet*;version="[2.5,4)"
                        </Import-Package>
                    </instructions>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-scr-plugin</artifactId>
                <version>1.14.0</version>
                <executions>
                    <execution>
                        <id>generate-scr-scrdescriptor</id>
                        <goals>
                            <goal>scr</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.apache.felix.scr.annotations</artifactId>
            <version>1.9.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.felix</groupId>
            <artifactId>org.osgi.compendium</artifactId>
            <version>1.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.core</artifactId>
            <version>4.3.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>ExampleFactoryService</groupId>
            <artifactId>ExampleFactoryService</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

最初我尝试在 karaf 命令行中安装包而不是名称,它显示包的绝对路径.一段时间后,我尝试将包放入部署中,它显示了包的确切名称.我不明白 karaf 的行为,为什么它在进行正确的命令行安装时不显示包名称.它根本没有显示任何错误[依赖/编译/有线执行].有人能告诉我捆绑包有什么问题吗?

Initially i tried in karaf command line to install a bundle instead of name it displays the absolute path of the bundle. After sometime i tried by putting the bundle in deploy it shows the exact name of the bundle.I didn't understand the behaviour of karaf why it is not showing the bundle name while doing proper command line installation. And it is not at all showing any errors[dependency/compilation/wiredexecption]. Can anybody please tell me what is wrong in the bundle?

推荐答案

你可以改为导入 aQute.bnd.annotation为 karaf 导入 o​​rg.apache.felix.scr.annotations.

you can go for import aQute.bnd.annotation insteadimport org.apache.felix.scr.annotations for karaf.

参考下面的代码

@Component(name="ExampleComponentFactoryManager",immediate=true,enabled=true)
public class ExampleComponentFactoryManager
{

    private static final Logger LOG = LoggerFactory.getLogger(ExampleComponentFactoryManager.class);

    private ComponentFactory factory;

   // @Reference(target = "(component.factory=example.factory.provider)",unbind = "unsetFactory")
    //private ComponentFactory factory;

    private ComponentInstance instance;

    private ExampleFactoryService service;

    @Activate
    public void activate(Map<String, Object> properties) {
        LOG.info("activation factorymanager");
        instance=factory.newInstance(null);
        service =(ExampleFactoryService)instance.getInstance();
        LOG.info("service instance  from factory "+service.toString());

    }
    @Reference(target = "(component.factory=example.factory.provider)",unbind = "unsetFactory")
    public void setFactory(final ComponentFactory factory) {
        LOG.info("set Factory");
        this.factory = factory;
        System.out.println("setfactory called");
    }

    public void unsetFactory(ComponentFactory factory) {
        this.factory = null;
        System.out.println("Unset factory called");
    }
}

这篇关于karaf 在组件工厂示例中未显示任何错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-18 20:23