Использование Arquillian JUnit (версия 1.1.1 соответственно 4.11) для установки моего CDI (1.0.0.CR7 на Weld 1.1.13.Final), встроенного в JDK 1.7.25. ...CDI Наблюдение в Arquillian, событие, не размноженное для инжектируемого компонента
Получили следующие классы:
public class Receiver {
private String message;
public void catching(@Observes DummyEvent event) {
System.out.println(String.format("message [%s], hash [%d]", event.getMessage(), hashCode()));
this.message = event.getMessage();
}
public String getMessage() {
return this.message;
}
}
public class Sender {
@Inject @Any
Event<DummyEvent> e;
public void fire(String message) {
System.out.println(String.format("fire message [%s], hash [%d]", message, hashCode()));
DummyEvent de = new DummyEvent;
de.setMessage(message);
e.fire(de);
}
}
@RunWith(Arquillian.class)
public class Example {
@Deployment
public static JavaArchive createDeployment() {
return ShrinkWrap.create(JavaArchive.class).addClasses(Example .class, Receiver.class, Sender.class)
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
}
@Inject
Receiver receiver;
@Inject
Sender sender;
@Test
public void dummy() {
System.out.println(String.format("sender hash [%d]", sender.hashCode()));
sender.fire("Hello from me");
System.out.println(String.format("message [%s], receiver hash: [%d]",
receiver.getMessage(), receiver.hashCode()));
}
}
Что распечатана является следующее:
sender hash [785714873]
firing event [value: Hello from me], hash [785714873]
message [Hello from me], hash [632925108]
message [null], receiver hash: [1085786565]
то, что я не получаю, почему приемник хэш-коды отличаются, и событие НЕ распространяется на инъецированные Приемный компонент в примере JUnit. Скорее событие отправляется в какой-то другой компонент-получатель.
Это связано с областью видимости (которая должна быть по умолчанию @Dependent)?
Пробный сварной шов (с использованием WeldJUnit4Runner) и получил те же результаты (т. Е. Не проблема Arquillian). –
Добавление @ApplicationScoped к приемнику и добавление «notifyObserver = Reception.IF_EXISTS» в аннотацию Observes останавливает распространение события на «OTHER» bean-компонент. Заметил, что при не условном наблюдении (Reception.ALWAYS) для каждого события создается компонент-получатель. Совсем не то, что я ожидал. –
Добавление @Singleton к приемнику дает правильное поведение, но не будет ограничиваться Singleton. Есть идеи? –