Depuis l'apparition des Software Factories mises à disposition par l'équipe Pattern & Practices et notamment la première version de Web Services Software Factory, nous avions vu apparaître un Guidance Package pour la couche d'accès aux données. Ce Guidance Package a ensuite été extrait de Web Service Software Factory pour donner naissance en octobre dernier à Repository Factory.
Malheureusement, ce dernier n'est proposé que pour Visual Studio 2005 et ne s'intègre pas nativement à Visual Studio 2008 alors que la nouvelle mouture de Web Service Software Factory renommée pour l'occasion en Software Factory : Modeling Edition s'y intègre parfaitement !
Ayant marre de switcher entre mes différentes version de Visual Studio (pas très productif et convivial tout ça...), je me suis attelé à refaire le Guidance Package afin de l'intégrer directement à Visual Studio 2008 et profiter ainsi pleinement de l'ensemble des Software Factories pour un de nos projets en cours de démarrage.
Les modifications apportées à ce Guidance Package sont donc les suivantes :
-
Création d'un Guidance Package pour Visual Studio 2008
-
Modification de la version du Framework pour se baser sur .Net 3.5
-
Signature de l'assembly Microsoft.Practices.Repository.dll afin de pouvoir gérer cette assembly directement dans le GAC comme les Enterprise Library
-
Ajout des fichiers pdb en sortie de projet pour la gestion du mode debug et du monitoring applicatif
Je vous joint donc à ce post un fichier zip à télécharger et comprenant les sources ainsi que le package msi pour Visual Studio 2008.
Bonne génération de code ! 
Voici une annonce qui fait plaisir de bon matin ! 
BizTalk Server 2006 R3 RTM pour le premier semestre 2009
Cette annnonce était fortement attendue suite aux différentes remontées que nous avions faites à Microsoft dans l'attente de la prochaine version qui arrivera avec Oslo...
Cette release intermédiaire va donc permettre (enfin !) :
-
Un alignement de BizTalk Server avec la plateforme applicative 2008 de Microsoft : .Net 3.5 et Visual Studio 2008, SQL Server 2008 et Windows 2008
-
Nouvelle infrastructure de service basée sur l'implémentation UDDI V3 pour la partie registry et repository de services
-
Différentes améliorations au niveau des pattern d'implémentation SOA, du matériel RFID, de l'interopérabilité SWIFT... et des LOB Adapters
Dans l'attente des premiers tests de la version beta...
Voici une ligne de commande bien utile afin de réinitialiser la période d'activiation de Windows 2008 et Vista... 
Le tout de base sur "Software Licence Manager", ouvrez une commande windows prompt et tapez :
- Connaitre le nombre de jour restant : slmgr -dli
- Réinitialiser pour une période de 60 jours : slmgr -rearm
Attention : l'appel à slmgr est en fait un script vbs et il est donc nécessaire d'attendre le retour de la MessageBox pour voir le résultat et non l'affichage de la console.
Enjoy ! 
[EDIT]
Suite à la remarque de Xavier dans les commentaires, je précise que cette manipulation n'est possible que 3 fois d'affilées, soit 180 jours supplémentaires par rapport au nombre de jours initiaux. Attention, cette méthode redonne 60 jours mais ne les cumules pas avec ceux restant avant la manipulation (exemple : si il reste 4 jours, le résultat du rearm sera quand même 60 jours et non 64 jours).
Dans le cadre de machines virtuelles basées sur Windows 2008 32-bit ou 64-bit et hébergées dans Hyper-V, il est possible que vous rencontriez un problème d'installation des composants Integration Services correspondant anciennement aux VM Additions de Virtual Server. Il est donc indispensable de procéder auparavant à l'installation de la KB949219 :
Tant que cette KB n'est pas installée, il est impossible d'avoir les drivers des connexions réseaux (entre autres) ! Donc impossibilité de télécharger cette KB depuis le serveur virtuel mais obligation de créer une image ISO ou de graver un CD pour pouvoir l'exécuter sur la machine virtuelle...
Une fois cette KB installée, il devient donc possible d'installer les composants Integration Services et donc d'avoir les drivers de connexion réseau et l'intégration complète dans l'environnement : capture de la souris et autre...
Enjoy ! 
Voilà un petit moment que nous l'attendions et il est donc désormais disponible : Microsoft Biztalk Server 2006 Management Pack for SC Operations Manager 2007
Il comprend notamment les points d'améliorations suivants :
- Suspended Message Alerts
- Alert Suppression Policy
- BAM Technical Assistance Alerts
- BizTalk Message Boxes and Hosts
- Orchestration Failures
- Service Monitoring
- Application Monitoring
- Monitoring of various aspects of RFID
Ce management pack est surtout attendu pour les nouvelles fonctionnalités type RFID de la version 2006 R2 de BizTalk mais aussi et surtout pour la gestion de la découverte des plateformes BizTalk avec SCOM 2007. En effet, dans le cadre d'architecture mixant sur les mêmes serveurs les services de cluster et la répartition de charge (cas typique de gestion en parallèle des adapteurs MSMQ et Http par exemple...), il était devenu impossible depuis SCOM 2007 de forcer la découverte du noeud passif et cela imposait donc de revenir à MOM 2005 ! Bref, à tester tout ça...
Toujours par le biais du BizTalk User Group , j'en ai profiter pour publier une petite astuce concernant la désactivation de la fonctionnalité de tracking de BizTalk de manière globale.
Vous pouvez visualiser cet article ici.
Bonne lecture à tous.
Lors du déploiement de services WCF (Windows Communication Foundation), il est possible de prévoir un hébergement dans IIS avec un mode compatible ASP.NET. Dans ce cadre, il est important de prendre en considération la configuration par défaut du Framework .Net au niveau HttpRuntime et notamment sur la volumétrie des requêtes Http transmisent au serveur.
En effet, le fait d'être en mode compatibilité ASP.NET induit le fait que le service s'exécutera selon la configuration établie dans la section HttpRuntime du fichier web.config ou machine.config. Ci-dessous un extrait du fichier machine.config par défaut :
<configuration>
<system.web>
<httpRuntime
executionTimeout="110"
maxRequestLength="4096"
requestLengthDiskThreshold="80"
useFullyQualifiedRedirectUrl="false"
minFreeThreads="8"
minLocalRequestFreeThreads="4"
appRequestQueueLimit="5000"
enableKernelOutputCache="true"
enableVersionHeader="true"
requireRootedSaveAsPath="true"
enable="true"
shutdownTimeout="90"
delayNotificationTimeout="5"
waitChangeNotification="0"
maxWaitChangeNotification="0"
requestPriority="Normal"
enableHeaderChecking="true"
sendCacheControlHeader="true"
apartmentThreading="false"
/>
</system.web>
</configuration>
Il est donc à noté que, par défaut, toute requête émise vers le serveur ne pourra pas dépasser les 4Mo même si la clé maxReceivedMessageSize de WCF est paramétrée selon vos souhaits. En effet, les clés de configuration HttpRuntime prennent le pas sur la configuration System.ServiceModel de WCF définie.
Si ce cas est valable pour la taille des requêtes émises vers le serveur, il en va de même pour les paramètres liés aux optimisations de performances et notamment ici : minFreeThreads...
Pensez donc à modifier les clés HttpRuntime soit au niveau du web.config si vous souhaitez ne l'appliquez qu'a votre application soit au niveau de machine.config si vous souhaitez l'appliquer de manière globale.
Lors de la mise en oeuvre de port de réception basé sur MSMQ, la problématique de haute disponibilité impose de configurer le host BizTalk et MSMQ en mode cluster. En effet, il n'est pas supporter d'avoir des lectures transactionnelles distantes avec MSMQ et c'est donc ce qui impose la mise en cluster.
Lors de la configuration des ressources du cluster, il est donc indispensable de prévoir les bonnes dépendances afin que les ressources MSMQ démarrent avant les ressources BizTalk :
"The MSMQ cluster resource group needs to be restarted before restarting the BizTalk Host cluster resource group during the cluster failover.
In a failover cluster scenario, when a failover is taking place, the MSMQ cluster resource group needs to be restarted before restarting the BizTalk Host cluster resource group. If you fail to do so, the MSMQ receive locations may be disabled. To work around this issue, you can make the BizTalk Host cluster resource group dependent on the MSMQ cluster resource group to ensure that the MSMQ cluster resource group starts before the BizTalk Host cluster resource group. Alternatively, you can restart the BizTalk Host cluster resource group to work around this issue."
Article : Known Issues for the WCF Adapters
Voici donc un point essentiel à prendre en compte dans vos architectures en plus des phases de tests nécessaires afin qu'un incident lié à ce type de problématique ne se pose pas lors d'un basculement du cluster en production.
Voilà donc deux bibles concernant l'optimisation et l'exploitation d'une plateforme BizTalk Server :
-
BizTalk Server Database Optimization : cet article orienté base de données par son titre peut être largement appliqué à tout autre serveur applicatif pour bon nombre de bonnes pratiques qu'il contient. Une vrai référence en termes d'optimisation des plateformes BizTalk Server !
-
BizTalk Server Operation Guide : Plus de 600 pages de retours d'expériences sur les plateformes BizTalk et leur exploitation au quotidien. Un guide à recommander à tout architecte ou administrateur BizTalk !
Bonne lecture à tous.
Bon, je vois déjà les remarques de certains concernant ce billet mais rassurer vous je ne me suis pas converti à Java ! 
En fait, l'objectif est plutôt de communiquer une manière simple d'implémenter un Web Service basé sur JAX-WS à des fins de démos ou prototypes d'interopérabilité sans avoir à sortir une artillerie lourde du type serveur d'application, environnement de développement...
D'ailleurs, un grand merci à Stève Sfartz qui a pu nous transmettre cette approche lors des TechDays 2008. 
Seul pré-requis à cette approche : l'installation du JDK que vous pouvez télécharger ici.
Une fois installé, il est juste nécessaire de créer les trois fichiers suivants :
-
Fichier d'implémentation du service : DemoService.java
-
Fichier de script de compilation du service : Compile.bat
-
Fichier de script de lancement et d'hébergement du service : Run.bat
Dans l'exemple suivant, le service exposera une méthode Notify prenant un paramètre d'entrée correspondant au message à afficher dans la console.
Dans le fichier DemoService.java, correspondant à l'impémentation de ce service, il suffit d'ajouter le code ci-après qui vous l'avouerez reste très proche d'une implémentation .Net C#. Deux méthodes sont à distinguer :
-
la méthode Notify qui correspond à l'opération exposée par le service et affiche sur la console le message transmis.
-
la méthode Main qui correspond au point d'entrée du programme et permet de publier le endpoint du service.
package Service;
import javax.jws.*;
import javax.jws.soap.SOAPBinding;
import javax.xml.ws.Endpoint;
@WebService(targetNamespace = "http://services.demo.fr/JAX-WS",
name="AlertDispatcher",
serviceName="DemoService")
@SOAPBinding(style=SOAPBinding.Style.DOCUMENT,
use=SOAPBinding.Use.LITERAL)
public class DemoService
{
@WebMethod(operationName="Notify", action="urn:Notify")
public void Notify(@WebParam(name="message") String a)
{
System.out.println("Message : " + a);
}
@WebMethod(exclude=true)
public static void main(String[] args)
{
String endpointUri = "http://localhost:8585/";
Endpoint.publish(endpointUri, new DemoService ());
System.out.println("Publishing JAX-WS at " + endpointUri);
}
}
Une fois l'implémentation du service terminée, il est nécessaire de compiler la solution avant de l'exécuter.
Dans le fichier Compile.bat, correspondant au script de compilation, il suffit d'ajouter le code suivant :
set JAVA_HOME="C:\Program Files\Java\jdk1.6.0_04\"
set PATH=%ATH%;%JAVA_HOME%\bin
javac *.java
move *.class Service
wsgen -cp . Service.DemoService
pause
Seul paramètre à modifier si besoin est le nom de la classe d'implémentation du service. Dans ce cas précis : DemoService.
Une fois la compilation effectuée, il ne reste plus qu'a exécuter le service en le hostant en mode console.
Dans le fichier Run.bat, correspondant au script de lancement et d'hébergement du service, il suffit d'ajouter le code suivant :
set JAVA_HOME="C:\Program Files\Java\jdk1.6.0_04\"
set PATH=%ATH%;%JAVA_HOME%\bin
java Service.DemoService
pause
Comme précédemment, le seul paramètre à modifier si besoin le nom de la classe d'implémentation du service. Dans ce cas précis : DemoService.
Le service est donc maintenant hosté et prêt à être consommé :

