我正在尝试使用 Wildfly 8 的 CDI 实现注入(inject) jndi 资源。 为此,我想使用 https://github.com/juanlmelo/mongo-jndi-plugin/ 中开发的自定义 jnidfactory
问题是由于我对wildfly的了解有限,我不知道以下内容。
1)如何在wildfly中激活/附加这个jndifactory,当然我可以在启动时创建一个对象并以编程方式为其分配jndi名称,但想探索wildfly的自定义工厂功能
2)设置对象工厂所需的 uri 属性的最佳实践,我假设在工厂内使用 System.getProperty 就足够了,因为每个安装的数据库 uri 都会不同
一旦实现这一点,我就有信心可以使用 cdi 将其注入(inject)到我的类中。
我已尽力寻找类似的帖子,但没有找到,如果您认为这是重复的,请指出正确的帖子。
谢谢
最佳答案
如果您想使用https://github.com/juanlmelo/mongo-jndi-plugin/
向wildfly添加自定义JNDI工厂你需要做几件事:
1) 您需要稍微更改 https://github.com/juanlmelo/mongo-jndi-plugin/blob/master/src/main/java/com/mongodb/jndi/MongoClientJNDIFactory.java
的实现
- 第 38 行更改为:
String mongoURI = (String) environment.get(MONGO_CLIENT_URI);
并注释掉或删除第39-49行
2) 然后运行命令mvn clean package
并创建目录例如:
wildfly-8.1.0.Final/modules/com/mongodb/jndi/main/
复制那里mongo-jndi-plugin-1.0.jar
并在那里创建module.xml
文件内容:
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="com.mongodb.jndi">
<resources>
<resource-root path="mongo-jndi-plugin-1.0.jar"/>
</resources>
<dependencies>
<module name="com.mongodb.driver"/>
<module name="javax.api"/>
</dependencies>
</module>
3) 添加 mongo 驱动
-创建目录:wildfly-8.1.0.Final/modules/com/mongodb/driver/main
-创建文件:module.xml
并放在那里:
<?xml version="1.0" ?>
<module xmlns="urn:jboss:module:1.1" name="com.mongodb.driver">
<resources>
<resource-root path="mongo-java-driver-2.11.0.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
</dependencies>
</module>
-添加到此目录mongo-java-driver-2.11.0.jar
图书馆
4)添加这样的内容
<subsystem xmlns="urn:jboss:domain:naming:2.0">
<bindings>
<object-factory name="java:global/MongoClient" module="com.mongodb.jndi" class="com.mongodb.jndi.MongoClientJNDIFactory">
<environment>
<property name="mongoClientURI" value="mongodb://username:<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="90e0f1e3e3e7ffe2f4d0e9ffe5e2f4fffdf1f9febef3fffd" rel="noreferrer noopener nofollow">[email protected]</a>:27017,username:<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="9dedfceeeeeaf2eff9dde4f2e8eff9f2f0fcf4f3b3fef2f0" rel="noreferrer noopener nofollow">[email protected]</a>:27017"/>
</environment>
</object-factory>
</bindings>
<remote-naming/>
</subsystem>
给您的domain.xml
或standalone.xml
瞧
完成此步骤后,您可以使用 @Resource 注释将 MongoClient 注入(inject)到您的类中(例如 @Resource(lookup = "java:global/MongoClient"
关于mongodb - Wildfly 8 中用于 CDI 的自定义 jndi 对象工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25311699/