2013-12-20 28 views
0

我正在使用jasperreports的应用程序中工作。它使用Primefaces和Mojarra,并部署在Jetty中。当我在本地部署应用程序时,它确实工作正常。但是当我在heroku中部署时,它不起作用。Jasper在Heroku的jsf应用程序

当我把它部署到Heroku上我获得:

HTTP错误500

Problem accessing /pages/client.jsf. Reason: 
STREAM Caused by: 
java.lang.IllegalStateException: STREAM at 
    org.eclipse.jetty.server.Response.getWriter(Response.java:683)  at 
    com.sun.faces.context.ExternalContextImpl.getResponseOutputWriter(ExternalContextImpl.java:723) 
     at 
    com.sun.faces.application.view.FaceletViewHandlingStrategy.createResponseWriter(FaceletViewHandlingStrategy.java:930) 
     at 
    com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:376) 
     at 
    com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131) 
     at 
    com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121) 
     at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) at 
    com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 
     at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594) at 
    org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:598) 
     at 
    org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1367) 
     at 
    org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79) 
     at 
    org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1338) 
     at 
    org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:180) 
     at 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
     at 
    org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1338) 
     at 
    org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:484) 
     at 
    org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119) 
     at 
    org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:524) 
     at 
    org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) 
     at 
    org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1065) 
     at 
    org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:413) 
     at 
    org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:192) 
     at 
    org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:999) 
     at 
    org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) 
     at 
    org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250) 
     at 
    org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149) 
     at 
    org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:111) 
     at org.eclipse.jetty.server.Server.handle(Server.java:350) at 
    org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:454) 
     at 
    org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:900) 
     at 
    org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:954) 
     at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:851) 
     at 
    org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235) 
     at 
    org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:77) 
     at 
    org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:620) 
     at 
    org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:46) 
     at 
    org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:603) 
     at 
    org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:538) 
     at java.lang.Thread.run(Thread.java:744) 

正如你可以看到它使用码头部署。

发送的PDF报告中的代码是这样的:

@ManagedBean(name="reportGeneratorMB") 
@RequestScoped 
public class ReportGeneratorMB { 
    public void generateReport(ActionEvent actionEvent) throws ClassNotFoundException, 
      SQLException, IOException, JRException { 
     Connection connection; 
     FacesContext facesContext = FacesContext.getCurrentInstance(); 
     HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext() 
       .getResponse(); 
     InputStream reportStream = facesContext.getExternalContext().getResourceAsStream(
       "/resources/reports/index.jasper"); 
     ServletOutputStream servletOutputStream = response.getOutputStream(); 
     Class.forName("org.postgresql.Driver"); 
     connection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/sid", "sid", 
       "sid"); 
     facesContext.getExternalContext().setResponseContentType("application/pdf"); 
     response.setContentType("application/pdf"); 
     JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, new HashMap(), 
       connection); 
     connection.close(); 
     servletOutputStream.flush(); 
     servletOutputStream.close(); 
     facesContext.responseComplete(); 
    } 
} 

而在c.xhtml:

... 
<h:form id="reportForm"> 
    <p:commandButton value="Generate Report" id="generate_report" 
      actionListener="#{reportGeneratorMB.generateReport} ajax="false"/> 
</form> 
... 

我已经搜查了我还没有找到一个东西,可以帮助我,因为它在本地工作,所以我不知道我能做些什么。我不确定这些数据是否足够,但如果不是,请告诉我需要提供哪些信息才能获得帮助,我将不胜感激。

由于提前,

胡安摹

+0

粘贴的堆栈跟踪中没有提及'generateReport()'。 –

回答

0

错误...

java.lang.IllegalStateException: STREAM at 
    org.eclipse.jetty.server.Response.getWriter(Response.java:683) at 

...意味着您ServletResponse.getWriter()访问失败,因为别的东西在你的应用程序之前已经访问ServletResponse.getOutputStream() 。这是不允许的每个servlet规范。您可以使用Writer或OutputStream作为响应,但不能同时使用两者。有关IllegalStateException的这两种方法,请参阅javadoc。

+0

感谢您的回答@Joakim,但它在当地工作的意义如何? –

+0

没有关于如何处理每个请求并通过容器路由的详细信息+ jfaces + heroku + spring + primeface noone可以回答后续问题。你选择的技术是理智的,但你的问题没有包含回答这个问题所需的细节。 –

+0

非常感谢您的帮助@Joakim。我刚刚编辑了添加更多信息的问题。但是,我仍然不确定我添加的是否足够。 –