Deals with Petals ESB, Petals Suite, SOA, PetalsLink…
In: Non classé
23 Nov 2009L'intéropérabilité, c'est la capacité qu'ont différents systèmes d'intéragir (inter-opérer, çà dit son nom), d'échanger, de fonctionner et travailler ensemble.
Le problème, généralisable, est particulièrement critique dans le domaine des technologies de l'information.
Et comment obtient-on l'intéropérabilité ? Eh bien, il y a au moins deux méthodes : l'uniformisation du monde, ou l'adoption de standards ouverts.
La première méthode est simple : tout le monde utilise le même logiciel, protocole, format, etc...
Les mauvaises langues diront que ce n'est pas de l'intér-opérabilité mais de la "self"-opérabilité : certes.
Mais la méthode a d'autres travers : outre une certaine fragilité (cf. la biodiversité : plus elle est réduite, plus une attaque risque de détruire tout l'écosystème) et le risque d'appropriation par une firme privée ou un lobby, elle nécessite sutout une uniformisation de la culture et des pratiques, laquelle ne peut être obtenue que par un contrôle strict et régalien, assorti de sanctions fermes.
Autrement dit, la "self-opérabilité" ne peut être obtenue que par la dictature.
A l'opposé, les standards ouverts garantissent que les données et les protocoles, publics et d'accès libre, peuvent être mis en oeuvre, exploités ou étudiés par tous (ce qui favorise, au passage, l'accès de tous au savoir, ainsi que les logiciels open-source).
Leur évolution ne peut se faire que de manière collégiale, via des structures démocratiques prenant en compte l'avis des utilisateurs et de toute personne ou organisation intéressée.
Autrement dit, les standards ouverts, c'est une forme de démocratie décentralisée (leur établissement étant le fait, par exemple, de consortiums, organismes publics ou associations à processus de décision ouvert).
De récents travaux financés par l'Europe font état de voies intermédiaires : il existerait un "continuum" entre l'ouverture totale et la fermeture totale, au long duquel il serait légitime de se positionner (cf. un récent article de Glyn Moody sur ComputerWorld UK, que j'ai accessoirement traduit en français ici, et qui détaille les croustillants travaux de l'IDABC).
C'est presque aussi absurde que de déclarer qu'il existerait un "continuum" entre la dictature et la démocratie au long duquel les états devraient se positionner, mais passons... En ce qui concerne l'intéropérabilité, se positionner librement entre l'ouverture et la fermeture, çà revient à entériner le système actuel, lequel est tout sauf intéropérable, justement parce que chacun fait un choix différent du voisin.
Ce qui démontre que l'intéropérabilité est impossible sans une forme de "contrôle politique" : ou, pour parler comme un économiste, qu'il n'y a pas de "main invisible" qui ferait tendre le système vers l'intéropérabilité.
Et le "contrôle politique", ici comme ailleurs, c'est soit la dictature, soit la démocratie. Camarade, choisis ton camp...
P.S. Cette réflexion a été nourrie par une analyse économique de Jacques Sapir, à propos de la théorie de l'équilibre général de Walras, dont il démontre qu'elle ne peut s'appliquer réellement sans un contrôle politique, de forme soit totalitaire, soit démocratique, mais proche de ceux décrits ici : cf. "Les trous noirs de la science économique : essai sur l'impossibilité de penser le temps et l'argent" (Seuil / points économie, 2003)
In: Non classé
12 Nov 2009Ok, je n'ai pas pu m'empêcher de vous le livrer en phonétique, histoire que vous ne commettiez pas d'impair en le prononçant : çà s'écrit "Sacosuchus", de fait. Mais je ne sais pourquoi cette transcription phonétique m'a plu : sans doute parce que çà fait plus gladiateur ?
Au fait, j'oubliais... de quoi s'agit-il, au juste ?
Eh bien, d'après Wikipedia, il s'agit d' "un reptile préhistorique de l’ordre des crocodiliens qui mesurait entre 11 et 14 mètres de long et pesait près de 10 tonnes. [...] Le Sarcosuchus vivait il y a 110 millions d'années, au crétacé inférieur."
Bien, me direz-vous, çà commence à faire un bail qu'il a pas fait la une des média, ce sarco-là...
Eh bien, le voici qui remonte dans les sondages : et ce grâce aux efforts du Museum National d'Histoire Naturelle de Paris, qui s'affaire en ce moment même à restaurer un magnifique exemplaire de Sarcosuchus au sein de sa galerie de paléontologie.
Voici un extrait de l'affichette que ledit museum présente aux visiteurs, pour s'excuser du dérangement (faut dire qu'un sarco, çà occupe de l'espace) :

De fait, si l'on poursuit un peu plus la visite, on ne peut manquer de rencontrer ce pensionnaire peu discret : la photo suivante finira de vous convaincre qu'il s'agit d'une très sérieuse étude scientifique. Mais pouviez-vous en douter, connaissant la réputation de l'institution qui le présente ?

Tout de même, c'est à se demander si le Muséum n'a pas cédé à un certain goût du sensationnel, voire du bling-bling (doit-on y voir une conséquence directe de la réforme de la Recherche ?)
De fait, l'animal fait forte impression, au point que je n'ai osé le regarder en face que depuis les balcons de la galerie supérieure, imaginant même l'entendre m'apostropher de sa grosse voix virile : "Descends si t'as des couilles !"
J'en tremble encore...
In: fractal|java|ow2|Petals ESB
10 Nov 2009[WARNING] FractalComponentProcessor >> No value found for property ‘generatorClass’ in processor org.objectweb.fractal.fraclet.annotation.processor.FractalComponentProcessor[INFO] ————————————————————————[ERROR] BUILD ERROR[INFO] ————————————————————————[INFO] fail to execute
… which is really helpful…
After spending too much time on searching why, the cause was ’simply’ because my Fractal component (java class) was extending another Fractal component (java class). Not sure that it is a component problem or a component import/requirement one but when one component inherits one other it does not compile at all.
Good to know!
Update on november 13:
Sometimes things are strange… It seems that this bug has been fixed some months ago (according to the Fractal bug tracker…) but I have it when I try to extend a component which has already been processed by spoon… ie In the same project all works fine… The problem occurs when I have a fractal based project which depends on another one…
In: game|opensource|Petals ESB|soa
10 Nov 2009Here is the new game at PEtALS Link: If you say bad things on PEtALS ESB you MUST put money into the box. If you say good things, you can take a candy…
Some says bad things just to in order to buy some beers with the money…
and we soon be able to have many beers!
In: comet|gwt|java|management|monitoring|ow2|Petals ESB|soa|WebService|wsdm
4 Nov 2009In one of my previous posts (Adding Registry Listener in PEtALS), I spoke about adding a registry listener in PEtALS ESB. In the current article, I want to introduce how I used this feature to implement a live monitoring Web application.
Here are the different modules which are used in this Live Monitoring Tool :
PEtALS ESB Extensions
Registry Listener
The role of the registry listener is to register a new monitoring endpoint into the monitoring layer when a new endpoint is available within PEtALS.
Routing Module
Since modules can be added dynamically inside the PEtALS message router, we have created a module which timestamp the messages. Once the message exchange is complete, a message exchange report is sent to the monitoring layer.
Monitoring Layer
The monitoring is in charge of creating monitoring endpoints through a management API. Once a monitoring endpoint is created, it is also exposed as a Web service. This newly created Web service exposes a WS-notification subscribe operation.
Another role of the monitoring layer is to receive raw reports from the PEtALS ESB, to process the report in order to generate a WSDM payload which will be send to subscribers.
WS-Notification subscriber
The subscriber subscribes, receives and stores notifications from the Monitoring layer. That’s all for that module ;o)
GWT Based Web application
The GWT Web application uses comet in order to display live service response time. The data used to display response time is the one received and stored into the database and of course the server part of the Web application have access to this database.
As a result, we have a really nice live Web application (live means that the chart gives real time result and is updated automatically when messages are exchanged within PEtALS Service Bus). Here are some screenshots :
In: fractal|ow2|Petals ESB|soa
2 Nov 2009I just added a new feature to petals ESB (to be released quite soon in v3.0) in order to customize the Service Bus endpoint registration and unregistration…
The interface to implement is defined in org.ow2.petals.jbi.messaging.registry.RegistryListener such as :
package org.ow2.petals.jbi.messaging.registry;
import org.ow2.petals.jbi.messaging.endpoint.ServiceEndpoint;
public interface RegistryListener {
void onRegister(ServiceEndpoint endpoint);
void onUnregister(ServiceEndpoint endpoint);
}
Note that for now, the listeners are just called for local endpoints (remote endpoints listeners will be added in a future version). In order to add registry listeners, you just have to implement the RegistryListener interface and to add the listeners to the registry in the Fractal configuration file (JBI-Messaging.fractal).
In order to illustrate how to add a listener in the Fractal configuration file, let’s take an example. All the following lines are added to the JBI-Messagging.fractal configuration file.
1. Add a new component implementation which implements the RegistryListener interface :
<component definition="org.ow2.petals.kernel.registry.listener.wsdm.MonitoringNotifierImpl" name="MonitoringNotifierImpl"/>
2. Bind the new component with required ones (depends on the implementation) :
<binding client="MonitoringNotifierImpl.configuration" server="this.configuration"/>
3. Add the listener to the EndpointRegistry component :
<binding client="EndpointRegistryImpl.listener-wsdmnotif" server="MonitoringNotifierImpl.service"/>
Note that the binding client name MUST start with the “listener-” prefix in order to be added to the list of listeners.
Here we are, on endpoint registration and unregistration, the list of listeners will be called by the endpoint registry component. You can now specialize your endpoints lifecycle. A real use case will come in a future post, so stay tuned.

