Création d'un composant personnalisé Java (option 1)

Si l'assistant de migration n'a pas fait entièrement migrer tous vos projets de service, vous pouvez utiliser le type de composant Java IBM® Integration Designer pour représenter le service Java en tant que composant SCA. Pendant la migration, vous devez écrire du code Java personnalisé pour la conversion entre le style d'interface Java SCA et le style d'interface Java existant.

Pourquoi et quand exécuter cette tâche

Pour créer le composant Java personnalisé, procédez comme suit :
  1. Sous le projet de module, développez Interfaces et sélectionnez l'interface WSDL générée pour cette classe Java dans WebSphere Studio Application Developer Integration.
  2. Déplacez cette interface vers l'éditeur d'assemblage. Une fenêtre vous demande de sélectionner le type de composant à créer. Sélectionnez Composant sans type d'implémentation et cliquez sur OK.
  3. Un composant générique apparaît dans le diagramme d'assemblage. Sélectionnez-le et passez dans la vue Propriétés.
  4. Dans l'onglet Description, vous pouvez remplacer le nom et le nom d'affichage du composant par un nom plus descriptif.
  5. Dans l'onglet Détails, vous voyez que ce composant a une interface (celle pour laquelle vous avez effectué un glisser-déposer vers l'éditeur d'assemblage).
  6. Vérifiez que la classe Java à laquelle vous tentez d'accéder se trouve dans le chemin de classe du projet de service, si elle n'est pas dans le projet de service lui-même.
  7. A l'aide du bouton droit, cliquez sur les dépendances du projet de module et sélectionnez Ouvrir. Dans la section Java, veillez à ce que le projet contenant l'ancienne classe Java soit répertorié. Dans le cas contraire, ajoutez-le en cliquant sur Ajouter….
  8. Dans l'éditeur d'assemblage, cliquez avec le bouton droit de la souris sur le composant que vous venez de créer et sélectionnez Générer l'implémentation… > Java. Sélectionnez ensuite le package dans lequel l'implémentation Java sera générée. Cette opération crée un service Java squelette conforme à l'interface WSDL selon le modèle de programmation SCA, où les types complexes sont représentés par un objet de type commonj.sdo.DataObject et où les types simples sont représentés par leurs équivalents objet Java.
Les exemples de code suivants montrent :
  1. les définitions correspondantes issues de l'interface WSDL 5.1 ;
  2. les méthodes Java de WebSphere Studio Application Developer Integration Edition 5.1 qui correspondent à l'interface WSDL
  3. les méthodes Java d'IBM Integration Designer pour cette même interface 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>

<message name="getStockInfoRequest">
	<part name="symbol" type="xsd:string"/>
</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 affiche les méthodes Java de WebSphere Studio Application Developer Integration Edition 5.1 qui correspondent à l'interface WSDL :
public StockInfo getStockInfo(String symbol)
	{
		return new StockInfo();
	}

	public void setStockPrice(String symbol, float newPrice)
	{
		// set some things
	}
Le code suivant présente les méthodes Java d'IBM Integration Designer pour la même interface 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 :
  1. Déplacez la logique de la classe Java d'origine vers cette 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.
  2. Créez une instance privée de l'ancienne classe Java à l'intérieur de la nouvelle classe Java et écrivez un code pour :
    1. 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.
    2. appeler l'instance privée de l'ancienne classe Java avec les paramètres convertis.
    3. 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 IBM Integration Designer.

Quand vous avez terminé l'une des options ci-dessus, vous devez reconnecter le service Java. Comme il ne doit exister aucune 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. A partir de l'autre module, déplacez 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'exportations SCA afin d'accéder au service migré" pour savoir comment le publier de nouveau.