2013-05-06 81 views
2

我正在使用tomcat在Weld CDI上设置一个应用程序,并尝试在应用程序启动时运行类以启动实体管理器。 我收到以下异常绞车,表明我的班级有多个范围。焊接CDI范围异常

WELD-000046 At most one scope may be specified on [email protected] @Singleton class se.raindance.squid.core.init.InitSquid 

这里是我的InitSquid.Java

@ApplicationScoped 
@Singleton 
@Startup 
public class InitSquid { 

@Inject 
private Logger log; 


@Inject 
EntityManager entityManager; 

/** 
* 
* @param startupEvent is sent when JSF is ready and up and running(After first 
*  request to FacesServlet). 
*/ 
@PostConstruct 
public void init() { 

System.out.println("stutrup!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! InitSquid"); 
// Init Rainlets 
InitRainlets initRainlets = new InitRainlets(entityManager); 
initRainlets.init(); 

initSquidSettings(); 

} 

private void initSquidSettings() { 
List<SquidSettings> settingsList = (List<SquidSettings>) entityManager 
    .createQuery(
     "select squidsettings from SquidSettings squidsettings") 
    .getResultList(); 

if (settingsList.size() == 0) { 
    log.info("No SquidSettings entity exists in system, creating one"); 

    SquidSettings settings = new SquidSettings(); 
    settings.setSubledgerRestResourceURI("http://localhost:8080/subledger-webapp/resteasy/"); 
    entityManager.persist(settings); 
} 
} 

} 

我欢迎任何提示就这个问题

回答

2

你指定bean既单身和applicationscoped。尝试与一个解决。

这个问题应该给出提示上使用哪一个:你告诉我,“@辛格尔顿”是在焊缝中的适用范围stackoverflow.com/questions/4555844/what-is-the-difference-between-applicationscoped-and-singleton-scopes-in-cdi

+0

?我一开始并没有“@singleton”,但是我读到如果我想使用“@startup”,我必须有@Singleton annotaion的单例类 – Yashar 2013-05-06 14:53:09

+0

applicationscoped与'eager'一起使用, – 2013-05-06 14:57:36