Tapestry Engine Service

Tapestry4になって、Engine Serviceの記述方法ががらっと変わりました。

Tapestry3では、application specificationに記述をしましたが、Tapestry4では、HiveMindに設定をします。
以下の設定では、dataSqueezerや、Engine Service内でVisitオブジェクトを使用したいため、サービスを追加しています。

hivemodule.xml

<contribution configuration-id="tapestry.state.ApplicationObjects"><state-object name="AppVisit" scope="session"><create-instance class="jp.co.taosoftware.tagraw.tape.AppVisit" /></state-object></contribution><contribution configuration-id="tapestry.services.ApplicationServices"><service name="SessionService" object="service:SessionService"/></contribution><service-point id="SessionService" interface="org.apache.tapestry.engine.IEngineService"><invoke-factory><construct class="jp.co.taosoftware.tagraw.service.SessionService"><set-object property="exceptionReporter" value="infrastructure:requestExceptionReporter"/><set-object property="response" value="infrastructure:response"/><set-object property="linkFactory" value="infrastructure:linkFactory"/><set-object property="dataSqueezer" value="infrastructure:dataSqueezer"/><set-service property="appStateMgr" service-id="tapestry.state.ApplicationStateManager"/></construct></invoke-factory></service-point>


SessionService.java

public class  SessionService extends BaseEngine implements IEngineService {public static final String SERVICE_NAME = "SessionService";/** @since 4.0 */private RequestExceptionReporter _exceptionReporter;private LinkFactory _linkFactory;private WebResponse _response;//Injectprivate DataSqueezer squeezer;private ApplicationStateManager appStateMgr;public String getName() {return SERVICE_NAME;}public ILink getLink(boolean aPost, Object parameter) {Map parameters = new HashMap();parameters.put(ServiceConstants.SERVICE, getName());return _linkFactory.constructLink(this, false, parameters, true);}public void service(IRequestCycle aCycle) throws IOException {String outString = "OK";AppVisit visit = (AppVisit)getAppStateMgr().get("AppVisit");OutputStream output = _response.getOutputStream(new ContentType("text/html"));output.write(outString.getBytes());}public DataSqueezer getDataSqueezer() {return this.squeezer;}public void setDataSqueezer(DataSqueezer aSqueezer) {this.squeezer = aSqueezer;}public UserFacade getUserFacade() {return this.userFacade;}public void setUserFacade(UserFacade aUserFacade) {this.userFacade = aUserFacade;}public ApplicationStateManager getAppStateMgr() {return this.appStateMgr;}public void setAppStateMgr(ApplicationStateManager aAppStateMgr) {this.appStateMgr = aAppStateMgr;}public IAuthenticateStrategy getAuthenticateStrategy() {return this.authenticateStrategy;}public void setAuthenticateStrategy(IAuthenticateStrategy aAuthenticateStrategy) {this.authenticateStrategy = aAuthenticateStrategy;}/** @since 4.0 */public void setExceptionReporter(RequestExceptionReporter exceptionReporter){_exceptionReporter = exceptionReporter;}/** @since 4.0 */public void setLinkFactory(LinkFactory linkFactory){_linkFactory = linkFactory;}/** @since 4.0 */public void setResponse(WebResponse response){_response = response;}public RequestExceptionReporter get_exceptionReporter() {return this._exceptionReporter;}}

実際には、getLinkのparameterのセットや、serviceメソッドを上記ソースコードに記述していくことになります。
http://localhost:8080/tagraw/app?service=SessionServiceにアクセスをすると、serviceメソッドが呼び出されます。


コメント

このブログの人気の投稿

島へ移住の話【炊飯】

ドローンプログラミング体験教室を伊豆大島の小学校でしてきました

情報処理安全確保支援士登録証のカード型が届きました。