lundi, septembre 14, 2009

JBoss ESB : archives, services, messages

Archive .esb
Fichier zip contenant tout ce qu'on retrouverait dans un fichier ear avec en sus
META-INF\jboss-esb.xml
META-INF\deployment.xml
fichier.war (optionnel)
etc...


Fichier jboss-esb.xml

Fichier descriptif de l'application esb. On y retrouve
* des BUS instanciés depuis des providers (HTTP, socket, JMS, ...)
* des services

Services
Un service de JBoss ESB défini
* des listeners gateway
* des listeners ESB-aware
* une sequence d'action

Les messages et listeners

- listeners qui lisent des messages au format ESB (dit listener ESB-Aware)
- listener dit "gateway" qui sont en charge de transformer le message recu de l'extérieur de l'ESB en message de type ESB.

--> Bus GATEWAY (ou EPR End Point Reference) --> LISTENER GATEWAY --> Bus ESB-Aware --> LISTENER ESB-Aware --> Service


Structure d'un message ESB (org.jboss.soa.esb.message)
  • Header: the header information contains information such as the destination EPR, the sender EPR, and where the reply goes--general message-level functional information.
  • Context: additional information that further explains the message; for example, transaction or security data, the identity of the ultimate receiver, or HTTP-cookie-like information.
  • Body: the actual payload of the message.
  • Fault: any error information associated with the message.
  • Attachment: any attachments (additional files) associated with the message.
  • Properties: any message specific properties (for example the jbossesb.message.id property is a unique value for each message.
XSD correspondant :

<xs:complexType name="Envelope">
<
xs:attribute ref="Header" use="required"/>
<
xs:attribute ref="Context" use="required"/>
<
xs:attribute ref="Body" use="required"/>
<
xs:attribute ref="Attachment" use="optional"/>
<
xs:attribute ref="Properties" use="optional"/>
<
xs:attribute ref="Fault" use="optional"/>

Les actions de JBoss ESB

Un service définit une succession d'action.
<actions> <action name="ACTION1" class="fr.com.Action"> </action>

Voici une liste d'actions possible

WebServices
org.jboss.soa.esb.actions.soap.wise.SOAPClient
org.jboss.soa.esb.actions.soap.SOAPClient

Core Action
org.jboss.soa.esb.actions.SystemPrintln

Scripting
org.jboss.soa.esb.actions.scripting.GroovyActionProcessor

Business Process Management (jBPM)
org.jboss.soa.esb.services.jbpm.actions.BpmProcessor

Routing
org.jboss.soa.esb.actions.ContentBasedRouter
org.jboss.soa.esb.actions.StaticRouter
org.jboss.soa.esb.actions.StaticWiretap

Jboss ws + jboss esb : WS embarqué dans un esb ET autodefini en EBWS

VALABLE POUR JBOSS ESB 4.5
Pour faire cohabiter des webservices
* embarqué dans un war (par exemple utilisé dans une action de JBOSS ESB via SOAPClient) lui même embarqué dans le fichier esb
* et ceux générés automatiquement avec EBWS (un webservice endpoint sur l'ESB est défini automatiquement quand on défini les contract sur <actions> d'un service ESB)

Il faut intégrer dans le web.xml en plus des webservices qu'on aura défini ceux qui seront générés automatiquement.


<servlet>
<servlet>
<servlet-name>MonWS</servlet-name>
<servlet-class>fr.com.MonWS</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>MonWS</servlet-name>
<url-pattern>/MonWS</url-pattern>
</servlet-mapping>



<servlet>
<servlet-name>NOM-CATEGORIE_NOM-SERVICE</servlet-name>
<servlet-class>esb.ws.NOM-CATEGORIE.NOM-SERVICE.Implementation</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>NOM-CATEGORIE_NOM-SERVICE</servlet-name>
<url-pattern>/NOM-CATEGORIE/NOM-SERVICE</url-pattern>
</servlet-mapping>

</servlet>
<servlet-mapping><url-pattern></url-pattern>
</servlet-mapping>


Le problème vient du fait que la fonctionnalité EBWS génère son propre war qu'il embarque automatiquement dans le fichier ESB. On se retrouve avec deux war et deux fichiers web.xml. Celui qu'on aura défini masquant celui généré automatiquement.


Pour vérifier la publication de tous les webservices : http://localhost:8080/jbossws/services