mardi, novembre 29, 2011

Etape 2 du Tutorial : Configuration d’un projet JAX-WS


DiggIt! Enregistrer sur Del.icio.us

 

Il s’agit du second billet d’un tutorial sur l’approche Contract First avec JAX-WS.

Il suit le premier billet : http://jl2tho.blogspot.com/2011/11/tutorial-approche-contract-first-avec.html qui présentait le tutorial et expliquait son approche.

Dans cette étape nous allons définir la configuration du projet et créer le projet Eclipse.

La configuration d’un projet Eclipse pour un service web est relativement simple. il faut :

  1. définir le service web dans le web.xml
  2. ajouter les jars nécessaire à la compilation des annotations comme “externals jars”.

Nous allons créer un projet Eclipse JaxWsContractFirst.

Le nom du service web sera : WebContractHelpdesk et le bean qui l’implémentera sera : fr.j2ltho.webcontracthelpdesk.server.HelpdeskServiceBean .

Configuration

Pour plus de simplicité, je définis précisément mon environnement de travail, cela facilitera votre tâche si vous êtes dans la même configuration

  • Le développement a eu lieu sur un poste Windows 7 sous 64 bits. Cela aura un impact sur les noms des répertoires mais cela est très limité.
  • Le runtime et le jdk Java sont à la version 1.5.0_11.
  • Nous allons utiliser Eclipse : 3.5.2. Nous utilisons la distribution pour le développement JEE qui inclut le projet WTP. Ce projet permet la création d’un projet “Web Dynamic” que nous allons utiliser.

Le serveur d’application utilisé sera JBoss 5.1. Il est installé sous C:\jboss-5.1.0.GA conformément au tutorial suivant : http://jl2tho.blogspot.com/2010/03/installation-de-jboss-51-sur-windows-7.html. Attention ! Je rappelle qu’une installation sous “Program files” ou tous répertoires contenant des espaces peut être source d’ennuis.

A partir du moment ou vous utilisez une version de Java supérieure ou égale à la 1.5 et un serveur d’application implémentant JAX-WS 2.0, ce tutorial devrait également fonctionner : il vous faudra néanmoins adapter à votre environnement certaine partie comme notamment la liste des externals jars.

Des éléments de configuration, c’est le serveur JBoss qui nécessite le plus grand effort d’adaptation pour suivre ce tutorial : j’utilise son utilitaire wsconsume pour générer le client, les Externals Jars nécessaires ont des noms et emplacements spécifiques à chaque serveur d’application et version, pour finir le déploiement et l’URL du WSDL dépendent également du serveur d’application.

Je vous encourage donc à utiliser JBoss 5.1 pour suivre ce tutorial.

 

Création du projet Eclipse

Nous allons créer un projet de type “Dynamic Web Project”. Il s’agit d’un type de projet Eclipse qui permet la création de WAR. Il crée l’organisation du projet permettant de disposer d’un répertoire WEB-INF et il crée un fichier web.xml.

Ceux qui ont suivi mes tutoriaux sous JBoss 4.2 ou 5.1, ont créé des projets Java simples car pour un Service Web très simple, nous n’avons pas besoin de ressources extérieures. Pour des projets plus proches de la réalité, il vous faudra accéder à d’autre ressources, configurer le fonctionnement de l’application… Tout cela nécessite un déploiement plus complexe qui est mieux géré à travers un WAR.

Dans Eclipse, on crée un projet de type “Dynamic Web Project” que l’on nommera JaxWsContractFirst. Ces projets permettent la création d’un WAR.

  1. Dans Eclipse, à partir de la barre de menu : File -> New –> Other.
  2. Dans la dialogue New, choisir le dossier “Web” puis le nœud “Dynamic Web Project”. Appuyez sur le bouton Next.
  3. Pour Project name, tapez : JaxWsContractFirst et laissez les autres options par défaut (Dans mon cas cela veut dire que j’utilise un runtime Tomcat 6.0 et un Java 1.5).
  4. Appuyez sur Finish. Acceptez le choix de la perspective si la dialogue « Open Associated Perspective » s’affiche.

 

