25.2. コンポーネントの準備
GWT で Seam コンポーネントが呼び出されるよう準備するには、 まず呼び出したいメソッドの同期および非同期サービスの両インターフェースを作成しなければなりません。 両方のインターフェースとも GWT インターフェース
com.google.gwt.user.client.rpc.RemoteService
を拡張するはずです。
public interface MyService extends RemoteService { public String askIt(String question); }
非同期インターフェースは宣言するメソッドごとに
AsyncCallback
パラメータが追加されている点以外はまったく同じになるはずです。
public interface MyServiceAsync extends RemoteService { public void askIt(String question, AsyncCallback callback); }
非同期インターフェース (例では
MyServiceAsync
) は GWT で実装されるので、絶対に直接実装しないでください。
次のステップは同期インターフェースを実装する Seam コンポーネントの作成です。
@Name("org.jboss.seam.example.remoting.gwt.client.MyService") public class ServiceImpl implements MyService { @WebRemote public String askIt(String question) { if (!validate(question)) { throw new IllegalStateException("Hey, this shouldn't happen, " + "I checked on the client, but " + "it's always good to double check."); } return "42. Its the real question that you seek now."; } public boolean validate(String q) { ValidationUtility util = new ValidationUtility(); return util.isValid(q); } }
Seam コンポーネント名は GWT クライアントインターフェースの完全修飾名と一致しなければなりません (上記参照)。 一致しないと、クライアントが GWT 呼び出しを行っても Seam Resource Servlet はそれを見つけることができません。 GWT がアクセスできるようにするメソッドには
@WebRemote
アノテーションを付与する必要があります。