EJB enpoint에 주입 된 @TransactionScoped 빈을 가지고 있습니다. 예를 들어 내가 EJB를 호출 할 때. JAX-RS 엔드 포인트에서 두 개의 빈 인스턴스가 생성 된 것을 볼 수 있습니다. 관심이 없는데 왜이 첫 번째 빈 인스턴스가 만들어 질지 궁금하다. 그것은 payara와 wildfly에서 일어나고 있습니다.두 개의 CDI @TransactionScoped Bean 인스턴스가 생성되었습니다. 왜?
@TransactionScoped
public class TransactionBean implements Serializable {
private String data;
private static AtomicInteger counter = new AtomicInteger();
public TransactionBean() {
this.data = "TransactionBean #" + counter.getAndIncrement() + " created.";
System.out.println("Created " + this.data);
}
public String toString() {
return data;
}
}
내가 만든 출력
- TransactionBean # 0을 참조하십시오.
- 트랜잭션 빈 # 1이 생성되었습니다.
# 1 인스턴스는 실제 트랜잭션에서 사용되는 하나의 인스턴스입니다. 이 첫 번째 인스턴스가 만들어지는 이유는 무엇입니까? 특정 응용 프로그램 서버에서 CDI의 구현 세부 사항입니까, 아니면 의도적으로 발생하고 있습니까? 그것은 ... 단지 호기심
건배, 당신은 증인이 대부분 프록시 객체의 생성 무엇 다니엘
아마도 프록시 생성을 목격하고있을 것입니다. 자세한 내용은 [this] (http://stackoverflow.com/questions/18911646/constructor-of-cdi-managed-bean-is-invoked-twice-while-opening-the-page/18911939#18911939)를 참조하십시오. –
생성자가 아닌'@ PostConstruct' 메소드를 모니터링하는 것이 더 낫습니다. –
감사! 이 링크는 매우 유용합니다. 따라서 본질적으로 이것은 구현 - 프록시 작성 방법에 대한 세부 사항 때문입니다. 또한 @PostConstruct의 힌트가 적합합니다. – 38leinad