1

OSGi フレームワーク内で Esper を使用したいのですが、OSGi 内のクラスローディング メカニズムで達成する必要があることをどのように許可するのか、さらには OSGi 内で Esper をどのように使用できるのかさえわかりません。

Dynamic-ImportEsper 5.3 を使用していますが、バンドル マニフェストを調べたところ、 OSGi ヘッダーが使用されていません。Esper の中心にあるのは、POJO で動作する SQL クエリであると私が理解している EPStatements です。

私が理解するのに苦労しているのは、動的インポートを使用せず、将来的に操作するように指示される可能性のある POJO に関する知識がない Esper バンドルがそれらにアクセスする方法です。

たとえば、EPStatement を作成しようとすると、次のようになります。

select * com.example.Pojo

クラス com.example.Pojo が Esper コアへの別のバンドルにある場合、Pojoロードできる唯一の方法は、そのClassLoader を使用することです。これは次の方法で実行できます。

Thread.currentThread().setContextClassLoader(com.example.Pojo.class.getClassLoader);

Pojoしかし、これは Pojo 自体を含むバンドルのクラス空間にロードされるだけではありませんか? 上記の例の EPStatement を作成するときに必要になるように、Esper バンドルがそれにアクセスするにはどうすればよいですか。

4

1 に答える 1

2

タイプを登録するには、「epAdministrator.getConfiguration()」から「addEventType(String eventTypeName, Class eventClass)」を使用できます。このようにして、クラスがどこから来るのかを制御できます。

名前でクラスを検索しようとすると、Esper は常に「Thread.currentThread().getContextClassLoader();」を使用します。コードで「setContextClassLoader」を使用して、独自のクラスローダーを設定できます。そして、コードはおそらくそれを元に戻す必要があります。

Esper jar に付属のマニフェストを変更するだけで、好きなものを含めることができます。

「フレンド」バンドルを使用できます。

于 2016-01-28T12:58:32.433 に答える