【问题标题】:Custom jndi object factory in wildfly 8 for CDIWildfly 8 中用于 CDI 的自定义 jndi 对象工厂
【发布时间】:2014-10-08 07:41:13
【问题描述】:

我正在尝试使用 Wildfly 8 的 CDI 注入 jndi 资源。 为此,我想使用 https://github.com/juanlmelo/mongo-jndi-plugin/ 中开发的自定义 jnidfactory

问题是由于我对wildfly的了解有限,我不知道以下内容。

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

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

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

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

谢谢,

【问题讨论】:

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


    【解决方案1】:

    如果您想使用 https://github.com/juanlmelo/mongo-jndi-plugin/ 将自定义 JNDI 工厂添加到 Wildfly,您需要做一些事情:

    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"

    【讨论】:

    • 感谢您的回复,目前我为此制作了一个简单的 Producer 以继续工作,但我会尽快将其移至 JNDI 驱动程序,如果我理解正确,这实际上是定义模块和在 WildFly 服务器中将它们公开为 JNDI 资源
    • 你测试了我的解决方案吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 2014-09-14
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    • 2014-10-10
    相关资源
    最近更新 更多