2013-01-25 51 views
0

我有一些類,其使用CDI注入豆在他們的干將底層chosenValue從加載並持續到數據庫的數據源,例如:使用的JasperReports與依靠CDI

class MyBean() { 
    @Inject 
    private TranslationBean translationBean; 

    private String chosenValue; 

    public void setChosenValue(String c) { chosenValue = c;} 
    public String getChosenValue() { 
     return translationBean.getTranslatedValue(chosenValue); 
    } 
} 

現在我想創建一個JasperReport生成的PDF,其中包括DataSource等豆類。我打電話給:

JasperFillManager.fillReport("myFile.jasper", new HashMap<String, Object>(), new JRBeanCollectionDataSource(Arrays.asList(myBean)); 

顯然,來自Weld的錯誤消息最終將是沒有上下文處於活動狀態。

我現在看到兩種可能:

  1. 創建MyBean的包裝類尤其是對JasperReports的在所有需要的領域都充滿了實際數據和不需要CDI的依賴。問題將是:大量的樣板和重複代碼的編碼。
  2. 以某種方式設法圍繞對JasperFillManager的調用打包上下文,以便在當前活動的CDI上下文中運行。

第二個選項可能嗎?除了建議的方法之外,還有其他更好的方法嗎?

回答