Прежде всего, я не специалист в этой области, поэтому я спрашиваю ...
У меня есть два модуля Maven, оба предоставляют несколько интерфейсов. Один модуль имеет дело с бизнес-логикой (BL), а другой является шлюзом для внешних систем (GW).
Пока шлюз служит исходящим шлюзом, нет проблем с циклическими зависимостями, как это выглядит так:
BL = зависит => GW
Интерфейсы шлюза вводятся в бизнес-логику @Inject, все работает нормально.
Модуль: BusinessLogic:
public class BusinessLogicBean {
@Inject private GatewayInterface interface;
public void sendStuff(Param myParam) {
interface.doSend(myParam);
}
Модуль: шлюз
public Interface GatewayInterface {
void doSend(Param someParam);
public class GatewayInterfaceBean {
public void doSend(Param someParam) {
//implementation goes here
Как только я получаю входящие вызовы, которые необходимо делегировать бизнес-логике, я не могу указать:
BL = зависит => GW = зависит => BL
, так как Maven будет жаловаться на странные зависимости.
Поэтому я решил иметь выделенный интерфейсный модуль шлюза, поэтому зависимости следующие:
BL = зависит => I_GW <= зависит = GW = зависит => BL
Пока все хорошо, несмотря на то, что @Inject сейчас жалуется на неразрешенные зависимости, тот же код, что и выше, больше не работает.
org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type OrderProcess with qualifiers @Default
в точке внедрения [BackedAnnotatedField] @Inject private de.xyz.abc.externalaccess.control.AccessServiceBean.process
at de.xyz.abc.externalaccess.control.AccessServiceBean.process (AccessServiceBean.java:0)
Вот так выглядят модули:
Модуль: BusinessLogic:
public class BusinessLogicBean {
@Inject private GatewayInterface interface;
Модуль: Interfaces_Gateway
public Interface GatewayInterface {
void doSend(Param someParam);
Модуль: шлюз
public class GatewayInterfaceBean {
public void doSend(Param someParam) {
//implementation goes here
public class ProvisioningServiceTest {
private static SeContainer container;
private static ProvisioningService service;
@Test
public void testPostApplications() {
service.postApplications(null);
}
@BeforeClass
public static void setUp() {
SeContainerInitializer weld = Weld.newInstance();
container = weld.initialize();
service = container.select(ProvisioningService.class).get();
}
@AfterClass
public static void shutDown() {
container.close();
}
}
Удар происходит в @ BeforeClass , какую часть я пропускаю? Пока интерфейс и реализация находятся в одном модуле, все хорошо, но как только я разделю его на два модуля ...
beans.xml (во всех трех модулях в META-INF:
<?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="all">
<interceptors>
<class>de.abc.util.interceptor.CallTracingInterceptor</class>
<class>de.abc.util.interceptor.PerformanceTracingInterceptor</class>
<class>de.abc.util.interceptor.ValidationInterceptor</class>
</interceptors>
</beans>
СВАРКА 3.1.1
Кстати, использование этого подхода с WildFly и аннотацией @EJB вообще не вызывает проблем, но, к сожалению, Wildfly здесь не подходит.
Спасибо за любую подсказку.