<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>@Repository(&#34;djo&#34;) &#187; OSGi</title>
	<atom:link href="https://blog.developpez.com/djo-mos/pcategory/java/osgi/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/djo-mos</link>
	<description></description>
	<lastBuildDate>Sun, 27 Sep 2009 00:05:37 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Préparation de l&#8217;environnement : configuration de Jetty</title>
		<link>https://blog.developpez.com/djo-mos/p7727/java/osgi_configuration_port_jetty</link>
		<comments>https://blog.developpez.com/djo-mos/p7727/java/osgi_configuration_port_jetty#comments</comments>
		<pubDate>Tue, 09 Jun 2009 23:11:07 +0000</pubDate>
		<dc:creator><![CDATA[djo.mos]]></dc:creator>
				<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[OSGi côté serveur]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Dans ce triosième volet de la série parlant de l&#8217;utilisation d&#8217;OSGi côté serveur, je vais présenter comment on peut configurer jetty. Par défaut, Jetty utilise le port 8080, ce qui peut poser problème quand on a un autre serveur sur ce port. Pour résoudre celà, on va créer un fragment qui contient les fichiers de configuration de Jetty. J&#8217;avais présenté en détail comment céer un fragment dans le billet précédent : « Préparation de l&#8217;environnement [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Dans ce triosième volet de la série parlant de l&rsquo;utilisation d&rsquo;OSGi côté serveur, je vais présenter comment on peut configurer jetty.</p>
<p>Par défaut, Jetty utilise le port 8080, ce qui peut poser problème quand on a un autre serveur sur ce port.</p>
<p>Pour résoudre celà, on va créer un fragment qui contient les fichiers de configuration de Jetty. J&rsquo;avais présenté en détail comment céer un fragment dans le billet précédent : « <a href="http://blog.developpez.com/djo-mos/p7515/java/osgi/osgi-cote-serveur/osgi-configuration-log4j-logging/">Préparation de l&rsquo;environnement : configuration de log4j</a> »<br />
<span id="more-3"></span></p>
<p>Créez donc un fragment en utilisant l&rsquo;assistant offert par PDE en utilisant « sse.jetty.config » comme nom et en sélectionnant « org.springframework.osgi.jetty.start.osgi » comme host.</p>
<p>Dans ce fragment, créez un dossier « etc » à la racine du projet avec un fichier jetty.xml dedans dont voici le contenu :</p>
<blockquote><pre>

<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt;?xml version=&quot;1.0&quot;?&gt; <br />
&lt;!DOCTYPE Configure PUBLIC &quot;-//Mort Bay Consulting//DTD Configure//EN&quot; &quot;http://jetty.mortbay.org/configure.dtd&quot;&gt; <br />
&nbsp;<br />
&lt;!-- =============================================================== --&gt; <br />
&lt;!-- Configure the Jetty Server &nbsp;(OSGi specific) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&gt; <br />
&lt;!-- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&gt; <br />
&lt;!-- Documentation of this file format can be found at: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;--&gt; <br />
&lt;!-- http://docs.codehaus.org/display/JETTY/jetty.xml &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;--&gt; <br />
&lt;!-- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&gt; <br />
&lt;!-- =============================================================== --&gt; <br />
&nbsp;<br />
&nbsp;<br />
&lt;Configure id=&quot;Server&quot; class=&quot;org.mortbay.jetty.Server&quot;&gt; <br />
&nbsp;<br />
&nbsp; &nbsp; &lt;!-- =========================================================== --&gt; <br />
&nbsp; &nbsp; &lt;!-- Server Thread Pool &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;--&gt; <br />
&nbsp; &nbsp; &lt;!-- =========================================================== --&gt; <br />
&nbsp; &nbsp; &lt;Set name=&quot;ThreadPool&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &lt;!-- Default bounded blocking threadpool &nbsp;<br />
&nbsp; &nbsp; &nbsp; --&gt; <br />
&nbsp; &nbsp; &nbsp; &lt;New class=&quot;org.mortbay.thread.BoundedThreadPool&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;Set name=&quot;minThreads&quot;&gt;10&lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;Set name=&quot;maxThreads&quot;&gt;250&lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;Set name=&quot;lowThreads&quot;&gt;25&lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &lt;/New&gt; <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &lt;!-- Optional Java 5 bounded threadpool with job queue &nbsp;<br />
&nbsp; &nbsp; &nbsp; &lt;New class=&quot;org.mortbay.thread.concurrent.ThreadPool&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;Set name=&quot;corePoolSize&quot;&gt;250&lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;Set name=&quot;maximumPoolSize&quot;&gt;250&lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &lt;/New&gt; <br />
&nbsp; &nbsp; &nbsp; --&gt; <br />
&nbsp; &nbsp; &lt;/Set&gt; <br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
&nbsp; &nbsp; &lt;!-- =========================================================== --&gt; <br />
&nbsp; &nbsp; &lt;!-- Set connectors &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;--&gt; <br />
&nbsp; &nbsp; &lt;!-- =========================================================== --&gt; <br />
&nbsp; &nbsp; &lt;!-- One of each type! &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&gt; <br />
&nbsp; &nbsp; &lt;!-- =========================================================== --&gt; <br />
&nbsp;<br />
&nbsp; &nbsp; &lt;!-- Use this connector for many frequently idle connections <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;and for threadless continuations. <br />
&nbsp; &nbsp; --&gt; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &lt;Call name=&quot;addConnector&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &lt;Arg&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;New class=&quot;org.mortbay.jetty.nio.SelectChannelConnector&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Set name=&quot;host&quot;&gt;&lt;SystemProperty name=&quot;jetty.host&quot; /&gt;&lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Set name=&quot;port&quot;&gt;&lt;SystemProperty name=&quot;jetty.port&quot; default=&quot;9090&quot;/&gt;&lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Set name=&quot;maxIdleTime&quot;&gt;30000&lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Set name=&quot;Acceptors&quot;&gt;2&lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Set name=&quot;statsOn&quot;&gt;false&lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Set name=&quot;confidentialPort&quot;&gt;9443&lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &lt;Set name=&quot;lowResourcesConnections&quot;&gt;5000&lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &lt;Set name=&quot;lowResourcesMaxIdleTime&quot;&gt;5000&lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/New&gt; <br />
&nbsp; &nbsp; &nbsp; &lt;/Arg&gt; <br />
&nbsp; &nbsp; &lt;/Call&gt; <br />
&nbsp;<br />
&nbsp; &nbsp; &lt;!-- Use this connector if NIO is not available. &nbsp;<br />
&nbsp; &nbsp; &lt;Call name=&quot;addConnector&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &lt;Arg&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;New class=&quot;org.mortbay.jetty.bio.SocketConnector&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Set name=&quot;port&quot;&gt;8081&lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Set name=&quot;maxIdleTime&quot;&gt;50000&lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Set name=&quot;lowResourceMaxIdleTime&quot;&gt;1500&lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/New&gt; <br />
&nbsp; &nbsp; &nbsp; &lt;/Arg&gt; <br />
&nbsp; &nbsp; &lt;/Call&gt; <br />
&nbsp; &nbsp; --&gt; <br />
&nbsp;<br />
&nbsp; &nbsp; &lt;!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --&gt; <br />
&nbsp; &nbsp; &lt;!-- To add a HTTPS SSL listener &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&gt; <br />
&nbsp; &nbsp; &lt;!-- see jetty-ssl.xml to add an ssl connector. use &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;--&gt; <br />
&nbsp; &nbsp; &lt;!-- java -jar start.jar etc/jetty.xml etc/jetty-ssl.xml &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&gt; <br />
&nbsp; &nbsp; &lt;!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --&gt; <br />
&nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &lt;!-- =========================================================== --&gt; <br />
&nbsp; &nbsp; &lt;!-- Set up global session ID manager &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;--&gt; <br />
&nbsp; &nbsp; &lt;!-- =========================================================== --&gt; <br />
&nbsp; &nbsp; &lt;!-- <br />
&nbsp; &nbsp; &lt;Set name=&quot;sessionIdManager&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &lt;New class=&quot;org.mortbay.jetty.servlet.HashSessionIdManager&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;Set name=&quot;workerName&quot;&gt;node1&lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &lt;/New&gt; <br />
&nbsp; &nbsp; &lt;/Set&gt; <br />
&nbsp; &nbsp; --&gt; <br />
&nbsp;<br />
&nbsp; &nbsp; &lt;!-- =========================================================== --&gt; <br />
&nbsp; &nbsp; &lt;!-- Set handler Collection Structure &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;--&gt; &nbsp;<br />
&nbsp; &nbsp; &lt;!-- =========================================================== --&gt; <br />
&nbsp; &nbsp; &lt;Set name=&quot;handler&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &lt;New id=&quot;Handlers&quot; class=&quot;org.mortbay.jetty.handler.HandlerCollection&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;Set name=&quot;handlers&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;Array type=&quot;org.mortbay.jetty.Handler&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;Item&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;New id=&quot;Contexts&quot; class=&quot;org.mortbay.jetty.handler.ContextHandlerCollection&quot;/&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;/Item&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;Item&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;New id=&quot;DefaultHandler&quot; class=&quot;org.mortbay.jetty.handler.DefaultHandler&quot;/&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;/Item&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;Item&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;New id=&quot;RequestLog&quot; class=&quot;org.mortbay.jetty.handler.RequestLogHandler&quot;/&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;/Item&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;/Array&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &lt;/New&gt; <br />
&nbsp; &nbsp; &lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &lt;!-- =========================================================== --&gt; <br />
&nbsp; &nbsp; &lt;!-- Configure the context deployer &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;--&gt; <br />
&nbsp; &nbsp; &lt;!-- A context deployer will deploy contexts described in &nbsp; &nbsp; &nbsp; &nbsp;--&gt; <br />
&nbsp; &nbsp; &lt;!-- configuration files discovered in a directory. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;--&gt; <br />
&nbsp; &nbsp; &lt;!-- The configuration directory can be scanned for hot &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;--&gt; <br />
&nbsp; &nbsp; &lt;!-- deployments at the configured scanInterval. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&gt; <br />
&nbsp; &nbsp; &lt;!-- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&gt; <br />
&nbsp; &nbsp; &lt;!-- This deployer is configured to deploy contexts configured &nbsp; --&gt; <br />
&nbsp; &nbsp; &lt;!-- in the $JETTY_HOME/contexts directory &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&gt; <br />
&nbsp; &nbsp; &lt;!-- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&gt; <br />
&nbsp; &nbsp; &lt;!-- =========================================================== --&gt; <br />
&nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &lt;!-- <br />
&nbsp; &lt;Call name=&quot;addLifeCycle&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &lt;Arg&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;New class=&quot;org.mortbay.jetty.deployer.ContextDeployer&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Set name=&quot;contexts&quot;&gt;&lt;Ref id=&quot;Contexts&quot;/&gt;&lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Set name=&quot;configurationDir&quot;&gt;&lt;SystemProperty name=&quot;jetty.home&quot; default=&quot;.&quot;/&gt;/contexts&lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Set name=&quot;scanInterval&quot;&gt;1&lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;/New&gt; <br />
&nbsp; &nbsp; &nbsp; &lt;/Arg&gt; <br />
&nbsp; &nbsp; &lt;/Call&gt; <br />
&nbsp; --&gt; <br />
&nbsp; &nbsp; &lt;!-- =========================================================== --&gt; <br />
&nbsp; &nbsp; &lt;!-- Configure the webapp deployer. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;--&gt; <br />
&nbsp; &nbsp; &lt;!-- A webapp &nbsp;deployer will deploy standard webapps discovered &nbsp;--&gt; <br />
&nbsp; &nbsp; &lt;!-- in a directory at startup, without the need for additional &nbsp;--&gt; <br />
&nbsp; &nbsp; &lt;!-- configuration files. &nbsp; &nbsp;It does not support hot deploy or &nbsp; --&gt; <br />
&nbsp; &nbsp; &lt;!-- non standard contexts (see ContextDeployer above). &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;--&gt; <br />
&nbsp; &nbsp; &lt;!-- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&gt; <br />
&nbsp; &nbsp; &lt;!-- This deployer is configured to deploy webapps from the &nbsp; &nbsp; &nbsp;--&gt; <br />
&nbsp; &nbsp; &lt;!-- $JETTY_HOME/webapps directory &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&gt; <br />
&nbsp; &nbsp; &lt;!-- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&gt; <br />
&nbsp; &nbsp; &lt;!-- Normally only one type of deployer need be used. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;--&gt; <br />
&nbsp; &nbsp; &lt;!-- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&gt; <br />
&nbsp; &nbsp; &lt;!-- =========================================================== --&gt; <br />
&nbsp; &nbsp; &lt;!-- <br />
&nbsp; &nbsp; &lt;Call name=&quot;addLifeCycle&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &lt;Arg&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;New class=&quot;org.mortbay.jetty.deployer.WebAppDeployer&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Set name=&quot;contexts&quot;&gt;&lt;Ref id=&quot;Contexts&quot;/&gt;&lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Set name=&quot;webAppDir&quot;&gt;&lt;SystemProperty name=&quot;jetty.home&quot; default=&quot;.&quot;/&gt;/webapps&lt;/Set&gt; <br />
&nbsp; &nbsp; &lt;Set name=&quot;parentLoaderPriority&quot;&gt;false&lt;/Set&gt; <br />
&nbsp; &nbsp; &lt;Set name=&quot;extract&quot;&gt;true&lt;/Set&gt; <br />
&nbsp; &nbsp; &lt;Set name=&quot;allowDuplicates&quot;&gt;false&lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Set name=&quot;defaultsDescriptor&quot;&gt;&lt;SystemProperty name=&quot;jetty.home&quot; default=&quot;.&quot;/&gt;/etc/webdefault.xml&lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;/New&gt; <br />
&nbsp; &nbsp; &nbsp; &lt;/Arg&gt; <br />
&nbsp; &nbsp; &lt;/Call&gt; <br />
&nbsp; &nbsp; --&gt; <br />
&nbsp;<br />
&nbsp; &nbsp; &lt;!-- =========================================================== --&gt; <br />
&nbsp; &nbsp; &lt;!-- Configure Authentication Realms &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&gt; <br />
&nbsp; &nbsp; &lt;!-- Realms may be configured for the entire server here, or &nbsp; &nbsp; --&gt; <br />
&nbsp; &nbsp; &lt;!-- they can be configured for a specific web app in a context &nbsp;--&gt; <br />
&nbsp; &nbsp; &lt;!-- configuration (see $(jetty.home)/contexts/test.xml for an &nbsp; --&gt; <br />
&nbsp; &nbsp; &lt;!-- example). &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&gt; <br />
&nbsp; &nbsp; &lt;!-- =========================================================== --&gt; <br />
&nbsp; &nbsp; &lt;!-- <br />
&nbsp; &nbsp; &lt;Set name=&quot;UserRealms&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &lt;Array type=&quot;org.mortbay.jetty.security.UserRealm&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;Item&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;New class=&quot;org.mortbay.jetty.security.HashUserRealm&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Set name=&quot;name&quot;&gt;Test Realm&lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Set name=&quot;config&quot;&gt;&lt;SystemProperty name=&quot;jetty.home&quot; default=&quot;.&quot;/&gt;/etc/realm.properties&lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Set name=&quot;refreshInterval&quot;&gt;0&lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/New&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;/Item&gt; <br />
&nbsp; &nbsp; &nbsp; &lt;/Array&gt; <br />
&nbsp; &nbsp; &lt;/Set&gt; <br />
&nbsp; &nbsp; --&gt; <br />
&nbsp;<br />
&nbsp; &nbsp; &lt;!-- =========================================================== --&gt; <br />
&nbsp; &nbsp; &lt;!-- Configure Request Log &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&gt; <br />
&nbsp; &nbsp; &lt;!-- Request logs &nbsp;may be configured for the entire server here, --&gt; <br />
&nbsp; &nbsp; &lt;!-- or they can be configured for a specific web app in a &nbsp; &nbsp; &nbsp; --&gt; <br />
&nbsp; &nbsp; &lt;!-- contexts configuration (see $(jetty.home)/contexts/test.xml --&gt; <br />
&nbsp; &nbsp; &lt;!-- for an example). &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;--&gt; <br />
&nbsp; &nbsp; &lt;!-- =========================================================== --&gt; <br />
&nbsp; &nbsp; &lt;Ref id=&quot;RequestLog&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &lt;Set name=&quot;requestLog&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;New id=&quot;RequestLogImpl&quot; class=&quot;org.mortbay.jetty.NCSARequestLog&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Set name=&quot;filename&quot;&gt;&lt;SystemProperty name=&quot;jetty.logs&quot; default=&quot;./logs&quot;/&gt;/yyyy_mm_dd.request.log&lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Set name=&quot;filenameDateFormat&quot;&gt;yyyy_MM_dd&lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Set name=&quot;retainDays&quot;&gt;90&lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Set name=&quot;append&quot;&gt;true&lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Set name=&quot;extended&quot;&gt;true&lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Set name=&quot;logCookies&quot;&gt;false&lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Set name=&quot;LogTimeZone&quot;&gt;GMT&lt;/Set&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;/New&gt; <br />
&nbsp; &nbsp; &nbsp; &lt;/Set&gt; <br />
&nbsp; &nbsp; &lt;/Ref&gt; <br />
&nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; &lt;New id=&quot;ServerLog&quot; class=&quot;java.io.PrintStream&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &lt;Arg&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;New class=&quot;org.mortbay.util.RolloverFileOutputStream&quot;&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Arg&gt;&lt;SystemProperty name=&quot;jetty.logs&quot; default=&quot;./logs&quot;/&gt;/yyyy_mm_dd.stderrout.log&lt;/Arg&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Arg type=&quot;boolean&quot;&gt;false&lt;/Arg&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Arg type=&quot;int&quot;&gt;90&lt;/Arg&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Arg&gt;&lt;Call class=&quot;java.util.TimeZone&quot; name=&quot;getTimeZone&quot;&gt;&lt;Arg&gt;GMT&lt;/Arg&gt;&lt;/Call&gt;&lt;/Arg&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Get id=&quot;ServerLogName&quot; name=&quot;datedFilename&quot;/&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;/New&gt; <br />
&nbsp; &nbsp; &nbsp; &lt;/Arg&gt; <br />
&nbsp; &nbsp; &lt;/New&gt; <br />
&nbsp;<br />
&nbsp; &nbsp; &lt;!-- &lt;Call class=&quot;org.mortbay.log.Log&quot; name=&quot;info&quot;&gt;&lt;Arg&gt;Redirecting stderr/stdout to &lt;Ref id=&quot;ServerLogName&quot;/&gt;&lt;/Arg&gt;&lt;/Call&gt; <br />
&nbsp; &nbsp; &lt;Call class=&quot;java.lang.System&quot; name=&quot;setErr&quot;&gt;&lt;Arg&gt;&lt;Ref id=&quot;ServerLog&quot;/&gt;&lt;/Arg&gt;&lt;/Call&gt; <br />
&nbsp; &nbsp; &lt;Call class=&quot;java.lang.System&quot; name=&quot;setOut&quot;&gt;&lt;Arg&gt;&lt;Ref id=&quot;ServerLog&quot;/&gt;&lt;/Arg&gt;&lt;/Call&gt; <br />
&nbsp; &nbsp; &nbsp;--&gt; <br />
&nbsp;<br />
&nbsp; &nbsp; &lt;!-- =========================================================== --&gt; <br />
&nbsp; &nbsp; &lt;!-- extra options &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --&gt; <br />
&nbsp; &nbsp; &lt;!-- =========================================================== --&gt; <br />
&nbsp; &nbsp; &lt;Set name=&quot;stopAtShutdown&quot;&gt;true&lt;/Set&gt; <br />
&nbsp; &nbsp; &lt;Set name=&quot;sendServerVersion&quot;&gt;true&lt;/Set&gt; <br />
&nbsp; &nbsp; &lt;Set name=&quot;sendDateHeader&quot;&gt;true&lt;/Set&gt; <br />
&nbsp; &nbsp; &lt;Set name=&quot;gracefulShutdown&quot;&gt;1000&lt;/Set&gt; <br />
&nbsp;<br />
&lt;/Configure&gt;</div></div>

</pre>
</blockquote>
<p>Notez surtout que j&rsquo;ai utilisé 9090 comme valeur pour le port, au lieu du 8080.</p>
<p>Voilà. Il suffit ensuite d&rsquo;ajouter ce fragment à votre configuration de lancement pour que Jetty utilise le port 9090.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Préparation de l&#8217;environnement : configuration de log4j</title>
		<link>https://blog.developpez.com/djo-mos/p7515/java/spring/spring-framework/osgi_configuration_log4j_logging</link>
		<comments>https://blog.developpez.com/djo-mos/p7515/java/spring/spring-framework/osgi_configuration_log4j_logging#comments</comments>
		<pubDate>Wed, 22 Apr 2009 14:17:34 +0000</pubDate>
		<dc:creator><![CDATA[djo.mos]]></dc:creator>
				<category><![CDATA[OSGi côté serveur]]></category>
		<category><![CDATA[Spring Framework]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Dans ce second volet de la série de l&#8217;utilisation d&#8217;OSGi côté serveur, je vais présenter comment on peut configurer log4j pour qu&#8217;on puisse voir les logs générés par les différents bundles dans la console d&#8217;Eclipse. Dans un programme Java ordianire, log4j cherche un fichier log4j.properties (ou xml) dans le racine du classpath. Or, dans un conteneur OSGi, la notion de classpath est différente. On n&#8217;a plus de classpath unique par application, mais plutôt un classpath [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Dans ce second volet de la série de l&rsquo;utilisation d&rsquo;OSGi côté serveur, je vais présenter comment on peut configurer log4j pour qu&rsquo;on puisse voir les logs générés par les différents bundles dans la console d&rsquo;Eclipse.</p>
<p>Dans un programme Java ordianire, log4j cherche un fichier log4j.properties (ou xml) dans le racine du classpath. Or, dans un conteneur OSGi, la notion de classpath est différente. On n&rsquo;a plus de classpath unique par application, mais plutôt un classpath séparé par bundle.</p>
<p><span id="more-2"></span></p>
<p>Pour résoudre celà, on utilise la notion de fragments. Un fragment est un bundle spécial, qui à l&rsquo;exécution (à la pahse de resolution), se trouve attaché et mergé dans un autre bundle hôte. Après, il sera traités exactement comme faisant partie du bundle hôte.</p>
<p>Dans le cas précis de ce billet, on va créer un fragment avec le bundle de log4j comme hôte, et on va placer le fichier log4j.properties dans ce fragment.<br />
Ainsi, quand log4j va rechercher un fichier de configuration dans la racind du classpath (le classpath de son bundle), il trouvera et utilisera ce fichier</p>
<p>Eclipse PDE fournit un assistant pour la création d&rsquo;un fragment. Faites « New > Other > Plug-In Developement > Fragment Project » :</p>
<p><a href="http://www.flickr.com/photos/23820026@N06/3465677734/" title="fragment-wizard-1 by djo.mos, on Flickr"><img src="http://farm4.static.flickr.com/3482/3465677734_1d9710c668_o.png" width="441" height="422" alt="fragment-wizard-1" /></a></p>
<p>Saissisez un nom pour ce fragment, « ssosgi.log4j.config » dans mon cas par exemple et cochez l&rsquo;option « an OSGi framework&nbsp;&raquo; sous « Target Platform »:</p>
<p><a href="http://www.flickr.com/photos/23820026@N06/3465677888/" title="fragment-wizard-2 by djo.mos, on Flickr"><img src="http://farm4.static.flickr.com/3549/3465677888_6817123aeb_o.png" width="497" height="499" alt="fragment-wizard-2" /></a></p>
<p>Dans la page suivante, utilisez le bouton « Browse » pour sélectionnez le bundle de log4j comme Host Plig-In</p>
<p><a href="http://www.flickr.com/photos/23820026@N06/3465677976/" title="fragment-wizard-3 by djo.mos, on Flickr"><img src="http://farm4.static.flickr.com/3216/3465677976_ef36beac7d_o.png" width="497" height="522" alt="fragment-wizard-3" /></a></p>
<p>Et validez.</p>
<p>Dans le projet, créez un fichier log4.properties avec le contenu suivant :</p>
<blockquote><pre>

<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">log4j.rootLogger=info, con, file <br />
log4j.appender.con=org.apache.log4j.ConsoleAppender <br />
log4j.appender.con.layout=org.apache.log4j.PatternLayout <br />
log4j.appender.con.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n <br />
&nbsp;<br />
log4j.appender.file=org.apache.log4j.FileAppender <br />
log4j.appender.file.layout=org.apache.log4j.PatternLayout <br />
log4j.appender.file.layout.ConversionPattern=%5p [%t] (%F\:%L) - %m%n <br />
log4j.appender.file.File=/home/djo/ssosgi.log <br />
log4j.appender.file.append=false</div></div>

</pre>
</blockquote>
<p>Notez que vous pouvez personnaliser la configuration pour l&rsquo;adapter à vos besoins. Pensez notamment à changer le nom du fichier de log («/home/djo/ssosgi.log» dans mon cas).</p>
<p>Il faut ensuite ajouter ce fragment à la configuration de lancement. Allez dans la fnêtre de configuration de celle-ci (<a href="http://blog.developpez.com/djo-mos/p7098/java/osgi/osgi-cote-serveur/osgi-preparation-target-platform/">comme décrit dans le billet précédent</a>) et cochez le fragment qu&rsquo;on vient de créer dans la liste des plugins à inclure.</p>
<p>Appliquez et lancer la configuration. Vous devriez avoir un log plus détaillé dans la console d&rsquo;Eclipse :</p>
<p><a href="http://www.flickr.com/photos/23820026@N06/3465707274/" title="console-log by djo.mos, on Flickr"><img src="http://farm4.static.flickr.com/3509/3465707274_d2df4e4c19_o.png" width="446" height="384" alt="console-log" /></a></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Disponibilité du public Draft de la plateforme OSGi 4.2</title>
		<link>https://blog.developpez.com/djo-mos/p7402/annonces/disponibilite_du_public_draft_osgi_4_2</link>
		<comments>https://blog.developpez.com/djo-mos/p7402/annonces/disponibilite_du_public_draft_osgi_4_2#comments</comments>
		<pubDate>Tue, 24 Mar 2009 12:38:43 +0000</pubDate>
		<dc:creator><![CDATA[djo.mos]]></dc:creator>
				<category><![CDATA[Annonces]]></category>
		<category><![CDATA[OSGi]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Le public draft des spécifications de la prochaine version d&#8217;OSGi, la 4.2, vient d&#8217;être rendu public. J&#8217;avais présenté (brièvement) dans un autre billet les quelques nouveautés qui seront apportées par cette version. => Le public draft des specs du core => Le public draft des specs du compendium (services extra)]]></description>
				<content:encoded><![CDATA[<p>Le public draft des spécifications de la prochaine version d&rsquo;OSGi, la 4.2, vient d&rsquo;être <a href="http://www.osgi.org/News/20090324">rendu public</a>.</p>
<p>J&rsquo;avais présenté (brièvement) dans <a href="http://blog.developpez.com/djo-mos/p6252/java/osgi/disponibilite-du-premier-early-draft-des-2/">un autre billet les quelques nouveautés</a> qui seront apportées par cette version.</p>
<p>=> <a href="http://www.osgi.org/Download/File?url=/download/r4-v4.2-core-draft-20090310.pdf">Le public draft des specs du core</a><br />
=> <a href="http://www.osgi.org/Download/File?url=/download/r4-v4.2-cmpn-draft-20090310.pdf">Le public draft des specs du compendium (services extra)</a></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Préparation de l&#8217;environnement : la target platform</title>
		<link>https://blog.developpez.com/djo-mos/p7098/java/osgi_preparation_target_platform</link>
		<comments>https://blog.developpez.com/djo-mos/p7098/java/osgi_preparation_target_platform#comments</comments>
		<pubDate>Wed, 21 Jan 2009 17:58:17 +0000</pubDate>
		<dc:creator><![CDATA[djo.mos]]></dc:creator>
				<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[OSGi côté serveur]]></category>
		<category><![CDATA[Spring Framework]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Ce billet est le premier d&#8217;une série (que j&#8217;espère finir pour une fois) de billets à propos de l&#8217;utilisation d&#8217;OSGi du côté serveur. L&#8217;utilisation la plus populaire d&#8217;OSGi est plus du côté client, avec Eclipse qui l&#8217;utilise comme noyeau et base de son architecture de plugins, ainsi que dans le monde de l&#8217;embarqué. Dans ce premier billet, je vais présenter l&#8217;étape de préparation de l&#8217;environnement de développement,et plus particulièrement la notation de Target Platform. 1. [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Ce billet est le premier d&rsquo;une série (que j&rsquo;espère finir pour une fois) de billets à propos de l&rsquo;utilisation d&rsquo;OSGi du côté serveur.<br />
L&rsquo;utilisation la plus populaire d&rsquo;OSGi est plus du côté client, avec Eclipse qui l&rsquo;utilise comme noyeau et base de son architecture de plugins, ainsi que dans le monde de l&rsquo;embarqué.</p>
<p>Dans ce premier billet, je vais présenter l&rsquo;étape de préparation de l&rsquo;environnement de développement,et plus particulièrement la notation de <strong><em>Target Platform</em></strong>.</p>
<p><span id="more-1"></span></p>
<h1 style="text-align: left;">1. Présentation</h1>
<p>Il s&rsquo;agit ici de définir l&rsquo;ensemble initial de plugins qui va constituer l&rsquo;environnement d&rsquo;exécution de notre serveur.</p>
<p>Il nous faut aussi configurer Eclipse pour qu&rsquo;il reconnaisse et travaille sur cet ensemble de plugins.<br />
Ca permettrait d&rsquo;une part de limiter le nombre de choix présentés dans divers endroits (lors de sélection de plugins requis et des packages importés, des plugins à inclure dans une configuration d&rsquo;exécution, etc.) mais aussi pour éviter une dépendance accidentelle à un plugin non désiré (je pense notamment aux plugins d&rsquo;Eclipse par exemple)</p>
<h1 style="text-align: left;">2. Vue d&rsquo;ensemble</h1>
<p>La target platform sera constituée de :</p>
<ul>
<li><strong>Equinox</strong> : C&rsquo;est le coeur du serveur. Il implémente les spécifications OSGi et servira comme conteneur qui charge et gère le cycle de vie des autres plugins</li>
<li><strong>Spring Dynamic Modules</strong> : C&rsquo;est une sorte de pont entre le monde OSGi (registre des services) et le monde de Spring (application context). De plus, Spring DM permet de faire tourner des applications Web Java ordinaires (Servlets, JSPs, etc.) dans un conteneur OSGi (OSGi offre un support basique pour le web à travers HttpService, mais c&rsquo;est très limité)</li>
<li><strong>Spring</strong> : Il est là car tout d&rsquo;abord il est requis par Spring DM, mais aussi pour son moteur IoC ainsi que les abstractions qu&rsquo;il offre au dessus de plusieurs technologies Java (JDBC et Remoting entre autres)</li>
<li><strong>Jetty</strong> : Comme énoncé plus tôt, le HttpService d&rsquo;OSGi est très limité parapport à la puissance dont on dispose dans une application web Java ordinaire. J&rsquo;ai donc inclus Jetty dans la configuration de base de notre serveur pour avoir toute la puissance requise sous la main</li>
<li>Quelques autre dépendances, comme des librairies de logging</li>
</ul>
<blockquote><p>Notez qu&rsquo;il est tout à fait possible (et très simple) d&rsquo;utiliser Tomcat à la place de Jetty. Ceci revient juste à remplacer les jars de Jetty par ceux de Tomcat.</p></blockquote>
<h1 style="text-align: left;">3. Récupération des fichiers nécessaires</h1>
<p>Il va nous falloir télécharger plusieurs packages pour retrouver les jars nécessaires.</p>
<ul>
<li><strong>Spring DM</strong> : récupérable à <a href="http://www.springsource.com/download/community?project=Spring%20Dynamic%20Modules">cette adresse</a> (pour cet article, j&rsquo;ai utilisé Spring DM 1.2 M2)</li>
<li><strong>Spring Framework</strong> : récupérable à <a href="http://www.springsource.com/download/community?project=Spring%20Framework">cette adresse</a> (pour cet article, j&rsquo;ai utilisé Spring Framework 2.5.6)</li>
</ul>
<p>Après avoir extrait les archives de Spring et de Spring DM, Créez quelque part sur votre disque un dossier qui servira à rassembler les jars de la target platform, par exemple &nbsp;&raquo; server-springdm-1.2.0.m2-spring-2.5.6-jetty &nbsp;&raquo; dans mon cas. </p>
<blockquote><p>Généralement, je crée la target platform en tant que projet (simple) dans mon worksapce Eclipse, histoire de pouvoir le versionner sur SVN par exemple, mais ce n&rsquo;est pas requis. </p></blockquote>
<p>Copiez les fichiers suivants depuis le dossier où vous avez extrait Spring DM vers le dossier de la target platform: </p>
<ul>
<li>spring-osgi-1.2.0-m2/dist/spring-osgi-core-1.2.0-m2.jar</li>
<li>spring-osgi-1.2.0-m2/dist/spring-osgi-extender-1.2.0-m2.jar</li>
<li>spring-osgi-1.2.0-m2/dist/spring-osgi-io-1.2.0-m2.jar</li>
<li>spring-osgi-1.2.0-m2/dist/spring-osgi-web-1.2.0-m2.jar</li>
<li>spring-osgi-1.2.0-m2/dist/spring-osgi-web-extender-1.2.0-m2.jar</li>
</ul>
<ul>
<li>spring-osgi-1.2.0-m2/lib/com.springsource.net.sf.cglib-2.1.3.jar</li>
<li>spring-osgi-1.2.0-m2/lib/com.springsource.org.aopalliance-1.0.0.jar</li>
<li>spring-osgi-1.2.0-m2/lib/com.springsource.slf4j.api-1.5.0.jar</li>
<li>spring-osgi-1.2.0-m2/lib/com.springsource.slf4j.log4j-1.5.0.jar</li>
<li>spring-osgi-1.2.0-m2/lib/com.springsource.slf4j.org.apache.commons.logging-1.5.0.jar</li>
<li>spring-osgi-1.2.0-m2/lib/jetty-6.1.9.jar</li>
<li>spring-osgi-1.2.0-m2/lib/jetty.start.osgi-1.0.0.jar</li>
<li>spring-osgi-1.2.0-m2/lib/jetty-util-6.1.9.jar</li>
<li>spring-osgi-1.2.0-m2/lib/jetty.web.extender.fragment.osgi-1.0.1.jar</li>
<li>spring-osgi-1.2.0-m2/lib/log4j.osgi-1.2.15-SNAPSHOT.jar</li>
<li>spring-osgi-1.2.0-m2/lib/org.eclipse.osgi-3.2.2.jar</li>
<li>spring-osgi-1.2.0-m2/lib/servlet-api.osgi-2.5-SNAPSHOT.jar</li>
</ul>
<ul>
<li>spring-framework-2.5.6/dist/modules/spring-aop.jar</li>
<li>spring-framework-2.5.6/dist/modules/spring-beans.jar</li>
<li>spring-framework-2.5.6/dist/modules/spring-context.jar</li>
<li>spring-framework-2.5.6/dist/modules/spring-core.jar</li>
<li>spring-framework-2.5.6/dist/modules/spring-jdbc.jar</li>
<li>spring-framework-2.5.6/dist/modules/spring-tx.jar</li>
<li>spring-framework-2.5.6/dist/modules/spring-web.jar</li>
<li>spring-framework-2.5.6/dist/modules/spring-webmvc.jar</li>
</ul>
<blockquote><p>Pour vous simplifier la tache, vous pouvez télécharger <a href="http://djo-mos.ftp-developpez.com/data/blog/tp-server-springdm-1.2.0.m2-spring-2.5.6-jetty.zip">cet archive zip (5 Mo)</a> qui contient la target platform décrite plus haut)</p></blockquote>
<h1 style="text-align: left;">4. Configuration d&rsquo;Eclipse</h1>
<p>Dans Eclipse, allez au menu Window -> Preferences et localisez le noeud &laquo;&nbsp;Plug-in Development/Target Platform&nbsp;&raquo;</p>
<p><img src="http://farm4.static.flickr.com/3419/3215905144_d9bcdcc417_o.png" alt="Target Platform Preferences" title="" /></p>
<p>Cliquez sur &laquo;&nbsp;Browse&nbsp;&raquo;, localiser le dossier de la target platform et validez.</p>
<p>Il nous faut maintenant créer une configuration de lancement qui lance notre serveur.</p>
<p>Faites un clic sur le petit flêche orienté vers le bas du bouton Run et sélectionnez &laquo;&nbsp;Run configurations&nbsp;&raquo;</p>
<p><img src="http://farm4.static.flickr.com/3344/3215905482_4ee8a5fa38_o.png" alt="Run config 1" title="" /></p>
<p>Sélectionnez le noeud &laquo;&nbsp;OSGi Framework&nbsp;&raquo;, puis clic droit et &laquo;&nbsp;New&nbsp;&raquo;</p>
<p><img src="http://farm4.static.flickr.com/3506/3215905370_385a0a6058_o.png" alt="Run config 2" title="" /></p>
<p>Saisissez un nom pour cette configuration, &laquo;&nbsp;serveur&nbsp;&raquo; par exemple.<br />
Par défaut, tous les plugins de la target platform sont cochés. Faites le si ce n&rsquo;est pas le cas.</p>
<p>Assurez vous aussi que &laquo;&nbsp;Default start level&nbsp;&raquo; est positionné à 4 et que &laquo;&nbsp;Default-Autostart&nbsp;&raquo; est à true</p>
<p>Il faut maintenant modifer le start level des deux extenders de Spring DM (org.springframework.osgi.extender et org.springframework.osgi.web.extender) pour les mettre à 5 </p>
<p><img src="http://farm4.static.flickr.com/3367/3215054619_3bf7a90dd7_o.png" alt="extender-config-1" title="" /></p>
<p><img src="http://farm4.static.flickr.com/3395/3215055301_1caa38eff8_o.png" alt="extender-config-2" title="" /></p>
<p>Cliquez sur &laquo;&nbsp;Apply&nbsp;&raquo; pour valider.</p>
<h1 style="text-align: left;">5. Test</h1>
<p>Cliquez sur le bouton &laquo;&nbsp;Run&nbsp;&raquo;. La console devrait afficher : </p>
<p><img src="http://farm4.static.flickr.com/3459/3215055427_7cea5df262_o.png" alt="console" title="" /></p>
<p>Et si vous tapez l&rsquo;adresse &laquo;&nbsp;http://localhost:8080/&nbsp;&raquo; dans un navigateur, vous devriez avoir :</p>
<p><img src="http://farm4.static.flickr.com/3505/3215054547_1df10575c2_o.png" alt="Browser" title="" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nouvelle registre pour les entêtes OSGi</title>
		<link>https://blog.developpez.com/djo-mos/p6842/java/osgi/nouvelle_registre_pour_les_entetes_osgi</link>
		<comments>https://blog.developpez.com/djo-mos/p6842/java/osgi/nouvelle_registre_pour_les_entetes_osgi#comments</comments>
		<pubDate>Thu, 27 Nov 2008 17:35:45 +0000</pubDate>
		<dc:creator><![CDATA[djo.mos]]></dc:creator>
				<category><![CDATA[OSGi]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[OSGi Allaince vient de rendre disponible une registre des entêtes utilisés dans le fichier MANIFEST.MF, et ce pour essayer d&#8217;éviter des collisions de noms. C&#8217;est accessible par ici : => http://www.osgi.org/Specifications/ReferenceHeaders On notera que cette liste contient les entêtes standard d&#8217;OSGi, ceux de BnD (sous ne nom aQute dans la liste) mais aussi ceux introduits par Spring Source DM Server]]></description>
				<content:encoded><![CDATA[<p>OSGi Allaince vient de rendre disponible une registre des entêtes utilisés dans le fichier MANIFEST.MF, et ce pour essayer d&rsquo;éviter des collisions de noms.</p>
<p>C&rsquo;est accessible par ici :</p>
<p>=> http://www.osgi.org/Specifications/ReferenceHeaders</p>
<p>On notera que cette liste contient les entêtes standard d&rsquo;OSGi, ceux de BnD (sous ne nom aQute dans la liste) mais aussi ceux introduits par <a href="http://blog.developpez.com/djo-mos?cat=1658">Spring Source DM Server</a></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bug bizarroïde, ou OSGi quand tu nous tiens &#8230;</title>
		<link>https://blog.developpez.com/djo-mos/p6528/java/spring/bug_bizarroide_ou_osgi_quand_tu_nous_tie</link>
		<comments>https://blog.developpez.com/djo-mos/p6528/java/spring/bug_bizarroide_ou_osgi_quand_tu_nous_tie#comments</comments>
		<pubDate>Tue, 07 Oct 2008 18:00:57 +0000</pubDate>
		<dc:creator><![CDATA[djo.mos]]></dc:creator>
				<category><![CDATA[OSGi]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Aujourd&#8217;hui, j&#8217;ai failli m&#8217;arracher les cheveux à cause d&#8217;un bug bizarre dans l&#8217;application sur laquelle on travaille (une application client/serveur à base d&#8217;Eclipse RCP côté client et Tomcat tournant comme service dans Equinox côté serveur avec Spring DM). Pour expliquer la chose, on utilise un super petit plug-in développé par Martin Lippert appelé Spring Extension Factory. Ce plugin permet de faire en sorte que les vues et éditeurs Eclipse peuvent être déclarés dans l&#8217;applicationContext du [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Aujourd&rsquo;hui, j&rsquo;ai failli m&rsquo;arracher les cheveux à cause d&rsquo;un bug bizarre dans l&rsquo;application sur laquelle on travaille (une application client/serveur à base d&rsquo;Eclipse RCP côté client et Tomcat tournant comme service dans Equinox côté serveur avec Spring DM).</p>
<p>Pour expliquer la chose, on utilise un super petit plug-in développé par <a href="http://martinlippert.blogspot.com/">Martin Lippert</a> appelé <a href="http://martinlippert.blogspot.com/2008/10/new-version-of-spring-extension-factory.html">Spring Extension Factory</a>. Ce plugin permet de faire en sorte que les vues et éditeurs Eclipse peuvent être déclarés dans l&rsquo;applicationContext du plug-in (en tant que Spring beans quoi) ce qui permet de profiter de la DI par exemple. Plus précisément, dans notre cas ceci revient à injecter les proxies des services distants (sur le serveur) qui seront invoqués par remoting (via Hessian pour le moment, mais c&rsquo;est interchangeable grâce à l&rsquo;abstraction Spring du Remoting).</p>
<p>ça marchait impec jusqu&rsquo;à aujourd&rsquo;hui, où on avait besoin d&rsquo;utiliser une vue définie dans un plug-in A dans une perspective définie par un plug-in B. Et hop, l&rsquo;injection de dépendances ne marchait plus (un NPE à l&rsquo;accès à une des dépendances)</p>
<p><span id="more-161"></span></p>
<p>bon, heureusement que je me suis vite aperçu (enfin, plus d&rsquo;une heure)  que si j&rsquo;utilisais les versions plus récentes de Spring Extension Factory (1.0.3 au lieu de 1.0.1) et de Spring DM (1.1.2 au lieu de 1.1.0), le problème n&rsquo;est plus &#8230; Ouf !</p>
<p>Peut être que c&rsquo;était Spring DM qui n&rsquo;utilisait pas le classloader correct :</p>
<blockquote><p>* fixed usage of incorrect class loader for imported services with client thread context class loader management
</p></blockquote>
<p>(tiré du changelog de la 1.1.2)</p>
<p>Mais bon, comme ça marche là, je vais pas bloquer la dessus <img src="https://blog.developpez.com/djo-mos/wp-includes/images/smilies/icon_biggrin.gif" alt=":D" class="wp-smiley" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sortie de Spring Dynamic Modules 1.2.0 M1</title>
		<link>https://blog.developpez.com/djo-mos/p6327/java/sortie_de_spring_dynamic_modules_1_2_0_m</link>
		<comments>https://blog.developpez.com/djo-mos/p6327/java/sortie_de_spring_dynamic_modules_1_2_0_m#comments</comments>
		<pubDate>Fri, 05 Sep 2008 12:42:30 +0000</pubDate>
		<dc:creator><![CDATA[djo.mos]]></dc:creator>
				<category><![CDATA[Annonces]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[OSGi]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Le premier Milestone du futur Spring Dynamic Modules (DM) 1.2.0 vient tout juste de sortir. Pour rappel, Spring DM permet d&#8217;intégrer les modèles de composition d&#8217;OSGi (externe) et de Spring Framework (interne), et ce en: &#8211; Importer déclarativement des services OSGi en tant que beans Spring, qu ipourront ensuite participer au cycle habituel de Spring (AOP, DI, etc.) &#8211; Exporter déclarativement des beans Spring comme services OSGi. D&#8217;ailleurs, l&#8217;approche du couple Spring/Spring DM pourrait être [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Le premier <em>Milestone</em> du futur <strong><em>Spring Dynamic Modules</em></strong> <em>(DM) 1.<strong>2</strong>.0</em> vient tout juste de sortir.<br />
Pour rappel, Spring DM permet d&rsquo;intégrer les modèles de composition d&rsquo;OSGi (externe) et de Spring Framework (interne), et ce en:<br />
&#8211; Importer déclarativement des services OSGi en tant que beans Spring, qu ipourront ensuite participer au cycle habituel de Spring (AOP, DI, etc.)<br />
&#8211; Exporter déclarativement des beans Spring comme services OSGi.</p>
<p><span id="more-28"></span></p>
<p>D&rsquo;ailleurs, l&rsquo;approche du couple Spring/Spring DM pourrait être retenues comme standard dans les specifications de l&rsquo;OSGi (<a href="http://blog.developpez.com/djo-mos?title=disponibilite_du_premier_early_draft_des_2">Plus de détails ici ici</a>).</p>
<p>Quelques liens clés pour cette sortie:</p>
<p>=> <a href="http://sourceforge.net/project/showfiles.php?group_id=73357&amp;package_id=227224&amp;release_id=624284">Télécharger</a><br />
=> <a href="http://static.springframework.org/osgi/docs/1.2.0-m1/changelog.txt">Changelog</a><br />
=> <a href="http://static.springframework.org/osgi/docs/1.2.0-m1/reference/html/">Documentation</a><br />
=> <a href="http://static.springframework.org/osgi/docs/1.2.0-m1/reference/html/faq.html">FAQ</a></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Disponibilité du premier Early Draft des spécifications OSGi 4.2</title>
		<link>https://blog.developpez.com/djo-mos/p6252/java/disponibilite_du_premier_early_draft_des_2</link>
		<comments>https://blog.developpez.com/djo-mos/p6252/java/disponibilite_du_premier_early_draft_des_2#comments</comments>
		<pubDate>Fri, 22 Aug 2008 13:29:18 +0000</pubDate>
		<dc:creator><![CDATA[djo.mos]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[OSGi]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Depuis Hier, OSGi Alliance a rendu public le premier Early Draft des spécifications de la future version de la plateforme OSGi, la 4.2. Cette version devrait apporter quelques nouveautés majeures, dont je cite : Quelques améliorations quant à la sécurité Introduction du concept de BundleTracker, à l&#8217;instar du ServiceTracker (RFC 121). Nouveaux évènements interceptables pour le cycle de vie des services (RFC 126) Introduction d&#8217;une infrastructure pour les interpréteurs en ligne de commande (RFC 132) [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Depuis Hier, <strong><em>OSGi Alliance</em></strong> a rendu public le premier <em>Early Draft</em> des spécifications de la future version de la plateforme <strong>OSGi</strong>, la <strong>4.2</strong>.</p>
<p>Cette version devrait apporter quelques nouveautés majeures, dont je cite :</p>
<p><span id="more-160"></span></p>
<ul>
<li>Quelques améliorations quant à la sécurité</li>
<li>Introduction du concept de <em>BundleTracker</em>, à l&rsquo;instar du <em>ServiceTracker</em> (RFC 121).</li>
<li>Nouveaux évènements interceptables pour le cycle de vie des services (RFC 126)</li>
<li>Introduction d&rsquo;une infrastructure pour les interpréteurs en ligne de commande (RFC 132) (Comme pour les CommandProvider d&rsquo;Eclipse)</li>
<li>Support des transactions (RFC 98)</li>
<li>Support des services distants (et des systèmes distribués en général) (RFC 119)</li>
<li>Mais <strong>surtout</strong>, l&rsquo;introduction d&rsquo;un <strong>modèle de composants</strong> propre à l&rsquo;OSGi (RFC 124)</li>
</ul>
<p>Pour revenir au dernier point, OSGi fournit déjà les moyens pour gérer les dépendances inter-bundles (via services et import/export de packages), mais pas de facilité de gestion de composants internes aux modules (création, configuration, assemblage, etc.).<br />
Pour mettre en place ce modèle de composants, OSGi Alliance s&rsquo;est inspiré par le standard officieux dans monde Java, j&rsquo;ai nommé <strong>Spring</strong> <img src="https://blog.developpez.com/djo-mos/wp-includes/images/smilies/icon_biggrin.gif" alt=":D" class="wp-smiley" /> qui offre déjà un ensemble de fonctionnalités riche et complet pour ce qui est de la gestion des composants, ainsi qu&rsquo;à <strong>Spring Dynamic Modules</strong> qui a su combiner à la perfection le monde de Spring à celui de l&rsquo;OSGi.</p>
<p>Bref, cet RFC est grossomodo une standardisation de l&rsquo;approche déclarative de Spring et de Spring DM.<br />
Après avoir vu rapidement le draft, je n&rsquo;ai décelé que quelques différences minimes parapport à l&rsquo;approche de spring, et qui sont l&rsquo;utilisation d&rsquo;autres namespaces propores à OSGi (logique) et l&rsquo;utilisation de l&rsquo;élément <code class="codecolorer text default"><span class="text">&lt;component&gt;</span></code> au lieu du familier <code class="codecolorer text default"><span class="text">&lt;bean&gt;</span></code>. </p>
<p>Le draft en question est ici:<br />
=> http://www.osgi.org/Download/File?url=/download/osgi-4.2-early-draft.pdf</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sortie de la version finale d&#8217;EclipseLink 1.0</title>
		<link>https://blog.developpez.com/djo-mos/p6044/java/sortie_de_la_version_finale_d_eclipselin_0</link>
		<comments>https://blog.developpez.com/djo-mos/p6044/java/sortie_de_la_version_finale_d_eclipselin_0#comments</comments>
		<pubDate>Wed, 09 Jul 2008 23:57:09 +0000</pubDate>
		<dc:creator><![CDATA[djo.mos]]></dc:creator>
				<category><![CDATA[Annonces]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JPA]]></category>
		<category><![CDATA[OSGi]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[L&#8217;équipe d&#8217;EclipseLink vient d&#8217;annoncer la sortie de la version finale d&#8217;EclipseLink, un framework de persistance pour Java utilisable avec des bases de données relationelles, non realtionelles ou fichiers XML, et exposant plusieurs APIs (JPA, JAXB, etc.) EclipseLink est composé de: Mapping Objet/Relationnel : Une implémentation JPA basée sur Toplink Mapping Objet/XML : via MOXy, qui implémente et JAXB et une API spécifique. Généraion de Service Data Object (SDO) à partir d&#8217;un XSD Accès aux DataStores [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>L&rsquo;équipe d&rsquo;EclipseLink vient <a href="http://eclipselink.blogspot.com/2008/07/eclipselink-10-released.html">d&rsquo;annoncer la sortie</a> de la version finale d&rsquo;EclipseLink, un framework de persistance pour Java utilisable avec des bases de données relationelles, non realtionelles ou fichiers XML, et exposant plusieurs APIs (JPA, JAXB, etc.)</p>
<p><span id="more-85"></span></p>
<p>EclipseLink est composé de:</p>
<ul>
<li>Mapping Objet/Relationnel : Une implémentation JPA basée sur Toplink</li>
<li>Mapping Objet/XML : via MOXy, qui implémente et JAXB et une API spécifique.</li>
<li>Généraion de Service Data Object (SDO) à partir d&rsquo;un XSD</li>
<li>Accès aux DataStores non relationnels via un adaptateur JCA : EIS</li>
</ul>
<p>A Noter aussi qu&rsquo;EclipseLink est compatible avec OSGi (venant d&rsquo;Eclipse, ça n&rsquo;étonne pas :D).</p>
<p>Quelques liens utiles :<br />
=> <a href="http://www.eclipse.org/eclipselink/downloads/index.php">Télécharger</a><br />
=> <a href="http://www.eclipse.org/eclipselink">Site</a><br />
=> <a href="http://wiki.eclipse.org/EclipseLink">Wiki</a><br />
=> <a href="http://www.eclipse.org/newsportal/thread.php?group=eclipse.rt.eclipselink">News Group</a></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Prototype d&#8217;Application Client/Serveur avec Eclipse RCP et S2AP</title>
		<link>https://blog.developpez.com/djo-mos/p6018/eclipse/prototype_d_application_client_serveur_a</link>
		<comments>https://blog.developpez.com/djo-mos/p6018/eclipse/prototype_d_application_client_serveur_a#comments</comments>
		<pubDate>Sat, 05 Jul 2008 00:54:24 +0000</pubDate>
		<dc:creator><![CDATA[djo.mos]]></dc:creator>
				<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[OSGi]]></category>
		<category><![CDATA[Spring Framework]]></category>
		<category><![CDATA[SpringSource DM Server/S2AP]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Juste pour signaler que j&#8217;ai enfin réussi à mettre en place un prototype d&#8217;une application client/serveur full-OSGi où le server est un par tournant dans S2AP et le client est une application Eclipse RCP. Le serveur et le client sont architecturés comme suit: Le serveur est un ensemble de bundles OSGi tournant sur S2AP (beta 8) composé comme suit: un bundle définissant un PAO un bundle définissant l&#8217;interface d&#8217;un DAO un bundle définissant une implémentation [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Juste pour signaler que j&rsquo;ai enfin réussi à mettre en place un prototype d&rsquo;une application client/serveur full-OSGi où le server est un par tournant dans S2AP et le client est une application Eclipse RCP.</p>
<p>Le serveur et le client sont architecturés comme suit:</p>
<p><span id="more-159"></span></p>
<ul>
<li>Le serveur est un ensemble de bundles OSGi tournant sur S2AP (beta 8) composé comme suit:
<ul>
<li>un bundle définissant un PAO</li>
<li>un bundle définissant l&rsquo;interface d&rsquo;un DAO</li>
<li>un bundle définissant une implémentation du DAO utilisant Spring JDBC, MySQL et Apache DBCP</li>
<li>un bundle exposant ce DAO pour accès distant via Hessian/Spring</li>
</ul>
</li>
<li>Le client est une application à base d&rsquo;Eclipse RCP (3.4) qui est constitué de :
<ul>
<li>un bundle définissant un PAO (exactement le même que celui deployé dans le serveur)</li>
<li>un bundle définissant l&rsquo;interface d&rsquo;un DAO (exactement le même que celui deployé dans le serveur)</li>
<li>un bundle qui importe le DAO distant (toujours via Hessian/Spring) et l&rsquo;expose en tant que Service OSGi (via Spring DM)</li>
<li>un plug-in qui définit l&rsquo;aplication RCP</li>
<li>un plug-in qui ddéfinit une perspective et une vue affichant la liste des PAOs récupérés par le DAO distant tournant sur le serveur.</li>
</ul>
</li>
</ul>
<p>Ca m&rsquo;a pris 2 jours (plus précisément 2 demi-journées et 1 nuit blanche), et même si le résultat est juste un proof-of-concept, sa mise en place etait vraiment douleureuse.</p>
<p>Je compte donc faire partager cette expérience en montrant, captures, explications et sources à l&rsquo;appui, comment réaliser celà, enfin, si ça intéresse quelqu&rsquo;un <img src="https://blog.developpez.com/djo-mos/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
<p>Par contre, j&rsquo;hésite encore sur le format : soit une série de billets dans ce blog, ou encore un article en bonne et due forme. Toutefois, ça risque de prendre du temps quand même &#8230;</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
