我在使用MongoDB开发javaEE应用程序时遇到问题。我有一个Producer类,它生成MongoClient个对象。
import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.inject.Produces;
import javax.inject.Singleton;
public class MongoDBProducer {
@ApplicationScoped
@Produces
public MongoClient mongoClient() {
return new MongoClient(new MongoClientURI("myurl"));
}
}
然后每当我想@@ Inject我的对象时,在使用注入的bean之后就会抛出java.lang.NullPointerException
。
@ApplicationScoped
public class AnalyzerBean {
// private MongoClient mongoClient = new MongoClient(new MongoClientURI("myurl"));
@Inject
private MongoClient mongoClient;
}
但是如果我创建MongoClient而不是正常工作的CDI bean ...
感谢您的帮助!
编辑
似乎是因为您的MongoDBProducer
没有被识别为CDI Bean。我不确定CDI KumuluzEE具有什么版本,但是如果它是CDI 1.2或更高版本,则不需要bean.xml,默认的bean-discovery-mode为annotated
,这意味着仅具有类级bean定义的类注释(例如@ApplicationScoped
)将被注册为CDI bean。因此,如果在您的应用程序中完全启用了CDI,则将@ApplicationScoped
添加到MongoDBProducer
应该可解决此问题。
此外,如果您想比较一个有效的示例,请参阅this OpenLiberty blog post,它描述了如何使用CDI注入MongoDB元素,并在其结尾处添加了links to a working github repo example。