In: Non classé
30 Oct 2009Que votre métier consiste à concevoir, organiser, gérer, maintenir ou planifier, nul doute que vous aurez déjà constaté le fait suivant : les systèmes dont vous avez la charge, au fil du temps, deviennent de plus en plus inefficaces, plus compliqués, chaque modification provoque des effets de plus en plus imprévisibles, et toute tentative de simplification devient trop hasardeuse pour être envisageable...
Alors, augmentation naturelle de l'entropie ? Effet de bord de la complexité ? Ou simple incapacité de votre part à gérer et organiser correctement ?
De fait, les systèmes complexes ne sont pas statiques : ils échangent avec l'extérieur, qui évolue, et sont eux aussi contraints à évoluer, ou à disparaître.
Evoluer ne pouvant se faire que dans deux directions : croissance ou décroissance (devenir plus gros ou plus petit, plus véloce ou plus lent, plus riche ou plus pauvre, plus technicien ou plus traditionnel, ou ce qu'il vous plaira, c'est analogue...)
Et encore, dans des limites relativement étroites : une ville, une entreprise, un programme, une économie ou un animal ne peuvent faire croître ni décroître à l'infini leurs principaux caractères (pourquoi, me direz-vous ? les raisons sont diverses, mais connexes. Prenons un exemple avec l'animal : si sa taille change, son volume évolue plus vite que sa surface, ce qui pose rapidement des problèmes de régulation thermique - trop petit, il offre trop de surface par rapport au volume nécessaire à produire de la chaleur... et trop gros, il n'offre pas assez de surface pour évacuer ses calories : les souris ont froid, les éléphants ont chaud !)
Or, chaque évolution (croissance ou décroissance) comporte une part d'irréversible : d'abord parce qu'il n'est pas question de revenir à l'état initial (le monde extérieur ayant depuis évolué), ensuite parce que c'est impossible.
Prenons l'exemple d'une usine (à gaz ? nom générique que l'on prête à toute la galaxie des systèmes complexes, comme par hasard), dont on voudrait moderniser le fonctionnement : d'anciens sous-systèmes vont rester actifs, d'autres seront ajoutés, d'autres remplacés ou rénovés, etc...
Dans ce cadre, la redondance est préférable à la perte d'une fonction : on évite de trop modifier ce que l'on comprend mal, ou ce qui semble remplir sa fonction honnêtement - on se contente de le répliquer ou de l'améliorer.
De plus, sur un système qu'il est souvent impossible d'arrêter, l'arrêt même temporaire d'un sous-système vital (par exemple, dans le but de le remplacer) pourrait avoir des conséquences funestes...
Chaque évolution va alors s'ajouter à un existant sans réellement le remplacer, provoquant une forme de stratification qui réduira l'efficacité du système, y provoquant des redondances, parfois des incohérences. Les erreurs, inhérentes à toute manipulation, vont également s'y accumuler au fil du temps.
Le système finira par être trop inefficace pour remplir sa fonction, même dans un mode dégradé : notre usine, par exemple, devra être désaffectée, démolie et remplacée.
Rien que de très normal, donc : vous voilà donc rassuré, puisque votre compétence n'est pas en cause ?
Ne vous réjouissez pas trop vite : étant vous-même un système complexe, l'adhésion au raisonnement ci-dessus vous condamne à mourir avec lucidité...
In: dragon|Governance|ow2|Petals ESB|soa
21 Oct 2009OW2-Dragon, the Open Source SOA Governance Platform has been released last week in its 1.0-alpha version.
This version comes with a snapshot version of the OW2-PEtALS Entreprise Service Bus which embeds the Dragon Connector (PEtALS v3.0 to be released by the end of this year with lot of new stuff). This connector allows Dragon to import services hosted on PEtALS runtime and so to govern your SOA based application.
You can get the Dragon webapp here and the PEtALS Standalone Bus here.

In: Non classé
15 Oct 2009During the performance tests of the notification implementation in Petals, I needed to send
a large amount of ws requests containing a unique id. I couldn’t generate manually thousands
of requests (each one with its unique id) before launching my soapui test case.
The easiest way I found to solve it was to include a groovy script in my soapui test case:
1) Add a « properties » step in the test case, and define a property. These property will be modified by the groovy script to be different for each request.

