私の意図は、サーブレットによって会話スコープの Bean を呼び出すことです。Bean 自体は、そのプロパティticketnumber
を 4 まで増やす必要があります。
これはサーブレットです:
@WebServlet
public class ConversationServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Inject
private GreetingTicket ticket;
@Override
public void init() throws ServletException {
System.out.println("Init");
ticket.beginConversation();
}
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
System.out.println("DoGet");
PrintWriter writer = response.getWriter();
response.setContentType("text/html");
ticket.addTicketNumber();
System.out.println(ticket.getTicketNumber());
writer.println("<h1>" + ticket.getTicketNumber() + "</h1>");
if (ticket.getTicketNumber() == 4) {
System.out.println("END!");
ticket.endConversation();
}
writer.flush();
writer.close();
}
}
クラスGreetingTicket
は会話スコープの CDI-Bean です。
@ConversationScoped
public class GreetingTicket implements Serializable {
@Inject
Conversation conversation;
private static final long serialVersionUID = 1L;
private int ticketNumber;
public GreetingTicket() {
System.out.println("greeting Ticket");
}
public int getTicketNumber() {
return ticketNumber;
}
public void setTicketNumber(int ticketNumber) {
this.ticketNumber = ticketNumber;
}
public void addTicketNumber() {
ticketNumber++;
System.out.println("TicketNumber increased to "+ticketNumber);
}
public void beginConversation() {
if (conversation.isTransient()) {
System.out.println("Conversation Begin!");
conversation.begin();
}
}
public void endConversation() {
if (!(conversation.isTransient())) {
System.out.println("Conversation End!");
conversation.end();
}
}
}
その結果、すべてのリクエストticketnumber
で of がGreetingTicket
常に 1by にカウントされるようになりました - なぜでしょうか?