Как отключить WELD на WildFly
Как полностью отключить WELD на WildFly. Мне это не нужно, потому что я использую другую структуру DI.
Исключение 0: javax.enterprise.inject.UnsatisfiedResolutionException: невозможно разрешить bean-компонент для 'org.springframework.data.mongodb.core.MongoOperations' с квалификаторами [@javax.enterprise.inject.Any(), @javax.enterprise.inject.По умолчанию()]. в org.springframework.data.mongodb.repository.cdi.MongoRepositoryExtension.createRepositoryBean(MongoRepositoryExtension.java:104) в org.springframework.data.mongodb.repository.cdi.MongoRepositoryExtension..NativeMethodAccessorImpl.invoke0(нативный метод) в sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) в sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegavaMetho.rej.rej.rej.fj.java:606) по адресу org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:93) по адресу org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMsshoj.jj.jj.event.ExtensionObserverMethodImpl.sendEvent(ExtensionObserverMethodImpl.java:125) в org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:253) в org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:169)
Я старался
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:weld="http://jboss.org/schema/weld/beans"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd
http://jboss.org/schema/weld/beans http://jboss.org/schema/weld/beans_1_1.xsd
http://jboss.org/schema/weld/beans ">
<weld:scan>
<weld:exclude name="com.google.**"/>
<weld:exclude name="org.springframework.data.mongodb.**"/>
</weld:scan>
Но это не решило мою проблему.
3 ответа
Попробуйте удалить или закомментировать org.jboss.as.weld
расширение в списке расширений в начале $JBOSS_HOME/standalone/configuration/standalone.xml
, Вы также можете удалить <subsystem xmlns="urn:jboss:domain:weld:1.0"/>
от <profile>
, Это должно привести к отключению сварки для всех приложений, развернутых на сервере.
Есть стандартный способ:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
version="1.1" bean-discovery-mode="none">
</beans>
Вариант 1: jboss-all.xml на войне
Это зависит от Weld, но отключает автоматическое сканирование bean-компонентов Weld для всего развертывания (например, файла войны и всех jar-файлов внутри него). Это удобно, когда вы не можете легко добавить beans.xml
в сторонний jar, такой как jboss-seam-resteasy.jar.
Сохранить как WEB-INF/jboss-all.xml
для войн, META-INF/jboss-all.xml
иначе:
<jboss xmlns="urn:jboss:1.0">
<weld xmlns="urn:jboss:weld:1.0" require-bean-descriptor="true"/>
</jboss>
См. Конфигурация для развертывания.
Вариант 2: standalone.xml в WildFly
Другим вариантом, который не требует изменения самого приложения, является настройка подсистемы сварки, чтобы она не обрабатывала случайные банки как библиотеки CDI. Просто отредактируйте конфигурацию для сварки в WildFly's standalone.xml
выглядеть так:
<subsystem xmlns="urn:jboss:domain:weld:2.0" require-bean-descriptor="true"/>