2016-10-28 4 views
1

私のシステムからpdfドキュメントを入手する必要があります。私はこのためにApache Fopを使用しています - そして、このライブラリは2つのファイルを使って、構造とスタイリングを持つpdf - xslファイルとデータを持つXMLを生成しています。だから私はWebリソースからxslファイルを取得していますが、今はデータベースからのデータでxmlを生成する必要があります。私は、このインターフェイス持っ :私は、このソリューションを試してみましたEJBを使用したステートレスファクトリー

public interface PrintableDocument { 
    Object getJaxBOjbect(Long personId); 
} 

オブジェクトを取得するためのステートレス豆の一つだ、私はこのような10個の以上の豆が異なる文書ごとに異なるデータを取得する必要があります。

だから、
@Stateless 
@PrintableDocumentOneQualifier 
public class PrintableDocumentOne implements PrintableDocument { 

    @Inject 
    private SomeRepository repository; 

    public Object getJaxBOjbect(Long personId) { 
    // Getting information from database 
    // formulating Object with data and returning it 
    } 
} 

今、私はこの1つのように工場を作りたい:

@Stateless 
@LocalBean 
public class PrintableDocumentsFactory { 

    @Inject 
    @PrintableDocumentOneQualifier 
    private PrintableDocument printableDocumentOne; 

    @Inject 
    @PrintableDocumentTwoQualifier 
    private PrintableDocument printableDocumentTwo; 

    private Map<String, PrintableDocument> map = new HashMap<>(); 

    @PostConstruct 
    public void init() { 
     map.put("one", printableDocumentOne); 
     map.put("two", printableDocumentTwo); 
    } 

    public PrintableDocument getPrintableDocument(String type) { 
     return map.get(type); 
    } 

} 

そして、私はこのファクトリを使用するサービスBeanの:

@Stateless 
@Local(DocumentService.class) 
public class DocumentServiceBean { 

    @Inject 
    private PrintableDocumentsFactory factory; 

    public byte[] getPdf(InputStream xsl, Long id, String type) { 
     PrintableDocument printableDocument = 
      factory.getPrintableDocument(type); 
     Object jaxBOject = printableDocument.getJaxBObject(id); 
     //Use this object to get pdf and return it to web controller. 
    } 

} 

しかし、今、私は取得していますファクトリからのgetPrintableDocumentのnull問題は、ステートレスBeanが必要だと思うし、getPrintableDocumentメソッドが終了したときにEJBコンテナに戻ってくるということです。だから私の質問は:どうすればこのような状況を管理できますか?

EDIT 1:工場でのinitのコンストラクション注釈がありません。まだ問題があるのを修正しました。

EDIT 2:それはステートレスPrintableDocument豆のひとつずつのインスタンスを保持するか、代わりにプールされたインスタンスを返します。私は私の工場に@Singletonを持っているだろうか?システムが別のものを要求したときには、その要求に答えるために工場で戦略保持者マップを補充する必要があるからです。

+0

'beans.xml'ファイルはありますか?もしあなたがそれを共有することができますか?さらに、どのコンテナに展開するのかを指定できますか? –

+0

@ JohnAment beans.xmlには、インターセプタや代替手段などがないため空です。コンテナ - Wildfly 10.1.0.ファイナル。実際、このソリューションは '@ Inject'アノテーションでさえも機能しています。私は他のいくつかの問題がそれに関連していたのだろうかと思います。 –

答えて

1

@Injectの代わりに@EJBを使用して、DocumentServiceBeanPrintableDocumentsFactoryを注入することができます。

+0

CDIの代わりにarquillianという単体テストがあるので、特に '@ Inject'を使いたいと思っています。とにかくお試しいただきありがとうございます。 –

0

@PostConstruct注釈をPrintableDocumentsFactory.init()メソッドに追加してください。現在、initメソッドは呼び出されないため、マップに登録されることはありません。

+0

実際に私は上場の注釈を見逃しました。私はプロジェクトでそれを持っています。申し訳ありませんが、私の悪い。質問を編集します。 –

関連する問題