La technique de migration recommandée est d'utiliser le type de
composant
WebSphere
Integration Developer
Java
qui permet de représenter le service
Java
en tant que composant SCA. Au cours de la migration, vous devez
écrire un code
Java
pour faire la conversion entre le style d'interface
Java
SCA et le style d'interface
Java
existant du composant.
Pour créer le composant
Java
personnalisé :
- Sous le projet de module, développez
Interfaces et sélectionnez l'interface WSDL
créée pour cette classe
Java
dans
WebSphere
Studio Application Developer Integration.
- Faites glisser cette interface dans l'éditeur d'assemblage. Une boîte
de dialogue vous demande de sélectionner le type de composant à
créer. Sélectionnez Composant sans type
d'implémentation et cliquez sur
OK.
- Un composant générique apparaît dans le diagramme de l'assemblage. Sélectionnez-le et passez dans la vue
Propriétés.
- Dans l'onglet Description, vous pouvez
remplacer le nom et le nom d'affichage du composant par un nom plus
descriptif.
- Dans l'onglet Détails, vous verrez que ce
composant a une interface, celle que vous avez fait glisser dans
l'éditeur d'assemblage.
- Vérifiez que la classe
Java
à laquelle vous tentez d'accéder est dans le chemin de classe du
projet de service, si elle n'est pas dans le projet de service
lui-même.
- Avec le bouton droit, cliquez sur le projet de module et sélectionnez
Ouvrir l'éditeur de dépendances. Vérifiez que
le projet contenant l'ancienne classe
Java
apparaît dans la section Java. Dans la
négative, ajoutez-le en cliquant sur le bouton
Ajouter.
- De retour dans l'éditeur d'assemblage, avec le bouton droit, cliquez
sur le composant que vous venez de créer et sélectionnez
.
Sélectionnez ensuite le module dans lequel
l'implémentation
Java
sera générée.
Ceci crée une structure de service
Java
compatible avec l'interface WSDL et le modèle de programmation SCA
dans laquelle les types complexes sont représentés par un objet
commonj.sdo.DataObject et les types simples sont représentés par des
objets
Java
équivalents.
Les exemples de code suivants montrent :
- les définitions correspondantes issues de l'interface WSDL 5.1 ;
- les méthodes
Java
de
WebSphere
Studio Application Developer Integration Edition 5.1 qui
correspondent à WSDL ;
- les méthodes
Java
de
WebSphere
Integration Developer 6.0 pour WSDL.
Le code suivant montre les définitions correspondantes issues de
l'interface WSDL 5.1 :
<types>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
attributeFormDefault="qualified"
elementFormDefault="unqualified"
targetNamespace="http://migr.practice.ibm.com/"
xmlns:xsd1="http://migr.practice.ibm.com/">
<complexType name="StockInfo">
<all>
<element name="index" type="int"/>
<element name="price" type="double"/>
<element name="symbol" nillable="true"
type="string"/>
</all>
</complexType>
</schema>
</types>
<part name="symbol" type="xsd:string"/>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
</message>
<message name="getStockInfoResponse">
<part name="result" type="xsd1:StockInfo"/>
</message>
<operation name="getStockInfo" parameterOrder="symbol">
<input message="tns:getStockInfoRequest"
name="getStockInfoRequest"/>
<output message="tns:getStockInfoResponse"
name="getStockInfoResponse"/>
</operation>
Le code suivant montre les méthodes
Java
de
WebSphere
Studio Application Developer Integration Edition 5.1 qui
correspondent à WSDL :
public StockInfo getStockInfo(String symbol)
{
return new StockInfo();
}
public void setStockPrice(String symbol, float newPrice)
{
// set some things
}
Le code suivant montre les méthodes
Java
de
WebSphere
Integration Developer 6.0 pour WSDL :
public DataObject getStockInfo(String aString) {
//TODO Needs to be implemented.
return null;
}
public void setStockPrice(String symbol, Float newPrice) {
//TODO Needs to be implemented.
}
Vous devez ensuite remplir les lignes de code contenant "//TODO" dans
la classe d'implémentation
Java
générée. Vous avez deux options :
- Transférer la logique de la classe
Java
d'origine vers cette nouvelle classe en l'adaptant aux objets
DataObjects.
- C'est l'option recommandée si vous avez choisi l'approche partant du
haut dans
WebSphere
Studio Application Developer Integration Edition et que vous voulez
que votre composant
Java
puisse gérer les paramètres DataObject. Cette modification est
nécessaire car les classes
Java
générées à partir des définitions WSDL dans
WebSphere
Studio Application Developer Integration Edition ont des dépendances
WSIF qui doivent être éliminées.
- Créez une instance privée de l'ancienne classe
Java
à l'intérieur de la nouvelle classe
Java
et écrivez un code pour :
- convertir tous les paramètres de la classe d'implémentation
Java
générée en paramètres compatibles avec l'ancienne classe
Java
;
- appeler l'instance privée de l'ancienne classe
Java
avec les paramètres convertis ;
- convertir la valeur de retour de l'ancienne classe
Java
dans le type de valeur de retour déclarée par la méthode
d'implémentation
Java
générée.
- Cette option est recommandée pour les scénarios de consommation dans
lesquels les proxy de service WSIF doivent être utilisés par des
nouveaux composants
Java
de type 6.0.
Quand vous avez terminé l'une des options ci-dessus, vous
devez reconnecter le service
Java.
En l'absence de référence, il
vous suffit de
reconnecter l'interface du composant Java :
- Si ce service est appelé par un processus métier situé dans le
même module, vous devez créer une connexion entre la référence de
processus métier appropriée et l'interface de ce composant Java.
- Si ce service est appelé par un processus métier situé dans un
autre module, créez une exportation avec liaison
SCA et à partir de l'autre module, effectuez un
glisser-déposer de cette exportation vers l'éditeur d'assemblage de
ce module pour créer l'importation avec liaison
SCA correspondante. Connectez la référence de processus métier appropriée
à cette importation.
- Si ce service a été publié dans WebSphere Studio
Application Developer Integration Edition pour faire l'objet d'une
exposition externe, voir la section "Création d'exports SCA afin
d'accéder au service migré" pour savoir comment le publier de
nouveau.