2014-10-17 50 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。