package org.jboss.weld.tests.enterprise.lifecycle;
import org.jboss.weld.context.RequestContext;
import org.jboss.weld.manager.BeanManagerImpl;
import org.jboss.weld.test.util.Utils;
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.inject.spi.Bean;
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;
import java.io.IOException;
import static org.jboss.weld.test.util.Utils.getActiveContext;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
@WebServlet("/")
public class RemoteClient extends HttpServlet {
@Inject
BeanManagerImpl beanManager;
@Inject
GrossStadt frankfurt;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String pathInfo = req.getPathInfo();
// return on empty path request
if (pathInfo == null)
return;
try {
RequestContext requestContext = getActiveContext(beanManager, RequestContext.class);
Bean<KleinStadt> stadtBean = Utils.getBean(beanManager, KleinStadt.class);
if (pathInfo.equals("/request1")) {
assertNotNull("Expected a bean for stateful session bean Kassel", stadtBean);
CreationalContext<KleinStadt> creationalContext = beanManager.createCreationalContext(stadtBean);
KleinStadt kassel = requestContext.get(stadtBean, creationalContext);
stadtBean.destroy(kassel, creationalContext);
assertTrue("Expected SFSB bean to be destroyed", frankfurt.isKleinStadtDestroyed());
return;
} else if (pathInfo.equals("/request2")) {
KleinStadt kassel = requestContext.get(stadtBean);
assertNull("SFSB bean should not exist after being destroyed", kassel);
return;
}
} catch (AssertionError e) {
resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage());
}
resp.sendError(HttpServletResponse.SC_NOT_FOUND);
}
}