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

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

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

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

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

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

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

Спасибо,


person suro    schedule 14.08.2014    source источник


Ответы (1)


Если вы хотите добавить пользовательскую фабрику 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"

person Krzysztof Miksa    schedule 15.08.2014
comment
спасибо за этот ответ, в настоящее время я сделал простой Producer, чтобы он продолжал работать, но я скоро переведу его в драйвер JNDI, и если я правильно понимаю, это на самом деле пример определения модулей и предоставления их как ресурса JNDI на сервере WildFly. - person suro; 18.08.2014
comment
Вы тестировали мое решение? - person Krzysztof Miksa; 28.08.2014