Evaluation de WSO2 ESB
Pour faire suite à un précédent article , je suis en train d'évaluer pas mal de solutions d'intégrations applicatives au sens EIP. J'ai testé Apache Camel. Malheureusement ce dernier est un peu trop roots pour mon organisation.
J'ai donc opté pour le gros ESB de la mort qui fournit une interface utilisateur assez évoluée pour ne pas trop faire peur aux gentils collaborateurs de la production .
Voici mon ressenti sur quelques ESB du marché. J'ai testé ces différents produits en appliquant un proxy sur des services web existants.
Apache ServiceMix
Très roots. Un peu trop même. Cet ESB fournit un moteur JBI qui permet de déployer des services. Un gros plus par rapport à Camel est que l'on peut déployer assez facilement des routes CAMEL. En bidouillant un peu mon projet camel ,j'ai réussi à déployer sur servicemix un composant JBI.
Si je résume ma précédente checklist
- Versionning : OK
- Respect des normes OK
- Connexion facile avec un BPM/annuaire UDDI : pas testé
- Supervision facile KO. Ca fonctionne avec une console JMX mais sans plus.
- Simple à utiliser, configurer : No comment
- Une gestion simplissime de la sécurité: idem
- Une licence libre
- Un outil de développement : Emacs :D
Fuse ESB
C'est le pendant "professionnel" de ServiceMix. Le gros moins de ce produit est qu'il n'est pas adapté à une grosse entreprise. Il ne fournit pas en standard des outils de supervision. Il fournit cependant via la souscription un IDE permettant de réaliser les routes et de les déployer sur un serveur et la documentation est très riche.
- Versionning : OK
- Respect des normes OK
- Connexion facile avec un BPM/annuaire UDDI : pas testé
- Supervision facile KO. Ca fonctionne avec une console JMX mais sans plus.
- Simple à utiliser, configurer : Faut connaitre CAMEL
- Une gestion simplissime de la sécurité: via CAMEL
- Une licence libre : APL
- Un outil de développement : Fuse IDE
Talend ESB
ESB basé sur Apache ServiceMix qui fournit dans sa version Community un IDE assez bien foutu et un environnement d’exécution Karaf. La version Entreprise fournit une console d'administration WEB. L'un des gros points positifs de cet ESB est qu'il fournit en standard un référentiel d'objets métier. On peut stocker les schémas XSD les réutiliser et si besoin les transformer. Il a l'air d'être un bon ESB mais pour faire un proxy de service WEB un développement est cependant nécessaire. La documentation est également assez bien fichue ( moins bien que chez fuse).
- Versionning : A voir avec la console
- Respect des normes OK
- Connexion facile avec un BPM/annuaire UDDI : pas testé
- Supervision facile : A priori OK avec la console
- Simple à utiliser, configurer : Oui
- Une gestion simplissime de la sécurité: A voir avec la console
- Une licence libre : APL
- Un outil de développement : TALEND STUDIO
Mule ESB
L'un des ESB open source les plus connus. Idem que pour talend, la version community fournit un runtime et un environnement de développement. La version Entreprise fournit en plus une console WEB et la possibilité de faire de la haute dispo.
Un gros plus de cet ESB est la possibilité de réaliser simplement un proxy de services web grace aux patterns . L'import du WSDL se fait directement dans l'IDE ce qui pose le problème du stockage du code source et de la gestion de version.
Exemple de pattern :
<pattern:web-service-proxy name="weather-forecast-ws-proxy" inboundAddress="http://localhost:8090/token" outboundAddress="http://ws.touret.info/token" />
Si on veut ajouter des étapes ( ex. : logging dans une base de données) il faut utiliser soit les services soit les flows.
Exemple avec un flow
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <mule-configuration xmlns="http://www.mulesoft.com/tooling/messageflow" name="proxyflow"> <flow name="proxyflowFlow1"> <lane entity-id="7836bdf3-f001-463e-a92c-ef238364dac6"> <endpoint message-exchange-pattern="RequestResponse" direction="Inbound" type="http://www.mulesoft.org/schema/mule/https/endpoint" name="HTTP" entity-id="0004ff70-d89a-4dd0-8250-081a14751e90"> <properties> <property value="8081" name="port"/> <property value="localhost" name="host"/> <property value="http://www.mulesoft.org/schema/mule/http/endpoint" name="org.mule.tooling.ui.modules.core.widgets.meta.ModeAttribute"/> <property value="false" name="keep-alive"/> <property value="text/xml" name="contentType"/> <property value="false" name="disableTransportTransformer"/> <property value="" name="password"/> <property value="request-response" name="exchange-pattern"/> <property value="" name="transformer-refs"/> <property value="" name="address"/> <property value="wsproxy" name="path"/> <property value="UTF-8" name="encoding"/> <property value="" name="responseTransformer-refs"/> <property value="" name="user"/> <property value="10000" name="responseTimeout"/> <property value="text/xml" name="mimeType"/> <property value="" name="connector-ref"/> </properties> <description>The HTTPS endpoint allows Mule to send and recieve requests securely using HTTP over SSL protocol.</description> </endpoint> <pattern type="org.mule.tooling.ui.modules.core.pattern.cxf" name="SOAP" entity-id="38e1dacb-74e7-4fe9-bec7-b438c24ee472"> <properties> <property value="jaxws.service" name="cxf.operation"/> <property value="info.touret.ws.TokenWS" name="service.class"/> </properties> <description>Make a web service available via CXF</description> </pattern> <pattern type="org.mule.tooling.ui.modules.core.pattern.echo" name="Echo" entity-id="e4ba8c45-f54d-42b5-acb4-c48acd16e12f"> <properties/> <description>Echoes message payload.</description> </pattern> </lane> </flow> <description></description> </mule-configuration>
- Versionning : A voir avec la console
- Respect des normes OK
- Connexion facile avec un BPM/annuaire UDDI : pas testé
- Supervision facile : A priori OK avec la console
- Simple à utiliser, configurer : BOF
- Une gestion simplissime de la sécurité: idem
- Une licence libre :
- Un outil de développement : MULE IDE
WSO2
Très peu connu en France, à tort ! Cet outil fournit en standard une console d'administration WEB très fournie et permet en quelques clics de déployer un service web en mode proxy, de le sécuriter via WS-Security et/ou HTTPS et de rajouter une gestion d'erreurs sur un "Endpoint".
Juste une petite erreur ( il doit y en avoir d'autres, je vous rassure) peut se glisser au démarrage
java.lang.RuntimeException: Log already in use? at com.atomikos.icatch.standalone.UserTransactionServiceImp.createDefault(UserTransactionSer viceImp.java:246) at com.atomikos.icatch.standalone.UserTransactionServiceImp.init(UserTransactionServiceImp.j ava:306) at com.atomikos.icatch.config.UserTransactionServiceImp.init(UserTransactionServiceImp.java: 413) at com.atomikos.icatch.jta.UserTransactionManager.checkSetup(UserTransactionManager.java:90) at com.atomikos.icatch.jta.UserTransactionManager.init(UserTransactionManager.java:140) at org.wso2.carbon.atomikos.TransactionFactory.initTxManager(TransactionFactory.java:37) at org.wso2.carbon.atomikos.AtomikosLifecycleListener.lifecycleEvent(AtomikosLifecycleListen
Pour corriger ça, il faut supprimer le fichier ..\\repository\\logs\\tm.out.lck
Voici une copie d'écran illustrant la création d'un proxy de service web
- Versionning : A voir avec la console
- Respect des normes OK
- Connexion facile avec un BPM/annuaire UDDI : Oui
- Supervision facile : Oui
- Simple à utiliser, configurer : Oui
- Une gestion simplissime de la sécurité: idem
- Une licence libre : APL
- Un outil de développement : CarbonStudio
UltraESB
Je n'ai pas testé. Si on en croit un test de performance réalisé par l'éditeur sur tous les ESB opensource, c'est le meilleur ( étonnant ...)
Conclusion
J'ai bien évidemment omis de tester les ESB propriétaires tels qu' Oracle ou encore TIBCO. L'article ne porte que sur mon ressenti de quelques ESB libres. Pour le prototype que j'ai a monter, je pense partir sur WSO2. C'est celui qui fournit en standard, sans souscription un environnement professionnel.