MessagePack for Java 0.6.0 の TemplateRegistry について

0
Sadayuki Furuhashi @frsyuki

immutableだとコレありかな: static private TemplateRegistry rootRegistry = new TemplateRegistry(); private TemplateRegistry parent = rootRegistry;

2011-08-20 12:36:33
Sadayuki Furuhashi @frsyuki

デフォルトでregisterされているクラスが、java.* なパッケージのクラス=必ずbootstrap class loaderからロードされるクラスだけである前提。

2011-08-20 12:37:35
Sadayuki Furuhashi @frsyuki

ぁValueが入っているな。マズイ。

2011-08-20 12:39:36
Sadayuki Furuhashi @frsyuki

parent.lookup ではなく parent.cache.get なので、parentが1階層しか巡られない。これは…なんでだろう。見つからなかったときにthrowされてcatchするのが遅いのはあって…

2011-08-20 12:48:29
Sadayuki Furuhashi @frsyuki

instanceof ParameterizedType と MessagePackable.class.isAssignableFrom のチェックが終わったら、lookupRecursiveを呼ぶのが良いのかな。

2011-08-20 12:50:28
Sadayuki Furuhashi @frsyuki

lookupRecursiveは、見つからなかったときにbuildも例外も投げないで、return nullするような。

2011-08-20 12:51:57
Sadayuki Furuhashi @frsyuki

それで parent.cache.get を parent.lookupRecursive に。そうすると superclass/interface lookup のキャッシュもparentに作成されるようになるかな。

2011-08-20 12:53:47
Sadayuki Furuhashi @frsyuki

細かいけども、parent.lookupRecurisveしてTemplateが見つかったときに、そのキャッシュをthis.cacheにも入れるかどうかは微妙なところ。入れても良い気がするけど、入れなくても良い気もする…。

2011-08-20 12:54:48
Sadayuki Furuhashi @frsyuki

そして BootstrapTemplateRegistry extends TemplateRegistry を作るのは案。デフォルトで有効なTemplateの内で、java.* なクラスのTemplateだけが登録されているもの。ヤバイ匂いもする…

2011-08-20 12:57:05
Sadayuki Furuhashi @frsyuki

lookup: ParameterizedTypeチェック→MessagePackable.class.isAssignableFromチェック→lookupRecursive; lookupRecursive: cache.get→parent.lookupRecursive

2011-08-20 13:00:38
Sadayuki Furuhashi @frsyuki

そういえば MessagePackable.class.isAssignableFromって、MessagePackable.classが登録されていれば、interface lookup でヒットするような。

2011-08-20 13:01:26
Sadayuki Furuhashi @frsyuki

lookup: ParameterizedTypeチェック→lookupRecursive; lookupRecursive: cache.get→parent.lookupRecursive→interface lookup→superclass lookup→build か。

2011-08-20 13:03:39
Sadayuki Furuhashi @frsyuki

lookup: ParameterizedTypeチェック→lookupRecursive; lookupRecursive: cache.get→parent.lookupRecursive→chain.select→interface→superclass→例外 でどうでしょ

2011-08-20 13:05:34
Muga Nishizawa @muga_nishizawa

@frsyuki forceBuild はどの位置に入るのですか?

2011-08-20 13:08:01
Sadayuki Furuhashi @frsyuki

@muga_nishizawa 例外の前ですね! forceAndRegister→return buildAndRegister

2011-08-20 13:09:24
Muga Nishizawa @muga_nishizawa

現在、superclass -> exception の間ですが、chain の中を想定してますか?

2011-08-20 13:09:26
Sadayuki Furuhashi @frsyuki

ParameterizedTypeチェック→lookupRecursive; lookupRecursive: cache.get→parent.lookupRecursive→chain.select→interface→superclass→forceBuild→例外

2011-08-20 13:09:56
Muga Nishizawa @muga_nishizawa

@frsyuki ん? parent.lookupRecursive call がそこということは、chain.select よりも parent.chain.select が先にされると思います。それは問題ない?

2011-08-20 13:12:06
Sadayuki Furuhashi @frsyuki

@muga_nishizawa 「例外の中ですね!forceAndRegister→return build…」これ気にしないでください>< 書きたかったのは:if(forceBuild)の中、buildAndRegister→return buildAndRegisterでは?

2011-08-20 13:12:41
Muga Nishizawa @muga_nishizawa

@frsyuki あ、lookupRecursive に渡されるパラメータによるか?

2011-08-20 13:15:27
Sadayuki Furuhashi @frsyuki

parent.lookupRecursiveを先にすると、要するにはrootのchain.selectが実行されることに。ポイントは、キャッシュをどこに入れるかと、build中にlookupもするという点か…

2011-08-20 13:17:25