2010-09-30 84 views
2

我一直在報告與jasperreports和JPA,所有這些報告只是「目錄」,其中唯一的信息是一個實體或有時是一個實體與它的相關實體。複雜的報告與JPA和JasperReports

現在我必須設計具有非常複雜的信息(分組,總結,字段不是實體的一部分等)的報告,這是我的實體不可能的(是的,我知道我可以修改我的設計,我認爲這對我的應用程序很好)。

我一直在想不同的選擇,如傳遞一個jdbc連接,即使這意味着在我的類中創建方法將此對象傳遞給視圖(它會生成報告)。

另一個是創建另一個以自己的方式(如BI)訪問數據庫的上下文(應用程序),因此該應用程序將與我的原始應用程序分開。

希望有人能評論或給我一個更好的方法來實現這一點。

順便說一下,我的框架是春天。

謝謝。

回答

2

我建議在生成複雜報告時使用JDBC連接選項,如果只是爲了直接編寫SQL所獲得的靈活性。但是,在你的視圖層中有一個JDBC連接侵入看起來不太好,所以如果不瞭解Spring,我會說把實際的報表生成轉移到服務層,讓它將JasperPrint對象(它是可序列化的)返回到視圖層它可以呈現。

這是一個簡單的香草RMI示例,與我的做法非常相似。我想這可以轉換成某種類型的Spring bean。該彈簧想到

public interface ReportService extends Remote { 
    public JasperPrint fillReport(final JasperReport report, final Map reportParameters)throws RemoteException, JRException; 
} 

public class ReportServiceImpl implements ReportService { 

    final Connection connection; 

    public ReportServiceImpl(final Connection connection) { 
    this.connection = connection; 
    } 

    public JasperPrint fillReport(final JasperReport report, final Map reportParameters) throws RemoteException, JRException { 
    return JasperFillManager.fillReport(report, reportParameters, connection); 
    } 
} 

一個修改中,在沒有故意將是有fillReport方法採取的報告名或路徑作爲參數,而不是實際的JasperReport對象和具有服務層負載它(和高速緩存它,因爲加載報告是一個相對昂貴的操作)。

讓我知道如果你想讓我充實這個例子的某些部分,我必須警告你,儘管我是一個桌面/擺動程序員,只有在web前端的基本經驗。

+0

感謝您的意見這是非常重要的,我同意將Connection對象傳遞給視圖層它是一個非常糟糕的主意,這聽起來好多了,在服務層中生成報告。如果你能爲我提供這些例子,我將非常感激。謝謝。 – OJVM 2010-10-01 13:47:45

+0

我忘了寫我的電子郵件,這是在gmail點com ojvm24點 – OJVM 2010-10-01 13:48:26

+0

現在我通過連接到視圖層,但我會嘗試你的解決方案,謝謝。 – OJVM 2010-10-05 16:03:06