Jasper Report Создает PDF, а затем Glassfish аварийно завершает работу - PullRequest
0 голосов
/ 24 февраля 2011

Я запускаю приложение, разработанное на JSF / Java, и как только я получил JasperReports ExporttoPDFFile, чтобы начать работать и запустить приложение, jrxml компилируется и отображается, а затем экспортируется в файл PDF, который выглядит точно так же, как онЕсли JSF возвращает нужную страницу и загружает ее, но Glassfish 3 перестает работать, и мне нужно запустить или перезапустить ее, прежде чем я смогу снова использовать приложение, все работает нормально, пока JasperReports не скомпилирует и не экспортирует ... любые идеи?

http://pastebin.com/mPwYvWh9 <--- Журнал сервера Glassfish после запуска / сбоя </p>

JSF PAGE

 <ui:define name="content">
         <f:view>
            <h:form styleClass="form_option">

               <h:outputLabel value="Enter a query:"/>
               <h:inputText value="#{controls.sql}" />
               <h:commandButton action="#{controls.make}" value="Query"/>

               <h:commandButton action="#{controls.reportGenerate}" value="Generate Report"/>

            </h:form>
            <br />
           <h:form styleClass="form_option">
         <h:outputLabel value="Choose a Query or Report on the Left"/>

          <h:outputText escape="false" value=""/>


          </h:form>

        </f:view>
     </ui:define>

код

public String reportGenerate()
       throws JRException, ClassNotFoundException, SQLException, InstantiationException, IllegalAccessException{

    String connectionURL = "jdbc:oracle:thin:@server:1521:ora";
    String dbDriver = "oracle.jdbc.driver.OracleDriver";

    Class.forName(dbDriver).newInstance();

    Connection connection = DriverManager.getConnection(connectionURL, "PLANT", "PLANT");

    JasperDesign design = JRXmlLoader.load("C:\\Projects\\WebApplication8\\web\\uploads\\TutorialSub_1.jrxml");

    JasperReport jasperReport = JasperCompileManager.compileReport(design);

    JasperPrint print = JasperFillManager.fillReport(jasperReport, null, connection);

    JasperViewer.viewReport(print);

    JasperExportManager.exportReportToPdfFile(print, "C:\\Projects\\WebApplication8\\web\\uploads\\TutorialSub_1.pdf");

return "queries";
}

1 Ответ

1 голос
/ 25 февраля 2011

Отключить следующую строку:

JasperViewer.viewReport(print);

Например:

//JasperViewer.viewReport(print);

Я считаю, что JasperViewer - это средство предварительного просмотра, отображающее печатный отчет локально Если это выполняется на сервере, то JasperViewer попытается получить доступ к видеодисплею сервера, чтобы показать отчет. Скорее всего, в этот момент сервер выдаст исключение.

Чтобы найти проблему, сделайте следующее:

public String reportGenerateNew() {
  try {
    // Trap and print any errors or exceptions from the existing code.
    reportGenerate();
  }
  catch( Exception e ) {
    e.printStackTrace();
  }
}

Найдите код, который вызывает reportGenerate и заставьте его позвонить reportGenerateNew. Или оберните код в методе reportGenerate с помощью try...catch. Возникающее исключение поможет вам определить источник проблемы.

Кроме того, если вы пытаетесь записать файл PDF в веб-браузер, вам придется вызвать соответствующий метод API JasperReports (он является статическим) с потоком ответов HTTP.

...