我们使用Cassandra(和DataStax驱动程序)来存储我们的实体。因此,我们有一个自定义实体服务,它在从Cassandra检索数据时创建实体类的新实例。
我还需要使用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 :(得分:0)
CassandraEntityService.findCustomer()
中的直接问题是Customer
实例不是CDI bean,因为findCustomer
直接调用构造函数。
使用entities as CDI beans可能会遇到麻烦,但我认为(a)您需要Customer
的生产者方法,而(b)CassandraEntityService
本身需要另一个bean @Inject
是Customer
,而不是直接调用构造函数。
但是,对于更一般的问题(在实体更改时触发事件)的更好解决方案可能是Entity Listener,在这种情况下Customer
可能不会有任何需要是一个CDI bean。