【问题标题】:Remote OSGI Service call远程 OSGI 服务调用
【发布时间】:2017-03-07 10:05:15
【问题描述】:

仍在努力学习 OSGI。但是,有人可以告诉我这是否可行,或者我可能会在此示例代码中出错。

所以我有两个单独的捆绑包在服务组合中运行。

public class Activator implements BundleActivator {

    public void start(BundleContext context) throws Exception {
        context.registerService(Checker.class.getName(), new CheckerImpl(), null);
    }
}

public interface Checker{
    public void checkMe()
}

public class CheckerImpl implements Checker{
    public void checkme(){
        System.out.println("Hello World");
    }
}

上面的包包含一个名为 Checker 的接口,它有一个函数 runCheck() 和一个实现这个接口的类(在这种情况下 runCheck() 只输出 hello world。)

这是“远程”捆绑包。

public class RemoteActivator implements BundleActivator {

 public void start(BundleContext context) throws Exception{
    serviceRef = context.getServiceReference(SVC_REF_CERTCHECK);

    if (serviceRef == null) { 
        logMsg("Servicereference is null");
        throw new NullPointerException();
        }
    else{
        logMsg("Check: " + context.getService(serviceRef).getClass().toString());


        Object svc = context.getService(serviceRef);

        logMsg(svc.toString());

        Checker check = (Checker) svc;

        svc.runCheck();
}

public void logMsg(Object o){
    System.out.println(o);
}
}

public interface Checker{
    public void checkMe()
}

有了这个包,我们有另一个名为 Checker 的接口(它包含与第一个包中的接口相同的代码)但是每当我运行它时,就会进入

Checker check = (Checker) svc;
svc.runCheck();

并停止工作(甚至不给我错误消息)。 我知道它收到的对象是我可以运行的其他服务

svc.toString()

它会从 CheckerImpl 中的重载方法运行代码。

我是否需要在远程调用服务中拥有 .jar 包的依赖项?

谢谢大家!

【问题讨论】:

    标签: java osgi osgi-bundle apache-servicemix


    【解决方案1】:

    所以我的本意不是在远程/客户端包中添加新接口,而是需要将主包的依赖项添加到我的 pom.xml。

    在主服务类中,我需要确保 pom.xml 导出所需的包/类。

    <Export-Package>
        my.pachage.bundle.*;
    </Export-Package>
    

    【讨论】:

      【解决方案2】:

      您有两个Checker 接口:每个捆绑包中都有一个。它们由每个包的类加载器加载,因此就 VM 而言是不同的类。实现服务的包和使用服务的客户端包必须共享相同的服务接口类。这就是为什么一个包需要将包含服务接口类的包导出为 API,而其他包需要导入该包的原因。服务建立在类型共享之上。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-07
        • 1970-01-01
        • 2018-11-09
        • 2010-11-24
        • 1970-01-01
        • 2012-03-20
        • 1970-01-01
        • 2013-01-13
        相关资源
        最近更新 更多