まだOSGIを学習しようとしています。しかし、誰かが私にこのことが可能か、このサンプルコードで間違っているかもしれないか教えてもらえますか?リモートOSGIサービスコール
サービスミックスで動作する2つのバンドルがあります。
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");
}
}
上記の束は、一つの機能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 check = (Checker) svc;
svc.runCheck();
に取得し、作業を停止し実行するたびに(doesnのエラーメッセージを出すことさえありません)。 私は
svc.toString()
を実行することができ、それがCheckerImpl内の過負荷メソッドからコードを実行すると、受信したオブジェクトが他のサービスであることを知っています。
リモート呼び出しサービス内で.jarバンドルに依存する必要がありますか?
ありがとうございます!