MktableServiceClass
id:goldenport:20060919でRelaxer5フレームワークのデモ用テスト・ケースMktableTestについて説明した。そのMktableTestからRelaxer5フレームワークに登録されていたサービスMktableServiceClassは以下のものである。
内容はおまじないと思っていただければよい。将来的にはDSLからRelaxer5で自動生成する部分である。
public class MktableServiceClass extends AbstractRServiceClass { public MktableServiceClass() { super("mktable"); } public MktableServiceClass(String name) { super(name); } @Override protected void _buildSpecification(ServiceSpecification spec) { SArgument arg = spec.addArgument(); arg.setType(_getType(URL.class)); arg = spec.addArgument(); arg.setType(_getType(File.class)); } @Override public IRService accept(IRServiceCall call, IRServiceContext context, RUnitofwork unitofwork) throws RServiceException { return newService(call, context, unitofwork); } @Override protected IRService _newService(IRServiceCall call, IRServiceContext context, RUnitofwork unitofwork) throws RServiceException { return new MktableService(call, this, context, unitofwork); } }
_buildSpecification
_buildSpecificationは、サービスの仕様を構築するメソッドである。サービス仕様は外部から与えることもできるようになる予定であるが、テスト用のサービスなどは内部で構築できた方が便利なので、それを可能にしている。
ここでは、第1引数にjava.net.URL、第2引数にjava.io.Fileの型を持つサービスであることを定義している。
MktableTestでは、String[]型のargsを引数にしてRelaxer5フレームワークのexecuteShellCommandメソッドを呼び出している。つまりフレームワークに対してはString型の値が引数として渡されるのだけれど、これを実際のサービス呼び出し時にはjava.net.URLとjava.io.Fileにフレームワークが自動的に変換してくれる。
container.executeShellCommand(args);
_newService
このクラスの重要な処理は_newServiceメソッドで行っているMktableServiceの生成である。
MktableServiceのようなサービスは、RequestやUnit of workといった実行コンテキストごとにインスタンスを割当るので、このような処理が必要となる。
このMktableServiceがサービス実装の本体である。その詳細は次回。