Я пытаюсь внедрить ресурс jndi с помощью CDI для wildfly 8. Для этой цели я хочу использовать пользовательскую jnidfactory, разработанную в https://github.com/juanlmelo/mongo-jndi-plugin/
Проблема связана с моими ограниченными знаниями в wildfly, я не знаю следующее.
1) как активировать/подключить этот jndifactory в wildfly, конечно, я могу создать объект во время запуска и программно присвоить ему имя jndi, но хочу изучить настраиваемую фабричную функцию wildfly
2) рекомендуется установить свойство uri, необходимое для фабрики объектов, я предполагаю, что использования System.getProperty внутри фабрики должно быть достаточно, так как uri БД будет отличаться для каждой установки
как только это будет достигнуто, я уверен, что смогу внедрить его в свои классы с помощью cdi.
Я изо всех сил пытался найти похожий пост, но не смог его найти, если вы считаете, что это дубликат, пожалуйста, укажите мне правильный.
Спасибо,
Ответ 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"