1 /* 2 * Copyright 2004-2009 the Seasar Foundation and the Others. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 13 * either express or implied. See the License for the specific language 14 * governing permissions and limitations under the License. 15 */ 16 package org.seasar.cubby.plugin; 17 18 import java.util.Set; 19 20 import javax.servlet.ServletContext; 21 22 import org.seasar.cubby.action.ActionResult; 23 import org.seasar.cubby.spi.Provider; 24 25 /** 26 * プラグインを表すインターフェイスです。 27 * <p> 28 * プラグインは所属する Web アプリケーションのサーブレットに対する変更の通知を受け取ることができます。 29 * </p> 30 * 31 * @author baba 32 */ 33 public interface Plugin { 34 35 // プラグインのライフサイクル 36 37 /** 38 * このプラグインを初期化します。 39 * <p> 40 * <code>CubbyFilter</code> がサービスを提供できるようになった時に実行されます。 41 * </p> 42 * 43 * @param servletContext 44 * 呼び出し元が現在実行している {@link ServletContext} への参照 45 * @throws Exception 46 * プラグインの初期化に失敗した場合 47 * @see javax.servlet.Filter#init(javax.servlet.FilterConfig) 48 */ 49 void initialize(ServletContext servletContext) throws Exception; 50 51 /** 52 * このプラグインが提供するサービスプロバイダを取得します。 53 * <p> 54 * このプラグインが指定されたサービスを提供しない場合は <code>null</code> を返します。 55 * </p> 56 * 57 * @param <S> 58 * サービスの型 59 * @param service 60 * サービス 61 * @return サービスプロバイダ 62 */ 63 <S extends Provider> S getProvider(Class<S> service); 64 65 /** 66 * このプラグインが提供するサービスプロバイダのセットを返します。 67 * 68 * @return このプラグインが提供するサービスプロバイダのセット 69 */ 70 Set<Class<? extends Provider>> getSupportedServices(); 71 72 /** 73 * このプラグインを準備します。 74 * <p> 75 * プラグインの準備が完了した時に実行されます。 76 * </p> 77 * 78 * @throws Exception 79 * プラグインの準備に失敗した場合 80 */ 81 void ready() throws Exception; 82 83 /** 84 * このプラグインを破棄します。 85 * <p> 86 * <code>CubbyFilter</code> がサービスの提供を停止するときに実行されます。 87 * </p> 88 * 89 * @see javax.servlet.Filter#destroy() 90 */ 91 void destroy(); 92 93 // サーブレット要求の処理 94 95 /** 96 * 要求に対する処理を実行します。 97 * <p> 98 * このメソッドをオーバーライドすることで、要求に対する処理の実行をインターセプトすることができます。 99 * </p> 100 * <p> 101 * このメソッド内で {@link RequestProcessingInvocation#proceed()} 102 * メソッドを実行することで、別のプラグインの 103 * {@link #invokeRequestProcessing(RequestProcessingInvocation)} 104 * または要求に対する処理が実行されます。 105 * </p> 106 * 107 * @param invocation 108 * 要求に対する処理の実行情報 109 * @throws Exception 110 * 要求に対する処理の実行時に例外が発生した場合 111 */ 112 void invokeRequestProcessing(RequestProcessingInvocation invocation) 113 throws Exception; 114 115 /** 116 * アクションメソッドを実行します。 117 * <p> 118 * このメソッドをオーバーライドすることで、アクションメソッドの実行をインターセプトすることができます。 119 * </p> 120 * <p> 121 * このメソッド内で {@link ActionInvocation#proceed()} メソッドを実行することで、別のプラグインの 122 * {@link #invokeAction(ActionInvocation)} またはアクションメソッドが実行されます。 123 * </p> 124 * 125 * @param invocation 126 * アクションメソッドの実行情報 127 * @return アクションの実行結果 128 * @throws Exception 129 * アクションメソッドの実行時に例外が発生した場合 130 */ 131 ActionResult invokeAction(ActionInvocation invocation) throws Exception; 132 133 /** 134 * アクションの実行結果を実行します。 135 * <p> 136 * このメソッドをオーバーライドすることで、アクションの実行結果の実行をインターセプトすることができます。 137 * </p> 138 * <p> 139 * このメソッド内で {@link ActionResultInvocation#proceed()} メソッドを実行することで、別のプラグインの 140 * {@link #invokeActionResult(ActionResultInvocation)} またはアクションの実行結果が実行されます。 141 * </p> 142 * 143 * @param invocation 144 * アクションの実行結果の実行情報 145 * @throws Exception 146 * アクションの実行結果の実行時に例外が発生した場合 147 */ 148 void invokeActionResult(ActionResultInvocation invocation) throws Exception; 149 150 }