2017-02-01 5 views
0

POJOでCDIを使用したいと思います。wildfly - POJOでCDIを使用する

これで、Wildfly 10.1.0.Finalで動作するJaxrs Resteasy Webアプリケーションを作成しました。

はServiceImplクラスを返しシングルトンがあります:

public class ServiceFactory { 

    private static Service service = new ServiceImpl(); 

    public static Service getEnvsApi() 
    { 
     return service; 
    } 
} 

そして私は

public class ServiceImpl extends Service { 

    @Inject 
    private MyData myData; 

    @Override 
    public MyData getData() 
    { 
     return myData; 
    } 
} 

しかしmyDataは常にnullであるServiceImplクラス内での使用のCDIをしたいと思います。

Weldを手動で起動する必要がありますか?

答えて

0

また、ServiceFactoryにインスタンス化する必要があります。インスタンス化すると、CDIコントロールの対象外であるためです。

おそらくServiceFactoryを完全に削除し、必要なときにServiceを注入することができます。

1

webappがWildflyで実行されている場合、Weldを開始する必要はありません。あなたのコードでCDI APIを使って、webapp/WEB-INFにbeans.xmlを追加してください(CDIのBeanディスカバリーモードを見てください)、CDIがアクティブになります。

問題については、CDIを壊す新しい演算子を使用してServiceをインスタンス化するのが問題です。あなたがServiceImpl@ApplicationScopedを使用する必要があり、ServiceFactoryは必要ありません。

だけ@ApplicationScoped

@ApplicationScoped 
public class ServiceImpl implements Service { 

    @Inject 
    private MyData myData; 

    @Override 
    public MyData getData() 
    { 
     return myData; 
    } 

} 

としてServiceImplを宣言し、あなたのService@Injectことができます。

@Inject 
private Service service 
関連する問題