mongodb - Wildfly 8 中用于 CDI 的自定义 jndi 对象工厂

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

我正在尝试使用 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.xmlstandalone.xml




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

关于mongodb - Wildfly 8 中用于 CDI 的自定义 jndi 对象工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25311699/

相关文章:

java - 如何通过os认证连接oracle数据库?

tomcat - CDI/焊接网络应用程序的有用环境

java - 如何在java中使用mongodb驱动程序使用累加器进行聚合查询

mongodb - Node.js + MongoDB this._handle.write(data) 在 net.js 中的窃听

queue - 在 JNDI 查找中找不到 JMS 队列

WildFly 12.0.0.Final JSF 2.3 & f :websocket - Class loader issue

java - CDI:jar 中的接口(interface)无法解析为本地 Wildfly 8.0

node.js - Angular 使用错误的 URL 通过 NodeJS 查询 MongoDB

mysql - 哪种数据库技术适用于大结构化数据?

java - 子错误代码 568 对于 Active Directory 的 Ldap 错误 49 意味着什么