<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8666538509897823475</id><updated>2024-09-05T09:39:37.463+02:00</updated><category term="clojure"/><category term="grizzly"/><category term="maven2"/><category term="dependency"/><category term="osgi"/><category term="overview"/><category term="testing"/><category term="announce"/><category term="plugin"/><category term="http"/><category term="HttpService"/><category term="async-http-client"/><category term="asynchronous"/><category term="client"/><category term="http.async.client"/><category term="integration"/><category term="learning"/><category term="archetype"/><category term="cargo"/><category term="grizzly devoxx preso"/><category term="http stream"/><category term="http-proxy"/><category term="maven3"/><category term="twitter"/><title type='text'>code me self</title><subtitle type='html'>Inevitable Hubert</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://codemeself.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://codemeself.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>neotyk</name><uri>http://www.blogger.com/profile/03897419234057699787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6IxdCSA4wKC0e-99EIT8etdmGyWVHxlP8kLPpzFhuDh_sgnja5HoN6T2LObK-wrR-WFVXlFqHgGlPca7cyEbqN29GzlJ7yFPJPCKM-Aw4_hjcxk5bRxEjtWMXPbd_tg/s220/head-128-white.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>24</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8666538509897823475.post-7356845262131666624</id><published>2011-06-17T17:32:00.000+02:00</published><updated>2011-06-17T17:32:02.199+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="announce"/><category scheme="http://www.blogger.com/atom/ns#" term="async-http-client"/><category scheme="http://www.blogger.com/atom/ns#" term="asynchronous"/><category scheme="http://www.blogger.com/atom/ns#" term="client"/><category scheme="http://www.blogger.com/atom/ns#" term="clojure"/><category scheme="http://www.blogger.com/atom/ns#" term="http"/><category scheme="http://www.blogger.com/atom/ns#" term="http.async.client"/><title type='text'>http.async.client v0.3.0</title><content type='html'>&lt;p&gt;&lt;b&gt;http.async.client&lt;/b&gt; v0.3.0 intorduces few changes.&lt;br /&gt;
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;#explicit-client&quot;&gt;Explicit client usage&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#with-client-gone&quot;&gt;with-client is gone&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#preemptive&quot;&gt;Preemptive authentication&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#clj-1.2.1&quot;&gt;Clojure 1.2.1 support&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#ahc-1.6.3&quot;&gt;async-http-client v1.6.3&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;h3 id=&quot;explicit-client&quot;&gt;Explicit client usage&lt;/h3&gt;&lt;p&gt;As it turned out, having implicit client management and default client started by itself, was not the smartest thing to do.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;Since I have very little &lt;i&gt;respect&lt;/i&gt; for code that is wrong, I&#39;ve changed it.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;Now client has to be managed explicitly, meaning you have to create and close it yourself.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;All methods that issue requests now expect client as first argument.&lt;br /&gt;
&lt;/p&gt;&lt;script src=&quot;https://gist.github.com/1031642.js?file=explicit_client.clj&quot;&gt;&lt;/script&gt;&lt;br /&gt;
&lt;p&gt;This breaks API compatibility with anything prior to v0.3.0.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;I repeat: you will have to create and close client yourself.&lt;br /&gt;
&lt;/p&gt;&lt;h3 id=&quot;with-client-gone&quot;&gt;with-client is gone&lt;/h3&gt;&lt;p&gt;&lt;b&gt;with-client&lt;/b&gt; macro is gone now. It might have been useful with implicit client management, but with explicit situation it would be just a copy of with-open.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;Please use with-open in connection with create-client.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;Migration path from:&lt;br /&gt;
&lt;/p&gt;&lt;script src=&quot;https://gist.github.com/1031642.js?file=with-client-gone-from.clj&quot;&gt;&lt;/script&gt;&lt;br /&gt;
&lt;p&gt;To:&lt;/p&gt;&lt;script src=&quot;https://gist.github.com/1031642.js?file=with-client-gone-to.clj&quot;&gt;&lt;/script&gt;&lt;h3 id=&quot;preemptive&quot;&gt;Preemptive authentication&lt;/h3&gt;&lt;p&gt;Thanks to &lt;a href=&quot;https://github.com/xeqi&quot;&gt;xeqi&lt;/a&gt; for patch that provides means of controlling preemptive authentication both &lt;a href=&quot;http://neotyk.github.com/http.async.client/docs.html#sec-2_3_6&quot;&gt;per request&lt;/a&gt; and &lt;a href=&quot;http://neotyk.github.com/http.async.client/docs.html#sec-2_6_10&quot;&gt;global&lt;/a&gt;.&lt;br /&gt;
&lt;/p&gt;&lt;h3 id=&quot;clj-1.2.1&quot;&gt;Clojure 1.2.1 support&lt;/h3&gt;&lt;p&gt;Fixed cyclic dependency in http.async.client that was not reported in 1.2.0 but prevented you from been able to load it 1.2.1.&lt;br /&gt;
&lt;/p&gt;&lt;h3 id=&quot;ahc-1.6.3&quot;&gt;async-http-client v1.6.3 &lt;/h3&gt;&lt;p&gt;Underlying async-http-client library version has been upgraded to 1.6.3.&lt;br /&gt;
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://codemeself.blogspot.com/feeds/7356845262131666624/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codemeself.blogspot.com/2011/06/httpasyncclient-v030.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/7356845262131666624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/7356845262131666624'/><link rel='alternate' type='text/html' href='http://codemeself.blogspot.com/2011/06/httpasyncclient-v030.html' title='http.async.client v0.3.0'/><author><name>neotyk</name><uri>http://www.blogger.com/profile/03897419234057699787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6IxdCSA4wKC0e-99EIT8etdmGyWVHxlP8kLPpzFhuDh_sgnja5HoN6T2LObK-wrR-WFVXlFqHgGlPca7cyEbqN29GzlJ7yFPJPCKM-Aw4_hjcxk5bRxEjtWMXPbd_tg/s220/head-128-white.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666538509897823475.post-346827093454768953</id><published>2011-03-31T14:09:00.004+02:00</published><updated>2011-03-31T17:03:59.656+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="announce"/><category scheme="http://www.blogger.com/atom/ns#" term="clojure"/><category scheme="http://www.blogger.com/atom/ns#" term="http"/><title type='text'>Announcing status-codes</title><content type='html'>&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 32px; font-weight: bold; &quot;&gt;Announcing &lt;a href=&quot;https://github.com/neotyk/status-codes&quot;&gt;status-codes&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;div id=&quot;content&quot;&gt;&lt;div id=&quot;outline-container-1&quot; class=&quot;outline-2&quot;&gt;&lt;h2 id=&quot;sec-1&quot;&gt;&lt;b&gt;&lt;a href=&quot;https://github.com/neotyk/status-codes&quot;&gt;status-codes&lt;/a&gt;&lt;/b&gt; is easy response status codes&lt;/h2&gt;&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;&lt;p&gt;  It&#39;s easy &lt;a href=&quot;https://github.com/neotyk/status-codes&quot;&gt;status codes&lt;/a&gt; for compojure.&lt;br /&gt;Not that status codes in compojure are particularly hard.&lt;br /&gt;I just prefer in applications that I work with to use keywords for&lt;br /&gt;status codes, rather than status codes as numbers.&lt;/p&gt;&lt;pre class=&quot;code src-clojure&quot;&gt;&lt;span style=&quot;color: #8c8c8c;&quot;&gt;(&lt;/span&gt;routes&lt;br /&gt;&lt;span style=&quot;color: #8c8c8c;&quot;&gt;(&lt;/span&gt;GET &lt;span style=&quot;color: #8b2252;&quot;&gt;&quot;/ok&quot;&lt;/span&gt;           _ &lt;span style=&quot;color: #7a378b;&quot;&gt;:ok&lt;/span&gt;&lt;span style=&quot;color: #8c8c8c;&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #8c8c8c;&quot;&gt;(&lt;/span&gt;GET &lt;span style=&quot;color: #8b2252;&quot;&gt;&quot;/accepted&quot;&lt;/span&gt;     _ &lt;span style=&quot;color: #7a378b;&quot;&gt;:accepted&lt;/span&gt;&lt;span style=&quot;color: #8c8c8c;&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #8c8c8c;&quot;&gt;(&lt;/span&gt;GET &lt;span style=&quot;color: #8b2252;&quot;&gt;&quot;/ok-map&quot;&lt;/span&gt;       _ {&lt;span style=&quot;color: #7a378b;&quot;&gt;:status&lt;/span&gt; &lt;span style=&quot;color: #7a378b;&quot;&gt;:ok&lt;/span&gt;}&lt;span style=&quot;color: #8c8c8c;&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #8c8c8c;&quot;&gt;(&lt;/span&gt;GET &lt;span style=&quot;color: #8b2252;&quot;&gt;&quot;/accepted-map&quot;&lt;/span&gt; _ {&lt;span style=&quot;color: #7a378b;&quot;&gt;:status&lt;/span&gt; &lt;span style=&quot;color: #7a378b;&quot;&gt;:accepted&lt;/span&gt;}&lt;span style=&quot;color: #8c8c8c;&quot;&gt;))&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;  Not much really, but it reads better than 200, 202 and so on.&lt;br /&gt;In order to have this sugar in your routes pick &lt;a href=&quot;https://github.com/neotyk/status-codes&quot;&gt;status-codes&lt;/a&gt; from&lt;br /&gt;&lt;a href=&quot;http://clojars.org/status-codes&quot;&gt;clojars&lt;/a&gt;, and require/use status-codes:&lt;/p&gt;&lt;pre class=&quot;code src-clojure&quot;&gt;&lt;span style=&quot;color: #8c8c8c;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;ns&lt;/span&gt; your.ns&lt;br /&gt;&lt;span style=&quot;color: #8c8c8c;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #7a378b;&quot;&gt;:use&lt;/span&gt; status-codes&lt;span style=&quot;color: #8c8c8c;&quot;&gt;))&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;  Enjoy.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codemeself.blogspot.com/feeds/346827093454768953/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codemeself.blogspot.com/2011/03/announcing-status-codes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/346827093454768953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/346827093454768953'/><link rel='alternate' type='text/html' href='http://codemeself.blogspot.com/2011/03/announcing-status-codes.html' title='Announcing status-codes'/><author><name>neotyk</name><uri>http://www.blogger.com/profile/03897419234057699787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6IxdCSA4wKC0e-99EIT8etdmGyWVHxlP8kLPpzFhuDh_sgnja5HoN6T2LObK-wrR-WFVXlFqHgGlPca7cyEbqN29GzlJ7yFPJPCKM-Aw4_hjcxk5bRxEjtWMXPbd_tg/s220/head-128-white.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666538509897823475.post-9000133200699025127</id><published>2010-10-07T23:13:00.005+02:00</published><updated>2010-10-08T01:19:07.584+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="announce"/><category scheme="http://www.blogger.com/atom/ns#" term="async-http-client"/><category scheme="http://www.blogger.com/atom/ns#" term="asynchronous"/><category scheme="http://www.blogger.com/atom/ns#" term="client"/><category scheme="http://www.blogger.com/atom/ns#" term="http"/><title type='text'>Async HTTP Client 1.2.0</title><content type='html'>&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 32px; font-weight: bold; &quot;&gt;Async HTTP Client 1.2.0&lt;/span&gt;&lt;br /&gt;&lt;div id=&quot;content&quot;&gt;&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 24px; font-weight: bold; &quot;&gt;Intro&lt;/span&gt;&lt;br /&gt;&lt;div id=&quot;outline-container-1&quot; class=&quot;outline-2&quot;&gt;&lt;br /&gt;&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;About month ago we released &lt;b&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client&quot;&gt;async-http-client&lt;/a&gt;&lt;/b&gt; 1.1.0.&lt;br /&gt;During this month we received lots of contributions and user feedback.&lt;/div&gt;&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;We took all of this great feedback into consideration,&lt;/div&gt;&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;and here it is: lots of bug fixes and new features in &lt;b&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client&quot;&gt;async-http-client&lt;/a&gt;&lt;/b&gt; are ready to be released.&lt;/div&gt;&lt;div class=&quot;outline-text-2&quot; id=&quot;text-1&quot;&gt;You can get it from &lt;a href=&quot;http://repo1.maven.org/maven2/com/ning/async-http-client/1.2.0/&quot;&gt;Maven Central&lt;/a&gt; near you.&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;outline-container-2&quot; class=&quot;outline-2&quot;&gt;&lt;h2 id=&quot;sec-2&quot;&gt;Highlights &lt;/h2&gt;&lt;div class=&quot;outline-text-2&quot; id=&quot;text-2&quot;&gt;To cut the long story short here are highlights of few new features.&lt;ul&gt;&lt;li id=&quot;sec-2_1&quot;&gt;JDK based provider&lt;br /&gt;&lt;br /&gt;This release support a new AsyncHttpProvider based on JDK&#39;s URLConnection.&lt;br /&gt;This provider can be used in environments that aren&#39;t supporting NIO.&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: monospace; font-size: 13px; white-space: pre; &quot;&gt;&lt;span style=&quot;color: #228b22;&quot;&gt;AsyncHttpClient&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;client&lt;/span&gt; = &lt;span style=&quot;color: #7f007f;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #228b22;&quot;&gt;AsyncHttpClient&lt;/span&gt;(&lt;span style=&quot;color: #7f007f;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #228b22;&quot;&gt;JDKAsyncHttpProvider&lt;/span&gt;(config));&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-2_2&quot;&gt;Authentication&lt;br /&gt;&lt;br /&gt;The library now support 3 authentication scheme: Basic, Digest and NTLM.&lt;br /&gt;&lt;pre class=&quot;src src-java&quot;&gt;&lt;span style=&quot;color: #228b22;&quot;&gt;RequestBuilder&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;r&lt;/span&gt; = client.prepareGet(url)&lt;br /&gt;           .setRealm((&lt;span style=&quot;color: #7f007f;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #008b8b;&quot;&gt;Realm&lt;/span&gt;.&lt;span style=&quot;color: #228b22;&quot;&gt;RealmBuilder&lt;/span&gt;())&lt;br /&gt;                      .setScheme(AuthScheme)&lt;br /&gt;                      .setPrincipal(user)&lt;br /&gt;                      .setPassword(admin)&lt;br /&gt;                      .setUsePreemptiveAuth(&lt;span style=&quot;color: #008b8b;&quot;&gt;true&lt;/span&gt;).build());&lt;/pre&gt;AuthScheme can be BASIC, DIGEST or NTLM.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-2_3&quot;&gt;SSL Tunneling support&lt;br /&gt;&lt;br /&gt;This release also adds support for SSL Tunneling.&lt;br /&gt;&lt;pre class=&quot;src src-java&quot;&gt;&lt;span style=&quot;color: #008b8b;&quot;&gt;AsyncHttpClientConfig&lt;/span&gt;.&lt;span style=&quot;color: #228b22;&quot;&gt;Builder&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;b&lt;/span&gt; = &lt;span style=&quot;color: #7f007f;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #008b8b;&quot;&gt;AsyncHttpClientConfig&lt;/span&gt;.&lt;span style=&quot;color: #228b22;&quot;&gt;Builder&lt;/span&gt;();&lt;br /&gt;b.setFollowRedirects(&lt;span style=&quot;color: #008b8b;&quot;&gt;true&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #228b22;&quot;&gt;ProxyServer&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;ps&lt;/span&gt; = &lt;span style=&quot;color: #7f007f;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #228b22;&quot;&gt;ProxyServer&lt;/span&gt;(&lt;span style=&quot;color: #008b8b;&quot;&gt;ProxyServer&lt;/span&gt;.&lt;span style=&quot;color: #008b8b;&quot;&gt;Protocol&lt;/span&gt;.HTTPS, &lt;span style=&quot;color: #8b2252;&quot;&gt;&quot;127.0.0.1&quot;&lt;/span&gt;, port1);&lt;br /&gt;b.setProxyServer(ps);&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #228b22;&quot;&gt;AsyncHttpClientConfig&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;config&lt;/span&gt; = b.build();&lt;br /&gt;&lt;span style=&quot;color: #228b22;&quot;&gt;AsyncHttpClient&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;asyncHttpClient&lt;/span&gt; = &lt;span style=&quot;color: #7f007f;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #228b22;&quot;&gt;AsyncHttpClient&lt;/span&gt;(config);&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #228b22;&quot;&gt;RequestBuilder&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;rb&lt;/span&gt; = &lt;span style=&quot;color: #7f007f;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #228b22;&quot;&gt;RequestBuilder&lt;/span&gt;(&lt;span style=&quot;color: #8b2252;&quot;&gt;&quot;GET&quot;&lt;/span&gt;).setUrl(url);&lt;br /&gt;Future&amp;lt;Response&amp;gt; responseFuture = asyncHttpClient.executeRequest(rb.build(), &lt;span style=&quot;color: #7f007f;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #228b22;&quot;&gt;AsyncCompletionHandlerBase&lt;/span&gt;() {&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #228b22;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;onThrowable&lt;/span&gt;(&lt;span style=&quot;color: #228b22;&quot;&gt;Throwable&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;t&lt;/span&gt;) {&lt;br /&gt;    log.debug(t);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@Override&lt;br /&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;public&lt;/span&gt; Response onCompleted(&lt;span style=&quot;color: #228b22;&quot;&gt;Response&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;response&lt;/span&gt;) &lt;span style=&quot;color: #7f007f;&quot;&gt;throws&lt;/span&gt; &lt;span style=&quot;color: #228b22;&quot;&gt;Exception&lt;/span&gt; {&lt;br /&gt;    &lt;span style=&quot;color: #7f007f;&quot;&gt;return&lt;/span&gt; response;&lt;br /&gt;}&lt;br /&gt;});&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-2_4&quot;&gt;WebDav&lt;br /&gt;&lt;br /&gt;WebDav is now supported and can be used with two interfaces.&lt;ul&gt;&lt;li id=&quot;sec-2_4_1&quot;&gt;Low level&lt;br /&gt;&lt;pre class=&quot;src src-java&quot;&gt;&lt;span style=&quot;color: #228b22;&quot;&gt;AsyncHttpClient&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;c&lt;/span&gt; = &lt;span style=&quot;color: #7f007f;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #228b22;&quot;&gt;AsyncHttpClient&lt;/span&gt;();&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #228b22;&quot;&gt;Request&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;mkcolRequest&lt;/span&gt; = &lt;span style=&quot;color: #7f007f;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #228b22;&quot;&gt;RequestBuilder&lt;/span&gt;(&lt;span style=&quot;color: #8b2252;&quot;&gt;&quot;MKCOL&quot;&lt;/span&gt;).setUrl(&lt;span style=&quot;color: #8b2252;&quot;&gt;&quot;http://127.0.0.1:8080/folder1&quot;&lt;/span&gt;).build();&lt;br /&gt;&lt;span style=&quot;color: #228b22;&quot;&gt;Response&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;response&lt;/span&gt; =  c.executeRequest(mkcolRequest).get();&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #228b22;&quot;&gt;Request&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;putRequest&lt;/span&gt; = &lt;span style=&quot;color: #7f007f;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #228b22;&quot;&gt;RequestBuilder&lt;/span&gt;(&lt;span style=&quot;color: #8b2252;&quot;&gt;&quot;PUT&quot;&lt;/span&gt;).setUrl(&lt;span style=&quot;color: #8b2252;&quot;&gt;&quot;http://127.0.0.1:8080/folder1/Test.txt&quot;&lt;/span&gt;).setBody(&lt;span style=&quot;color: #8b2252;&quot;&gt;&quot;this is a test&quot;&lt;/span&gt;).build();&lt;br /&gt;response =  c.executeRequest(putRequest).get();&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #228b22;&quot;&gt;Request&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;propFindRequest&lt;/span&gt; = &lt;span style=&quot;color: #7f007f;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #228b22;&quot;&gt;RequestBuilder&lt;/span&gt;(&lt;span style=&quot;color: #8b2252;&quot;&gt;&quot;PROPFIND&quot;&lt;/span&gt;).setUrl(&lt;span style=&quot;color: #8b2252;&quot;&gt;&quot;http://127.0.0.1:8080/folder1/Test.txt&quot;&lt;/span&gt;).build();&lt;br /&gt;response =  c.executeRequest(propFindRequest).get();&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #b22222;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #b22222;&quot;&gt;Check the response.&lt;br /&gt;&lt;/span&gt;response.getStatusCode(); &lt;span style=&quot;color: #b22222;&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: #b22222;&quot;&gt;Will return 207&lt;br /&gt;&lt;/span&gt;response.getResponseBody().contains(&lt;span style=&quot;color: #8b2252;&quot;&gt;&quot;&amp;lt;status&amp;gt;HTTP/1.1 200 OK&amp;lt;/status&amp;gt;&quot;&lt;/span&gt;));&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-2_4_2&quot;&gt;High level&lt;br /&gt;&lt;br /&gt;You can also use a special AsyncHandler which construct a response&lt;br /&gt;based on the webdav response&#39;s code.&lt;br /&gt;&lt;pre class=&quot;src src-java&quot;&gt;&lt;span style=&quot;color: #228b22;&quot;&gt;AsyncHttpClient&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;c&lt;/span&gt; = &lt;span style=&quot;color: #7f007f;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #228b22;&quot;&gt;AsyncHttpClient&lt;/span&gt;();&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #228b22;&quot;&gt;Request&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;mkcolRequest&lt;/span&gt; = &lt;span style=&quot;color: #7f007f;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #228b22;&quot;&gt;RequestBuilder&lt;/span&gt;(&lt;span style=&quot;color: #8b2252;&quot;&gt;&quot;MKCOL&quot;&lt;/span&gt;).setUrl(&lt;span style=&quot;color: #8b2252;&quot;&gt;&quot;http://127.0.0.1:8080/folder1&quot;&lt;/span&gt;).build();&lt;br /&gt;&lt;span style=&quot;color: #228b22;&quot;&gt;Response&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;response&lt;/span&gt; =  c.executeRequest(mkcolRequest).get();&lt;br /&gt;assertEquals(response.getStatusCode(), 201);&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #228b22;&quot;&gt;Request&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;propFindRequest&lt;/span&gt; = &lt;span style=&quot;color: #7f007f;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #228b22;&quot;&gt;RequestBuilder&lt;/span&gt;(&lt;span style=&quot;color: #8b2252;&quot;&gt;&quot;PROPFIND&quot;&lt;/span&gt;).setUrl(&lt;span style=&quot;color: #8b2252;&quot;&gt;&quot;http://127.0.0.1:8080/folder1/&quot;&lt;/span&gt;).build();&lt;br /&gt;&lt;span style=&quot;color: #228b22;&quot;&gt;WebDavResponse&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;webDavResponse&lt;/span&gt; =  c.executeRequest(propFindRequest, &lt;span style=&quot;color: #7f007f;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #228b22;&quot;&gt;WebDavCompletionHandlerBase&lt;/span&gt;&amp;lt;WebDavResponse&amp;gt;() {&lt;br /&gt;&lt;br /&gt;@Override&lt;br /&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;public&lt;/span&gt; WebDavResponse onCompleted(&lt;span style=&quot;color: #228b22;&quot;&gt;WebDavResponse&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;response&lt;/span&gt;) &lt;span style=&quot;color: #7f007f;&quot;&gt;throws&lt;/span&gt; &lt;span style=&quot;color: #228b22;&quot;&gt;Exception&lt;/span&gt; {&lt;br /&gt;    &lt;span style=&quot;color: #7f007f;&quot;&gt;return&lt;/span&gt; response;&lt;br /&gt;}&lt;br /&gt;}).get();&lt;br /&gt;&lt;br /&gt;webDavResponse.getStatusCode(); &lt;span style=&quot;color: #b22222;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #b22222;&quot;&gt;will return 200.&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-2_5&quot;&gt;Zero copy&lt;br /&gt;&lt;br /&gt;Sometimes you need to just download some content, with out&lt;br /&gt;copying/inspecting the bytes in memory, just download and store.&lt;br /&gt;&lt;pre class=&quot;src src-java&quot;&gt;&lt;span style=&quot;color: #228b22;&quot;&gt;File&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;file&lt;/span&gt; = &lt;span style=&quot;color: #7f007f;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #228b22;&quot;&gt;File&lt;/span&gt;(url.toURI());&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #228b22;&quot;&gt;File&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;tmp&lt;/span&gt; = &lt;span style=&quot;color: #7f007f;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #228b22;&quot;&gt;File&lt;/span&gt;(System.getProperty(&lt;span style=&quot;color: #8b2252;&quot;&gt;&quot;java.io.tmpdir&quot;&lt;/span&gt;) + File.separator + &lt;span style=&quot;color: #8b2252;&quot;&gt;&quot;zeroCopy.txt&quot;&lt;/span&gt;);&lt;br /&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;final&lt;/span&gt; &lt;span style=&quot;color: #228b22;&quot;&gt;FileOutputStream&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;stream&lt;/span&gt; = &lt;span style=&quot;color: #7f007f;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #228b22;&quot;&gt;FileOutputStream&lt;/span&gt;(tmp);&lt;br /&gt;&lt;span style=&quot;color: #b22222;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #b22222;&quot;&gt;Upload a file using setBody(File);&lt;br /&gt;&lt;/span&gt;Future&amp;lt;Response&amp;gt; f = client.preparePost(&lt;span style=&quot;color: #8b2252;&quot;&gt;&quot;http://127.0.0.1:&quot;&lt;/span&gt; + port1 + &lt;span style=&quot;color: #8b2252;&quot;&gt;&quot;/&quot;&lt;/span&gt;).setBody(file).execute(&lt;span style=&quot;color: #7f007f;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #228b22;&quot;&gt;AsyncHandler&lt;/span&gt;&amp;lt;Response&amp;gt;() {&lt;br /&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #228b22;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;onThrowable&lt;/span&gt;(&lt;span style=&quot;color: #228b22;&quot;&gt;Throwable&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;t&lt;/span&gt;) {}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #228b22;&quot;&gt;STATE&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;onBodyPartReceived&lt;/span&gt;(&lt;span style=&quot;color: #228b22;&quot;&gt;HttpResponseBodyPart&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;bodyPart&lt;/span&gt;) &lt;span style=&quot;color: #7f007f;&quot;&gt;throws&lt;/span&gt; &lt;span style=&quot;color: #228b22;&quot;&gt;Exception&lt;/span&gt; {&lt;br /&gt;    bodyPart.writeTo(stream);&lt;br /&gt;    &lt;span style=&quot;color: #b22222;&quot;&gt;// &lt;/span&gt;&lt;span style=&quot;color: #b22222;&quot;&gt;Copy the bytes directly to a File. In our case it is an FileInputStream&lt;br /&gt;&lt;/span&gt;        &lt;span style=&quot;color: #7f007f;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #008b8b;&quot;&gt;STATE&lt;/span&gt;.CONTINUE;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #228b22;&quot;&gt;STATE&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;onStatusReceived&lt;/span&gt;(&lt;span style=&quot;color: #228b22;&quot;&gt;HttpResponseStatus&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;responseStatus&lt;/span&gt;) &lt;span style=&quot;color: #7f007f;&quot;&gt;throws&lt;/span&gt; &lt;span style=&quot;color: #228b22;&quot;&gt;Exception&lt;/span&gt; {&lt;br /&gt;    &lt;span style=&quot;color: #7f007f;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #008b8b;&quot;&gt;STATE&lt;/span&gt;.CONTINUE;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #228b22;&quot;&gt;STATE&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;onHeadersReceived&lt;/span&gt;(&lt;span style=&quot;color: #228b22;&quot;&gt;HttpResponseHeaders&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;headers&lt;/span&gt;) &lt;span style=&quot;color: #7f007f;&quot;&gt;throws&lt;/span&gt; &lt;span style=&quot;color: #228b22;&quot;&gt;Exception&lt;/span&gt; {&lt;br /&gt;    &lt;span style=&quot;color: #7f007f;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #008b8b;&quot;&gt;STATE&lt;/span&gt;.CONTINUE;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #7f007f;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #228b22;&quot;&gt;Response&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;onCompleted&lt;/span&gt;() &lt;span style=&quot;color: #7f007f;&quot;&gt;throws&lt;/span&gt; &lt;span style=&quot;color: #228b22;&quot;&gt;Exception&lt;/span&gt; {&lt;br /&gt;    &lt;span style=&quot;color: #7f007f;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #008b8b;&quot;&gt;null&lt;/span&gt;;&lt;br /&gt;}&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #228b22;&quot;&gt;Response&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;resp&lt;/span&gt; = f.get();&lt;br /&gt;stream.close();&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-2_6&quot;&gt;Automatic HTTPS redirects&lt;br /&gt;&lt;br /&gt;Another new feature is we do support redirect from http to HTTPS automatically:&lt;br /&gt;&lt;pre class=&quot;src src-java&quot;&gt;&lt;span style=&quot;color: #228b22;&quot;&gt;AsyncHttpClientConfig&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;cg&lt;/span&gt; = &lt;span style=&quot;color: #7f007f;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #008b8b;&quot;&gt;AsyncHttpClientConfig&lt;/span&gt;.&lt;span style=&quot;color: #228b22;&quot;&gt;Builder&lt;/span&gt;().setFollowRedirects(&lt;span style=&quot;color: #008b8b;&quot;&gt;true&lt;/span&gt;).build();&lt;br /&gt;&lt;span style=&quot;color: #228b22;&quot;&gt;AsyncHttpClient&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;c&lt;/span&gt; = &lt;span style=&quot;color: #7f007f;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #228b22;&quot;&gt;AsyncHttpClient&lt;/span&gt;(cg);&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #228b22;&quot;&gt;Response&lt;/span&gt; &lt;span style=&quot;color: #a0522d;&quot;&gt;response&lt;/span&gt; = c.preparePost(url).execute().get();&lt;/pre&gt;If the server redirect us to https, we will follow the new url&lt;br /&gt;without any issue.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;outline-container-3&quot; class=&quot;outline-2&quot;&gt;&lt;h2 id=&quot;sec-3&quot;&gt;Changelog&lt;/h2&gt;&lt;div class=&quot;outline-text-2&quot; id=&quot;text-3&quot;&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_1&quot;&gt;Bug fixes&lt;br /&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_1_1&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/issue/6&quot;&gt;Wrong import statement cause OSGi to fail&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_1_2&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/issue/10&quot;&gt;Parameter encoding issue&lt;/a&gt;&lt;br /&gt;Test case by &lt;a href=&quot;http://github.com/martint&quot;&gt;Martin Traverso&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_1_3&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/issue/11&quot;&gt;Connection Pool: Make sure the channel is still open&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_1_4&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/closed/#issue/16&quot;&gt;NettyAsyncProvider optimization: avoid invoking onStatusReceived and onHeadersReceived multiple time per transaction&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_1_5&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/closed/#issue/17&quot;&gt;Do not set a default Content-Type&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_1_6&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/closed#issue/24&quot;&gt;fix redirect loop issue&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/pull/24&quot;&gt;Patch&lt;/a&gt; provided by &lt;a href=&quot;http://github.com/jloomis&quot;&gt;Jenny Loomis&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_1_7&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/closed#issue/22&quot;&gt;NettyAsyncHttpProvider.construct incorrectly appends default port to host header&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_1_8&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/closed#issue/21&quot;&gt;NettyAsyncHttpProvider.construct allows empty Request-URIs in Request-Line&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_1_9&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/closed#issue/20&quot;&gt;The current reaper may close connection event if they are active&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_1_10&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/closed#issue/28&quot;&gt;Escape from redirect loops &amp;amp; allow more urls&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/pull/28&quot;&gt;Patch&lt;/a&gt; provided by &lt;a href=&quot;http://github.com/jloomis&quot;&gt;Jenny Loomis&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_1_11&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/closed#issue/34&quot;&gt;Http to Https redirect broken&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_1_12&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/closed#issue/25&quot;&gt;Mixing secure and not secure connections on a single client causes issues&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_1_13&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/closed#issue/19&quot;&gt;Support custom HTTP methods&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_1_14&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/closed#issue/40&quot;&gt;Configurable Connection Pool&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_1_15&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/closed#issue/23&quot;&gt;NettyAsyncHttpProvider.construct should default to using Accept: &lt;b&gt;/&lt;/b&gt; header&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_1_16&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/closed#issue/42&quot;&gt;AsyncHttpClientConfig.Builder leaks executors&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_1_17&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/closed#issue/43&quot;&gt;onCompleted may get called twice&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_1_18&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/closed#issue/44&quot;&gt;Race condition when the remote server close the connection and ConnectionsPool is used&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_1_19&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/closed#issue/47&quot;&gt;Issue HTTPS tunneling when ProxyServer being set on the AsyncHttpConfig&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_1_20&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/closed#issue/31&quot;&gt;Infinite redirects on some server because &quot;:80&quot; is appended to host name&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_1_21&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/closed#issue/51&quot;&gt;Use full url (including host : port ) for request thru proxy&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_1_22&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/closed#issue/49&quot;&gt;Channel must be closed when idle timeout fires&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_1_23&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/closed#issue/30&quot;&gt;Per request follow redirects&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/pull/30&quot;&gt;Patch&lt;/a&gt; provided by &lt;a href=&quot;http://github.com/erwan&quot;&gt;Erwan Loisant&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_1_24&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/closed#issue/33&quot;&gt;MaximumConnectionsTotal doesn&#39;t work&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_1_25&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/closed#issue/29&quot;&gt;Fix Idle timeout&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/commit/15f946584156555c32964bb9cbb30cdf32669e4c&quot;&gt;Patch&lt;/a&gt; provided by &lt;a href=&quot;http://github.com/felixtrepanier&quot;&gt;felixtrepanier&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_2&quot;&gt;New features&lt;br /&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_2_1&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/closed#issue/5&quot;&gt;Add security support to ProxyServer&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_2_2&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/issue/7&quot;&gt;Add support for zero-copy file upload&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_2_3&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/issue/8&quot;&gt;Progress callbacks&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_2_4&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/issue/12&quot;&gt;Add CONNECT support&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_2_5&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/issue/13&quot;&gt;Add request timeout per request&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_2_6&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/issue/14&quot;&gt;Add support for zero-copy bytes to ResponseBodyPart&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_2_7&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/closed/#issue/15&quot;&gt;Make Response getter more robust, add helper&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_2_8&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/closed#issue/32&quot;&gt;Add support for preemptive authentication configuration&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_2_9&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/closed#issue/35&quot;&gt;Expose ByteBuffer in HttpResponseBodyPart to reduce byte copy&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_2_10&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/closed#issue/36&quot;&gt;Add support for AsyncProviderConfig object that can be used to configure proprietary properties&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_2_11&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/closed#issue/37&quot;&gt;SSL failure leaks channel&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/pull/38&quot;&gt;Test case&lt;/a&gt; and a &lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/pull/39&quot;&gt;fix&lt;/a&gt; provided by &lt;a href=&quot;http://github.com/mpilquist&quot;&gt;Michael Pilquist&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_2_12&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/closed#issue/50&quot;&gt;Repackage the providers/* to providers/netty&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_2_13&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/closed#issue/41&quot;&gt;Compile with 1.6+ and run with 1.5+&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_2_14&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/closed#issue/53&quot;&gt;Add NTLM authentication support&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_2_15&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/closed#issue/45&quot;&gt;Add WebDav support&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li id=&quot;sec-3_2_16&quot;&gt;&lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client/issues/closed#issue/54&quot;&gt;Add support for a JDK Provider&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codemeself.blogspot.com/feeds/9000133200699025127/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codemeself.blogspot.com/2010/10/async-http-client-120.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/9000133200699025127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/9000133200699025127'/><link rel='alternate' type='text/html' href='http://codemeself.blogspot.com/2010/10/async-http-client-120.html' title='Async HTTP Client 1.2.0'/><author><name>neotyk</name><uri>http://www.blogger.com/profile/03897419234057699787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6IxdCSA4wKC0e-99EIT8etdmGyWVHxlP8kLPpzFhuDh_sgnja5HoN6T2LObK-wrR-WFVXlFqHgGlPca7cyEbqN29GzlJ7yFPJPCKM-Aw4_hjcxk5bRxEjtWMXPbd_tg/s220/head-128-white.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666538509897823475.post-2082675184783521637</id><published>2010-09-10T10:45:00.002+02:00</published><updated>2010-09-10T10:50:04.824+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="announce"/><category scheme="http://www.blogger.com/atom/ns#" term="clojure"/><category scheme="http://www.blogger.com/atom/ns#" term="http stream"/><category scheme="http://www.blogger.com/atom/ns#" term="http.async.client"/><category scheme="http://www.blogger.com/atom/ns#" term="twitter"/><title type='text'>Asynchronous HTTP Client for Clojure and Twitter Streaming API</title><content type='html'>&lt;h3&gt;&lt;a href=&quot;http://github.com/neotyk/http.async.client&quot;&gt;&lt;b&gt;http.async.client&lt;/b&gt;&lt;/a&gt; &amp;amp; &lt;a href=&quot;http://dev.twitter.com/pages/streaming_api&quot;&gt;Twitter Streaming API&lt;/a&gt;&lt;/h3&gt;&lt;div&gt;&lt;p&gt;&lt;a href=&quot;http://github.com/neotyk/http.async.client&quot;&gt;&lt;b&gt;http.async.client&lt;/b&gt;&lt;/a&gt; is a &lt;a href=&quot;http://clojure.org/&quot;&gt;Clojure&lt;/a&gt; library based on &lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client&quot;&gt;Asynchronous Http Client for Java&lt;/a&gt; which runs on top of &lt;a href=&quot;http://jboss.org/netty&quot;&gt;Netty Project&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;So much for introduction, lets see some sample code that uses Twitter &lt;a href=&quot;http://dev.twitter.com/pages/streaming_api_methods&quot;&gt;streaming api&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Importing:&lt;/p&gt;&lt;pre class=&quot;src src-clojure&quot;&gt;&lt;span style=&quot;color: #7f7f7f;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #f0dfaf; font-weight: bold;&quot;&gt;ns&lt;/span&gt; twitter-sample&lt;br /&gt; &lt;span style=&quot;color: #7f7f7f;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #8cd0d3;&quot;&gt;:require&lt;/span&gt; [http.async.client &lt;span style=&quot;color: #8cd0d3;&quot;&gt;:as&lt;/span&gt; c]&lt;br /&gt;           [org.danlarkin.json &lt;span style=&quot;color: #8cd0d3;&quot;&gt;:as&lt;/span&gt; j]&lt;span style=&quot;color: #7f7f7f;&quot;&gt;))&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;Settings and helper to print twits as they fly by:&lt;/p&gt;&lt;pre class=&quot;src src-clojure&quot;&gt;&lt;span style=&quot;color: #7f7f7f;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #f0dfaf; font-weight: bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #f0dfaf;&quot;&gt;u&lt;/span&gt; &lt;span style=&quot;color: #cc9393;&quot;&gt;&quot;username&quot;&lt;/span&gt;&lt;span style=&quot;color: #7f7f7f;&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #7f7f7f;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #f0dfaf; font-weight: bold;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color: #f0dfaf;&quot;&gt;p&lt;/span&gt; &lt;span style=&quot;color: #cc9393;&quot;&gt;&quot;password&quot;&lt;/span&gt;&lt;span style=&quot;color: #7f7f7f;&quot;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #7f7f7f;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #f0dfaf; font-weight: bold;&quot;&gt;defn&lt;/span&gt; &lt;span style=&quot;color: #f0dfaf;&quot;&gt;print-user-and-text&lt;/span&gt; [s]&lt;br /&gt; &lt;span style=&quot;color: #7f7f7f;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #f0dfaf; font-weight: bold;&quot;&gt;let&lt;/span&gt; [twit &lt;span style=&quot;color: #7f7f7f;&quot;&gt;(&lt;/span&gt;j/decode-from-str s&lt;span style=&quot;color: #7f7f7f;&quot;&gt;)&lt;/span&gt;&lt;br /&gt;       user &lt;span style=&quot;color: #7f7f7f;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #8cd0d3;&quot;&gt;:screen_name&lt;/span&gt; &lt;span style=&quot;color: #7f7f7f;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #8cd0d3;&quot;&gt;:user&lt;/span&gt; twit&lt;span style=&quot;color: #7f7f7f;&quot;&gt;))&lt;/span&gt;&lt;br /&gt;       text &lt;span style=&quot;color: #7f7f7f;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #8cd0d3;&quot;&gt;:text&lt;/span&gt; twit&lt;span style=&quot;color: #7f7f7f;&quot;&gt;)&lt;/span&gt;]&lt;br /&gt;   &lt;span style=&quot;color: #7f7f7f;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #8cd0d3;&quot;&gt;println&lt;/span&gt; user &lt;span style=&quot;color: #cc9393;&quot;&gt;&quot;=&amp;gt;&quot;&lt;/span&gt; text&lt;span style=&quot;color: #7f7f7f;&quot;&gt;)))&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;Lets read &lt;b&gt;statuses/sample&lt;/b&gt;:&lt;/p&gt;&lt;pre class=&quot;src src-clojure&quot;&gt;&lt;span style=&quot;color: #7f7f7f;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #f0dfaf; font-weight: bold;&quot;&gt;doseq&lt;/span&gt; [twit-str &lt;span style=&quot;color: #7f7f7f;&quot;&gt;(&lt;/span&gt;c/string&lt;br /&gt;                 &lt;span style=&quot;color: #7f7f7f;&quot;&gt;(&lt;/span&gt;c/stream-seq &lt;span style=&quot;color: #8cd0d3;&quot;&gt;:get&lt;/span&gt; &lt;span style=&quot;color: #cc9393;&quot;&gt;&quot;http://stream.twitter.com/1/statuses/sample.json&quot;&lt;/span&gt;&lt;br /&gt;                               &lt;span style=&quot;color: #8cd0d3;&quot;&gt;:auth&lt;/span&gt; {&lt;span style=&quot;color: #8cd0d3;&quot;&gt;:user&lt;/span&gt; u &lt;span style=&quot;color: #8cd0d3;&quot;&gt;:password&lt;/span&gt; p}&lt;span style=&quot;color: #7f7f7f;&quot;&gt;))&lt;/span&gt;]&lt;br /&gt; &lt;span style=&quot;color: #7f7f7f;&quot;&gt;(&lt;/span&gt;print-user-and-text twit-str&lt;span style=&quot;color: #7f7f7f;&quot;&gt;))&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;Or &lt;b&gt;statuses/filter&lt;/b&gt;:&lt;/p&gt;&lt;pre class=&quot;src src-clojure&quot;&gt;&lt;span style=&quot;color: #7f7f7f;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #f0dfaf; font-weight: bold;&quot;&gt;doseq&lt;/span&gt; [twit-str &lt;span style=&quot;color: #7f7f7f;&quot;&gt;(&lt;/span&gt;c/string&lt;br /&gt;                  &lt;span style=&quot;color: #7f7f7f;&quot;&gt;(&lt;/span&gt;c/stream-seq &lt;span style=&quot;color: #8cd0d3;&quot;&gt;:post&lt;/span&gt; &lt;span style=&quot;color: #cc9393;&quot;&gt;&quot;http://stream.twitter.com/1/statuses/filter.json&quot;&lt;/span&gt;&lt;br /&gt;                                &lt;span style=&quot;color: #8cd0d3;&quot;&gt;:body&lt;/span&gt; {&lt;span style=&quot;color: #cc9393;&quot;&gt;&quot;track&quot;&lt;/span&gt; &lt;span style=&quot;color: #cc9393;&quot;&gt;&quot;basketball,football,baseball,footy,soccer&quot;&lt;/span&gt;}&lt;br /&gt;                                &lt;span style=&quot;color: #8cd0d3;&quot;&gt;:auth&lt;/span&gt; {&lt;span style=&quot;color: #8cd0d3;&quot;&gt;:user&lt;/span&gt; u &lt;span style=&quot;color: #8cd0d3;&quot;&gt;:password&lt;/span&gt; p}&lt;span style=&quot;color: #7f7f7f;&quot;&gt;))&lt;/span&gt;]&lt;br /&gt; &lt;span style=&quot;color: #7f7f7f;&quot;&gt;(&lt;/span&gt;print-user-and-text twit-str&lt;span style=&quot;color: #7f7f7f;&quot;&gt;))&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;Those two samples show also how to consume HTTP Streams as &lt;a href=&quot;http://richhickey.github.com/clojure/clojure.core-api.html#clojure.core/seq&quot;&gt;clojure.core/seq&lt;/a&gt;, a new feature that was introduced in &lt;a href=&quot;http://github.com/neotyk/http.async.client/tree/v0.2.0&quot;&gt;v0.2.0&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;You can also handle sequences via &lt;a href=&quot;http://neotyk.github.com/http.async.client/docs.html#sec-1.2.4.2&quot;&gt;callbacks&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Requesting HTTP resources that are not streams is even simpler:&lt;/p&gt;&lt;pre class=&quot;src src-clojure&quot;&gt;&lt;span style=&quot;color: #7f7f7f;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #f0dfaf; font-weight: bold;&quot;&gt;let&lt;/span&gt; [response &lt;span style=&quot;color: #7f7f7f;&quot;&gt;(&lt;/span&gt;c/GET &lt;span style=&quot;color: #cc9393;&quot;&gt;&quot;http://github.com/neotyk/http.async.client/&quot;&lt;/span&gt;&lt;span style=&quot;color: #7f7f7f;&quot;&gt;)&lt;/span&gt;]&lt;br /&gt; &lt;span style=&quot;color: #7f7f7f;&quot;&gt;(&lt;/span&gt;c/await response&lt;span style=&quot;color: #7f7f7f;&quot;&gt;)&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: #7f7f7f;&quot;&gt;(&lt;/span&gt;c/string response&lt;span style=&quot;color: #7f7f7f;&quot;&gt;))&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;There is extensive documentation available on the &lt;a href=&quot;http://neotyk.github.com/http.async.client&quot;&gt;github pages&lt;/a&gt; of the &lt;a href=&quot;http://github.com/neotyk/http.async.client&quot;&gt;project&lt;/a&gt;, you can also find &lt;a href=&quot;http://github.com/neotyk/http.async.client/blob/master/changelog.org&quot;&gt;Changelog&lt;/a&gt; and &lt;a href=&quot;http://neotyk.github.com/ahc-clj/autodoc/&quot;&gt;API&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Big thanks go to &lt;a href=&quot;http://groups.google.com/group/amsterdam-clojurians&quot;&gt;Amsterdam Clojurians&lt;/a&gt;, this library received so much love and help from this group.&lt;br /&gt;Kudos to &lt;a href=&quot;http://twitter.com/jfarcand&quot;&gt;Jeanfrancois Arcand&lt;/a&gt; for starting &lt;a href=&quot;http://github.com/AsyncHttpClient/async-http-client&quot;&gt;async-http-client&lt;/a&gt; recently reaching the &lt;a href=&quot;http://jfarcand.wordpress.com/2010/09/04/async-http-client-1-1-0-released/&quot;&gt;1.1.0 release&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;I would love to hear from you what you think of this library.&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codemeself.blogspot.com/feeds/2082675184783521637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codemeself.blogspot.com/2010/09/asynchronous-http-client-for-clojure.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/2082675184783521637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/2082675184783521637'/><link rel='alternate' type='text/html' href='http://codemeself.blogspot.com/2010/09/asynchronous-http-client-for-clojure.html' title='Asynchronous HTTP Client for Clojure and Twitter Streaming API'/><author><name>neotyk</name><uri>http://www.blogger.com/profile/03897419234057699787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6IxdCSA4wKC0e-99EIT8etdmGyWVHxlP8kLPpzFhuDh_sgnja5HoN6T2LObK-wrR-WFVXlFqHgGlPca7cyEbqN29GzlJ7yFPJPCKM-Aw4_hjcxk5bRxEjtWMXPbd_tg/s220/head-128-white.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666538509897823475.post-14738826749029495</id><published>2010-06-07T12:30:00.001+02:00</published><updated>2010-06-07T12:30:00.715+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="clojure"/><category scheme="http://www.blogger.com/atom/ns#" term="learning"/><title type='text'>clojure.core/lazy-seq makes sense</title><content type='html'>&lt;h3&gt;&lt;a href=&quot;http://bit.ly/dsPqd5&quot;&gt;clojure.core/lazy-seq&lt;/a&gt; makes sense&lt;/h3&gt;    &lt;div&gt;Few days ago on #clojure &lt;a href=&quot;http://bit.ly/93h5iI&quot;&gt;bartj&lt;/a&gt; asked about &lt;a href=&quot;http://bit.ly/9zzBg0&quot;&gt;an infamous wiki entry&lt;/a&gt;.&lt;br /&gt;I remember that while ago, when I tried to understand &lt;a href=&quot;http://bit.ly/buja8y&quot;&gt;laziness&lt;/a&gt; in Clojure I stumbled upon this entry as well,&lt;br /&gt;and it caused me only confusion, as it is totally outdated.&lt;br /&gt;Let&#39;s try to shed some light on it.&lt;/div&gt; &lt;h3&gt;Not lazy seq&lt;/h3&gt;    &lt;div&gt;When you construct a seq in non lazy way you should expect that all elements are realized at creation time.&lt;br /&gt;   &lt;pre&gt;&lt;code&gt;(let [a (cons 1 (cons 2 nil))] (first a))&lt;br /&gt;&lt;span class=&quot;result&quot;&gt;=&gt; 1&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;      Nothing special here. Let&#39;s introduce side effects to see what happens.&lt;br /&gt;   &lt;pre&gt;&lt;code&gt;(let [a (cons&lt;br /&gt; (do (println &quot;one&quot;) 1)&lt;br /&gt; (cons&lt;br /&gt;  (do (println &quot;two&quot;) 2)&lt;br /&gt;  nil))]&lt;br /&gt;(first a))&lt;br /&gt;&lt;span class=&quot;stdout&quot;&gt;: one&lt;br /&gt;: two&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;result&quot;&gt;=&gt; 1&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt; As you expected all elements has been realized while constructing &lt;code&gt;a&lt;/code&gt;, though we only needed the first element.&lt;br /&gt;And that&#39;s exactly where laziness kicks in.&lt;/div&gt;    &lt;h3&gt;lazy-seq&lt;/h3&gt; &lt;div&gt;First lets construct lazy seq with no side effects.&lt;br /&gt;   &lt;pre&gt;&lt;code&gt;(let [a (lazy-seq (cons 1&lt;br /&gt;           (lazy-seq (cons 2 nil))))]&lt;br /&gt;(first a))&lt;br /&gt;&lt;span class=&quot;result&quot;&gt;=&gt; 1&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt; So what is new? You have to type more and effect is the same. Why?&lt;br /&gt;Adding side effects will help understanding it.&lt;br /&gt;   &lt;pre&gt;&lt;code&gt;(let [a (lazy-seq (cons&lt;br /&gt;           (do (println &quot;one&quot;) 1)&lt;br /&gt;           (lazy-seq (cons&lt;br /&gt;                      (do (println &quot;two&quot;) 2) nil))))]&lt;br /&gt;(first a))&lt;br /&gt;&lt;span class=&quot;stdout&quot;&gt;: one&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;result&quot;&gt;=&gt; 1&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt; Now you should be able to see the benefit. Result is the same, except the whole sequence hasn&#39;t been realized,&lt;br /&gt;except for the first element, as it was the only element that was needed.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Laziness is a very powerful tool:&lt;ul&gt; &lt;li&gt;you can construct infinite sequences,&lt;/li&gt; &lt;li&gt;have side effects create elements &lt;em&gt;on demand&lt;/em&gt;, if seq construction is heavy, you might want to only issue creation of elements you&#39;ll use,&lt;/li&gt; &lt;li&gt;it has same interface as non-lazy seq, code using it does not have to care about it.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;    &lt;h3&gt;To sum it up&lt;/h3&gt;&lt;div&gt;      &lt;pre&gt;&lt;code&gt;(let [a (cons&lt;br /&gt; (do (println &quot;one&quot;) 1)&lt;br /&gt; (cons&lt;br /&gt;  (do (println &quot;two&quot;) 2) nil))])&lt;br /&gt;&lt;span class=&quot;stdout&quot;&gt;: one&lt;br /&gt;: two&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;result&quot;&gt;=&gt; nil&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;      We didn&#39;t need even single element but the whole seq was realized.&lt;br /&gt;   &lt;pre&gt;&lt;code&gt;(let [a (lazy-seq (cons&lt;br /&gt;           (do (println &quot;one&quot;) 1)&lt;br /&gt;           (lazy-seq (cons&lt;br /&gt;                           (do (println &quot;two&quot;) 2) nil))))])&lt;br /&gt;&lt;span class=&quot;result&quot;&gt;=&gt; nil&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;      If not even a single element is needed, than not even a single element will be realized.&lt;br /&gt;   So there you have it &lt;a href=&quot;http://bit.ly/dsPqd5&quot;&gt;&lt;em&gt;clojure.core/lazy-seq&lt;/em&gt;&lt;/a&gt; explained.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codemeself.blogspot.com/feeds/14738826749029495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codemeself.blogspot.com/2010/06/clojurecorelazy-seq-makes-sense.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/14738826749029495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/14738826749029495'/><link rel='alternate' type='text/html' href='http://codemeself.blogspot.com/2010/06/clojurecorelazy-seq-makes-sense.html' title='clojure.core/lazy-seq makes sense'/><author><name>neotyk</name><uri>http://www.blogger.com/profile/03897419234057699787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6IxdCSA4wKC0e-99EIT8etdmGyWVHxlP8kLPpzFhuDh_sgnja5HoN6T2LObK-wrR-WFVXlFqHgGlPca7cyEbqN29GzlJ7yFPJPCKM-Aw4_hjcxk5bRxEjtWMXPbd_tg/s220/head-128-white.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666538509897823475.post-2432871122615517596</id><published>2010-01-11T12:33:00.004+01:00</published><updated>2010-01-12T17:00:58.969+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="clojure"/><category scheme="http://www.blogger.com/atom/ns#" term="learning"/><title type='text'>clojure.core/str makes sense now</title><content type='html'>&lt;h3&gt;&lt;a href=&quot;http://bit.ly/68DPP7&quot;&gt;clojure.core/str&lt;/a&gt; makes sense&lt;/h3&gt;While reading excellent &lt;a href=&quot;http://pragprog.com/titles/shcloj/programming-clojure&quot;&gt;Programming Clojure&lt;/a&gt; by &lt;a href=&quot;http://twitter.com/StuartHalloway&quot;&gt;Stuart Halloway&lt;/a&gt;, instead just reading I started looking into how things are done by &lt;a href=&quot;http://clojure.org/&quot;&gt;Clojure&lt;/a&gt; itself.&lt;br /&gt;&lt;a href=&quot;http://twitter.com/neotyk/status/7592828560&quot;&gt;Yesterday&lt;/a&gt; it  took me some time before I understood how things are done by &lt;em&gt;&lt;a href=&quot;http://bit.ly/68DPP7&quot;&gt;clojure.core/str&lt;/a&gt;&lt;/em&gt;. This post is documentation of my findings.&lt;br /&gt;Following modification of said function was very helpful in understanding how it works: &lt;script src=&quot;http://gist.github.com/273716.js?file=mystr.clj&quot;&gt;&lt;/script&gt;&lt;br /&gt;&lt;b&gt;&lt;a href=&quot;http://clojure.org/special_forms&quot;&gt;:tag&lt;/a&gt;&lt;/b&gt; metadata key is &lt;q&gt;a symbol naming a class or a Class object that indicates the Java type of the object in the var, or its return value if the object is a fn.&lt;/q&gt;.&lt;br /&gt;Next are three parameters body pairs.&lt;br /&gt; &lt;dl&gt;&lt;dt&gt;&lt;span style=&quot;font-size:medium;&quot;&gt;([] &quot;&quot;)&lt;/span&gt;&lt;/dt&gt; &lt;dd&gt;No arguments (&lt;a href=&quot;http://en.wikipedia.org/wiki/Arity&quot;&gt;arity&lt;/a&gt; 0) will result in &lt;em&gt;&quot;&quot;&lt;/em&gt; (empty string)&lt;br /&gt;   &lt;script src=&quot;http://gist.github.com/273716.js?file=out0.clj&quot;&gt;&lt;/script&gt;&lt;br /&gt; &lt;/dd&gt; &lt;dt&gt;&lt;span style=&quot;font-size:medium;&quot;&gt;([#^Object x]&lt;br /&gt;(if (nil? x) &quot;&quot; (. x (toString))))&lt;/span&gt;&lt;/dt&gt; &lt;dd&gt;One argument call (arity 1) will call &lt;a href=&quot;http://java.sun.com/javase/6/docs/api/java/lang/Object.html#toString%28%29&quot;&gt;&lt;em&gt;java.lang.Object.toString&lt;/em&gt;&lt;/a&gt; method.&lt;br /&gt;   &lt;em&gt;#^Object&lt;/em&gt; is a &lt;a href=&quot;http://clojure.org/java_interop#toc35&quot;&gt;Type Hint&lt;/a&gt;.&lt;br /&gt;   &lt;a href=&quot;http://clojure.org/special_forms#toc2&quot;&gt;if&lt;/a&gt; should not need much explanation.&lt;script src=&quot;http://gist.github.com/273716.js?file=out1.clj&quot;&gt;&lt;/script&gt;&lt;br /&gt; &lt;/dd&gt;&lt;br /&gt;&lt;dt&gt;&lt;span style=&quot;font-size:medium;&quot;&gt;([x &amp;amp; ys]&lt;br /&gt;((fn [#^StringBuilder sb more]&lt;br /&gt;    (if more&lt;br /&gt;      (recur (. sb (append (str (first more)))) (next more))&lt;br /&gt;      (str sb)))&lt;br /&gt;(new StringBuilder #^String (str x)) ys)))&lt;/span&gt;&lt;/dt&gt; &lt;dd&gt;This is where it starts to be interesting.&lt;br /&gt; First unnamed function is defined that accepts &lt;a href=&quot;http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html&quot;&gt;StringBuilder&lt;/a&gt;&lt;em&gt; sb&lt;/em&gt; and &lt;em&gt;more&lt;/em&gt; params.&lt;br /&gt; If &lt;em&gt;more&lt;/em&gt; is &lt;em&gt;true&lt;/em&gt;, that is not &lt;em&gt;nil&lt;/em&gt; or&lt;em&gt; false&lt;/em&gt; than call recursively self with new parameters&lt;br /&gt;   &lt;ul&gt;&lt;li&gt;&lt;em&gt;sb&lt;/em&gt; with &lt;a href=&quot;http://java.sun.com/javase/6/docs/api/java/lang/StringBuilder.html#append%28java.lang.String%29&quot;&gt;append&lt;/a&gt;ed result of calling &lt;em&gt;str&lt;/em&gt; with first element of &lt;em&gt;more&lt;/em&gt;,&lt;br /&gt;   &lt;/li&gt;   &lt;li&gt;&lt;em&gt;more&lt;/em&gt; with elements after first.&lt;/li&gt; &lt;/ul&gt; If &lt;em&gt;more&lt;/em&gt; is &lt;em&gt;false&lt;/em&gt;, that in our context will happen only when &lt;em&gt;more&lt;/em&gt; is &lt;em&gt;nil&lt;/em&gt;, call&lt;em&gt; sb&lt;/em&gt;&#39;s &lt;em&gt;toString&lt;/em&gt;.&lt;br /&gt; Next just defined function is getting called with new StringBuilder constructed from &lt;em&gt;x&lt;/em&gt; as &lt;em&gt;sb&lt;/em&gt; and &lt;em&gt;ys&lt;/em&gt; as &lt;em&gt;more&lt;/em&gt;.&lt;script src=&quot;http://gist.github.com/273716.js?file=out2.clj&quot;&gt;&lt;/script&gt;&lt;script src=&quot;http://gist.github.com/273716.js?file=out3.clj&quot;&gt;&lt;/script&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;br /&gt;It took me some time to realize that &lt;em&gt;ys&lt;/em&gt; are turning into &lt;em&gt;more&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;So there you have it &lt;em&gt;clojure.core/str&lt;/em&gt; explained.</content><link rel='replies' type='application/atom+xml' href='http://codemeself.blogspot.com/feeds/2432871122615517596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codemeself.blogspot.com/2010/01/clojurecorestr-makes-sense-now.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/2432871122615517596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/2432871122615517596'/><link rel='alternate' type='text/html' href='http://codemeself.blogspot.com/2010/01/clojurecorestr-makes-sense-now.html' title='clojure.core/str makes sense now'/><author><name>neotyk</name><uri>http://www.blogger.com/profile/03897419234057699787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6IxdCSA4wKC0e-99EIT8etdmGyWVHxlP8kLPpzFhuDh_sgnja5HoN6T2LObK-wrR-WFVXlFqHgGlPca7cyEbqN29GzlJ7yFPJPCKM-Aw4_hjcxk5bRxEjtWMXPbd_tg/s220/head-128-white.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666538509897823475.post-1287474290925294720</id><published>2009-12-26T00:55:00.005+01:00</published><updated>2009-12-26T14:06:44.477+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="clojure"/><title type='text'>Clojure Start Again</title><content type='html'>&lt;h1&gt;Clojure start again&lt;/h1&gt;    &lt;div&gt;It&#39;s my other attempt to learn &lt;a href=&quot;http://clojure.org/&quot;&gt;Clojure&lt;/a&gt;.&lt;br /&gt;The landscape has changed a lot since &lt;a href=&quot;http://codemeself.blogspot.com/2009/02/clojure.html&quot;&gt;last time I took a look&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;h1&gt;Toolbox&lt;/h1&gt;    &lt;div&gt;Some tools that I used to play comfortably&lt;/div&gt;    &lt;h2&gt;Building and dependency tracking&lt;/h2&gt;    &lt;div&gt;Most popular is unfortunately &lt;a href=&quot;http://ant.apache.org/&quot;&gt;Ant&lt;/a&gt; in building &lt;a href=&quot;http://clojure.org/&quot;&gt;Clojure&lt;/a&gt;. I&#39;m not looking forward to editing &lt;em&gt;build.xml&lt;/em&gt; files again.&lt;br /&gt;But there are two alternatives that keep track of dependencies, and do packaging.&lt;br /&gt;&lt;h3&gt;Leiningen - build tool&lt;/h3&gt;    &lt;div&gt;&lt;blockquote cite=&quot;http://github.com/technomancy/leiningen&quot;&gt;Leiningen is a build tool for Clojure designed to not set your hair on fire.&lt;/blockquote&gt;      That certainly sounds nice. Installation is straightforward as well, following &lt;a href=&quot;http://zef.me/2470/building-clojure-projects-with-leiningen&quot;&gt;Zefs instructions&lt;/a&gt; does the trick.&lt;br /&gt;It boils down to this:&lt;br /&gt;&lt;pre class=&quot;brush: bash&quot;&gt;cd ~/bin&lt;br /&gt;wget http://github.com/technomancy/leiningen/raw/stable/bin/lein&lt;br /&gt;chmod +x lein&lt;br /&gt;lein self-install&lt;/pre&gt;      &lt;a href=&quot;http://github.com/technomancy/leiningen&quot;&gt;Leiningen&lt;/a&gt; is wrapping up &lt;a href=&quot;http://maven.apache.org/&quot;&gt;Maven2&lt;/a&gt; in nice &lt;a href=&quot;http://clojure.org/&quot;&gt;Clojure&lt;/a&gt; syntax and gives you by default access not only to Maven Central Repository but also &lt;a href=&quot;http://clojars.org/&quot;&gt;clojars.org&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;    &lt;h3&gt;clojure-maven-plugin - build tool&lt;/h3&gt;    &lt;div&gt;Another option is &lt;a href=&quot;http://github.com/talios/clojure-maven-plugin&quot;&gt;clojure-maven-plugin&lt;/a&gt; &lt;a href=&quot;http://maven.apache.org/&quot;&gt;Maven2&lt;/a&gt; plug-in to help you out with &lt;a href=&quot;http://clojure.org/&quot;&gt;Clojure&lt;/a&gt;.&lt;br /&gt;Adding following snippet should get you started:&lt;br /&gt;&lt;pre class=&quot;brush: xml&quot;&gt;&amp;lt;plugins&amp;gt;&lt;br /&gt;&amp;lt;plugin&amp;gt;&lt;br /&gt;&amp;lt;groupId&amp;gt;com.theoryinpractise&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;lt;artifactId&amp;gt;clojure-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;lt;version&amp;gt;1.3&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;lt;/plugin&amp;gt;&lt;br /&gt;&amp;lt;/plugins&amp;gt;&lt;/pre&gt;&lt;h3&gt;&lt;a href=&quot;http://kotka.de/blog/2009/11/Clojuresque_1.1.0_released.html&quot;&gt;Clojuresque&lt;/a&gt; Third option&lt;/h3&gt;&lt;div&gt;Responses I received after publishing this post showed third option that I&#39;ve missed.&lt;br /&gt;It is used by &lt;a href=&quot;http://gitorious.org/clojureql&quot;&gt;ClojureQL&lt;/a&gt; and certainly has supporters. It lacks a bit of documentation but &lt;a href=&quot;http://www.bestinclass.dk/index.php/2009/12/clojureql-where-are-we-going/&quot;&gt;ClojureQL - Where are we (going)?&lt;/a&gt; describes process quite well.&lt;br /&gt;   &lt;h2&gt;&lt;abbr title=&quot;Interactive Development Environment&quot;&gt;IDE&lt;/abbr&gt;&lt;/h2&gt;    &lt;div&gt;There is quite some options here, following one is &lt;a href=&quot;http://acidrayne.net/?p=81&quot;&gt;most popular&lt;/a&gt; amongst &lt;a href=&quot;http://clojure.org/&quot;&gt;Clojure&lt;/a&gt; developers.&lt;/div&gt;    &lt;h3&gt;Emacs + SLIME&lt;/h3&gt;    &lt;div&gt;Well normally I use &lt;a href=&quot;http://vim.org/&quot;&gt;VIM&lt;/a&gt;, but after watching &lt;a href=&quot;http://www.bestinclass.dk/index.php/2009/12/dynamic-interactive-webdevelopment/&quot;&gt;Dynamic Interactive Webdevelopment&lt;/a&gt; I took for a spin Emacs, well &lt;a href=&quot;http://aquamacs.org/&quot;&gt;Aquaemacs&lt;/a&gt;.&lt;br /&gt;Following two posts were very helpful in setting up nice environment:&lt;br /&gt; &lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://incanter-blog.org/2009/12/20/getting-started/&quot;&gt;Setting up Clojure, Incanter, Emacs, Slime, Swank, and Paredit&lt;/a&gt;,&lt;/li&gt;        &lt;li&gt;&lt;a href=&quot;http://www.dancheah.com/2009/09/been-playing-with-clojure-off-and-on-for-the-last-couple-of-months-decided-to-get-more-serious-with-it-the-last-week-or-so.html&quot;&gt;Setting up Clojure, Emacs and SLIME&lt;/a&gt;.&lt;/li&gt;      &lt;/ul&gt;      After some problems that got solved by setting up &lt;em&gt;swank-clojure-classpath&lt;/em&gt; my new IDE was up.&lt;br /&gt;And it welcomes me with message: &lt;q style=&quot;font-size: large;&quot;&gt;Connected. Your hacking starts... NOW!&lt;/q&gt;&lt;br /&gt;&lt;br /&gt;Lets get learning &lt;a href=&quot;http://clojure.org/&quot;&gt;Clojure&lt;/a&gt;.&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codemeself.blogspot.com/feeds/1287474290925294720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codemeself.blogspot.com/2009/12/clojure-start-again.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/1287474290925294720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/1287474290925294720'/><link rel='alternate' type='text/html' href='http://codemeself.blogspot.com/2009/12/clojure-start-again.html' title='Clojure Start Again'/><author><name>neotyk</name><uri>http://www.blogger.com/profile/03897419234057699787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6IxdCSA4wKC0e-99EIT8etdmGyWVHxlP8kLPpzFhuDh_sgnja5HoN6T2LObK-wrR-WFVXlFqHgGlPca7cyEbqN29GzlJ7yFPJPCKM-Aw4_hjcxk5bRxEjtWMXPbd_tg/s220/head-128-white.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666538509897823475.post-5199224425400384410</id><published>2009-11-19T11:49:00.002+01:00</published><updated>2009-11-19T12:13:03.230+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="grizzly devoxx preso"/><title type='text'>Grizzly Servlet Container at Devoxx 2009</title><content type='html'>Yesterday &lt;a href=&quot;http://twitter.com/neotyk&quot;&gt;me&lt;/a&gt; and &lt;a href=&quot;http://twitter.com/jfarcand&quot;&gt;@jfarcand&lt;/a&gt; presented&lt;br /&gt;&lt;a href=&quot;http://www.devoxx.com/display/DV09/Grizzly+Servlet+Container&quot;&gt;Grizzly Servlet Container&lt;/a&gt; at &lt;a href=&quot;http://www.devoxx.com&quot;&gt;Devoxx&lt;/a&gt;.&lt;br/&gt;&lt;br /&gt;Here are the slides and drop by &lt;a href=&quot;http://old.nabble.com/Grizzly---Users-f23249.html&quot;&gt;Grizzly Users List&lt;/a&gt;.&lt;br/&gt;&lt;br /&gt;&lt;div style=&quot;width:425px;text-align:left&quot; id=&quot;__ss_2535078&quot;&gt;&lt;a style=&quot;font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;&quot; href=&quot;http://www.slideshare.net/neotyk/devoxx09-grizzly-servlet-container-chuck-norris-loves-it&quot; title=&quot;Devoxx09 Grizzly Servlet Container: Chuck Norris loves it!&quot;&gt;Devoxx09 Grizzly Servlet Container: Chuck Norris loves it!&lt;/a&gt;&lt;object style=&quot;margin:0px&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=devoxx09grizzlydeployer-091119042632-phpapp01&amp;stripped_title=devoxx09-grizzly-servlet-container-chuck-norris-loves-it&quot; /&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;/&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;/&gt;&lt;embed src=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=devoxx09grizzlydeployer-091119042632-phpapp01&amp;stripped_title=devoxx09-grizzly-servlet-container-chuck-norris-loves-it&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style=&quot;font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;&quot;&gt;View more &lt;a style=&quot;text-decoration:underline;&quot; href=&quot;http://www.slideshare.net/&quot;&gt;presentations&lt;/a&gt; from &lt;a style=&quot;text-decoration:underline;&quot; href=&quot;http://www.slideshare.net/neotyk&quot;&gt;Hubert Iwaniuk&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codemeself.blogspot.com/feeds/5199224425400384410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codemeself.blogspot.com/2009/11/grizzly-servlet-container-at-devoxx.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/5199224425400384410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/5199224425400384410'/><link rel='alternate' type='text/html' href='http://codemeself.blogspot.com/2009/11/grizzly-servlet-container-at-devoxx.html' title='Grizzly Servlet Container at Devoxx 2009'/><author><name>neotyk</name><uri>http://www.blogger.com/profile/03897419234057699787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6IxdCSA4wKC0e-99EIT8etdmGyWVHxlP8kLPpzFhuDh_sgnja5HoN6T2LObK-wrR-WFVXlFqHgGlPca7cyEbqN29GzlJ7yFPJPCKM-Aw4_hjcxk5bRxEjtWMXPbd_tg/s220/head-128-white.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666538509897823475.post-3184573734917564530</id><published>2009-10-21T21:12:00.004+02:00</published><updated>2009-10-26T20:56:36.548+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="maven3"/><category scheme="http://www.blogger.com/atom/ns#" term="testing"/><title type='text'>Test your build with Maven 3</title><content type='html'>&lt;h1&gt;Maven 3 is coming&lt;/h1&gt;&lt;div&gt;This post is to show you &lt;em&gt;how to get Maven 3&lt;/em&gt;.&lt;br /&gt;     Maven 3 is supposed to be drop in replacement of Maven 2.&lt;br /&gt;     So you should be able to build your Maven based build with Maven 3 with no problem.&lt;br /&gt;     So lets take Maven 3 for a spin.&lt;/div&gt;    &lt;h1&gt;Getting Maven 3&lt;/h1&gt;&lt;div&gt;      You can get Maven 3 binaries or build it by hand.&lt;/div&gt;    &lt;h2&gt;Getting binaries&lt;/h2&gt;&lt;div&gt;      You can grab binaries from &lt;a href=&quot;http://sonatype.com/&quot;&gt;Sonatype&lt;/a&gt;s &lt;a href=&quot;https://grid.sonatype.org/ci/&quot;&gt;Hudson grid&lt;/a&gt;.&lt;br /&gt;     Depending on your platform:&lt;dl&gt;        &lt;dt&gt;Linux&lt;/dt&gt;&lt;dd&gt;&lt;a href=&quot;https://grid.sonatype.org/ci/view/Maven%203.0.x/job/maven-3.0.x-bootstrap/jdk=1.5,label=ubuntu/lastSuccessfulBuild/artifact/trunk/apache-maven/target/apache-maven-3.0-SNAPSHOT-bin.zip&quot;&gt;lastSuccessfulBuild from ubuntu&lt;/a&gt;&lt;/dd&gt;        &lt;dt&gt;Windows&lt;/dt&gt;        &lt;dd&gt;&lt;a href=&quot;https://grid.sonatype.org/ci/view/Maven%203.0.x/job/maven-3.0.x-bootstrap/jdk=1.5,label=windows/lastSuccessfulBuild/artifact/trunk/apache-maven/target/apache-maven-3.0-SNAPSHOT-bin.zip&quot;&gt;lastSuccessfulBuild from windows&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;      And extract it to your new &lt;em&gt;M2_HOME&lt;/em&gt;.&lt;/div&gt;    &lt;h2&gt;Building from source&lt;/h2&gt;&lt;div&gt;      Check it out, and build:&lt;pre class=&quot;brush: bash&quot;&gt;$ svn co http://svn.apache.org/repos/asf/maven/maven-3/trunk maven-3&lt;br /&gt;$ cd maven-3&lt;br /&gt;$ export M2_HOME=/your/new/m3/home/&lt;br /&gt;$ ant&lt;/pre&gt;      So you have your own build of Maven 3 at &lt;em&gt;/your/new/m3/home/&lt;/em&gt;. Congratulations!&lt;/div&gt;    &lt;h2&gt;Add to path&lt;/h2&gt;&lt;div&gt;      Independently how you got your new Maven 3, you need to add &lt;em&gt;M2_HOME/bin&lt;/em&gt; to your &lt;em&gt;PATH&lt;/em&gt; environment variable.&lt;/div&gt;    &lt;h1&gt;Start using it&lt;/h1&gt;&lt;div&gt;      And that is it, you have Maven 3.&lt;br /&gt;     As verification step execute, end expect something similar:&lt;pre class=&quot;brush: bash&quot;&gt;$ mvn -version&lt;br /&gt;Apache Maven 3.0-SNAPSHOT (r828135; 2009-10-21 20:46:19+0200)&lt;br /&gt;...&lt;/pre&gt;      You probably will see quite some warnings while building your projects that previously where unnoticed.&lt;br /&gt;     Following those instructions will improve your build.&lt;br /&gt;     Enjoy your new build tool!&lt;br /&gt;   &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codemeself.blogspot.com/feeds/3184573734917564530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codemeself.blogspot.com/2009/10/test-your-build-with-maven-3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/3184573734917564530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/3184573734917564530'/><link rel='alternate' type='text/html' href='http://codemeself.blogspot.com/2009/10/test-your-build-with-maven-3.html' title='Test your build with Maven 3'/><author><name>neotyk</name><uri>http://www.blogger.com/profile/03897419234057699787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6IxdCSA4wKC0e-99EIT8etdmGyWVHxlP8kLPpzFhuDh_sgnja5HoN6T2LObK-wrR-WFVXlFqHgGlPca7cyEbqN29GzlJ7yFPJPCKM-Aw4_hjcxk5bRxEjtWMXPbd_tg/s220/head-128-white.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666538509897823475.post-4587099041986606169</id><published>2009-07-08T23:04:00.005+02:00</published><updated>2009-07-08T23:29:41.288+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="dependency"/><category scheme="http://www.blogger.com/atom/ns#" term="maven2"/><category scheme="http://www.blogger.com/atom/ns#" term="overview"/><category scheme="http://www.blogger.com/atom/ns#" term="plugin"/><title type='text'>MOP version 1.6</title><content type='html'>It&#39;s been some time since I performed &lt;a href=&quot;http://code.google.com/p/maven-overview-plugin/&quot;&gt;MOP&lt;/a&gt; release.&lt;br /&gt;&lt;br /&gt;Quite a few things has changed in &lt;a href=&quot;http://code.google.com/p/maven-overview-plugin/&quot;&gt;MOP&lt;/a&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Repository&lt;br /&gt;Thanks to &lt;a href=&quot;http://oss.sonatype.org/&quot;&gt;Sonatype&lt;/a&gt;&lt;a&gt; &lt;/a&gt;&lt;a href=&quot;http://code.google.com/p/maven-overview-plugin/&quot;&gt;MOP&lt;/a&gt; releases are pushed to &lt;a href=&quot;http://repo1.maven.org/maven2/com/googlecode/maven-overview-plugin/maven-overview-plugin/&quot;&gt;Maven Central Repository&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Source code&lt;br /&gt;Sources has been migrated to &lt;a href=&quot;http://github.com/neotyk/maven-overview-plugin/tree/master&quot;&gt;github&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;With new release &lt;b&gt;1.6&lt;/b&gt; that can be found in &lt;a href=&quot;http://repo1.maven.org/maven2/com/googlecode/maven-overview-plugin/maven-overview-plugin/1.6/&quot;&gt;Maven Central Repository&lt;/a&gt; new configuration option has been introduced.&lt;br /&gt;&lt;br /&gt;Let me introduce you to &lt;b&gt;showVersion&lt;/b&gt; option :-)&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKMdP8-79XLO43EAtgp_b7JPU558PXusZSH6ahfOcyCCH9BbiyHmQZ0epyxor3qrrzhSZPs-X__vP5F6tmN486WeFrqOlFkK3HVIgvQI1ARfAvADCiw2gK10NkvnKIVe2QYholI9clpuLd/s1600-h/mop-showVersion-overview.png&quot;&gt;&lt;img style=&quot;margin: 0pt 0pt 10px 10px; cursor: pointer; width: 400px; height: 400px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKMdP8-79XLO43EAtgp_b7JPU558PXusZSH6ahfOcyCCH9BbiyHmQZ0epyxor3qrrzhSZPs-X__vP5F6tmN486WeFrqOlFkK3HVIgvQI1ARfAvADCiw2gK10NkvnKIVe2QYholI9clpuLd/s400/mop-showVersion-overview.png&quot; alt=&quot;showVersion&quot; id=&quot;BLOGGER_PHOTO_ID_5356202840650028354&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://codemeself.blogspot.com/feeds/4587099041986606169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codemeself.blogspot.com/2009/07/mop-version-16.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/4587099041986606169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/4587099041986606169'/><link rel='alternate' type='text/html' href='http://codemeself.blogspot.com/2009/07/mop-version-16.html' title='MOP version 1.6'/><author><name>neotyk</name><uri>http://www.blogger.com/profile/03897419234057699787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6IxdCSA4wKC0e-99EIT8etdmGyWVHxlP8kLPpzFhuDh_sgnja5HoN6T2LObK-wrR-WFVXlFqHgGlPca7cyEbqN29GzlJ7yFPJPCKM-Aw4_hjcxk5bRxEjtWMXPbd_tg/s220/head-128-white.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKMdP8-79XLO43EAtgp_b7JPU558PXusZSH6ahfOcyCCH9BbiyHmQZ0epyxor3qrrzhSZPs-X__vP5F6tmN486WeFrqOlFkK3HVIgvQI1ARfAvADCiw2gK10NkvnKIVe2QYholI9clpuLd/s72-c/mop-showVersion-overview.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666538509897823475.post-2188530447265736590</id><published>2009-04-02T23:50:00.004+02:00</published><updated>2009-04-06T13:32:25.065+02:00</updated><title type='text'>Securing Grizzly Web Server</title><content type='html'>Running &lt;a href=&quot;https://grizzly.dev.java.net/nonav/apidocs/com/sun/grizzly/http/embed/GrizzlyWebServer.html&quot;&gt;GrizzlyWebServer&lt;/a&gt; is very easy and lightweight. Serving HTTPS? The same.&lt;br /&gt;&lt;br /&gt;It&#39;s just one more step to perform, provide &lt;a href=&quot;https://grizzly.dev.java.net/&quot;&gt;Grizzly&lt;/a&gt; with SSL configuration.&lt;br /&gt;&lt;br /&gt;But first thing first. Lets create &lt;a href=&quot;https://grizzly.dev.java.net/nonav/apidocs/com/sun/grizzly/http/embed/GrizzlyWebServer.html&quot;&gt;GrizzlyWebServer&lt;/a&gt; telling it to serve secure content.&lt;br /&gt;Just invoke this constructor:&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;&lt;br /&gt;/**&lt;br /&gt; * Create a WebServer that listen for secure tls/https requests&lt;br /&gt; * @param port The port opened&lt;br /&gt; * @param webResourcesPath the path to the web resource (ex: /var/www)&lt;br /&gt; * @param secure &lt;tt&gt;true&lt;/tt&gt; if https needs to be used.&lt;br /&gt; */&lt;br /&gt;public GrizzlyWebServer(int port, String webResourcesPath, boolean secure)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;Say like this:&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;gws = new GrizzlyWebServer(PORT, &quot;.&quot;, true);&lt;/code&gt;&lt;/pre&gt;If you would try &lt;a href=&quot;https://grizzly.dev.java.net/nonav/apidocs/com/sun/grizzly/http/embed/GrizzlyWebServer.html#start%28%29&quot;&gt;start()&lt;/a&gt; now you get exception.&lt;br /&gt;What is missing is SSL configuration.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://grizzly.dev.java.net/&quot;&gt;Grizzly&lt;/a&gt; comes with &lt;a href=&quot;https://grizzly.dev.java.net/nonav/apidocs/com/sun/grizzly/SSLConfig.html&quot;&gt;SSLConfig&lt;/a&gt; helper class, that allows you to work with SSL configuration easily.&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;SSLConfig cfg = new SSLConfig();&lt;/code&gt;&lt;/pre&gt;This constructor fetches configuration from default properties locations, which are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;trust store - &lt;code&gt;javax.net.ssl.trustStore&lt;/code&gt;&lt;/li&gt;&lt;li&gt;key store - &lt;code&gt;javax.net.ssl.keyStore&lt;/code&gt;&lt;/li&gt;&lt;li&gt;trust store password - &lt;code&gt;javax.net.ssl.trustStorePassword&lt;/code&gt;&lt;/li&gt;&lt;li&gt;key store password - &lt;code&gt;javax.net.ssl.keyStorePassword&lt;/code&gt;&lt;/li&gt;&lt;li&gt;trust store type - &lt;code&gt;javax.net.ssl.trustStoreType&lt;/code&gt;&lt;/li&gt;&lt;li&gt;key store type - &lt;code&gt;javax.net.ssl.keyStoreType&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;If you need to override any configuration value, like key store location, just do:&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;&lt;br /&gt;URL resource = getClass().getClassLoader().getResource(&quot;test-keystore.jks&quot;);&lt;br /&gt;if (resource != null) {&lt;br /&gt;  cfg.setKeyStoreFile(new File(resource.toURI()).getAbsolutePath());&lt;br /&gt;} else {&lt;br /&gt;  // Couldn&#39;t find keystore, exit appropriately.&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;Once you have configuration ready give it to &lt;a href=&quot;https://grizzly.dev.java.net/&quot;&gt;Grizzly&lt;/a&gt;:&lt;br /&gt;&lt;pre class=&quot;code&quot;&gt;&lt;code&gt;gws.setSSLConfig(cfg);&lt;/code&gt;&lt;/pre&gt;And you are done, now do normal setup like providing &lt;a href=&quot;https://grizzly.dev.java.net/nonav/apidocs/com/sun/grizzly/tcp/http11/GrizzlyAdapter.html&quot;&gt;GrizzlyAdapter&lt;/a&gt;s and &lt;a href=&quot;https://grizzly.dev.java.net/nonav/apidocs/com/sun/grizzly/http/embed/GrizzlyWebServer.html#start%28%29&quot;&gt;start()&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Default configuration values are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;key store file - keystore.jks&lt;/li&gt;&lt;li&gt;key store type - JKS&lt;/li&gt;&lt;li&gt;key store algorithm - SunX509&lt;/li&gt;&lt;li&gt;key store pass - changeit&lt;/li&gt;&lt;li&gt;trust store file - truststore.jks&lt;/li&gt;&lt;li&gt;trust store type - JKS&lt;/li&gt;&lt;li&gt;trust store algorithm - SunX509&lt;/li&gt;&lt;li&gt;trust store pass - changeit&lt;/li&gt;&lt;/ul&gt;In case you want to authenticate your clients with certificates signed by your trusted CA you have to include CA public certificate in trust store.&lt;br /&gt;Trust store configuration is as simple as key store configuration, methods just start with trust not key.&lt;br /&gt;&lt;br /&gt;And that&#39;s how easy encryption with &lt;a href=&quot;https://grizzly.dev.java.net/&quot;&gt;Grizzly&lt;/a&gt; is :-)</content><link rel='replies' type='application/atom+xml' href='http://codemeself.blogspot.com/feeds/2188530447265736590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codemeself.blogspot.com/2009/04/securing-grizzly-web-server.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/2188530447265736590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/2188530447265736590'/><link rel='alternate' type='text/html' href='http://codemeself.blogspot.com/2009/04/securing-grizzly-web-server.html' title='Securing Grizzly Web Server'/><author><name>neotyk</name><uri>http://www.blogger.com/profile/03897419234057699787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6IxdCSA4wKC0e-99EIT8etdmGyWVHxlP8kLPpzFhuDh_sgnja5HoN6T2LObK-wrR-WFVXlFqHgGlPca7cyEbqN29GzlJ7yFPJPCKM-Aw4_hjcxk5bRxEjtWMXPbd_tg/s220/head-128-white.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666538509897823475.post-105077603517766223</id><published>2009-03-14T11:34:00.009+01:00</published><updated>2009-03-18T00:23:26.483+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="grizzly"/><category scheme="http://www.blogger.com/atom/ns#" term="HttpService"/><category scheme="http://www.blogger.com/atom/ns#" term="osgi"/><title type='text'>Grizzly OSGi Http Service Guide</title><content type='html'>This post is an introduction to Grizzly OSGi Http Service.&lt;br /&gt;&lt;br /&gt;Code for this post is available as Gitorial: &lt;a target=&quot;_blank&quot; href=&quot;http://github.com/neotyk/httpservice-gitorial/commits/master&quot;&gt;http://github.com/neotyk/httpservice-gitorial/commits/master&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You&#39;ll find here:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;how to use Grizzly OSGi Http Service&lt;/li&gt;&lt;li&gt;how to configure Grizzly OSGi Http Service&lt;/li&gt;&lt;li&gt;how to register servlet and resource&lt;/li&gt;&lt;li&gt;how to perform authentication on registered servlet or resource&lt;/li&gt;&lt;li&gt;what is currently implemented from spec and what is missing&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Introduction&lt;/h2&gt;&lt;h3&gt;&lt;a href=&quot;https://grizzly.dev.java.net/&quot;&gt;Grizzly&lt;/a&gt;&lt;/h3&gt;&lt;blockquote&gt;The Grizzly framework has been designed to help developers to take advantage of the Java™ NIO API. Grizzly goals is to help developers to build scalable and robust servers using NIO and we are also offering embeddable components supporting HTTP, Bayeux Protocol, Servlet (Partially) and Comet.&lt;/blockquote&gt;&lt;h3&gt;&lt;a href=&quot;http://www.osgi.org/&quot;&gt;OSGi&lt;/a&gt;&lt;/h3&gt;&lt;blockquote&gt;OSGi is the powerful dynamic framework that underlies the Eclipse IDE and platform, but its use is not restricted to Eclipse. In fact it is used everywhere from mobile phone and vehicle entertainment systems to enterprise application servers. It is, essentially, the module system for Java.&lt;/blockquote&gt;It&#39;s lightweight and let&#39;s you escape &lt;a href=&quot;http://en.wikipedia.org/wiki/Java_Classloader#JAR_hell&quot;&gt;JAR hell&lt;/a&gt;.&lt;br /&gt;&lt;h3&gt;&lt;a href=&quot;http://www.osgi.org/javadoc/r4v41/org/osgi/service/http/HttpService.html&quot;&gt;OSGi Http Service&lt;/a&gt;&lt;/h3&gt;&lt;blockquote&gt;The Http Service allows other bundles in the OSGi environment to dynamically register resources and servlets into the URI namespace of Http Service. A bundle may later unregister its resources or servlets.&lt;/blockquote&gt;&lt;h2&gt;Usage&lt;br /&gt;&lt;/h2&gt;Grizzly OSGi Http Service is available in two versions one with it&#39;s all dependencies and one by itself.&lt;br /&gt;For version with dependencies you&#39;ll need to depend on:&lt;br /&gt;&lt;script src=&quot;http://gist.github.com/80809.js&quot;&gt;&lt;/script&gt;&lt;br /&gt;For version without dependencies you&#39;ll need:&lt;br /&gt;&lt;script src=&quot;http://gist.github.com/80810.js&quot;&gt;&lt;/script&gt;&lt;br /&gt;And examine its pom.xml to see dependencies that you&#39;ll need to satisfy.&lt;br /&gt;Workspace with specified dependency on -bundle version is &lt;a href=&quot;http://github.com/neotyk/httpservice-gitorial/commit/4174f52466bbb33ece29cbac2f018c37a970be05&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;Remember that even if you are using -bundle version you&#39;ll need to specify dependencies on &lt;b&gt;org.osgi.core&lt;/b&gt; and &lt;b&gt;org.osgi.compendium&lt;/b&gt;.&lt;br /&gt;Next you&#39;ll need to configure &lt;b&gt;bundle&lt;/b&gt; packaging as shown &lt;a href=&quot;http://github.com/neotyk/httpservice-gitorial/commit/3d26e6ae53164da6fdd559848fae6d095aca51a7&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;Now you can configure your project to use &lt;a href=&quot;http://www.ops4j.org/projects/pax/construct/maven-pax-plugin/&quot;&gt;maven-pax-plugin&lt;/a&gt; as specified &lt;a href=&quot;http://github.com/neotyk/httpservice-gitorial/commit/ebe5ba8cc74af589e3813eeae664fe7248c0480b&quot;&gt;here&lt;/a&gt; so you can do &lt;code&gt;mvn pax:provision&lt;/code&gt; for easy startup of OSGi with your bundle and its dependencies provisioned.&lt;br /&gt;&lt;h2&gt;Configuration&lt;br /&gt;&lt;/h2&gt;If you&#39;ve tried &lt;code&gt;mvn pax:provision&lt;/code&gt; from previous step you probably have seen exception that Grizzly OSGi Http Service couldn&#39;t bind to port &lt;b&gt;80&lt;/b&gt;.&lt;br /&gt;Binding to port &amp;lt;1024 on most platforms requires special permissions.&lt;br /&gt;Grizzly OSGi Http Service tried to bind to port 80 because it has not been configured to do otherwise, this is specified by spec as default.&lt;br /&gt;To configure port that OSGi Http Service binds to you&#39;ll need to configure &lt;b&gt;org.osgi.service.http.port&lt;/b&gt; property.&lt;br /&gt;This configuration change is shown &lt;a href=&quot;http://github.com/neotyk/httpservice-gitorial/commit/663539c7037e61a0b7ec6e0395e3f5750e9f3ddb&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;h2&gt;Registration&lt;br /&gt;&lt;/h2&gt;In OSGi Http Service to expose something via http you have to register it.&lt;br /&gt;But before you do it lets configure Declarative Services and Dependencies, this will allow much easier integration with OSGi Http Service.&lt;br /&gt;Checkout &lt;a href=&quot;http://github.com/neotyk/httpservice-gitorial/commit/73f08b8dbccfc3279f86a51657e6df1a2d3cae93&quot;&gt;this&lt;/a&gt; commit to see how to enable it.&lt;br /&gt;Now that we have made our life easier lets get to registering Servlet and Resources.&lt;br /&gt;&lt;h3&gt;Registering Servlet&lt;br /&gt;&lt;/h3&gt;To register a servlet you need to call &lt;a href=&quot;http://www.osgi.org/javadoc/r4v41/org/osgi/service/http/HttpService.html#registerServlet%28java.lang.String,%20javax.servlet.Servlet,%20java.util.Dictionary,%20org.osgi.service.http.HttpContext%29&quot;&gt;HttpService.registerServlet&lt;/a&gt; method. Last two parameters (&lt;code&gt;initparams&lt;/code&gt; and &lt;code&gt;context&lt;/code&gt;) can be &lt;code&gt;null&lt;/code&gt; for now.&lt;br /&gt;&lt;code&gt;alias&lt;/code&gt; is name in the URI namespace at which the servlet is registered,&lt;br /&gt;&lt;code&gt;servlet&lt;/code&gt; is servlet to register.&lt;br /&gt;To see changes been done already, &lt;a href=&quot;http://github.com/neotyk/httpservice-gitorial/commit/659497e01a5274f8d6952c3b4a56e7b1076b9abb&quot;&gt;click&lt;/a&gt;.&lt;br /&gt;&lt;h3&gt;Registering Resources&lt;br /&gt;&lt;/h3&gt;Registering resources is way to expose static content in OSGi Http Service.&lt;br /&gt;To register resources you need to call &lt;a href=&quot;http://www.osgi.org/javadoc/r4v41/org/osgi/service/http/HttpService.html#registerResources%28java.lang.String,%20java.lang.String,%20org.osgi.service.http.HttpContext%29&quot;&gt;HttpService.registerResources&lt;/a&gt; method. Last parameter &lt;code&gt;context&lt;/code&gt; is optional and can be &lt;code&gt;null&lt;/code&gt; for now.&lt;br /&gt;&lt;code&gt;alias&lt;/code&gt; is name in the URI namespace at which the resources are registered,&lt;br /&gt;&lt;code&gt;name&lt;/code&gt; is the base name of the resources that will be registered.&lt;br /&gt;For working example go &lt;a href=&quot;http://github.com/neotyk/httpservice-gitorial/commit/fda299ff8caae86730af5a5f2ed6a3305ad556a8&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;h2&gt;Authentication&lt;br /&gt;&lt;/h2&gt;So far registering dynamic and static content has been described, that is nice but what if you would like to secure it?&lt;br /&gt;Sure thing, you just need to provide last parameter (&lt;code&gt;context&lt;/code&gt;) to resource/servlet registration.&lt;br /&gt;If you don&#39;t provide &lt;code&gt;context&lt;/code&gt; default context is used and this one is allowing all access.&lt;br /&gt;Your authentication have to be implemented in &lt;a href=&quot;http://www.osgi.org/javadoc/r4v41/org/osgi/service/http/HttpContext.html#handleSecurity%28javax.servlet.http.HttpServletRequest,%20javax.servlet.http.HttpServletResponse%29&quot;&gt;HttpContext.handleSecurity&lt;/a&gt;.&lt;br /&gt;This method is called by OSGi Http Service before request is handled. If your implementation returns &lt;code&gt;true&lt;/code&gt; the request should be serviced, &lt;code&gt;false&lt;/code&gt; if the request should not be serviced and Http Service will send the response back to the client.&lt;br /&gt;And you probably saw it coming, &lt;a href=&quot;http://github.com/neotyk/httpservice-gitorial/commit/fea27cf030303142adbabb490c24d335cdfa2cbf&quot;&gt;here&lt;/a&gt; is a code for it.&lt;br /&gt;&lt;h2&gt;Status&lt;br /&gt;&lt;/h2&gt;Not all specification has been implemented.&lt;br /&gt;Things not implemented yet are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;SSL support,&lt;/li&gt;&lt;li&gt;Security as described in 102.8 Security&lt;/li&gt;&lt;/ul&gt;Those things will get implemented if users will be interested in it.&lt;br /&gt;Rest was implemented as specification requested.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Enjoy working with Grizzly OSGi Http Service and make sure to report issues as well as success stories to &lt;a href=&quot;http://www.nabble.com/Grizzly---Users-f23249.html&quot;&gt;Grizzly Users List&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://codemeself.blogspot.com/feeds/105077603517766223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codemeself.blogspot.com/2009/03/grizzly-osgi-http-service-guide.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/105077603517766223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/105077603517766223'/><link rel='alternate' type='text/html' href='http://codemeself.blogspot.com/2009/03/grizzly-osgi-http-service-guide.html' title='Grizzly OSGi Http Service Guide'/><author><name>neotyk</name><uri>http://www.blogger.com/profile/03897419234057699787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6IxdCSA4wKC0e-99EIT8etdmGyWVHxlP8kLPpzFhuDh_sgnja5HoN6T2LObK-wrR-WFVXlFqHgGlPca7cyEbqN29GzlJ7yFPJPCKM-Aw4_hjcxk5bRxEjtWMXPbd_tg/s220/head-128-white.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666538509897823475.post-6376131759315908224</id><published>2009-02-26T23:43:00.005+01:00</published><updated>2009-03-14T11:45:49.447+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="clojure"/><category scheme="http://www.blogger.com/atom/ns#" term="grizzly"/><title type='text'>Clojure?</title><content type='html'>Just finished watching &lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;a href=&quot;http://clojure.blip.tv/&quot;&gt;Clojure for Java Programmers&lt;/a&gt;&lt;/span&gt;.&lt;br /&gt;Second part is much more interesting.&lt;br /&gt;&lt;br /&gt;&lt;embed src=&quot;http://blip.tv/play/AbyxMoqaCw&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; height=&quot;240&quot; width=&quot;320&quot;&gt;&lt;/embed&gt; &lt;br /&gt;&lt;br /&gt;If you like &lt;a href=&quot;http://clojure.org/&quot;&gt;Clojure&lt;/a&gt; you might want to take a look at &lt;a href=&quot;http://github.com/antoniogarrote/clojure-grizzly-trial/tree/master&quot;&gt;Clojure on Grizzly&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://codemeself.blogspot.com/feeds/6376131759315908224/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codemeself.blogspot.com/2009/02/clojure.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/6376131759315908224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/6376131759315908224'/><link rel='alternate' type='text/html' href='http://codemeself.blogspot.com/2009/02/clojure.html' title='Clojure?'/><author><name>neotyk</name><uri>http://www.blogger.com/profile/03897419234057699787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6IxdCSA4wKC0e-99EIT8etdmGyWVHxlP8kLPpzFhuDh_sgnja5HoN6T2LObK-wrR-WFVXlFqHgGlPca7cyEbqN29GzlJ7yFPJPCKM-Aw4_hjcxk5bRxEjtWMXPbd_tg/s220/head-128-white.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666538509897823475.post-2752638434211817890</id><published>2009-02-03T01:38:00.006+01:00</published><updated>2009-02-03T10:36:52.618+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="grizzly"/><category scheme="http://www.blogger.com/atom/ns#" term="HttpService"/><category scheme="http://www.blogger.com/atom/ns#" term="osgi"/><title type='text'>Grizzly OSGi HttpService Status</title><content type='html'>&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;trebuchet ms&#39;;&quot;&gt;Soon &lt;/span&gt;&lt;a href=&quot;https://grizzly.dev.java.net/&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;trebuchet ms&#39;;&quot;&gt;Grizzly&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;trebuchet ms&#39;;&quot;&gt; is going to be available as &lt;/span&gt;&lt;a href=&quot;http://www.osgi.org/Main/HomePage&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;trebuchet ms&#39;;&quot;&gt;OSGi&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;trebuchet ms&#39;;&quot;&gt; &lt;/span&gt;&lt;a href=&quot;http://www.osgi.org/javadoc/r4v41/org/osgi/service/http/HttpService.html&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;trebuchet ms&#39;;&quot;&gt;HttpService&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;trebuchet ms&#39;;&quot;&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;trebuchet ms&#39;;&quot;&gt;For now here is a status of ongoing work.&lt;br /&gt;&lt;/span&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwtKXU_b2aKuG6rUmF2xCQ_jl5YE5XoglTTEuEec0PBPEodOwH2H1bnTx1h7NeJgtWkVlhjG_RLUZmcUdH4d99xkU5cdr8NZk4Xd75n-HY6OBGyqL5vGG3ThA3DZ6bqyh9OC73qMBR13vq/s1600-h/Grizzly+OSGi+HttpService.png&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 400px; height: 297px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwtKXU_b2aKuG6rUmF2xCQ_jl5YE5XoglTTEuEec0PBPEodOwH2H1bnTx1h7NeJgtWkVlhjG_RLUZmcUdH4d99xkU5cdr8NZk4Xd75n-HY6OBGyqL5vGG3ThA3DZ6bqyh9OC73qMBR13vq/s400/Grizzly+OSGi+HttpService.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5298366374195225506&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://codemeself.blogspot.com/feeds/2752638434211817890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codemeself.blogspot.com/2009/02/grizzly-osgi-httpservice-status.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/2752638434211817890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/2752638434211817890'/><link rel='alternate' type='text/html' href='http://codemeself.blogspot.com/2009/02/grizzly-osgi-httpservice-status.html' title='Grizzly OSGi HttpService Status'/><author><name>neotyk</name><uri>http://www.blogger.com/profile/03897419234057699787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6IxdCSA4wKC0e-99EIT8etdmGyWVHxlP8kLPpzFhuDh_sgnja5HoN6T2LObK-wrR-WFVXlFqHgGlPca7cyEbqN29GzlJ7yFPJPCKM-Aw4_hjcxk5bRxEjtWMXPbd_tg/s220/head-128-white.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwtKXU_b2aKuG6rUmF2xCQ_jl5YE5XoglTTEuEec0PBPEodOwH2H1bnTx1h7NeJgtWkVlhjG_RLUZmcUdH4d99xkU5cdr8NZk4Xd75n-HY6OBGyqL5vGG3ThA3DZ6bqyh9OC73qMBR13vq/s72-c/Grizzly+OSGi+HttpService.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666538509897823475.post-5422297501701068308</id><published>2009-01-12T00:15:00.006+01:00</published><updated>2009-01-12T00:49:15.392+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="archetype"/><category scheme="http://www.blogger.com/atom/ns#" term="maven2"/><category scheme="http://www.blogger.com/atom/ns#" term="testing"/><title type='text'>Maven Archetype Automation 1</title><content type='html'>In my need for automation I found another place for improvements in Maven2.&lt;br /&gt;&lt;br /&gt;Here is a situation: you have sample project showing how to use something.&lt;br /&gt;&lt;br /&gt;And you want to be nice to your users so you would like to offer them this sample project as archetype via archetype-catalog.xml.&lt;br /&gt;&lt;br /&gt;Here is a bit longer version of above:&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjemdkGje1uUgiJAFDtT4DugqKGMTh0I7qGW03dI3RlYcJXFTuygecLLN-xFEoy3HgDQ-xOJiqQj4dIqzc4GSxkToiqAIgf88I8B5P6KBj-ulQaycnwW6H7OiqMjTsPmh204I2s-WmTjYxM/s1600-h/Maven+Archetype+Automation.png&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 400px; height: 231px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjemdkGje1uUgiJAFDtT4DugqKGMTh0I7qGW03dI3RlYcJXFTuygecLLN-xFEoy3HgDQ-xOJiqQj4dIqzc4GSxkToiqAIgf88I8B5P6KBj-ulQaycnwW6H7OiqMjTsPmh204I2s-WmTjYxM/s400/Maven+Archetype+Automation.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5290179971812555954&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://docs.codehaus.org/display/MAVEN/ArchetypeNG&quot;&gt;ArchetypeNG&lt;/a&gt; seems like possible solution, have to research this one.</content><link rel='replies' type='application/atom+xml' href='http://codemeself.blogspot.com/feeds/5422297501701068308/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codemeself.blogspot.com/2009/01/maven-archetype-automation-pi.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/5422297501701068308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/5422297501701068308'/><link rel='alternate' type='text/html' href='http://codemeself.blogspot.com/2009/01/maven-archetype-automation-pi.html' title='Maven Archetype Automation 1'/><author><name>neotyk</name><uri>http://www.blogger.com/profile/03897419234057699787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6IxdCSA4wKC0e-99EIT8etdmGyWVHxlP8kLPpzFhuDh_sgnja5HoN6T2LObK-wrR-WFVXlFqHgGlPca7cyEbqN29GzlJ7yFPJPCKM-Aw4_hjcxk5bRxEjtWMXPbd_tg/s220/head-128-white.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjemdkGje1uUgiJAFDtT4DugqKGMTh0I7qGW03dI3RlYcJXFTuygecLLN-xFEoy3HgDQ-xOJiqQj4dIqzc4GSxkToiqAIgf88I8B5P6KBj-ulQaycnwW6H7OiqMjTsPmh204I2s-WmTjYxM/s72-c/Maven+Archetype+Automation.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666538509897823475.post-7648677452818671657</id><published>2008-12-24T09:47:00.001+01:00</published><updated>2009-01-08T09:27:52.849+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="grizzly"/><category scheme="http://www.blogger.com/atom/ns#" term="maven2"/><category scheme="http://www.blogger.com/atom/ns#" term="osgi"/><title type='text'>Grizzly OSGi Archetype</title><content type='html'>This is take 2 of &lt;a href=&quot;http://grizzly.dev.java.net/&quot;&gt;Grizzly&lt;/a&gt; on &lt;a href=&quot;http://www.osgi.org/&quot;&gt;OSGi&lt;/a&gt; platform (&lt;a href=&quot;http://codemeself.blogspot.com/2008/12/grizzly-osgi.html&quot;&gt;take 1&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Previous problems running this configuration has been solved by &lt;a href=&quot;http://www.nabble.com/-HEADS-UP--OSGi-support%3A-mandatory-changes-td21085816.html&quot;&gt;Grizzly Devs&lt;/a&gt;, awesome feedback.&lt;br /&gt;&lt;br /&gt;So if you want a &lt;a href=&quot;http://github.com/neotyk/grizzly-usedotosgi/wikis&quot;&gt;Quick Start for Grizzly on OSGi&lt;/a&gt; jump to your console and execute following:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;mvn archetype:generate -DarchetypeCatalog=http://kungfoo-m2.googlecode.com/svn/trunk/archetype-catalog.xml&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;This should allow you to choose &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;grizzly-osgi-startup&lt;/span&gt; project and provide all necessary project details.&lt;br /&gt;Next thing you do is to &lt;span style=&quot;font-style: italic;&quot;&gt;cd&lt;/span&gt; to newly created project and execute:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;mvn clean install pax:provision&lt;span style=&quot;font-family:Georgia,serif;&quot;&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/blockquote&gt;Now you should have &lt;a href=&quot;http://felix.apache.org/&quot;&gt;Felix&lt;/a&gt; (default for &lt;a href=&quot;http://wiki.ops4j.org/display/ops4j/Pax&quot;&gt;Pax&lt;/a&gt;, you can choose other platform providers) running your bundle that uses &lt;a href=&quot;http://grizzly.dev.java.net/&quot;&gt;Grizzly&lt;/a&gt; and is listening on &lt;a href=&quot;http://localhost:8282/&quot;&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;localhost:8282&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Have fun &lt;a href=&quot;http://grizzly.dev.java.net/&quot;&gt;Grizzling&lt;/a&gt; in &lt;a href=&quot;http://www.osgi.org/&quot;&gt;OSGi&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://codemeself.blogspot.com/feeds/7648677452818671657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codemeself.blogspot.com/2008/12/grizzly-osgi-archetype.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/7648677452818671657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/7648677452818671657'/><link rel='alternate' type='text/html' href='http://codemeself.blogspot.com/2008/12/grizzly-osgi-archetype.html' title='Grizzly OSGi Archetype'/><author><name>neotyk</name><uri>http://www.blogger.com/profile/03897419234057699787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6IxdCSA4wKC0e-99EIT8etdmGyWVHxlP8kLPpzFhuDh_sgnja5HoN6T2LObK-wrR-WFVXlFqHgGlPca7cyEbqN29GzlJ7yFPJPCKM-Aw4_hjcxk5bRxEjtWMXPbd_tg/s220/head-128-white.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666538509897823475.post-8462578392663350079</id><published>2008-12-19T11:42:00.000+01:00</published><updated>2008-12-19T11:53:33.234+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="dependency"/><category scheme="http://www.blogger.com/atom/ns#" term="grizzly"/><category scheme="http://www.blogger.com/atom/ns#" term="overview"/><title type='text'>Grizzly Dependency Overview</title><content type='html'>You probably could see it comming :)&lt;div&gt;Here is &lt;a href=&quot;http://code.google.com/p/maven-overview-plugin/&quot;&gt;maven-overview-plugin&lt;/a&gt; applied to &lt;a href=&quot;https://grizzly.dev.java.net/&quot;&gt;The Monster&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;table style=&quot;width:auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://picasaweb.google.com/lh/photo/L8m2M4LEgp6yZO0w5urlQg?authkey=30SHKLUq5rE&amp;amp;feat=embedwebsite&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_auXsYcwhoH3bzsZBfFBWidNzDJzm2uRqycB1wN-XCmNj1Yc3Y1eSQFWF-2Vm3jIrz20Ttoo5ljClhvjcjW1CjIQaFLKmpPJMIFL8ttTPuQ2wressW0Uz4oh4SVWi0YL4QhfNDvQs4kSu/s144/overview.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;font-family:arial,sans-serif; font-size:11px; text-align:right&quot;&gt;From &lt;a href=&quot;http://picasaweb.google.com/hubert.iwaniuk/CodeMeSelf?authkey=30SHKLUq5rE&amp;amp;feat=embedwebsite&quot;&gt;code me self&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codemeself.blogspot.com/feeds/8462578392663350079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codemeself.blogspot.com/2008/12/grizzly-dependency-overview.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/8462578392663350079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/8462578392663350079'/><link rel='alternate' type='text/html' href='http://codemeself.blogspot.com/2008/12/grizzly-dependency-overview.html' title='Grizzly Dependency Overview'/><author><name>neotyk</name><uri>http://www.blogger.com/profile/03897419234057699787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6IxdCSA4wKC0e-99EIT8etdmGyWVHxlP8kLPpzFhuDh_sgnja5HoN6T2LObK-wrR-WFVXlFqHgGlPca7cyEbqN29GzlJ7yFPJPCKM-Aw4_hjcxk5bRxEjtWMXPbd_tg/s220/head-128-white.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_auXsYcwhoH3bzsZBfFBWidNzDJzm2uRqycB1wN-XCmNj1Yc3Y1eSQFWF-2Vm3jIrz20Ttoo5ljClhvjcjW1CjIQaFLKmpPJMIFL8ttTPuQ2wressW0Uz4oh4SVWi0YL4QhfNDvQs4kSu/s72-c/overview.png" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666538509897823475.post-1883260852940584426</id><published>2008-12-19T11:26:00.000+01:00</published><updated>2008-12-24T09:47:30.144+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="grizzly"/><category scheme="http://www.blogger.com/atom/ns#" term="osgi"/><title type='text'>Grizzly OSGi</title><content type='html'>&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:arial;&quot;&gt;As a side effect of working on &lt;/span&gt;&lt;a href=&quot;http://codemeself.blogspot.com/2008/12/grizzly-proxy.html&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:arial;&quot;&gt;Grizzly Proxy&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:arial;&quot;&gt; simple project showing how to use &lt;/span&gt;&lt;a href=&quot;https://grizzly.dev.java.net/&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:arial;&quot;&gt;Grizzly&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:arial;&quot;&gt; in &lt;/span&gt;&lt;a href=&quot;http://www.osgi.org/Main/HomePage&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:arial;&quot;&gt;OSGi&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:arial;&quot;&gt; environment popped up.&lt;/span&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:arial;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:arial;&quot;&gt;Links:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://github.com/neotyk/grizzly-usedotosgi/tree/master&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:arial;&quot;&gt;Source Tree&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:arial;&quot;&gt;Hope to have archetype available soon, will keep you posted.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codemeself.blogspot.com/feeds/1883260852940584426/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codemeself.blogspot.com/2008/12/grizzly-osgi.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/1883260852940584426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/1883260852940584426'/><link rel='alternate' type='text/html' href='http://codemeself.blogspot.com/2008/12/grizzly-osgi.html' title='Grizzly OSGi'/><author><name>neotyk</name><uri>http://www.blogger.com/profile/03897419234057699787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6IxdCSA4wKC0e-99EIT8etdmGyWVHxlP8kLPpzFhuDh_sgnja5HoN6T2LObK-wrR-WFVXlFqHgGlPca7cyEbqN29GzlJ7yFPJPCKM-Aw4_hjcxk5bRxEjtWMXPbd_tg/s220/head-128-white.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666538509897823475.post-1187490762760839596</id><published>2008-12-19T11:11:00.000+01:00</published><updated>2008-12-19T11:26:52.273+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="grizzly"/><category scheme="http://www.blogger.com/atom/ns#" term="http-proxy"/><category scheme="http://www.blogger.com/atom/ns#" term="osgi"/><title type='text'>Grizzly proxy</title><content type='html'>&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: 13px; white-space: pre;&quot;&gt;After Devoxx I finnaly started working on &lt;a href=&quot;https://grizzly.dev.java.net/&quot;&gt;Grizzly&lt;/a&gt; &lt;a href=&quot;http://en.wikipedia.org/wiki/Proxy_server&quot;&gt;Proxy Server&lt;/a&gt;.&lt;/span&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: 13px; white-space: pre;&quot;&gt;&lt;a href=&quot;http://code.google.com/p/g-http-proxy/&quot;&gt;Project page&lt;/a&gt; and &lt;a href=&quot;http://github.com/neotyk/http-proxy/tree/master&quot;&gt;sources tree&lt;/a&gt; are available.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: 13px; white-space: pre;&quot;&gt;For now proxy is not functional.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: 13px; white-space: pre;&quot;&gt;Initialy I used &lt;a href=&quot;http://hc.apache.org/httpclient-3.x/&quot;&gt;commons-httpclient&lt;/a&gt; to make connections to target server.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: 13px; white-space: pre;&quot;&gt;This turned out to be not really nice since &lt;a href=&quot;http://hc.apache.org/httpclient-3.x/&quot;&gt;httpclient&lt;/a&gt; is blocking.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: 13px; white-space: pre;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: 13px; white-space: pre;&quot;&gt;My current focus is to change it to use &lt;a href=&quot;http://hc.apache.org/httpcomponents-core/index.html&quot;&gt;HttpCore&lt;/a&gt; and especially I&#39;m interested in &lt;a href=&quot;http://hc.apache.org/httpcomponents-core/index.html&quot;&gt;NIO Extensions Module&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: 13px; white-space: pre;&quot;&gt;This will allow much better scaling, but still will relly on two difrent APIs, and I&#39;m dont think I like having it done like that.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: 13px; white-space: pre;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: 13px; white-space: pre;&quot;&gt;Once &lt;a href=&quot;https://grizzly.dev.java.net/&quot;&gt;Grizzly&lt;/a&gt; team releases thair HTTP Client I&#39;m going to switch to it.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: 13px; white-space: pre; &quot;&gt;So don&#39;t expect &lt;a href=&quot;http://code.google.com/p/g-http-proxy/&quot;&gt;g-http-proxy&lt;/a&gt; to be usable right now, but keep an eye on it, and fill free to contribute.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: 13px; white-space: pre;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: 13px; white-space: pre;&quot;&gt;&lt;a href=&quot;http://code.google.com/p/g-http-proxy/&quot;&gt;g-http-proxy&lt;/a&gt; is &lt;a href=&quot;http://www.osgi.org/&quot;&gt;OSGi&lt;/a&gt; bundle :)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: 13px; white-space: pre;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: 13px; white-space: pre;&quot;&gt;Thanks for listening and stay tuned.&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codemeself.blogspot.com/feeds/1187490762760839596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codemeself.blogspot.com/2008/12/grizzly-proxy.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/1187490762760839596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/1187490762760839596'/><link rel='alternate' type='text/html' href='http://codemeself.blogspot.com/2008/12/grizzly-proxy.html' title='Grizzly proxy'/><author><name>neotyk</name><uri>http://www.blogger.com/profile/03897419234057699787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6IxdCSA4wKC0e-99EIT8etdmGyWVHxlP8kLPpzFhuDh_sgnja5HoN6T2LObK-wrR-WFVXlFqHgGlPca7cyEbqN29GzlJ7yFPJPCKM-Aw4_hjcxk5bRxEjtWMXPbd_tg/s220/head-128-white.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666538509897823475.post-7337587204356079799</id><published>2008-07-07T23:10:00.000+02:00</published><updated>2008-07-07T23:32:56.694+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="dependency"/><category scheme="http://www.blogger.com/atom/ns#" term="integration"/><category scheme="http://www.blogger.com/atom/ns#" term="maven2"/><category scheme="http://www.blogger.com/atom/ns#" term="overview"/><category scheme="http://www.blogger.com/atom/ns#" term="plugin"/><category scheme="http://www.blogger.com/atom/ns#" term="testing"/><title type='text'>Super Helpful Integration Testing ThingY</title><content type='html'>&lt;h2&gt;Maven plug-in integration testing.&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;After walking around integration tests for &lt;a href=&quot;http://www.blogger.com/post-create.g?blogID=8666538509897823475&quot;&gt;Overview&lt;/a&gt; I finally set down and made it happen.&lt;br /&gt;&lt;br /&gt;Most helpful integration testing solution I found is called &lt;abbr title=&quot;Super Helpful Integration Testing ThingY&quot;&gt;SHITTY&lt;/abbr&gt; &lt;a href=&quot;http://mojo.codehaus.org/shitty-maven-plugin/&quot;&gt;http://mojo.codehaus.org/shitty-maven-plugin/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It is very easy to use.&lt;br /&gt;&lt;br /&gt;As sane developer would expect, you&#39;ll have to put your integration tests somewhere in &lt;em&gt;src&lt;/em&gt; (&lt;em&gt;src/it&lt;/em&gt;).&lt;br /&gt;&lt;br /&gt;Integration test is:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;yes you are right, &lt;em&gt;pom.xml&lt;/em&gt;,&lt;/li&gt;&lt;li&gt;than &lt;em&gt;goals.txt&lt;/em&gt; - defining goals to execute,&lt;/li&gt;&lt;li&gt;optional setup and validation &lt;a href=&quot;http://groovy.codehaus.org/&quot;&gt;Groovy&lt;/a&gt; scripts.&lt;/li&gt;&lt;li&gt;some additional stuff that wasn&#39;t needed for me.&lt;/li&gt;&lt;/ul&gt;You can find sample usage &lt;a href=&quot;http://maven-overview-plugin.googlecode.com/svn/trunk/pom.xml&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;Big&lt;/span&gt; thanks to Jason Dillon for creating &lt;span style=&quot;font-style: italic;&quot;&gt;Super Helpful Integration Testing ThingY&lt;/span&gt;.&lt;br /&gt;&lt;/string&gt;</content><link rel='replies' type='application/atom+xml' href='http://codemeself.blogspot.com/feeds/7337587204356079799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codemeself.blogspot.com/2008/07/super-helpful-integration-testing.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/7337587204356079799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/7337587204356079799'/><link rel='alternate' type='text/html' href='http://codemeself.blogspot.com/2008/07/super-helpful-integration-testing.html' title='Super Helpful Integration Testing ThingY'/><author><name>neotyk</name><uri>http://www.blogger.com/profile/03897419234057699787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6IxdCSA4wKC0e-99EIT8etdmGyWVHxlP8kLPpzFhuDh_sgnja5HoN6T2LObK-wrR-WFVXlFqHgGlPca7cyEbqN29GzlJ7yFPJPCKM-Aw4_hjcxk5bRxEjtWMXPbd_tg/s220/head-128-white.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666538509897823475.post-688803631443486222</id><published>2008-02-12T21:53:00.001+01:00</published><updated>2008-02-12T22:40:51.896+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="dependency"/><category scheme="http://www.blogger.com/atom/ns#" term="maven2"/><category scheme="http://www.blogger.com/atom/ns#" term="overview"/><category scheme="http://www.blogger.com/atom/ns#" term="plugin"/><title type='text'>Maven2 Landskape - Developers view</title><content type='html'>So &lt;a href=&quot;http://code.google.com/p/maven-overview-plugin/&quot;&gt;Maven Dependency Overview Plugin&lt;/a&gt; has been created.&lt;br /&gt;&lt;a href=&quot;http://maven.apache.org/&quot;&gt;Maven&lt;/a&gt; has it&#39;s ups and downs as any project.&lt;br /&gt;&lt;br /&gt;Here is a list of things that made it harder than needed to create a report plugin:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Documentation is hard to get.&lt;br /&gt;Try searching &lt;a href=&quot;http://www.google.com/search?q=maven2+plugin+development&quot;&gt;Maven2 Plugin Development&lt;/a&gt;. You can find some basic information but soon you&#39;ll run into undocumented features.&lt;br /&gt;Most of a time while viewing documentation I felt like someone wrote it because he/she was forced to do it.&lt;br /&gt;Most valuable resource for me where:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://docs.codehaus.org/display/MAVENUSER/Home&quot;&gt;MAVENUSER&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://docs.codehaus.org/display/MAVENUSER/Mini+Guides&quot;&gt;Mini Guides&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Poor API documentation.&lt;br /&gt;There is a plugin (&lt;a href=&quot;http://maven.apache.org/plugins/maven-docck-plugin/&quot;&gt;maven-docck-plugin&lt;/a&gt;) designed to force proper documentation, unfortunately some plugins even one shipped with Maven are not using it.&lt;/li&gt;&lt;li&gt;Unstable API.&lt;br /&gt;take a look at dependencies of &lt;a href=&quot;http://www.mvnrepository.com/artifact/org.apache.maven.reporting/maven-reporting-impl/2.0.4&quot;&gt;maven-reporting-impl&lt;/a&gt;. It depends on&lt;a href=&quot;http://www.mvnrepository.com/artifact/org.apache.maven.doxia/doxia-core/1.0-alpha-7&quot;&gt; doxia-core&lt;/a&gt; and &lt;a href=&quot;http://www.mvnrepository.com/artifact/org.apache.maven.doxia/doxia-site-renderer/1.0-alpha-7&quot;&gt;doxia-site-renderer&lt;/a&gt; both are version 1.0-alpha-7, not documented.&lt;/li&gt;&lt;/ul&gt;Good luck developing Maven plugins, you&#39;ll need it, but it&#39;s rewarding.&lt;br /&gt;&lt;br /&gt;I&#39;ll try to write integration test for &lt;a href=&quot;http://code.google.com/p/maven-overview-plugin/&quot;&gt;Maven Dependency Overview Plugin&lt;/a&gt;, hope it is going to be as much fun as developing plugin by itself.&lt;br /&gt;&lt;br /&gt;I&#39;ll keep you posted.</content><link rel='replies' type='application/atom+xml' href='http://codemeself.blogspot.com/feeds/688803631443486222/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codemeself.blogspot.com/2008/02/maven2-landskape-developers-view.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/688803631443486222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/688803631443486222'/><link rel='alternate' type='text/html' href='http://codemeself.blogspot.com/2008/02/maven2-landskape-developers-view.html' title='Maven2 Landskape - Developers view'/><author><name>neotyk</name><uri>http://www.blogger.com/profile/03897419234057699787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6IxdCSA4wKC0e-99EIT8etdmGyWVHxlP8kLPpzFhuDh_sgnja5HoN6T2LObK-wrR-WFVXlFqHgGlPca7cyEbqN29GzlJ7yFPJPCKM-Aw4_hjcxk5bRxEjtWMXPbd_tg/s220/head-128-white.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666538509897823475.post-3920341392380255621</id><published>2008-02-08T17:24:00.000+01:00</published><updated>2008-02-08T17:37:08.343+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="dependency"/><category scheme="http://www.blogger.com/atom/ns#" term="maven2"/><category scheme="http://www.blogger.com/atom/ns#" term="overview"/><category scheme="http://www.blogger.com/atom/ns#" term="plugin"/><title type='text'>Maven Dependency Overview</title><content type='html'>&lt;span style=&quot;font-size:130%;&quot;&gt;Maven Dependency Overview&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Since I started working with &lt;a href=&quot;http://maven.apache.org/&quot;&gt;Maven2&lt;/a&gt; I always wanted to have a plug-in that would graph dependency.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://maven-overview-plugin.googlecode.com/files/stop.png&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;&quot; src=&quot;http://maven-overview-plugin.googlecode.com/files/stop.png&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;For last few days I&#39;ve been spending part of my free time on &lt;a href=&quot;http://code.google.com/p/maven-overview-plugin/&quot;&gt;maven-overview-plugin&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;And &lt;a href=&quot;http://maven-overview-plugin.googlecode.com/files/maven-overview-plugin-1.0-SNAPSHOT.jar&quot;&gt;here&lt;/a&gt; it is in quite usable state.&lt;br /&gt;&lt;br /&gt;You can include report with Dependency Overview, you can use it from command line, you can do some basic configuration.&lt;br /&gt;&lt;br /&gt;To prove that it is actually useful I wrote short story of it&#39;s use: &lt;a href=&quot;http://code.google.com/p/maven-overview-plugin/wiki/DependencyCleanUpShortStory&quot;&gt;DependencyCleanUpShortStory&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Feel free to use it it is OS Licence.</content><link rel='replies' type='application/atom+xml' href='http://codemeself.blogspot.com/feeds/3920341392380255621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codemeself.blogspot.com/2008/02/maven-dependency-overview.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/3920341392380255621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/3920341392380255621'/><link rel='alternate' type='text/html' href='http://codemeself.blogspot.com/2008/02/maven-dependency-overview.html' title='Maven Dependency Overview'/><author><name>neotyk</name><uri>http://www.blogger.com/profile/03897419234057699787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6IxdCSA4wKC0e-99EIT8etdmGyWVHxlP8kLPpzFhuDh_sgnja5HoN6T2LObK-wrR-WFVXlFqHgGlPca7cyEbqN29GzlJ7yFPJPCKM-Aw4_hjcxk5bRxEjtWMXPbd_tg/s220/head-128-white.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666538509897823475.post-8722306566775395721</id><published>2007-11-07T17:08:00.000+01:00</published><updated>2007-11-08T14:23:57.221+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cargo"/><category scheme="http://www.blogger.com/atom/ns#" term="integration"/><category scheme="http://www.blogger.com/atom/ns#" term="maven2"/><category scheme="http://www.blogger.com/atom/ns#" term="testing"/><title type='text'>Maven2 cargo plugin and integration test</title><content type='html'>So I was facing a problem of creating &lt;a href=&quot;http://maven.apache.org/&quot;&gt;Maven2&lt;/a&gt; project that would:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Create domain based on &lt;a href=&quot;http://www.jboss.org/products/jbossas&quot;&gt;JBoss&lt;/a&gt; default server configuration,&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Copy to this newly created domain configuration file and datasource configuration,&lt;/li&gt;&lt;li&gt;Start container with domain that was result of #2.&lt;/li&gt;&lt;/ol&gt;I thought that &lt;a href=&quot;http://cargo.codehaus.org/Maven2+plugin&quot;&gt;cargo-maven2-plugin&lt;/a&gt; will do the job.&lt;br /&gt;Unfortunately it didn&#39;t.&lt;br /&gt;&lt;br /&gt;My initial approach was:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Attach &lt;a href=&quot;http://cargo.codehaus.org/Maven2+plugin&quot;&gt;cargo&lt;/a&gt;:configure (undocumented goal :-/) to generate-test-sources phase, using &lt;a href=&quot;http://cargo.codehaus.org/Standalone+Local+Configuration&quot;&gt;standalone&lt;/a&gt; type, so configuration gets generated from scratch based on default,&lt;/li&gt;&lt;li&gt;Attach &lt;a href=&quot;http://maven.apache.org/plugins/maven-antrun-plugin/&quot;&gt;antrun&lt;/a&gt;:&lt;a href=&quot;http://maven.apache.org/plugins/maven-antrun-plugin/run-mojo.html&quot;&gt;run&lt;/a&gt; to generate-test-resources phase to copy &lt;i&gt;.properties&lt;/i&gt; to &lt;i&gt;conf&lt;/i&gt;, and &lt;i&gt;-ds.xml&lt;/i&gt; to &lt;i&gt;deploy&lt;/i&gt;,&lt;/li&gt;&lt;li&gt;Attach cargo:start to pre-integration-test phase, using &lt;a href=&quot;http://cargo.codehaus.org/Existing+Local+Configuration&quot;&gt;existing&lt;/a&gt; type, so configuration from #2 is read-only used, and *should* not be overwritten.&lt;/li&gt;&lt;/ol&gt;In theory it seems all great and already working.&lt;br /&gt;But I couldn&#39;t convince cargo to work like that.&lt;br /&gt;Started executing maven with &lt;strong&gt;-X&lt;/strong&gt; to discover that maven configures mojos properly, not a big surprise, especially if you take a look at &lt;a href=&quot;http://bamboo.ci.codehaus.org/browse/CARGO-TRUNKM2&quot;&gt;CI&lt;/a&gt; of cargo, you would suspect cargo of errors.&lt;br /&gt;At the end of a day I created this ugly but working configuration:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;background: #262626; color: #ffffff&quot;&gt;&lt;br /&gt;&lt;font face=&quot;monospace&quot; size=&quot;small&quot;&gt;&lt;br /&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;project&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;font color=&quot;#6495ed&quot;&gt;&lt;b&gt;xmlns&lt;/b&gt;&lt;/font&gt;=&lt;font color=&quot;#87ceeb&quot;&gt;&amp;quot;&lt;a href=&quot;http://maven.apache.org/POM/4.0.0&quot;&gt;http://maven.apache.org/POM/4.0.0&lt;/a&gt;&amp;quot;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;font color=&quot;#6495ed&quot;&gt;&lt;b&gt;xmlns&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#666666&quot;&gt;:&lt;/font&gt;&lt;font color=&quot;#6495ed&quot;&gt;&lt;b&gt;xsi&lt;/b&gt;&lt;/font&gt;=&lt;font color=&quot;#87ceeb&quot;&gt;&amp;quot;&lt;a href=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&gt;http://www.w3.org/2001/XMLSchema-instance&lt;/a&gt;&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font color=&quot;#6495ed&quot;&gt;&lt;b&gt;xsi&lt;/b&gt;&lt;/font&gt;&lt;font color=&quot;#666666&quot;&gt;:&lt;/font&gt;&lt;font color=&quot;#6495ed&quot;&gt;&lt;b&gt;schemaLocation&lt;/b&gt;&lt;/font&gt;=&lt;font color=&quot;#87ceeb&quot;&gt;&amp;quot;&lt;a href=&quot;http://maven.apache.org/POM/4.0.0&quot;&gt;http://maven.apache.org/POM/4.0.0&lt;/a&gt; &lt;a href=&quot;http://maven.apache.org/maven-v4_0_0.xsd&quot;&gt;http://maven.apache.org/maven-v4_0_0.xsd&lt;/a&gt;&amp;quot;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;modelVersion&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;4.0.0&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/modelVersion&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;groupId&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;your.group.id&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;artifactId&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;itest&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;version&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;0.1-SNAPSHOT&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/version&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;name&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;Integration Tests&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/name&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;description&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;This module provides a collection of integration tests.&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/description&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;packaging&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;jar&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/packaging&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;dependencies&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;dependency&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;groupId&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;junit&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;artifactId&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;junit&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;version&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;3.8.1&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/version&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;scope&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;test&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;dependency&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;groupId&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;your.group.id&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;artifactId&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;your-ear&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;type&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;ear&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/type&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;version&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;${project.version}&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/version&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;dependency&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;groupId&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;org.codehaus.cargo&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;artifactId&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;cargo-ant&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;version&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;0.9&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/version&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;scope&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;test&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;dependency&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;groupId&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;org.codehaus.cargo&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;artifactId&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;cargo-core-uberjar&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;version&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;0.9&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/version&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;scope&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;test&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/scope&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/dependency&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/dependencies&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;build&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;plugins&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;plugin&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;groupId&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;org.apache.maven.plugins&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;artifactId&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;maven-surefire-plugin&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;executions&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;execution&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;phase&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;integration-test&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/phase&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;goals&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;goal&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;test&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/goal&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/goals&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/execution&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/executions&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/plugin&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;plugin&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;artifactId&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;maven-antrun-plugin&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;version&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;1.1&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/version&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;executions&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;execution&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;id&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;tune-deployment&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/id&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;phase&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;generate-test-resources&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/phase&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;goals&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;goal&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;run&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/goal&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/goals&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;configuration&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;tasks&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;copy&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;font color=&quot;#6495ed&quot;&gt;&lt;b&gt;todir&lt;/b&gt;&lt;/font&gt;=&lt;font color=&quot;#87ceeb&quot;&gt;&amp;quot;${basedir}/target/jboss4x&amp;quot;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;font color=&quot;#6495ed&quot;&gt;&lt;b&gt;overwrite&lt;/b&gt;&lt;/font&gt;=&lt;font color=&quot;#87ceeb&quot;&gt;&amp;quot;true&amp;quot;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;fileset&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;font color=&quot;#6495ed&quot;&gt;&lt;b&gt;dir&lt;/b&gt;&lt;/font&gt;=&lt;font color=&quot;#87ceeb&quot;&gt;&amp;quot;${basedir}/src/jboss4x&amp;quot;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/copy&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/tasks&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/configuration&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/execution&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#666666&quot;&gt;&amp;lt;!&lt;/font&gt;&lt;font color=&quot;#666666&quot;&gt;-- This execution is needed to start container with existing configuration --&lt;/font&gt;&lt;font color=&quot;#666666&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;execution&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;id&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;start-container&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/id&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;phase&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;pre-integration-test&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/phase&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;goals&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;goal&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;run&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/goal&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/goals&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;configuration&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;tasks&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;taskdef&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;font color=&quot;#6495ed&quot;&gt;&lt;b&gt;resource&lt;/b&gt;&lt;/font&gt;=&lt;font color=&quot;#87ceeb&quot;&gt;&amp;quot;cargo.tasks&amp;quot;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;classpath&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;font color=&quot;#6495ed&quot;&gt;&lt;b&gt;refid&lt;/b&gt;&lt;/font&gt;=&lt;font color=&quot;#87ceeb&quot;&gt;&amp;quot;maven.test.classpath&amp;quot;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/taskdef&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;echo&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;font color=&quot;#6495ed&quot;&gt;&lt;b&gt;message&lt;/b&gt;&lt;/font&gt;=&lt;font color=&quot;#87ceeb&quot;&gt;&amp;quot;Starting Cargo...&amp;quot;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;cargo&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;font color=&quot;#6495ed&quot;&gt;&lt;b&gt;containerId&lt;/b&gt;&lt;/font&gt;=&lt;font color=&quot;#87ceeb&quot;&gt;&amp;quot;jboss4x&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color=&quot;#6495ed&quot;&gt;&lt;b&gt;home&lt;/b&gt;&lt;/font&gt;=&lt;font color=&quot;#87ceeb&quot;&gt;&amp;quot;${jboss4x.home}&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color=&quot;#6495ed&quot;&gt;&lt;b&gt;output&lt;/b&gt;&lt;/font&gt;=&lt;font color=&quot;#87ceeb&quot;&gt;&amp;quot;${project.build.directory}/container.log&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color=&quot;#6495ed&quot;&gt;&lt;b&gt;append&lt;/b&gt;&lt;/font&gt;=&lt;font color=&quot;#87ceeb&quot;&gt;&amp;quot;true&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color=&quot;#6495ed&quot;&gt;&lt;b&gt;log&lt;/b&gt;&lt;/font&gt;=&lt;font color=&quot;#87ceeb&quot;&gt;&amp;quot;${project.build.directory}/cargo.log&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color=&quot;#6495ed&quot;&gt;&lt;b&gt;action&lt;/b&gt;&lt;/font&gt;=&lt;font color=&quot;#87ceeb&quot;&gt;&amp;quot;start&amp;quot;&lt;/font&gt;&lt;br /&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font&gt;&lt;font color=&quot;#6495ed&quot;&gt;&lt;b&gt;wait&lt;/b&gt;&lt;/font&gt;=&lt;font color=&quot;#87ceeb&quot;&gt;&amp;quot;false&amp;quot;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;configuration&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;font color=&quot;#6495ed&quot;&gt;&lt;b&gt;type&lt;/b&gt;&lt;/font&gt;=&lt;font color=&quot;#87ceeb&quot;&gt;&amp;quot;existing&amp;quot;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;font color=&quot;#6495ed&quot;&gt;&lt;b&gt;home&lt;/b&gt;&lt;/font&gt;=&lt;font color=&quot;#87ceeb&quot;&gt;&amp;quot;${project.build.directory}/jboss4x&amp;quot;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;property&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;font color=&quot;#6495ed&quot;&gt;&lt;b&gt;name&lt;/b&gt;&lt;/font&gt;=&lt;font color=&quot;#87ceeb&quot;&gt;&amp;quot;cargo.servlet.port&amp;quot;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;nbsp;&lt;/font&gt;&lt;font color=&quot;#6495ed&quot;&gt;&lt;b&gt;value&lt;/b&gt;&lt;/font&gt;=&lt;font color=&quot;#87ceeb&quot;&gt;&amp;quot;8982&amp;quot;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;/&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/configuration&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/cargo&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/tasks&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/configuration&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/execution&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/executions&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/plugin&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;plugin&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;groupId&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;org.codehaus.cargo&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;artifactId&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;cargo-maven2-plugin&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;configuration&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;wait&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;false&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/wait&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;container&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;containerId&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;jboss4x&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/containerId&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;home&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;${jboss4x.home}&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/home&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;output&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;${project.build.directory}/container.log&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/output&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;append&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;true&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/append&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;log&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;${project.build.directory}/cargo.log&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/log&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/container&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;configuration&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;type&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;existing&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/type&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;home&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;${project.build.directory}/jboss4x&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/home&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;properties&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;cargo&lt;/font&gt;&lt;font color=&quot;#666666&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;logging&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;high&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/cargo&lt;/font&gt;&lt;font color=&quot;#666666&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#fa8072&quot;&gt;logging&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/properties&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/configuration&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/configuration&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;executions&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;execution&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;id&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;stop-container&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/id&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;phase&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;post-integration-test&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/phase&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;goals&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;goal&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;stop&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/goal&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/goals&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/execution&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;execution&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;id&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;create-deployment&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/id&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;phase&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;generate-test-sources&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/phase&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;goals&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;goal&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;configure&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/goal&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/goals&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;configuration&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;container&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;containerId&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;jboss4x&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/containerId&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;home&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;${jboss4x.home}&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/home&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;output&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;${project.build.directory}/container.log&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/output&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;append&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;true&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/append&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;log&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;${project.build.directory}/cargo.log&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/log&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/container&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;configuration&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;type&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;standalone&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/type&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;home&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;${project.build.directory}/jboss4x&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/home&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;properties&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;cargo&lt;/font&gt;&lt;font color=&quot;#666666&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;jvmargs&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-Xdebug -Xnoagent&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/cargo&lt;/font&gt;&lt;font color=&quot;#666666&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#fa8072&quot;&gt;jvmargs&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;cargo&lt;/font&gt;&lt;font color=&quot;#666666&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;logging&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;high&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/cargo&lt;/font&gt;&lt;font color=&quot;#666666&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#fa8072&quot;&gt;logging&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;cargo&lt;/font&gt;&lt;font color=&quot;#666666&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;servlet&lt;/font&gt;&lt;font color=&quot;#666666&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;port&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;8982&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/cargo&lt;/font&gt;&lt;font color=&quot;#666666&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#fa8072&quot;&gt;servlet&lt;/font&gt;&lt;font color=&quot;#666666&quot;&gt;.&lt;/font&gt;&lt;font color=&quot;#fa8072&quot;&gt;port&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/properties&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;deployables&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;deployable&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;groupId&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;your.group.id&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/groupId&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;artifactId&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;your-ear&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/artifactId&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffdead&quot;&gt;&amp;lt;&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;type&lt;/font&gt;&lt;font color=&quot;#ffdead&quot;&gt;&amp;gt;&lt;/font&gt;ear&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/type&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/deployable&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/deployables&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/configuration&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/configuration&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/execution&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/executions&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/plugin&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/plugins&amp;gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/build&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;font color=&quot;#fa8072&quot;&gt;&amp;lt;/project&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codemeself.blogspot.com/feeds/8722306566775395721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codemeself.blogspot.com/2007/11/maven2-cargo-plugin-and-integration.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/8722306566775395721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/8722306566775395721'/><link rel='alternate' type='text/html' href='http://codemeself.blogspot.com/2007/11/maven2-cargo-plugin-and-integration.html' title='Maven2 cargo plugin and integration test'/><author><name>neotyk</name><uri>http://www.blogger.com/profile/03897419234057699787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6IxdCSA4wKC0e-99EIT8etdmGyWVHxlP8kLPpzFhuDh_sgnja5HoN6T2LObK-wrR-WFVXlFqHgGlPca7cyEbqN29GzlJ7yFPJPCKM-Aw4_hjcxk5bRxEjtWMXPbd_tg/s220/head-128-white.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8666538509897823475.post-6774398889019528973</id><published>2007-02-26T17:26:00.001+01:00</published><updated>2009-01-10T15:42:04.418+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="testing"/><title type='text'>DBUnit and RDMS with special types</title><content type='html'>If you are using &lt;a href=&quot;http://dbunit.sourceforge.net/&quot;&gt;DBUnit&lt;/a&gt; for testing your data access layer, and your scheme uses some unusual data types, you need to use &lt;a href=&quot;http://dbunit.sourceforge.net/faq.html#typefactory&quot;&gt;data type factories&lt;/a&gt; but it won&#39;t work if you are about to use at the same time &lt;code&gt;FlatXmlDataSet&lt;/code&gt;.&lt;br /&gt;You are going to get errors like:&lt;br /&gt;&lt;blockquote&gt;WARNING - table_name.column_name data type (1111, ëbití) not recognized and will be ignored. See FAQ for more information.&lt;/blockquote&gt;Here is solution that I haven&#39;t found on google:&lt;br /&gt;Override default implementation of &lt;code&gt;protected IDatabaseTester newDatabaseTester() throws Exception&lt;/code&gt; from &lt;code&gt;DBTestCase&lt;/code&gt; to something like this:&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt;   protected IDatabaseTester newDatabaseTester() throws Exception {&lt;br /&gt;       return new PropertiesBasedJdbcDatabaseTester() {&lt;br /&gt;           public IDatabaseConnection getConnection() throws Exception {&lt;br /&gt;               IDatabaseConnection databaseConnection = super.getConnection();&lt;br /&gt;               DatabaseConfig databaseConfig = databaseConnection.getConfig();&lt;br /&gt;               databaseConfig.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new MySqlDataTypeFactory());&lt;br /&gt;               return databaseConnection;&lt;br /&gt;           }&lt;br /&gt;       };&lt;br /&gt;   }&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Where you should use suitable for your database &lt;code&gt;DataTypeFactory&lt;/code&gt;.</content><link rel='replies' type='application/atom+xml' href='http://codemeself.blogspot.com/feeds/6774398889019528973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://codemeself.blogspot.com/2007/02/dbunit-and-rdms-with-special-types.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/6774398889019528973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8666538509897823475/posts/default/6774398889019528973'/><link rel='alternate' type='text/html' href='http://codemeself.blogspot.com/2007/02/dbunit-and-rdms-with-special-types.html' title='DBUnit and RDMS with special types'/><author><name>neotyk</name><uri>http://www.blogger.com/profile/03897419234057699787</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6IxdCSA4wKC0e-99EIT8etdmGyWVHxlP8kLPpzFhuDh_sgnja5HoN6T2LObK-wrR-WFVXlFqHgGlPca7cyEbqN29GzlJ7yFPJPCKM-Aw4_hjcxk5bRxEjtWMXPbd_tg/s220/head-128-white.png'/></author><thr:total>0</thr:total></entry></feed>