ContextNotActiveException
hantsy Oct 20, 2011 11:37 AMI have a link in a page(the backbean is conversation scoped stateful session bean)...
<a
href="#{request.contextPath}/forwarding/caseExportPdfServlet?id=#{forwardingCaseEdit.currentForwardingCase.id}">
Export PDF </a>
I want to use a normal link to servelt to generate pdf report.
@WebServlet("/forwarding/caseExportPdfServlet")
public class ExportPdfServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final Logger log = LoggerFactory
.getLogger(ExportPdfServlet.class);
@Inject
@RequestParam
Long id;
@Inject
EntityManager em;
@Inject
private ResourceProvider resourceProvider;
@Inject
@Jasper
ReportCompiler compiler;
@Inject
@PDF
@Jasper
ReportRenderer<Report> pdfRenderer;
/**
* @see HttpServlet#HttpServlet()
*/
public ExportPdfServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
processRequest(request, response);
}
protected void processRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
if (log.isDebugEnabled()) {
log.debug("call processRequest");
log.debug("request param id@" + id);
}
ForwardingCase _case = em.find(ForwardingCase.class, id);
OutputStream _out = response.getOutputStream();
InputStream sourceReport = resourceProvider
.loadResourceStream("/reports/forwarding-case.jrxml");
JRDataSource jasperDataSource = new JRBeanCollectionDataSource(
_case.getForwardingItems());
// source
ReportDefinition report = compiler.compile(sourceReport);
Map<String, Object> params = new HashMap<String, Object>();
params.put("forwardingCase", _case);
Report reportInstance = report.fill(jasperDataSource, params);
// ByteArrayOutputStream os = new ByteArrayOutputStream(_out); //
// OutputStream
// Render output as the desired content
pdfRenderer.render(reportInstance, _out);
_out.flush();
}
}
But when I clicked the link, and got the following exception:
org.jboss.weld.context.ContextNotActiveException: WELD-001303 No active contexts for scope type javax.enterprise.context.ConversationScoped org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:667) org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:77) org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:124) org.jboss.weld.proxies.EntityManager$ManagedPersistenceContext$-886017761$Proxy$_$$_WeldClientProxy.find(EntityManager$ManagedPersistenceContext$-886017761$Proxy$_$$_WeldClientProxy.java) com.telopsys.siorc.forwarding.servlets.ExportPdfServlet.processRequest(ExportPdfServlet.java:86) com.telopsys.siorc.forwarding.servlets.ExportPdfServlet.doGet(ExportPdfServlet.java:72) javax.servlet.http.HttpServlet.service(HttpServlet.java:734) javax.servlet.http.HttpServlet.service(HttpServlet.java:847) org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:67) com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:118) org.jboss.solder.servlet.exception.CatchExceptionFilter.doFilter(CatchExceptionFilter.java:65) org.jboss.solder.servlet.event.ServletEventBridgeFilter.doFilter(ServletEventBridgeFilter.java:72)