Mule: Filter-Routing auf JDBC-Outbound


Quelle : http://www.eaipatterns.com

Folgendes Szenario: Auf dem Mule-Bus wird ein Receive-Service installiert. Ein Inbound-Endpoint A lauscht auf Port 11111 und soll das Query-Feld eines HTTP-Request auf eine Hashmap-Schreiben, Inbound Endpoint B lauscht auf Port 22222 und soll einfach ein als Keep-Alive-Listener dienen und vom HTTP-Request lediglich das Query als String in den Bus weiterleiten:

     
          
          
               
                     
               
         

          
                            
               
                    
               
           
      

Outbound-seitig werden Filter-Router angeschlossen, die je nach Content der Message (also entweder java.util.HashMap oder java.lang.String, oder auch java.lang.Exception) den entsprechenden Service innerhalb von Mule aufrufen. Falls das Message-Objekt vom Typ String ist, soll der createAnswerHandler aufgerufen werden. Bei einer HashMap soll ein JDBC-Connector aufgerufen werden und ansonsten der userErrorHandler.

     
          
               
               
          
          
               
               
          
          
               
               
          
     

Die JDBC-Anbindung wird über den mule-eigenen JDBC-Connector realisiert. Dafür wird ganz einfach per Spring-Definition eine Bean für die Datasource angelegt:

     
     
     
     
         
         
         
         
     

Und über den JDBC-Connector können dann auf dieser Datasource Operationen durchgeführt werden. Da man ja meistens Message-relevante Dinge eintragen will, gibt es die Möglichkeit über #[map-payload:messageContent] aus der HashMap in der Message den Value vom Key messageContent herauszubekommen. Diesen schreiben wir einfach plain in die referenzierte MySQL-DB:

     
          
     

Das ganze Beispiel (inklusiv JDBC-Anbindung) kann hier runtergeladen werden.