Le contrat WSDL correspondant au service est disponible, dans notre cas, à l'adresse suivante : http://localhost:8585/DemoService?wsdl

La définition des données attendues par l'opération Notify est faite dans le schéma XSD se trouvant à l'adresse suivante : http://localhost:8585/DemoService?xsd=1

Il est donc désormais possible de consommer se service depuis une application Java mais aussi .Net avec deux approches différentes basées soit sur un client de type Web Service soit un client de type WCF en basicHttpBinding.
Pour ce faire, au travers de Visual Studio, il suffit de faire un Add Service Reference :

Une fois le service ajouté, la classe proxy et le fichier de configuration WCF générés, il est maintenant possible d'invoquer le service en quelques lignes de code :
AlertDispatcherClient client = new AlertDispatcherClient();
client.Notify("Interop JAX-WS / WCF is good !");
client.Close();
Au niveau de la configuration WCF et notamment du endpoint client, le constat est que la communication entre le service et le client sera de type basicHttpBinding sans autre élément particulier ou spécifique :
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<client>
<endpoint
name="AlertDispatcherPort"
address="http://localhost:8585/DemoService"
binding="basicHttpBinding"
contract="DemoService.AlertDispatcher" />
</client>
</system.serviceModel>
</configuration>
Il est donc maintenant possible d'exécuter le client et de constater qu'un message s'affiche bien sur la console du service JAX-WS :

