ドキュメントはまったく役に立たず、OSGi in Actionには、物事を行う方法についての例がありません。たとえば、バンドルAでバンドルBからのパッケージのインポートを拒否したいなどです。簡単な例、最初から最後まで-見つかりません。
しかし、私の質問に戻ると、System.exit
「独自のセキュリティマネージャーを実装しない」以外に、明らかな理由でへの呼び出しをブロックしたいのですが、Virgoフォーラムからはあまり得られなかったので、ここで質問します。
編集
私はこれを乙女座で起こさせたいので、これが私が試したことです:
public void start(BundleContext context) throws Exception {
System.out.println("===== Starting Bundle PermissionsTest =====");
SecurityManager securityManager = System.getSecurityManager();
if(securityManager == null) throw new IllegalArgumentException("Security Manager is not defined!");
ServiceReference serviceReference =
(ServiceReference) context.getServiceReference(ConditionalPermissionAdmin.class.getName());
if(serviceReference == null) throw new IllegalArgumentException(ConditionalPermissionAdmin.class.getName() + " IS NULL");
else System.out.println("===== Good so far 1 =====");
ConditionalPermissionAdmin conditionalPermissionAdmin =
(ConditionalPermissionAdmin)context.getService(serviceReference);
if(conditionalPermissionAdmin == null) throw new IllegalArgumentException("ConditionalPermissionAdmin can not be found");
else System.out.println("===== Good so far 2 =====");
私がVirgoで最初に行ったこと、つまりEquinox Security Managerを有効にすること(これはVirgoが使用するものであるため)。OSGiの仕様によると、各コンテナーは、OSGi固有の一連のアクションで拡張された独自のSecurityManagerを実装する必要があります。
Virgoの場合、これはEquinoxSecurityManagerです。有効にするのは非常に簡単です。bin/dmk.shに2行追加するだけで、簡単に使用できます。
さて、ConditionalPermissionAdminがあります-いいですね!これで、たとえば、バンドルのBundlePermissionなどのセキュリティチェックを追加できます。もちろんですが、これは、開始/停止/エクスポートなどのバンドル固有のアクションで発生します。ライフサイクルアクション(私の場合はSystem.exit)でそれを行う方法がわからないようです。
ところで、私はosgi-coreのバージョン4.2.0を使用していますが、少なくとも今は4.3.0にアップグレードできません。