2) Add a groovy script in the test case, and write a script to modify your property. The value is generate using a timestamp, and the thread id, to be sure the id will be unique during the whole test, even with more than one thread launching the requests.

3) In the requests of the test case, fill the correct element or attribute with ${property name}, which will be replaced at runtime by the property’s value.

4) All the requests of the test case have now the processPath attribute correctly set.
Mathias
There are some things to know when working with Hibernate mappings and HSQL DB. The most important one is that running something on HSQL does not mean that it will run on another DB engine…
Let’s take the following annotated class :
package org.ow2.petals.registry.core.repository.bo;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import org.hibernate.annotations.GenericGenerator;
@Entity
public class Property {
private String id;
private String key;
private String value;
public Property() {
}
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
public String getKey() {
return this.key;
}
public void setKey(String key) {
this.key = key;
}
public String getValue() {
return this.value;
}
public void setValue(String value) {
this.value = value;
}
}
This will not cause any problem running on HSQL DB but it will not run at all on MySQL for example… The problem is that ‘key’ if a reserved SQL keyword. So renaming ‘key’ fixes this problem.
I just want to know why Hibernate guys do not detect reserved keywords and prefix/postfix them to be SQL compliant. The other question is why Hibernate does not throw an exception but just print a warning when the table can not be created…
