Использование Arquillian JUnit (версия 1.1.1 соответственно 4.11) для настройки моего CDI (1.0.0.CR7 на Weld 1.1.13.Final), встроенного в JDK 1.7.25....
Получил следующие классы:
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]
Чего я не понимаю, так это того, почему хеш-коды получателя различаются, и событие НЕ распространяется на внедренный bean-компонент Receiver в примере JUnit. Скорее событие отправляется в какой-то ДРУГОЙ компонент-получатель.
Это как-то связано с областью действия (которая должна быть @Dependent по умолчанию)?