저는 정말 당황 스럽습니다. JBoss AS 7.1에서 실행되는 표준, 구식 EJB-CDI-JSF-Hibernate JavaEE 애플리케이션이 있습니다. 게다가 내 구조는 절대 표준 구조입니다. 내 CDI Beans에 액세스하는 JSF 사이트가 있습니다. CDI Beans는 내 엔티티 중 하나에 대한 참조를 보유하고 있으며, EJB는 DAO로 사용됩니다. 내 콩 중 하나는이 CommissionController입니다. 그것은 절대적으로 잘 작동합니다. 한 사용자에 대해 하나의 인스턴스 만 만들어집니다. 응용 프로그램이 실수로 여러 CDI 빈을 만듭니다.
package controller;
import java.io.Serializable;
import java.util.Date;
import javax.annotation.PostConstruct;
import javax.enterprise.context.SessionScoped;
import javax.inject.Inject;
import javax.inject.Named;
import lombok.Data;
import lombok.extern.java.Log;
import entities.Commission;
@SessionScoped
@Data
@Log
@Named
public class CommissionController implements Serializable {
private static final long serialVersionUID = -8452887234021054225L;
@Inject
private UserController userController;
@Inject
private CartController cartController;
private Commission commission;
@PostConstruct
public void init() {
commission = new Commission();
log.info("new CommissionController instance");
}
public void makeNewCommission() {
commission.setCart(cartController.getCart());
commission.setOrderDate(new Date());
commission.setOrderer(userController.getUser());
cartController.clearCart();
log.info(commission.toString());
}
}
지금 내가 다른 콩을 가지고 있지만, 그것은 excact 동일한 구조의 생각 :
package controller;
import java.io.Serializable;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.enterprise.context.SessionScoped;
import javax.inject.Inject;
import javax.inject.Named;
import lombok.Data;
import lombok.extern.java.Log;
import entities.Article;
import entities.Cart;
@SessionScoped
@Data
@Log
@Named
public class CartController implements Serializable {
private static final long serialVersionUID = 649140288918816488L;
@Inject
private UserController userController;
@Inject
private ArticleController articleController;
private Cart cart;
public void addToCart(Article article) {
cart.getArticleList().add(article);
cart.setSum(cart.getSum() + article.getPrice());
}
public void clearCart() {
cart.getArticleList().clear();
cart.setSum(0.0);
}
@PreDestroy
public void destroy() {
log.info("bean destroyed");
}
@PostConstruct
public void init() {
cart = new Cart();
log.info("new CartController instance");
}
public void removeFromCart(Article article) {
cart.getArticleList().remove(article);
cart.setSum(cart.getSum() - article.getPrice());
}
}
내가 나 자신에게 그것을 설명 할 수 있지만, 두 번째 빈은 다시 통해 인스턴스 다시 그리고있다 항상 다른 bean에 대한 참조를 얻으므로 그 안에 아무 것도 저장할 수 없습니다.
제발,이 수수께끼에 빛을 가져 오도록 도와주세요. 추가 정보가 필요하면 알려 주시면 감사하겠습니다. 어쩌면, 나는 이해력이 부족하지만, 현재는 자신을 도울 수 없다.
JSF 2의 SessionScoped 주석을 사용하여 우발적으로이 발생의 가장 큰 이유 중 하나가 여기에 해당하는 경우가 아닙니다. 당신은 틀린 주석을 실수로 잘못 붙이지는 않았지만 그것을 고정 시켰는데 어떤 경우에도 서버에 제대로 재배포되지 않았습니까? – Gimby
아니요, 이것이 실수라면 기쁠 것입니다. 프로젝트는 SVN 프로젝트이며 다른 사용자도 오류가 발생합니다. 아직도 나는 한 번 이상 노력하고, 프로젝트를 청소하고, 서버를 청소하는 등의 작업을했다. – Rumo
JBoss 7.1 커뮤니티를 사용하고 있습니다. 끔찍하게 오래된 것입니다. 그 안에 Weld 버전을 업그레이드하려고 했습니까? 아마도 당신은 이미 고쳐진 버그에 부딪 히고 있습니다. 대안으로 JBoss Wildfly에서 이것을 실행하려고 할 수 있습니다. 차이가 있는지 확인하기 만하면됩니다. – Gimby