Voilà, l'implémentation du serveur comme du client est terminée !
Le constat de cet exemple est qu'il est maintenant simplissime de monter un scénario d'interopérabilité entre .Net et Java sans pour autant faire appel à une artillerie lourde !
L'exemple de code exposé dans ce post est disponible aussi en téléchargement via le fichier zip attaché : télécharger.
Enjoy ! 
Microsoft en collaboration avec François Cointe publie cette bande dessinée dans le but de vulgariser les concepts de la SOA.
Une très belle réussite !

Vous le savez les webcast des TechDays 2008 sont disponibles depuis quelques jour sur le site suivant : http://www.microsoft.com/france/vision/mstechdays08/
Pour ceux qui serait intéressé par les sujets de l'industrialisation et du SOA, voici les deux sessions que j'ai eu l'honneur d'animer :
Industrialisation : Welcome to the real world co-animé par Guillaume Belmas et Pierre Couzy
Lors de cette session, venez découvrir un exemple concret d?industrialisation logicielle au travers notamment de Visual Studio Team System et des Software Factories.Basée sur le retour d?expérience d?un projet du secteur financier, cette session présentera différents aspects de l?industrialisation :
- Framework d?entreprise
- Capitalisation et qualité avec les Software Factories
- Automatisation des processus
Une industrialisation concrète et pragmatique d?un projet réel !
ESB - SOA : Les stratégies d'interconnexion du SI co-animé par Stéphane Goudeau
Présentation des stratégies de création et d'exposition des services au sein du SI , et focus sur WCF (Windows Communication Foundation), et les adapteurs BizTalk. Disponible depuis la sortie du Framework .NET 3.0, WCF facilite la communication entre applications tout en respectant les principes SOA. Dans cette session, nous vous proposons de présenter divers scénarios d'utilisation de WCF, en entreprise, à partir de retours d'expérience projet :
- Mise en oeuvre de WCF pour échanger des flux en environnement .Net : dimensionnement, patterns,...
- Interopérabilité via les Services Web avancés (JAX-WS,...) ou les adaptateurs WCF pour BizTalk (SAP BizTalk Adapter,...)
- Adaptation des flux inter-applications en exploitant les mécanismes natifs d'extensibilité de WCF
Si ces deux sujets vous ont intéressés, vous pouvez aussi poursuivre par le webcast de la session animée par Guillaume Belmas et Patrick Baud sur l'intégration de BizTalk et Team System : Comment tirer parti de Team System pour des projets BizTalk ?
Toujours par le biais du
BizTalk User Group
, j'en ai profiter pour publier une petite astuce concernant l'optimisation des adapters WCF dans BizTalk et les implications à les utiliser dans leur configuration par défaut.
Vous pouvez visualiser cet article en cliquant ici.
Bonne lecture à tous.
Puisque je viens de vous annoncer l'ouverture du BizTalk User Group, j'en ai profiter pour publier une petite astuce concernant la gestion des namespaces par défaut dans la configuration du BAM Interceptor.
Vous pouvez visualiser cet article en cliquant ici.
Pour rappel le BAM Interceptor permet de capturer des données métiers sur des flux synchrones gérés au travers de WCF et/ou de WF en les agrégeant au sein de la base de données BAMPrimaryImport de BizTalk dans l'objectif de fournir une vue temps réel sur les indicateurs métiers d'un système d'information.
Bonne lecture à tous.
Voilà une news qui me fait plaisir et je tiens à remercier particulièrement Rock Baduel pour son initiative.
La communauté française des utilisateurs BizTalk : BizTalk User Group est donc en ligne depuis près d'un mois et je vous invite donc tous à vous y rendre !

