我正在尝试使用CDI为wildfly 8注入jndi资源。 为此,我想使用https://github.com/juanlmelo/mongo-jndi-plugin/
中开发的自定义jnidfactory问题是由于我对野生蝇的了解有限,我不知道以下情况。
1)如何在wildfly中激活/附加这个jndifactory,当然我可以在启动时创建一个对象并以编程方式为其指定一个jndi名称,但是想要探索wildfly的自定义工厂特性
2)设置对象工厂所需的uri属性的最佳实践,我假设在工厂内部使用System.getProperty就足够了,因为每个安装的DB uri都不同
一旦实现这一点,我相信我可以使用cdi将它注入我的课程。
我已尽力寻找类似的帖子,但找不到任何内容,如果您认为这是重复的,请指出正确的帖子。
谢谢,
答案 0 :(得分:2)
如果您想使用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:password@yourdomain.com:27017,username:password@yourdomain.com:27017"/>
</environment>
</object-factory>
</bindings>
<remote-naming/>
</subsystem>
到domain.xml
或standalone.xml
的瞧
完成此步骤后,您可以使用@Resource注释将MongoClient注入到类中(例如@Resource(lookup = "java:global/MongoClient"