Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Пользовательская фабрика объектов jndi в wildfly 8 для CDI

Автор вопроса: suroОтветов: 1

Я пытаюсь внедрить ресурс jndi с помощью CDI для wildfly 8. Для этой цели я хочу использовать пользовательскую jnidfactory, разработанную в https://github.com/juanlmelo/mongo-jndi-plugin/

Проблема связана с моими ограниченными знаниями в wildfly, я не знаю следующее.

1) как активировать/подключить этот jndifactory в wildfly, конечно, я могу создать объект во время запуска и программно присвоить ему имя jndi, но хочу изучить настраиваемую фабричную функцию wildfly

2) рекомендуется установить свойство uri, необходимое для фабрики объектов, я предполагаю, что использования System.getProperty внутри фабрики должно быть достаточно, так как uri БД будет отличаться для каждой установки

как только это будет достигнуто, я уверен, что смогу внедрить его в свои классы с помощью cdi.

Я изо всех сил пытался найти похожий пост, но не смог его найти, если вы считаете, что это дубликат, пожалуйста, укажите мне правильный.

Спасибо,

mongodbcdijndijava-ee-7wildfly-8

Ответы

Ответ 1 · рейтинг 2 · Krzysztof Miksa

Если вы хотите добавить пользовательскую фабрику JNDI в wildfly с помощью https://github.com/juanlmelo/mongo-jndi-plugin/, вам нужно сделать несколько вещей:

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:[email protected]:27017,username:[email protected]:27017"/> </environment> </object-factory> </bindings> <remote-naming/> </subsystem>

к вашему domain.xml или standalone.xml


вуаля
После этих шагов вы можете внедрить MongoClient в свои классы, используя аннотацию @Resource (например, @Resource(lookup = "java:global/MongoClient"

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы