野生蝇8中的自定义jndi对象工厂用于CDI

时间:2014-08-14 15:18:40

标签: mongodb jndi cdi java-ee-7 wildfly-8

我正在尝试使用CDI为wildfly 8注入jndi资源。 为此,我想使用https://github.com/juanlmelo/mongo-jndi-plugin/

中开发的自定义jnidfactory

问题是由于我对野生蝇的了解有限,我不知道以下情况。

1)如何在wildfly中激活/附加这个jndifactory,当然我可以在启动时创建一个对象并以编程方式为其指定一个jndi名称,但是想要探索wildfly的自定义工厂特性

2)设置对象工厂所需的uri属性的最佳实践,我假设在工厂内部使用System.getProperty就足够了,因为每个安装的DB uri都不同

一旦实现这一点,我相信我可以使用cdi将它注入我的课程。

我已尽力寻找类似的帖子,但找不到任何内容,如果您认为这是重复的,请指出正确的帖子。

谢谢,

1 个答案:

答案 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.xmlstandalone.xml




完成此步骤后,您可以使用@Resource注释将MongoClient注入到类中(例如@Resource(lookup = "java:global/MongoClient"