2014-04-16 10 views
5

मैं Spring Integration के मौजूदा xml को 4.0.0. एनोटेशन में रीफैक्टर करने का प्रयास कर रहा हूं।स्प्रिंग इंटीग्रेशन एक्सएमएल को एनोटेशन सपोर्ट में रीफैक्टर कैसे करें?

<!-- the service activator is bound to the tcp input gateways error channel --> 
<ip:tcp-inbound-gateway error-channel="errorChannel" /> 
<int:service-activator input-channel="errorChannel" ref="myService" /> 

लेकिन मैं त्रुटि चैनल को सेवा सक्रियक को कैसे जोड़ सकता हूं क्योंकि यह xml में था?

@Configuration 
@EnableIntegration 
public class Config { 

    @Bean 
    public TcpInboundGateway gate() { 
     TcpInboundGateway gateway = new TcpInboundGateway(); 

     //??? how can I bind the service activator class as it was in xml? 
     gateway.setErrorChannel(MessageChannel); 
     return gateway; 
    } 
} 


@Service 
public class MyService { 

    @ServiceActivator(inputChannel = "errorChannel") 
    public String send(String data) { 
     //business logic 
    } 
} 

उत्तर

7

ठीक है, क्योंकि मैं उन नए जावा और एनोटेशन कॉन्फ़िगरेशन सुविधाओं का लेखक हूं, मैं आपकी मदद कर सकता हूं।

लेकिन आपको तैयार होना चाहिए कि ऐसा करना इतना आसान नहीं है। एक्सएमएल से छुटकारा पाने के लिए आप हमारी एक और नई सामग्री के साथ जा सकते हैं - Java DSL

आई गीस हमारे पास काम करने के लिए कई कदम होंगे।

gateway.setErrorChannel(MessageChannel); और @ServiceActivator(inputChannel = "errorChannel")। आप एक सेम के रूप में errorChannel घोषित करना चाहिए:

@Bean 
public MessageChannel errorChannel() { 
    return new DirectChannel(); 
} 

और वह टीसीपी गेटवे से इसका इस्तेमाल करते हैं:

gateway.setErrorChannel(this.errorChannel()); 

या, यदि आप डिफ़ॉल्ट errorChannel फ्रेमवर्क से पर भरोसा करते हैं, तो आप चाहिए @Autowired यह है कि Config करने के लिए।

अगला चरण। मुझे @ComponentScan दिखाई नहीं देता है। इसका मतलब है कि आपके @ServiceActivator एप्लिकेशन संदर्भ के लिए दृश्यमान नहीं हो सकता है।

आप TcpInboundGateway वैसे भी के लिए अधिक विकल्प प्रदान करना चाहिए: connectionFactory, requestChannel, replyChannel आदि सब कुछ वसंत सेम होना चाहिए।

शुरुआत के लिए यह पर्याप्त है। उम्मीद है कि यह स्पष्ट है और आपके लिए बिल्कुल समझ में आता है।

+0

धन्यवाद जिसने बहुत मदद की। बेशक मेरे पास मेरे कोड में '@ ComponentScan' है। गायब टुकड़ा यह था कि मैं बस अन्य सभी बीन्स के रूप में डिफ़ॉल्ट त्रुटि चैनल इंजेक्ट कर सकता हूं, जैसे: '@Qualifier ("errorChannel") MessageChannel errorChannel'। यह अब एक्सएमएल कॉन्फ़िगरेशन के बिना ठीक चलाता है। – membersound

संबंधित मुद्दे