2014-10-31 2 views
1

저는 정말 당황 스럽습니다. 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에 대한 참조를 얻으므로 그 안에 아무 것도 저장할 수 없습니다.

제발,이 수수께끼에 빛을 가져 오도록 도와주세요. 추가 정보가 필요하면 알려 주시면 감사하겠습니다. 어쩌면, 나는 이해력이 부족하지만, 현재는 자신을 도울 수 없다.

+0

JSF 2의 SessionScoped 주석을 사용하여 우발적으로이 발생의 가장 큰 이유 중 하나가 여기에 해당하는 경우가 아닙니다. 당신은 틀린 주석을 실수로 잘못 붙이지는 않았지만 그것을 고정 시켰는데 어떤 경우에도 서버에 제대로 재배포되지 않았습니까? – Gimby

+0

아니요, 이것이 실수라면 기쁠 것입니다. 프로젝트는 SVN 프로젝트이며 다른 사용자도 오류가 발생합니다. 아직도 나는 한 번 이상 노력하고, 프로젝트를 청소하고, 서버를 청소하는 등의 작업을했다. – Rumo

+0

JBoss 7.1 커뮤니티를 사용하고 있습니다. 끔찍하게 오래된 것입니다. 그 안에 Weld 버전을 업그레이드하려고 했습니까? 아마도 당신은 이미 고쳐진 버그에 부딪 히고 있습니다. 대안으로 JBoss Wildfly에서 이것을 실행하려고 할 수 있습니다. 차이가 있는지 확인하기 만하면됩니다. – Gimby

답변

1

짐비는 내게이 질문에 대한 답을주었습니다. 실제로 JBoss AS 7.1.0 Community Edition은 구형입니다. WildFly 8.0.0 Final에서는 모든 것이 완벽하게 작동했습니다. 따라서 CDI의 환상적인 가능성을 연구하고 있다면 JBoss AS 7.1.0 최종 커뮤니티 대신 WildFly를 사용해보십시오.

+1

JBoss 7.1에서 Weld를 업그레이드하는 것도 무료입니다.)하지만 Wildfly가 거의 같지만 더 나은 JBoss 7을 사용해야하는 이유는 무엇입니까? – Gimby

관련 문제