2014-04-16 8 views
5

Sto cercando di refactoring xml esistente di Spring Integration alle nuove annotazioni 4.0.0..Come refript Spring Integration XML al supporto delle annotazioni?

<!-- 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" /> 

Ma come posso associare l'attivatore di servizio al canale di errore come era in 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 
    } 
} 

risposta

7

Bene, dato che sono un autore di queste nuove funzionalità di configurazione di Java e Annotation, posso aiutarti.

Ma dovresti essere pronto che non è così facile da fare. Per sbarazzarsi di xml si potrebbe andare con la nostra nuova roba nuova - Java DSL.

I geass avremo diversi passaggi per farlo funzionare.

gateway.setErrorChannel(MessageChannel); e @ServiceActivator(inputChannel = "errorChannel"). È necessario dichiarare errorChannel come un fagiolo:

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

e utilizzarlo da che il protocollo TCP Gateway:

gateway.setErrorChannel(this.errorChannel()); 

Oppure, se si basano su quello predefinito errorChannel dal quadro, si dovrebbe @Autowired a quel Config.

Passaggio successivo. Non vedo @ComponentScan. Ciò significa che il tuo @ServiceActivator potrebbe non essere visibile per il contesto dell'applicazione.

è necessario fornire più opzioni per TcpInboundGateway in ogni caso: connectionFactory, requestChannel, replyChannel ecc tutto deve essere bean Spring.

Per iniziare è sufficiente. Spero sia chiaro e abbia senso per te.

+0

Grazie che ha aiutato molto. Certamente ho '@ ComponentScan' nel mio codice. Il pezzo mancante era che posso semplicemente iniettare il canale di errore predefinito come tutti gli altri bean, come: '@Qualifier (" errorChannel ") MessageChannel errorChannel'. Ora funziona di nuovo senza configurazione xml. – membersound

Problemi correlati