= Memcached-Cacheプラグイン
== はじめに
{{{
JAutoregexerでは、さまざまなコンテキスト情報を内部キャッシュに保存することで、正規表現解析実行時のオーバーヘッドを極力
小さくするように設計されております。
Memcached-Cacheプラグインは、コンテキスト情報のうち、正規表現パターン(java.util.regex.Patternインスタンス)をMemcachedにキャッシュすることに
よって、正規表現パターンのコンパイル回数を減らし、処理を高速化することを目的として導入されたプラグインです。
JAutoregexerが所属するJVMが単一のシングル環境は元より、複数のJVMでテキストコンテンツを解析するような分散環境で
特に威力を発揮します。
}}}
== Memcached-Cacheプラグイン使用
{{{
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サーバ設定情報プラグイン
{{{
Memcached-Cacheプラグインでは、サーバ設定情報を「専用のプラグイン」を使用して取得します。
プラグインインタフェースは「org.dundns.nuda.tools.regex.settings.JAutoRegexerSettings」です。
このプラグインインタフェースは、外部からJAutoregexerに対して設定情報をインジェクションする際に
用いられるプラグインです。
JAutoRegexerSettingsプラグインインタフェースの定義は以下の通りです。
}}}
{{{ code java
package org.dyndns.nuda.tools.regex.settings;
import org.dyndns.nuda.plugin.Plugable;
/**
* JAutoRegexer全体の挙動を決定するためのプラグインインタフェースです
* @author koseki
*
*/
public interface JAutoRegexerSettings extends Plugable {
public Object getSetting(String settingKey);
}
}}}
{{{
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プラグインのサーバ設定情報用プラグインを作成する場合は、
上記のキーが指定された場合に値を返すように実装します。
具体的には以下のような実装となります。
}}}
{{{ code java
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が見える位置(クラスパス内)に配置する必要があります
}}}
{{{
上記のように設定することによって、正規表現プロセッサのインスタンス化のタイミングで、自動的に
設定情報がロードされます。
}}}