A Stateful EJB:
package ejb;
import javax.ejb.Init;
import javax.ejb.Remove;
import javax.ejb.Stateful;
@Stateful
public class Contador implements ContadorRemote {
private int cantidad;
@Init
public void initialize(){
cantidad =0;
}
@Override
public void incrementar() {
this.cantidad = cantidad + 1;
}
@Override
public void setCantidad(int cantidad){
this.cantidad=cantidad;
}
@Override
public int getCantidad(){
return this.cantidad;
}
@Override
@Remove
public void remove(){
cantidad=0;
}
}
Its interface:
package ejb;
import javax.ejb.Local;
/**
*
* @author etienotb
*/
@Local
public interface ContadorRemote {
void initialize();
void incrementar();
void setCantidad(int cantidad);
int getCantidad();
void remove();
}
Two Servlets:
package servlet;
import ejb.ContadorRemote;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.naming.InitialContext;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* @author etienotb
*/
@WebServlet(name = "InicializarContadorServlet", urlPatterns = {"/InicializarContadorServlet"})
public class InicializarContadorServlet extends HttpServlet {
//@EJB(lookup = "java:app/WebApplicationHibernate/Contador!ejb.ContadorRemote")
@EJB
ContadorRemote unContador;
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
this.unContador.incrementar();
System.out.println("cantidad inicialiar:" + this.unContador.getCantidad());
}
}
}
and
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package servlet;
import ejb.ContadorRemote;
import java.io.IOException;
import java.io.PrintWriter;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* @author etienotb
*/
@WebServlet(name = "ConsultarContadorServlet", urlPatterns = {"/ConsultarContadorServlet"})
public class ConsultarContadorServlet extends HttpServlet {
//@EJB(lookup = "java:app/WebApplicationHibernate/Contador!ejb.ContadorRemote")
@EJB
ContadorRemote unContador;
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
unContador.incrementar();
System.out.println("cantidad consultar:" + this.unContador.getCantidad());
}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
Supposedly the ejb unContador should share the state for the entire secion, but when executing it it keeps the state but only for calls to the same servlet. How can I make all servlets share the same one Counter?