【发布时间】:2018-01-19 05:44:48
【问题描述】:
有一个简单的 Mongo DB Producer 连接到 Mongo 数据库
@SuppressWarnings({ "deprecation", "resource" })
@ApplicationScoped
public class MongoDBProducer {
@Resource(name = "mongoUri")
private MongoClientURI mongoClientURI;
private DB database;
@PostConstruct
public void init() throws UnknownHostException {
MongoClient mongoClient = new MongoClient(mongoClientURI);
database = mongoClient.getDB(mongoClientURI.getDatabase());
}
@Produces
public DB createDB() {
return database;
}
}
我的 src/main/resources/META-INF 中的一个资源文件
<resources>
<Resource id="mongoUri" class-name="com.mongodb.MongoClientURI" constructor="uri">
uri mongodb://localhost/ironman
</Resource>
</resources>
还有一个简单的 Junit @RunWith(WeldJUnit4Runner.class)
public class MongoDBProducerTest {
@Inject
DB mongoDb;
@Test
public void runSampleTest() {
assertEquals(mongoDb.collectionExists("jobs"), true);
}
}
得到以下错误: org.jboss.weld.exceptions.WeldException: WELD-000049: 无法调用 public void test.dingo.query.db.util.MongoDBProducer.init() 在 test.dingo.query.db.util 上抛出 java.net.UnknownHostException .MongoDBProducer@a1cdc6d
使用焊接
<dependency>
<groupId>org.jboss.weld.se</groupId>
<artifactId>weld-se</artifactId>
<version>2.2.8.Final</version>
</dependency>
WeldContext 和 WeldJUnit4Runner 来自这里 - http://memorynotfound.com/java-se-unit-testing-cdi-junit-jboss-weld-se/
【问题讨论】:
-
您的资源文件由您部署到的容器处理,如果我不得不猜测的话是 Tomcat。 CDI 不直接处理资源注入。