Fichier web.xml et définition du service web

Dans le répertoire WebContent –> WEB-INF de votre projet, se trouve le fichier web.xml : il s’agit d’une caractéristique d’un “Dynamic Web project”.

En Java 1.5, le service web est un servlet. Nous allons ajouter la déclaration du servlet qui correspondra à notre service web : WebContractHelpdesk.

Editer ce fichier web.xml.

On ajoute la déclaration de la servlet qui correspondra au service web.

  • servlet-name correspond au serviceName de l’annotation WebService du bean implémentant le service web. C’est ce nom qui sera utilisé pour accéder au WSDL. Dans notre cas, ce sera WebContractHelpdesk.
  • servlet-class correspond au nom complet du bean qui implémente le service web : fr.j2ltho.webcontracthelpdesk.server.HelpdeskServiceBean

On obtient le code suivant :

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>JaxWsContractFirst</display-name>
<servlet>
<servlet-name>WebContractHelpdesk</servlet-name>
<servlet-class>fr.j2ltho.webcontracthelpdesk.server.HelpdeskServiceBean</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>WebContractHelpdesk</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>

<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>

 

Ajout des External Jars

Il s’agit de la partie qui dépend le plus du serveur d’application.

Nous allons ajouté les jars nécessaires à la compilation des annotations JAX-WS et JAXB. Nous avons besoin de ces jars uniquement pour la compilation. A l’exécution, nous utiliserons celles du serveur d’application. Nous ne voulons donc pas que lors de la construction du WAR, les jars soient inclus dans le WAR. Pour cela, il faut les définir comme “external Jars” dans le projet Eclipse.

Il faut importer des jar JBoss : cliquez droit sur le projet dans l’explorateur et choisissez Properties. Dans la dialogue qui s’ouvre choisir « Java Build Path ».

Appuyer sur « Add External Jars.. », et utiliser l’explorateur pour aller dans le répertoire C:\jboss-5.1.0.GA\common\lib et sélectionnez les jar suivant :

  • Jboss-javaee.jar qui définit les annotations @Stateless et @Remote
  • Jbossws-native-jaxws.jar qui définit les annotations @WebService, @SOAPBinding et @SOAPBinding

Validez en appuyant sur Ok et appuyez de nouveau sur « Add External Jars.. », et utiliser l’explorateur pour aller dans le répertoire C:\jboss-5.1.0.GA\lib\endorsed et sélectionnez le jar suivant :

  • jaxb-api.jar qui définit les annotations @XmlElement

Validez en appuyant sur Ok.

 

Je disais, en entrée que cette partie dépend du serveur d’application. Il peut être particulièrement délicat, de trouver les bon jars et leur emplacement.

Par exemple pour WebSphere 6.1, il faut les jars :

  • com.ibm.jaxws.thinclient_6.1.0.jar dans C:\IBM\Websphere\AppServer\runtimes\
  • j2ee.jar dans C:\IBM\Websphere\AppServer\lib\

On voit que le nom, l’emplacement et leur nombre n’ont rien à voir.

Conclusion

Nous avons créer un projet Eclipse JaxWsContractFirst.

Nous avons modifié sa configuration afin que le nom du service web soit : WebContractHelpdesk et le bean qui l’implémentera sera : fr.j2ltho.webcontracthelpdesk.server.HelpdeskServiceBean.

L’étape suivante va consister à créer les objets java nécessaires à la définition du service (dont le bean fr.j2ltho.webcontracthelpdesk.server.HelpdeskServiceBean).

Comme indiqué en première partie, nous nous limiterons aux prototypes de ces classes dans cette étape.

Etapes : 1 | 2 | 3 | 4 | 5Suivant >


DiggIt! Enregistrer sur Del.icio.us

0 commentaires: