CDIステップ5 CDIイベント
実はCDIの事件はかなり簡単です.注釈は1つで十分です.
知識ポイントは2つしかありません.
1@Observes注記
2 Eventインタフェース
正しい方法は観察者クラスを書くことであり,観察者クラスの観察方法パラメータに@Observes注釈を加えればよい.
まずCDI管理のBEANを書きます.
このコードにはイベントオブジェクトが注入されています.ビジネス・メソッドでイベント・オブジェクトのバインド・メソッドが呼び出されます.そしてCDIコンテキストは観察者を探しに行きます.
観察者類を書きます
ここで観察するメソッドパラメータはStringであり,ビジネスメソッドの汎用型はObjectであるが,正常に使用できることに注意する.
サーブレットコードはかなり簡単です
その後実行すると、ブラウザの図は貼られません.glassfishコンソールの印刷結果は以下の通りです.
2016-01-11 T 16:50:27.544+0800|情報:2016-01-11 T 16:50:27.544:Hello,world!
CDI事件は簡単だ.
知識ポイントは2つしかありません.
1@Observes注記
2 Event
正しい方法は観察者クラスを書くことであり,観察者クラスの観察方法パラメータに@Observes注釈を加えればよい.
まずCDI管理のBEANを書きます.
package com.rschy.cdievent;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.event.Event;
import javax.inject.Inject;
@RequestScoped
public class HelloBean {
@Inject
private Event<Object> event;
public String greeting(){
String s = "Hello, world!";
event.fire(s);
return s;
}
}
このコードにはイベントオブジェクトが注入されています.ビジネス・メソッドでイベント・オブジェクトのバインド・メソッドが呼び出されます.そしてCDIコンテキストは観察者を探しに行きます.
観察者類を書きます
package com.rschy.cdievent;
import java.time.LocalDateTime;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.event.Observes;
@RequestScoped
public class HelloHandler {
public void log(@Observes String s) {
System.out.println(LocalDateTime.now() +":"+ s);
}
}
ここで観察するメソッドパラメータはStringであり,ビジネスメソッドの汎用型はObjectであるが,正常に使用できることに注意する.
サーブレットコードはかなり簡単です
package com.rschy.cdievent;
import java.io.IOException;
import javax.inject.Inject;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/hello.html")
public class HelloServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Inject
private HelloBean bean;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().append(bean.greeting());
}
}
その後実行すると、ブラウザの図は貼られません.glassfishコンソールの印刷結果は以下の通りです.
2016-01-11 T 16:50:27.544+0800|情報:2016-01-11 T 16:50:27.544:Hello,world!
CDI事件は簡単だ.