2012-07-10 28 views
0

我正在使用Spring 3.1如何設置許多獨特的MDB實例

我配置了HornetQ和MDB來監聽它。

我的目標是向這些MDBS注入一個具有獨特屬性的屬性類。

每個MDB會把它當我嘗試它,我得到異常的自身屬性

那是我的代碼:

MDB:

public class FeedListenerMDB implements MessageListener 
{ 
    private final static Logger log = Logger.getLogger(FeedListenerMDB.class); 

    FeedPropertiesDTO feedPropertiesDTO; 

    ... 



    @Override 
    public void onMessage(Message message) 
    { 
     if (message instanceof TextMessage) 
     { 
      try 
      { 
       String text = ((TextMessage) message).getText(); 
       log.debug("i am marketmaker=" + feedPropertiesDTO.getMarketMakerId() + " and the message I got=" + text); 
      } 
      catch (JMSException ex) 
      { 
       throw new RuntimeException(ex); 
      } 
     } 
     else 
     { 
      throw new IllegalArgumentException("Message must be of type TextMessage"); 
     } 
    } 

}

那FeedPropertiesDTO :

public class FeedPropertiesDTO 
{ 
    private String marketMakerId; 

    public String getMarketMakerId() 
    { 
     return marketMakerId; 
    } 

    public void setMarketMakerId(String marketMakerId) 
    { 
     this.marketMakerId = marketMakerId; 
    } 

} 

現在這是我的應用程序上下文豆類設置:

<bean id="FeedListenerMarketMaker1MDB" class="com.fixgw.mdb.FeedListenerMDB"> 
     <property name="feedPropertiesDTO" ref="feedListenerMarketMaker1Properties" /> 
    </bean> 

    <bean id="feedListenerMarketMaker1Properties" class="com.fixgw.dto.FeedPropertiesDTO"> 
     <property name="marketMakerId" value="1" /> 
    </bean> 


    <bean id="FeedListenerMarketMaker2MDB" class="com.fixgw.mdb.FeedListenerMDB"> 
     <property name="feedPropertiesDTO" ref="feedListenerMarketMaker2Properties" /> 
    </bean> 


    <bean id="feedListenerMarketMaker2Properties" class="com.fixgw.dto.FeedPropertiesDTO" > 
     <property name="marketMakerId" value="2" /> 
    </bean> 

以這種方式,我能夠從applicationContext配置我的MDBS,並在未來觸摸代碼的情況下添加新的MDBS。

但我得到這個錯誤:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [com.fixgw.mdb.FeedListenerMDB] is defined: expected single matching bean but found 2: [FeedListenerMarketMaker1MDB, FeedListenerMarketMaker2MDB] 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:800) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:707) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:551) 
    ... 17 more 

任何想法,我怎麼能做到我需要什麼?

謝謝, 射線。

回答

0

的問題是不是在你這裏顯示的代碼FeedListenerMDB。某處在你的代碼,你有這樣的事情:因爲有兩個可用的候選人

@Autowired 
private FeedListenerMDB feedListenerMDB; 

春無法解決這種依賴性。

使用@Qualifier註釋或更具體的您的要求。

+0

正如我寫的。但謝謝:) – rayman 2012-07-10 14:18:59

+0

@rayman yup:你寫了4秒比我做得更快:-) – 2012-07-10 14:20:02

+0

那麼你仍然可以得到答案:)但如果你能回答我這個問題(http://stackoverflow.com/questions/) 11411980/using-staticapplicationcontext-for-managing-beans-dynamic)如果你有良好的Spring經驗,我會非常感謝:) – rayman 2012-07-10 14:23:27

0

的問題是另一類我試圖注入到它與@AutoWire