Comme annoncé par Coq il y a de cela quelques jours, la seconde émission de Fréquence MSDN s'est tenue le lundi 26 novembre 2007 à 11h. J'ai eu l'honneur d'être invité par Eric Le Loc'h (IAV Team System) pour discuter de mes retours d'expériences sur Team System mais aussi et surtout de l'intégration de BizTalk Server 2006 avec Team Build.
L'enregistrement de cette émission devrait être disponible d'ici la fin de semaine mais vous pouvez d'ores et déjà consulter ce post de synthèse écrit par Nicolas Boonaert pour vous faire une idée des thèmes abordés.
Merci encore à l'équipe MSDN de m'avoir convié à cette émission ! 
Voilà une astuce qui m'a été bien utile suite à la perte de l'ensemble des compteurs de performances sur ma machine virtuelle. L'ensemble du procédé est très bien décrit sur le blog BizTalk Performance et je pousse donc juste cette info : How to manually recreate missing BizTalk performance counters
Lors de l'optimisation de plateforme BizTalk Server 2006, nous nous sommes aperçu que la base de données de travail BizTalkMsgboxDb grossissait de façon démesurée et sans raison apparante.
Après investigation et outil d'analyse fourni par le support MS, il apparait que dans le cadre de message en erreur de routage et dont l'instance du service à été terminée, ceux-ci peuvent être conserver indéfiniment dans la base de travail au niveau de la table Q_Suspended.
Ces message en échec de routage et dont l'instance a été supprimée ne peuvent donc pas être vus dans la console d'administration de BizTalk étant donné que la console interroge la table d'Instances et non la table Q_Suspended.
Pour corriger ce problème, un fix est disponible mais sur appel au support. Voir : http://support.microsoft.com/kb/941690
Attention, une fois installé, ce correctif ne permet pas de retour arrière sans rendre la plateforme instable !
Cela faisait longtemps que je n'avais pas sorti la tête de l'eau et je reprend donc du service... 
Lors de l'installation d'UDDI (Universal Description, Discovery, and Integration) sur Windows 2003 avec une instance SQL Server 2005, vous recevrez le message d'erreur suivant :
"This database instance does not meet the minimum version or Service Pack level requirements and cannot be used for installation. Please upgrade this instance or select another one."
Ce problème peut être simplement résolu par l'ajout d'une clé de registre nommée CSDVersion et reprenant comme valeur le numéro de version du moteur SQL.
La KB correspondante à cette correction est disponible sur : http://support.microsoft.com/?kbid=927230
Enjoy !
L'annonce a été faite il y a quelques jours sur le blog DotNetInterop : un channel spécifique est en cours de développement par IBM pour rendre interopérable le monde .Net via WCF et Java au travers des systèmes de gestion de message WebSphere MQ reposant sur JMS (Java? Message Service).
Cette annonce est prometteuse et permettra de faciliter l'interopérabilité entre ces deux technologies puisqu'il ne sera plus nécessaire de disposer de BizTalk Server ou de Host Integration Server avec leur connecteur MQSeries.
Quelques restrictions majeures existent dans la version actuelle proposée mais seront peut être levées lors de la release :
- Seule les opérations de type OneWay sont supportées
- Les transactions et la sécurité sur les messages ne sont pas implémentées.
L'annonce officielle : http://www.alphaworks.ibm.com/tech/mqwcf/
Les 10 derniers blogs postés
-
Changements au niveau du Garbage Collector dans ".NET 3.5" par
CoqBlog le il y a 4 heures et 1 minutes
-
IIS et ASP.net 3.5 : avoir la bonne version du framework par
Atteint de JavaScriptite Aiguë [Cyril Durand] le il y a 4 heures et 15 minutes
-
James Whittaker parle de Software Testing par
Etienne Margraff le il y a 10 heures et 34 minutes
-
[CSS3] A quoi ressemblera box-shadow ? par
Le blog de FremyCompany le il y a 10 heures et 35 minutes
-
Besoin d'icones/images pro pour vos sites et applications ? par
Nix's Blog le il y a 12 heures et 7 minutes
-
EMPLOI : WebCast à visionner absolument pour répondre à différentes questions qu'on peut avoir sur le marché français par
Blog Technique de Romelard Fabrice le il y a 13 heures et 33 minutes
-
XBOX : L'uniformisation du système d'achat de ZUNE et XBOX Live par
Blog Technique de Romelard Fabrice le il y a 16 heures et 12 minutes
-
Aventures avec le mot clé "let" dans LINQ to Objects par
Jerome Laban le 05-10-2008, 17:35
-
Et encore un nouveau blog sur Codes-Sources ! par
Blog Technique d'Audrey PETIT le 05-09-2008, 21:14
-
Rosario - Team Foundation Server - MSBuild + Workflow Foundation par
Azra [Florent Santin] le 05-09-2008, 19:00