Tag : spring

Par Jean-Baptiste Defard, le 18 janvier 2011

Apache Camel - Configuration des timeouts HTTP

La mise en œuvre d'une requête HTTP avec Camel est assez simple. Après avoir ajouté le composant camel-http.jar au classpath, la route suivante fait une requête de recherche sur Google.

from("direct:start").
to("http://www.google.com/search?q=netapsys).to("mock:result");

Un simple appel dans un test Camel permet de s'assurer que tout s'exécute comme prévu :

@Test
public void test()
throws Exception
{
    this.template.sendBody("direct:start", null);
.../...
}

Le composant s'appuie sur la librairie commons-httpclient-3.x.jar pour l'implémentation. Pour la configuration des temporisations HTTP, un petit tour dans la documentation, montre qu'il existe (au moins) deux solutions :

  • Soit, on passe en paramètre la valeur du délai sur la route. Dans ce cas, la route précédente devient :
from("direct:start").
to("http://www.google.com/search?q=netapsys&httpClient.soTimeout=5000").to("mock:result");
  • Soit, on configure le composant directement en injectant un objet ClientConnectionManager correctement paramétré. Si, comme c'est mon cas, vous utilisez Spring comme registre Camel, il suffit de déclarer un bean correspondant au composant et de le paramétrer. Par analogie avec :
final MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();
final HttpConnectionManagerParams params = connectionManager.getParams();
params.setConnectionTimeout(6000);
connectionManager.setParams(params);
HttpClient client = new HttpClient(connectionManager));



Cela revient dans un contexte Spring, aux déclarations :

<bean id="http.connection.manager.params"
	class="org.apache.commons.httpclient.params.HttpConnectionManagerParams">
    <property name="connectionTimeout" value="6000" />
    <property name="soTimeout" value="4000" />
</bean>

<bean id="http.composant" class="org.apache.camel.component.http.HttpComponent">
    <property name="httpConnectionManager">
	<bean
		class="org.apache.commons.httpclient.MultiThreadedHttpConnectionManager">
		<property name="params" ref="http.connection.manager.params" />
	</bean>
    </property>
</bean>

Il y a même plus court et surtout plus souple. La configuration précédente présente l'inconvénient de fixer les valeurs de temporisation pour l'ensemble des routes utilisant le composant HTTP. Pour une configuration "par route" à la demande, on peut utiliser le paramétrage par référence. Avec les déclarations Spring suivantes :

<bean id="clientConnectionManager2"
	class="org.apache.commons.httpclient.MultiThreadedHttpConnectionManager">
	<property name="params">
		<bean
			class="org.apache.commons.httpclient.params.HttpConnectionManagerParams">
			<property name="connectionTimeout" value="5000" />
			<property name="soTimeout" value="2000" />
		</bean>
	</property>
</bean>

<bean id="clientConnectionManager3"
	class="org.apache.commons.httpclient.MultiThreadedHttpConnectionManager">
	<property name="params">
		<bean
			class="org.apache.commons.httpclient.params.HttpConnectionManagerParams">
			<property name="connectionTimeout" value="10000" />
			<property name="soTimeout" value="12000" />
		</bean>
	</property>
</bean>

Il suffit de configurer les routes avec la référence du bean souhaité :

from("direct:start1").
to("http://www.google.com/search?q=netapsys&clientConnectionManager=#clientConnectionManager2").to("mock:result");

from("direct:start2").
to("http://www.google.com/search?q=netapsys&clientConnectionManager=#clientConnectionManager3").to("mock:result");

Il existe un composant Camel utilisant la version 4.x d'HttpClient que je n'ai pas encore eu l'occasion d'utiliser. La configuration doit être probablement légèrement différente.

Par Abderrazek CHINE, le 17 avril 2009

Tests JUnit4 combiné avec Spring et Spring MVC en mode transactionnel

Le titre de ce billet montre bien l'étendue des thèmes variés qui seront traités. Il a pour objectif d'illustrer, à l'aide d'un exemple assez complet et proche des cas réels, la mise en place des tests, en mode transactionnel, pour les différentes couches applicatives. Ainsi les vraies difficultés rencontrées par les développeurs seront évoquées.
Le billet traite JUnit4 enrichi avec les annotations de Spring 2.5+ et ses lanceurs pour exécuter facilement les tests. Des illustrations en mode transactionnel vous sont proposées à la fin de ce billet.
Le framework JUnit est l'oeuvre conjointe de Kent Beck (créateur de XP) et Erich Gamma (auteur des Design Patterns).
Avec la version 4, JUnit tente de rattraper son retard sur Testng tout en gardant la compatibilité avec JUnit3x ainsi qu'une parfaite intégration aux éditeurs Eclipse, Netbeans, ...
Avec les lanceurs de spring, les tests deviennent plus attrayants. Spring encourage ainsi à adopter l'approche TDD "Test Driven Design" ou "Test-First Developpment".
Notez que le jdk5+ est nécessaire pour certaines parties de code Java. Les commentaires dans le code java le mentionnent au bon endroit.

Lire la suite
Par Darko Stankovski, le 11 juin 2008

Un JUG printanier

Pour le dernier JUG Parisien de printemps, le thème était le framework Spring. La mouture 2.5 est en effet sortie il y a environ 2 mois, accompagnée de son lot de nouveautés.

Retour sur cette soirée riche en enseignements.

Lire la suite