2016-04-27 171 views
0

在企業應用程序中,我試圖使用netBeans 8.1將MessageDriven bean注入到Web應用程序(到REST服務)。我不明白IDE中的任何警告,但是,在部署時,我收到以下錯誤:注入消息驅動bean

嚴重:異常而加載的應用程序:CDI部署失敗:WELD-001408:類型StatisticsBean不滿意的依賴與預選賽@default 於注射點[BackedAnnotatedField] @注入私人sv.mycompany.rest.RestService.statisticsBean

這裏是豆類我試圖注入之一:

@MessageDriven(mappedName = "dzsobTopik") 
public class StatisticsBean implements MessageListener{ 

private Logger LOGGER = Logger.getLogger(StatisticsBean.class.getSimpleName()); 
private int scheduledJobs = 0; 

@Inject 
private JMSContext jmsContext; 

private static Map<Integer, Boolean> results = new HashMap<>(); 

public StatisticsBean() { 
} 



public static Map<Integer, Boolean> getResults() { 
    return results; 
} 

public void setResults(Map<Integer, Boolean> results) { 
    StatisticsBean.results = results; 
} 



@Override 
public void onMessage(Message message) { 
    if(message instanceof JobScheduledMessage){ 
     scheduledJobs++; 
    } 
    else if(message instanceof JobCompletedMessage && scheduledJobs>0) { 
     if(((JobCompletedMessage) message).getTimestamp()<5){ 
      LOGGER.log(Level.INFO, "Job successful!"); 
       results.put(((JobCompletedMessage) message).getJobnumber(), Boolean.TRUE); 
       scheduledJobs--; 
     } 
     else { 
       LOGGER.log(Level.INFO, "Job unsuccessful!"); 
       results.put(((JobCompletedMessage) message).getJobnumber(), Boolean.FALSE); 
       scheduledJobs--; 
      } 
    } 
} 
} 

這裏是我的restService類:

@Path("/start") 
@Produces(MediaType.APPLICATION_JSON) 
public class RestService { 

@Inject 
private JobScheduler jobScheduler; 

@Inject 
private StatisticsBean statisticsBean; 

@Inject 
private FastWorker fastWorker; 

@Inject 
private SlowWorker slowWorker; 

@Inject 
private NormalWorker normalWorker; 

@GET 
@Produces(MediaType.TEXT_PLAIN) 
public String startSimulation() throws InterruptedException{ 
    jobScheduler.queueNewJobs(); 
    return "Started simulation"; 
} 

@GET 
@Path("/jobresult") 
public Map<Integer,Boolean> getJobResults(){ 
    return StatisticsBean.getResults(); 
} 

} 

我在ejb和web模塊中都有beans.xml,在這兩種情況下發現模式都設置爲「all」。可能是什麼問題呢?

+0

可能重複的[EJB3 - 注入MDB到另一個MDB?](http://stackoverflow.com/questions/8246963/ejb3-inject-a-mdb-into-another-mdb) –

回答

3

爲什麼要在第一個位置注入它?這些不是會話bean,不打算用於注入。消息驅動的bean通過特殊的消息傳遞接口由JCA資源適配器(如JMS實現)訪問。 MDB可能會合並,因此保持其中的任何狀態都沒有意義。在Java EE中,使用沒有事先理解的技術總是會導致痛苦,因此,考慮檢查關於這些bean的EJB documentation

在你的特定情況下,如果你真的需要存儲一些東西進行進一步處理,你應該考慮使用singleton會話bean或應用程序範圍的CDI bean來代替。那些能夠保持有意義的狀態,並且可以注入任何託管bean,包括MDB。

+0

謝謝,它轉身我真的不需要注入它們。我是Java EE課程的初學者,這是我們的作業之一。但現在我明白了,謝謝你的回答! –