2016-04-27 25 views
0

エンタープライズアプリケーションでは、netBeans 8.1を使用してMessageDriven BeanをWebアプリケーション(RESTサービス)に注入しようとしています。アプリをロード中に例外:メッセージ駆動型Beanの注入

重度:しかし私は、デプロイ時に、私は次のエラーを取得する、IDE内の任意の警告を取得いけないCDI展開の失敗:WELD-001408: @default修飾子とタイプStatisticsBeanのための不満の依存関係注入点で[BackedAnnotatedField]プライベートsv.mycompany.rest.RestService.statisticsBean @Injectここ

は私が注入しようとしている豆のいずれかです。

@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は、特別なメッセージングインタフェースを介して(JMS実装のような)JCAリソースアダプタによってアクセスされます。 MDBはプールされている可能性があります。 Java EEでは、あらかじめ理解していない技術を使用すると、常に痛みが発生するため、これらのBeanについてはEJB documentationを調べることを検討してください。

具体的には、後で処理するために何かを格納する必要がある場合は、代わりにシングルトンセッションBeanまたはアプリケーションスコープのCDI Beanを使用することを検討する必要があります。それらは意味のある状態を維持することができ、MDBを含む任意のマネージドBeanに注入できます。

+0

ありがとう、それは私は本当にそれらを注入する必要はありません。私はJava EEコースの初心者で、これは私たちの宿題の1つです。しかし、今私は理解して、あなたの答えをありがとう! –

関連する問題