2014-10-17 87 views
0

我們使用Cassandra(和DataStax驅動程序)來存儲我們的實體。因此,我們有一個自定義實體服務,它在從Cassandra中檢索數據時創建實體類的新實例。如何將CDI bean注入到自定義實體類中?

我還需要使用CDI將服務注入到我的實體類中。我該怎麼做呢?當我簡單地在@Inject註釋中時,它永遠不會被注入。

public class Customer{ 

    @Inject 
    private Event<DeactivationEvent> events; 

    private String uid; 

    public void setUid(String uid){ 
     this.uid = uid; 
    } 

    public String getUid(){ 
     return this.uid; 
    } 

    public void deactivate(){ 

     events.fire(new DeactivationEvent()); 

    } 

} 


public CassandraEntityService{ 

    public static Customer findCustomer(String uid){ 

     ...whatever lookup logic... 
     Customer customer = new Customer(); 

     customer.setUid(..) 
     customer.set... 

     return customer; 

    } 

} 

作爲參考,我使用的是JBoss/Wildfly 8.1。

回答

0

CassandraEntityService.findCustomer()中的直接問題是Customer實例不是CDI bean,因爲findCustomer直接調用構造函數。

您可能會遇到使用entities as CDI beans麻煩,但我認爲(a)您需要的Customer製片方法,和(b)CassandraEntityService本身需要另一個Bean上@Inject S中Customer,而不是直接調用構造函數。

但是,更普遍的問題(在實體更改時觸發事件)的更好解決方案可能是Entity Listener,在這種情況下,Customer可能不需要成爲CDI bean。