2011-10-07 7 views
6

私はパーシスタンスユニットを持つファサードを持っています。そして私はFacadeが必要で、RoleController Conconstructorが動作する前に初期化された依存関係は、EJB 3.1では可能ですか?クラスコンストラクタを実行する前にEJB 3.1でBeanを挿入する方法はありますか?

Springでは、@ configureableにいくつかのパラメータ(preConstruction = "true")を追加するだけで済みます。

しかし、EJBに、私はいつもにNullPointerを得ることを行うための方法を見つけることができません...

@FacesConverter("rolesConverter") 
@Named("roleController") 
@SessionScoped 
@TransactionManagement(TransactionManagementType.CONTAINER) 
public class RoleController implements Serializable, Converter{ 

    private List<Roles> listOfRoles; 
    private List<Roles> listChoosenRoles; 
    private DualListModel<Roles> listOfDualRoles; 
    @EJB 
    private RoleFacade roleFacade; 

    public RoleController(){ 
     listOfRoles = roleFacade.getListOfRoles(); 
     listChoosenRoles = new ArrayList(); 
     listOfDualRoles = new DualListModel<Roles>(listOfRoles, listChoosenRoles); 
    } 

答えて

11

(EJBの遊び場だけでなく)コンストラクタで任意のロジックを実行するために、一般的に悪い考えです。代わりに@PostConstructを使用してください:

@PostConstruct 
public init(){ 
    listOfRoles = roleFacade.getListOfRoles(); 
    listChoosenRoles = new ArrayList(); 
    listOfDualRoles = new DualListModel<Roles>(listOfRoles, listChoosenRoles); 
} 

この注釈では、コンテナが最初にEJBオブジェクトをインスタンス化します、JVMが(空の)コンストラクタを実行し、反射を介したコンテナが依存関係を注入して、すべての準備ができて通話する場合、すべてのメソッドが指定されていないために、@PostConstructでアノテート。これで、EJBは要求を処理する準備が整いました。

私はいくつかのコンテナ/新しいEJB仕様ではコンストラクタインジェクションが可能だと思いますが、それを使ったことはありません。

+0

まさに私が必要としたもの! –

関連する問題