CommonTools (V0.4.0) | 2014-02-12 10:10 |
jautoregexer (V0.3.4.0) | 2014-02-12 09:53 |
Plugins ([Plugin] Memcached-Cache (For 0.3.4.0)) | 2014-02-12 10:11 |
JAutoregexerでは、さまざまなコンテキスト情報を内部キャッシュに保存することで、正規表現解析実行時のオーバーヘッドを極力 小さくするように設計されております。 Memcached-Cacheプラグインは、コンテキスト情報のうち、正規表現パターン(java.util.regex.Patternインスタンス)をMemcachedにキャッシュすることに よって、正規表現パターンのコンパイル回数を減らし、処理を高速化することを目的として導入されたプラグインです。 JAutoregexerが所属するJVMが単一のシングル環境は元より、複数のJVMでテキストコンテンツを解析するような分散環境で 特に威力を発揮します。
Memcached-Cacheプラグインは、memcached4jというjava/memcachedクライアントを利用して動作するプラグインです。 利用する際は、memcached4j(とその依存ライブラリ)をクラスパスに含めます。 また、Memcached-Cacheプラグイン本体のjarもクラスパスに含めます。 この状態でorg.dyndns.nuda.tools.regex.RegexProcessorクラスをインスタンス化することで、自動的に Memcachedを用いたキャッシュ機構が動作します。
Memcachedクライアントには、どのサーバに接続するのかを指示する設定情報が必要です。 Memcached-Cacheプラグインでは、デフォルトでローカルマシンの11211番ポートに接続を試みますが、 そのポートでMemcachedが稼働していない場合は、内部キャッシュ機構を使用するように自動的に 切り替わります。 このセクションでは、Memcachedサーバ接続情報をどのようにMemcached-Cacheプラグインに伝えるのかを 解説します。
Memcached-Cacheプラグインでは、サーバ設定情報を「専用のプラグイン」を使用して取得します。 プラグインインタフェースは「org.dundns.nuda.tools.regex.settings.JAutoRegexerSettings」です。 このプラグインインタフェースは、外部からJAutoregexerに対して設定情報をインジェクションする際に 用いられるプラグインです。 JAutoRegexerSettingsプラグインインタフェースの定義は以下の通りです。
getSettingメソッドは、引数に指定されたキー情報に関連するなんらかのオブジェクト を返却するメソッドです。 JAutoregexer全体で、上記プラグインインタフェースを実装したプラグインを用いて設定情報のロードを行います。 Memcached-Cacheプラグインも同様で、上記プラグインインタフェースを実装した形でサーバ接続情報を 返すようにすることで、Memcached-Cacheプラグインに「どのサーバに接続するのか」を伝えます。
JAutoRegexerSettingsプラグインインタフェースのgetSettingsメソッドでは、ただ一つの引数 「settingKey」が存在しました。 このsettingKeyによって、返却されるオブジェクトの型/値を変える仕組みです。 settingKeyに対して、返却するオブジェクトが無い場合はnullを返却します。 Memcached-Cacheプラグインから要求されるsettingKeyは以下の通りです
・Memcached-Cacheプラグインによって要求されるsettingKey org.dyndns.nuda.tools.regex.plugins.cache.MemcachedRegexCache.property_key
Memcached-Cacheプラグインのサーバ設定情報用プラグインを作成する場合は、 上記のキーが指定された場合に値を返すように実装します。 具体的には以下のような実装となります。
- package org.dyndns.nuda.tools.regex.plugins.cache;
- import org.dyndns.nuda.logger.CommonLogger;
- import org.dyndns.nuda.logger.LoggerAdaptor;
- import org.dyndns.nuda.tools.regex.settings.JAutoRegexerSettingRepository;
- import org.dyndns.nuda.tools.regex.settings.JAutoRegexerSettings;
- public class DefaultMemcachedServerSettings implements
- JAutoRegexerSettings {
- private static LoggerAdaptor logger = CommonLogger.getLoggerAdaptor().getLogger("JAutoRegexerSettingInfo");
- @Override
- public Object getSetting(String settingKey) {
- if(MemcachedRegexCache.SERVER_INFO_PROPERTY_KEY.equals(settingKey)) {
- return new String[]{"localhost:11211", "localhost:11212"};
- }
- return null;
- }
- @Override
- public void init() {
- logger.debug("JAutoRegexer設定情報:[{}]をロードしました", this.getClass().getCanonicalName());
- JAutoRegexerSettingRepository.addSetting(this);
- }
- }
getSettingメソッドの具体的な返却値は、Stringの配列にします。 また、それぞれの要素は 「'サーバアドレス':'ポート番号'」 のようにします。 上記例では、ローカルマシンの11211/11212ポートで稼働しているMemcachedサーバに接続することを Memcached-Cacheプラグインに指示しています。 例では、固定で値を返していますが、実際はデータベースの値から抽出したり、プロパティファイルやXMLファイルの値 から返却値を生成して返すやり方が一般的でしょう。
上記のようなクラスを作成したら、プラグイン化を行います。 1) META-INF/services/org.dundns.nuda.tools.regex.settings.JAutoRegexerSettings ファイルを作成します 2) 1で作成したファイル内に「 org.dyndns.nuda.tools.regex.plugins.cache.DefaultMemcachedServerSettings」 の記述を追加します。 ※META-INFフォルダは、JVMが見える位置(クラスパス内)に配置する必要があります
上記のように設定することによって、正規表現プロセッサのインスタンス化のタイミングで、自動的に 設定情報がロードされます。