生产者JavaEE抛出nullPointer异常

问题描述 投票:0回答:1

我在使用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 ...

感谢您的帮助!

编辑

https://github.com/gaming321/StackOverFlowProblem

java java-ee cdi
1个回答
0
投票

似乎是因为您的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

© www.soinside.com 2019 - 2024. All rights reserved.