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プラグインインタフェースの定義は以下の通りです。
  1. package org.dyndns.nuda.tools.regex.settings;
  2. import org.dyndns.nuda.plugin.Plugable;
  3. /**
  4. * JAutoRegexer全体の挙動を決定するためのプラグインインタフェースです
  5. * @author koseki
  6. *
  7. */
  8. public interface JAutoRegexerSettings extends Plugable {
  9. public Object getSetting(String settingKey);
  10. }
	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プラグインのサーバ設定情報用プラグインを作成する場合は、
	上記のキーが指定された場合に値を返すように実装します。
	
	具体的には以下のような実装となります。
  1. package org.dyndns.nuda.tools.regex.plugins.cache;
  2. import org.dyndns.nuda.logger.CommonLogger;
  3. import org.dyndns.nuda.logger.LoggerAdaptor;
  4. import org.dyndns.nuda.tools.regex.settings.JAutoRegexerSettingRepository;
  5. import org.dyndns.nuda.tools.regex.settings.JAutoRegexerSettings;
  6. public class DefaultMemcachedServerSettings implements
  7. JAutoRegexerSettings {
  8. private static LoggerAdaptor logger = CommonLogger.getLoggerAdaptor().getLogger("JAutoRegexerSettingInfo");
  9. @Override
  10. public Object getSetting(String settingKey) {
  11. if(MemcachedRegexCache.SERVER_INFO_PROPERTY_KEY.equals(settingKey)) {
  12. return new String[]{"localhost:11211", "localhost:11212"};
  13. }
  14. return null;
  15. }
  16. @Override
  17. public void init() {
  18. logger.debug("JAutoRegexer設定情報:[{}]をロードしました", this.getClass().getCanonicalName());
  19. JAutoRegexerSettingRepository.addSetting(this);
  20. }
  21. }
	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が見える位置(クラスパス内)に配置する必要があります
	上記のように設定することによって、正規表現プロセッサのインスタンス化のタイミングで、自動的に
	設定情報がロードされます。