You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cl...@apache.org on 2009/01/15 16:35:22 UTC

svn commit: r734735 [5/12] - in /felix/trunk/ipojo: annotations/doc/ annotations/doc/how-to-use-ipojo-annotations_files/ annotations/doc/how-to-use-ipojo-annotations_files/button_data/ annotations/doc/media.data/ ant/doc/ ant/doc/ipojo-ant-task_files/ ...

Added: felix/trunk/ipojo/core/doc/controller-lifecycle-handler_files/ga.js
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/core/doc/controller-lifecycle-handler_files/ga.js?rev=734735&view=auto
==============================================================================
--- felix/trunk/ipojo/core/doc/controller-lifecycle-handler_files/ga.js (added)
+++ felix/trunk/ipojo/core/doc/controller-lifecycle-handler_files/ga.js Thu Jan 15 07:35:17 2009
@@ -0,0 +1,41 @@
+var _gat=new Object({c:"length",lb:"4.3",m:"cookie",b:undefined,cb:function(d,a){this.zb=d;this.Nb=a},r:"__utma=",W:"__utmb=",ma:"__utmc=",Ta:"__utmk=",na:"__utmv=",oa:"__utmx=",Sa:"GASO=",X:"__utmz=",lc:"http://www.google-analytics.com/__utm.gif",mc:"https://ssl.google-analytics.com/__utm.gif",Wa:"utmcid=",Ya:"utmcsr=",$a:"utmgclid=",Ua:"utmccn=",Xa:"utmcmd=",Za:"utmctr=",Va:"utmcct=",Hb:false,_gasoDomain:undefined,_gasoCPath:undefined,e:window,a:document,k:navigator,t:function(d){var a=1,c=0,h,
+o;if(!_gat.q(d)){a=0;for(h=d[_gat.c]-1;h>=0;h--){o=d.charCodeAt(h);a=(a<<6&268435455)+o+(o<<14);c=a&266338304;a=c!=0?a^c>>21:a}}return a},C:function(d,a,c){var h=_gat,o="-",k,l,s=h.q;if(!s(d)&&!s(a)&&!s(c)){k=h.w(d,a);if(k>-1){l=d.indexOf(c,k);if(l<0)l=d[h.c];o=h.F(d,k+h.w(a,"=")+1,l)}}return o},Ea:function(d){var a=false,c=0,h,o;if(!_gat.q(d)){a=true;for(h=0;h<d[_gat.c];h++){o=d.charAt(h);c+="."==o?1:0;a=a&&c<=1&&(0==h&&"-"==o||_gat.P(".0123456789",o))}}return a},d:function(d,a){var c=encodeURIComponent;
+return c instanceof Function?(a?encodeURI(d):c(d)):escape(d)},J:function(d,a){var c=decodeURIComponent,h;d=d.split("+").join(" ");if(c instanceof Function)try{h=a?decodeURI(d):c(d)}catch(o){h=unescape(d)}else h=unescape(d);return h},Db:function(d){return d&&d.hash?_gat.F(d.href,_gat.w(d.href,"#")):""},q:function(d){return _gat.b==d||"-"==d||""==d},Lb:function(d){return d[_gat.c]>0&&_gat.P(" \n\r\t",d)},P:function(d,a){return _gat.w(d,a)>-1},h:function(d,a){d[d[_gat.c]]=a},T:function(d){return d.toLowerCase()},
+z:function(d,a){return d.split(a)},w:function(d,a){return d.indexOf(a)},F:function(d,a,c){c=_gat.b==c?d[_gat.c]:c;return d.substring(a,c)},uc:function(){var d=_gat.b,a=window;if(a&&a.gaGlobal&&a.gaGlobal.hid)d=a.gaGlobal.hid;else{d=Math.round(Math.random()*2147483647);a.gaGlobal=a.gaGlobal?a.gaGlobal:{};a.gaGlobal.hid=d}return d},wa:function(){return Math.round(Math.random()*2147483647)},Gc:function(){return(_gat.wa()^_gat.vc())*2147483647},vc:function(){var d=_gat.k,a=_gat.a,c=_gat.e,h=a[_gat.m]?
+a[_gat.m]:"",o=c.history[_gat.c],k,l,s=[d.appName,d.version,d.language?d.language:d.browserLanguage,d.platform,d.userAgent,d.javaEnabled()?1:0].join("");if(c.screen)s+=c.screen.width+"x"+c.screen.height+c.screen.colorDepth;else if(c.java){l=java.awt.Toolkit.getDefaultToolkit().getScreenSize();s+=l.screen.width+"x"+l.screen.height}s+=h;s+=a.referrer?a.referrer:"";k=s[_gat.c];while(o>0)s+=o--^k++;return _gat.t(s)}});_gat.hc=function(){var d=this,a=_gat.cb;function c(h,o){return new a(h,o)}d.db="utm_campaign";d.eb="utm_content";d.fb="utm_id";d.gb="utm_medium";d.hb="utm_nooverride";d.ib="utm_source";d.jb="utm_term";d.kb="gclid";d.pa=0;d.I=0;d.wb="15768000";d.Tb="1800";d.ea=[];d.ga=[];d.Ic="cse";d.Gb="q";d.ab="google";d.fa=[c(d.ab,d.Gb),c("yahoo","p"),c("msn","q"),c("aol","query"),c("aol","encquery"),c("lycos","query"),c("ask","q"),c("altavista","q"),c("netscape","query"),c("cnn","query"),c("looksmart","qt"),c("about",
+"terms"),c("mamma","query"),c("alltheweb","q"),c("gigablast","q"),c("voila","rdata"),c("virgilio","qs"),c("live","q"),c("baidu","wd"),c("alice","qs"),c("yandex","text"),c("najdi","q"),c("aol","q"),c("club-internet","query"),c("mama","query"),c("seznam","q"),c("search","q"),c("wp","szukaj"),c("onet","qt"),c("netsprint","q"),c("google.interia","q"),c("szukacz","q"),c("yam","k"),c("pchome","q"),c("kvasir","searchExpr"),c("sesam","q"),c("ozu","q"),c("terra","query"),c("nostrum","query"),c("mynet","q"),
+c("ekolay","q"),c("search.ilse","search_for")];d.B=undefined;d.Kb=false;d.p="/";d.ha=100;d.Da="/__utm.gif";d.ta=1;d.ua=1;d.G="|";d.sa=1;d.qa=1;d.pb=1;d.g="auto";d.D=1;d.Ga=1000;d.Yc=10;d.nc=10;d.Zc=0.2};_gat.Y=function(d,a){var c,h,o,k,l,s,q,f=this,n=_gat,w=n.q,x=n.c,g,z=a;f.a=d;function B(i){var b=i instanceof Array?i.join("."):"";return w(b)?"-":b}function A(i,b){var e=[],j;if(!w(i)){e=n.z(i,".");if(b)for(j=0;j<e[x];j++)if(!n.Ea(e[j]))e[j]="-"}return e}function p(){return u(63072000000)}function u(i){var b=new Date,e=new Date(b.getTime()+i);return"expires="+e.toGMTString()+"; "}function m(i,b){f.a[n.m]=i+"; path="+z.p+"; "+b+f.Cc()}function r(i,b,e){var j=f.V,t,v;for(t=0;t<j[x];t++){v=j[t][0];
+v+=w(b)?b:b+j[t][4];j[t][2](n.C(i,v,e))}}f.Jb=function(){return n.b==g||g==f.t()};f.Ba=function(){return l?l:"-"};f.Wb=function(i){l=i};f.Ma=function(i){g=n.Ea(i)?i*1:"-"};f.Aa=function(){return B(s)};f.Na=function(i){s=A(i)};f.Hc=function(){return g?g:"-"};f.Cc=function(){return w(z.g)?"":"domain="+z.g+";"};f.ya=function(){return B(c)};f.Ub=function(i){c=A(i,1)};f.K=function(){return B(h)};f.La=function(i){h=A(i,1)};f.za=function(){return B(o)};f.Vb=function(i){o=A(i,1)};f.Ca=function(){return B(k)};
+f.Xb=function(i){k=A(i);for(var b=0;b<k[x];b++)if(b<4&&!n.Ea(k[b]))k[b]="-"};f.Dc=function(){return q};f.Uc=function(i){q=i};f.pc=function(){c=[];h=[];o=[];k=[];l=n.b;s=[];g=n.b};f.t=function(){var i="",b;for(b=0;b<f.V[x];b++)i+=f.V[b][1]();return n.t(i)};f.Ha=function(i){var b=f.a[n.m],e=false;if(b){r(b,i,";");f.Ma(f.t());e=true}return e};f.Rc=function(i){r(i,"","&");f.Ma(n.C(i,n.Ta,"&"))};f.Wc=function(){var i=f.V,b=[],e;for(e=0;e<i[x];e++)n.h(b,i[e][0]+i[e][1]());n.h(b,n.Ta+f.t());return b.join("&")};
+f.bd=function(i,b){var e=f.V,j=z.p,t;f.Ha(i);z.p=b;for(t=0;t<e[x];t++)if(!w(e[t][1]()))e[t][3]();z.p=j};f.dc=function(){m(n.r+f.ya(),p())};f.Pa=function(){m(n.W+f.K(),u(z.Tb*1000))};f.ec=function(){m(n.ma+f.za(),"")};f.Ra=function(){m(n.X+f.Ca(),u(z.wb*1000))};f.fc=function(){m(n.oa+f.Ba(),p())};f.Qa=function(){m(n.na+f.Aa(),p())};f.cd=function(){m(n.Sa+f.Dc(),"")};f.V=[[n.r,f.ya,f.Ub,f.dc,"."],[n.W,f.K,f.La,f.Pa,""],[n.ma,f.za,f.Vb,f.ec,""],[n.oa,f.Ba,f.Wb,f.fc,""],[n.X,f.Ca,f.Xb,f.Ra,"."],[n.na,
+f.Aa,f.Na,f.Qa,"."]]};_gat.jc=function(d){var a=this,c=_gat,h=d,o,k=function(l){var s=(new Date).getTime(),q;q=(s-l[3])*(h.Zc/1000);if(q>=1){l[2]=Math.min(Math.floor(l[2]*1+q),h.nc);l[3]=s}return l};a.O=function(l,s,q,f,n,w,x){var g,z=h.D,B=q.location;if(!o)o=new c.Y(q,h);o.Ha(f);g=c.z(o.K(),".");if(g[1]<500||n){if(w)g=k(g);if(n||!w||g[2]>=1){if(!n&&w)g[2]=g[2]*1-1;g[1]=g[1]*1+1;l="?utmwv="+_gat.lb+"&utmn="+c.wa()+(c.q(B.hostname)?"":"&utmhn="+c.d(B.hostname))+(h.ha==100?"":"&utmsp="+c.d(h.ha))+l;if(0==z||2==z){var A=
+new Image(1,1);A.src=h.Da+l;var p=2==z?function(){}:x||function(){};A.onload=p}if(1==z||2==z){var u=new Image(1,1);u.src=("https:"==B.protocol?c.mc:c.lc)+l+"&utmac="+s+"&utmcc="+a.wc(q,f);u.onload=x||function(){}}}}o.La(g.join("."));o.Pa()};a.wc=function(l,s){var q=[],f=[c.r,c.X,c.na,c.oa],n,w=l[c.m],x;for(n=0;n<f[c.c];n++){x=c.C(w,f[n]+s,";");if(!c.q(x))c.h(q,f[n]+x+";")}return c.d(q.join("+"))}};_gat.i=function(){this.la=[]};_gat.i.bb=function(d,a,c,h,o,k){var l=this;l.cc=d;l.Oa=a;l.L=c;l.sb=h;l.Pb=o;l.Qb=k};_gat.i.bb.prototype.S=function(){var d=this,a=_gat.d;return"&"+["utmt=item","utmtid="+a(d.cc),"utmipc="+a(d.Oa),"utmipn="+a(d.L),"utmiva="+a(d.sb),"utmipr="+a(d.Pb),"utmiqt="+a(d.Qb)].join("&")};_gat.i.$=function(d,a,c,h,o,k,l,s){var q=this;q.v=d;q.ob=a;q.bc=c;q.ac=h;q.Yb=o;q.ub=k;q.$b=l;q.xb=s;q.ca=[]};_gat.i.$.prototype.mb=function(d,a,c,h,o){var k=this,l=k.Eb(d),s=k.v,q=_gat;if(q.b==
+l)q.h(k.ca,new q.i.bb(s,d,a,c,h,o));else{l.cc=s;l.Oa=d;l.L=a;l.sb=c;l.Pb=h;l.Qb=o}};_gat.i.$.prototype.Eb=function(d){var a,c=this.ca,h;for(h=0;h<c[_gat.c];h++)a=d==c[h].Oa?c[h]:a;return a};_gat.i.$.prototype.S=function(){var d=this,a=_gat.d;return"&"+["utmt=tran","utmtid="+a(d.v),"utmtst="+a(d.ob),"utmtto="+a(d.bc),"utmttx="+a(d.ac),"utmtsp="+a(d.Yb),"utmtci="+a(d.ub),"utmtrg="+a(d.$b),"utmtco="+a(d.xb)].join("&")};_gat.i.prototype.nb=function(d,a,c,h,o,k,l,s){var q=this,f=_gat,n=q.xa(d);if(f.b==
+n){n=new f.i.$(d,a,c,h,o,k,l,s);f.h(q.la,n)}else{n.ob=a;n.bc=c;n.ac=h;n.Yb=o;n.ub=k;n.$b=l;n.xb=s}return n};_gat.i.prototype.xa=function(d){var a,c=this.la,h;for(h=0;h<c[_gat.c];h++)a=d==c[h].v?c[h]:a;return a};_gat.gc=function(d){var a=this,c="-",h=_gat,o=d;a.Ja=screen;a.qb=!self.screen&&self.java?java.awt.Toolkit.getDefaultToolkit():h.b;a.a=document;a.e=window;a.k=navigator;a.Ka=c;a.Sb=c;a.tb=c;a.Ob=c;a.Mb=1;a.Bb=c;function k(){var l,s,q,f,n="ShockwaveFlash",w="$version",x=a.k?a.k.plugins:h.b;if(x&&x[h.c]>0)for(l=0;l<x[h.c]&&!q;l++){s=x[l];if(h.P(s.name,"Shockwave Flash"))q=h.z(s.description,"Shockwave Flash ")[1]}else{n=n+"."+n;try{f=new ActiveXObject(n+".7");q=f.GetVariable(w)}catch(g){}if(!q)try{f=
+new ActiveXObject(n+".6");q="WIN 6,0,21,0";f.AllowScriptAccess="always";q=f.GetVariable(w)}catch(z){}if(!q)try{f=new ActiveXObject(n);q=f.GetVariable(w)}catch(z){}if(q){q=h.z(h.z(q," ")[1],",");q=q[0]+"."+q[1]+" r"+q[2]}}return q?q:c}a.xc=function(){var l;if(self.screen){a.Ka=a.Ja.width+"x"+a.Ja.height;a.Sb=a.Ja.colorDepth+"-bit"}else if(a.qb)try{l=a.qb.getScreenSize();a.Ka=l.width+"x"+l.height}catch(s){}a.Ob=h.T(a.k&&a.k.language?a.k.language:(a.k&&a.k.browserLanguage?a.k.browserLanguage:c));a.Mb=
+a.k&&a.k.javaEnabled()?1:0;a.Bb=o?k():c;a.tb=h.d(a.a.characterSet?a.a.characterSet:(a.a.charset?a.a.charset:c))};a.Xc=function(){return"&"+["utmcs="+h.d(a.tb),"utmsr="+a.Ka,"utmsc="+a.Sb,"utmul="+a.Ob,"utmje="+a.Mb,"utmfl="+h.d(a.Bb)].join("&")}};_gat.n=function(d,a,c,h,o){var k=this,l=_gat,s=l.q,q=l.b,f=l.P,n=l.C,w=l.T,x=l.z,g=l.c;k.a=a;k.f=d;k.Rb=c;k.ja=h;k.o=o;function z(p){return s(p)||"0"==p||!f(p,"://")}function B(p){var u="";p=w(x(p,"://")[1]);if(f(p,"/")){p=x(p,"/")[1];if(f(p,"?"))u=x(p,"?")[0]}return u}function A(p){var u="";u=w(x(p,"://")[1]);if(f(u,"/"))u=x(u,"/")[0];return u}k.Fc=function(p){var u=k.Fb(),m=k.o;return new l.n.s(n(p,m.fb+"=","&"),n(p,m.ib+"=","&"),n(p,m.kb+"=","&"),k.ba(p,m.db,"(not set)"),k.ba(p,m.gb,"(not set)"),
+k.ba(p,m.jb,u&&!s(u.R)?l.J(u.R):q),k.ba(p,m.eb,q))};k.Ib=function(p){var u=A(p),m=B(p);if(f(u,k.o.ab)){p=x(p,"?").join("&");if(f(p,"&"+k.o.Gb+"="))if(m==k.o.Ic)return true}return false};k.Fb=function(){var p,u,m=k.Rb,r,i,b=k.o.fa;if(z(m)||k.Ib(m))return;p=A(m);for(r=0;r<b[g];r++){i=b[r];if(f(p,w(i.zb))){m=x(m,"?").join("&");if(f(m,"&"+i.Nb+"=")){u=x(m,"&"+i.Nb+"=")[1];if(f(u,"&"))u=x(u,"&")[0];return new l.n.s(q,i.zb,q,"(organic)","organic",u,q)}}}};k.ba=function(p,u,m){var r=n(p,u+"=","&"),i=!s(r)?
+l.J(r):(!s(m)?m:"-");return i};k.Nc=function(p){var u=k.o.ea,m=false,r,i;if(p&&"organic"==p.da){r=w(l.J(p.R));for(i=0;i<u[g];i++)m=m||w(u[i])==r}return m};k.Ec=function(){var p="",u="",m=k.Rb;if(z(m)||k.Ib(m))return;p=w(x(m,"://")[1]);if(f(p,"/")){u=l.F(p,l.w(p,"/"));if(f(u,"?"))u=x(u,"?")[0];p=x(p,"/")[0]}if(0==l.w(p,"www."))p=l.F(p,4);return new l.n.s(q,p,q,"(referral)","referral",q,u)};k.sc=function(p){var u="";if(k.o.pa){u=l.Db(p);u=""!=u?u+"&":u}u+=p.search;return u};k.zc=function(){return new l.n.s(q,
+"(direct)",q,"(direct)","(none)",q,q)};k.Oc=function(p){var u=false,m,r,i=k.o.ga;if(p&&"referral"==p.da){m=w(l.d(p.ia));for(r=0;r<i[g];r++)u=u||f(m,w(i[r]))}return u};k.U=function(p){return q!=p&&p.Fa()};k.yc=function(p,u){var m="",r="-",i,b,e=0,j,t,v=k.f;if(!p)return"";t=k.a[l.m]?k.a[l.m]:"";m=k.sc(k.a.location);if(k.o.I&&p.Jb()){r=p.Ca();if(!s(r)&&!f(r,";")){p.Ra();return""}}r=n(t,l.X+v+".",";");i=k.Fc(m);if(k.U(i)){b=n(m,k.o.hb+"=","&");if("1"==b&&!s(r))return""}if(!k.U(i)){i=k.Fb();if(!s(r)&&
+k.Nc(i))return""}if(!k.U(i)&&u){i=k.Ec();if(!s(r)&&k.Oc(i))return""}if(!k.U(i))if(s(r)&&u)i=k.zc();if(!k.U(i))return"";if(!s(r)){var y=x(r,"."),E=new l.n.s;E.Cb(y.slice(4).join("."));j=w(E.ka())==w(i.ka());e=y[3]*1}if(!j||u){var F=n(t,l.r+v+".",";"),I=F.lastIndexOf("."),G=I>9?l.F(F,I+1)*1:0;e++;G=0==G?1:G;p.Xb([v,k.ja,G,e,i.ka()].join("."));p.Ra();return"&utmcn=1"}else return"&utmcr=1"}};_gat.n.s=function(d,a,c,h,o,k,l){var s=this;s.v=d;s.ia=a;s.ra=c;s.L=h;s.da=o;s.R=k;s.vb=l};_gat.n.s.prototype.ka=
+function(){var d=this,a=_gat,c=[],h=[[a.Wa,d.v],[a.Ya,d.ia],[a.$a,d.ra],[a.Ua,d.L],[a.Xa,d.da],[a.Za,d.R],[a.Va,d.vb]],o,k;if(d.Fa())for(o=0;o<h[a.c];o++)if(!a.q(h[o][1])){k=h[o][1].split("+").join("%20");k=k.split(" ").join("%20");a.h(c,h[o][0]+k)}return c.join("|")};_gat.n.s.prototype.Fa=function(){var d=this,a=_gat.q;return!(a(d.v)&&a(d.ia)&&a(d.ra))};_gat.n.s.prototype.Cb=function(d){var a=this,c=_gat,h=function(o){return c.J(c.C(d,o,"|"))};a.v=h(c.Wa);a.ia=h(c.Ya);a.ra=h(c.$a);a.L=h(c.Ua);a.da=
+h(c.Xa);a.R=h(c.Za);a.vb=h(c.Va)};_gat.Z=function(){var d=this,a=_gat,c={},h="k",o="v",k=[h,o],l="(",s=")",q="*",f="!",n="'",w={};w[n]="'0";w[s]="'1";w[q]="'2";w[f]="'3";var x=1;function g(m,r,i,b){if(a.b==c[m])c[m]={};if(a.b==c[m][r])c[m][r]=[];c[m][r][i]=b}function z(m,r,i){return a.b!=c[m]&&a.b!=c[m][r]?c[m][r][i]:a.b}function B(m,r){if(a.b!=c[m]&&a.b!=c[m][r]){c[m][r]=a.b;var i=true,b;for(b=0;b<k[a.c];b++)if(a.b!=c[m][k[b]]){i=false;break}if(i)c[m]=a.b}}function A(m){var r="",i=false,b,e;for(b=0;b<k[a.c];b++){e=m[k[b]];if(a.b!=
+e){if(i)r+=k[b];r+=p(e);i=false}else i=true}return r}function p(m){var r=[],i,b;for(b=0;b<m[a.c];b++)if(a.b!=m[b]){i="";if(b!=x&&a.b==m[b-1]){i+=b.toString();i+=f}i+=u(m[b]);a.h(r,i)}return l+r.join(q)+s}function u(m){var r="",i,b,e;for(i=0;i<m[a.c];i++){b=m.charAt(i);e=w[b];r+=a.b!=e?e:b}return r}d.Kc=function(m){return a.b!=c[m]};d.N=function(){var m=[],r;for(r in c)if(a.b!=c[r])a.h(m,r.toString()+A(c[r]));return m.join("")};d.Sc=function(m){if(m==a.b)return d.N();var r=[m.N()],i;for(i in c)if(a.b!=
+c[i]&&!m.Kc(i))a.h(r,i.toString()+A(c[i]));return r.join("")};d._setKey=function(m,r,i){if(typeof i!="string")return false;g(m,h,r,i);return true};d._setValue=function(m,r,i){if(typeof i!="number"&&(a.b==Number||!(i instanceof Number)))return false;if(Math.round(i)!=i||i==NaN||i==Infinity)return false;g(m,o,r,i.toString());return true};d._getKey=function(m,r){return z(m,h,r)};d._getValue=function(m,r){return z(m,o,r)};d._clearKey=function(m){B(m,h)};d._clearValue=function(m){B(m,o)}};_gat.ic=function(d,a){var c=this;c.jd=a;c.Pc=d;c._trackEvent=function(h,o,k){return a._trackEvent(c.Pc,h,o,k)}};_gat.kc=function(d){var a=this,c=_gat,h=c.b,o=c.q,k=c.w,l=c.F,s=c.C,q=c.P,f=c.z,n="location",w=c.c,x=h,g=new c.hc,z=false;a.a=document;a.e=window;a.ja=Math.round((new Date).getTime()/1000);a.H=d;a.yb=a.a.referrer;a.va=h;a.j=h;a.A=h;a.M=false;a.aa=h;a.rb="";a.l=h;a.Ab=h;a.f=h;a.u=h;function B(){if("auto"==g.g){var b=a.a.domain;if("www."==l(b,0,4))b=l(b,4);g.g=b}g.g=c.T(g.g)}function A()
 {var b=g.g,e=k(b,"www.google.")*k(b,".google.")*k(b,"google.");return e||"/"!=g.p||k(b,"google.org")>-1}function p(b,
+e,j){if(o(b)||o(e)||o(j))return"-";var t=s(b,c.r+a.f+".",e),v;if(!o(t)){v=f(t,".");v[5]=v[5]?v[5]*1+1:1;v[3]=v[4];v[4]=j;t=v.join(".")}return t}function u(){return"file:"!=a.a[n].protocol&&A()}function m(b){if(!b||""==b)return"";while(c.Lb(b.charAt(0)))b=l(b,1);while(c.Lb(b.charAt(b[w]-1)))b=l(b,0,b[w]-1);return b}function r(b,e,j){if(!o(b())){e(c.J(b()));if(!q(b(),";"))j()}}function i(b){var e,j=""!=b&&a.a[n].host!=b;if(j)for(e=0;e<g.B[w];e++)j=j&&k(c.T(b),c.T(g.B[e]))==-1;return j}a.Bc=function(){if(!g.g||
+""==g.g||"none"==g.g){g.g="";return 1}B();return g.pb?c.t(g.g):1};a.tc=function(b,e){if(o(b))b="-";else{e+=g.p&&"/"!=g.p?g.p:"";var j=k(b,e);b=j>=0&&j<=8?"0":("["==b.charAt(0)&&"]"==b.charAt(b[w]-1)?"-":b)}return b};a.Ia=function(b){var e="",j=a.a;e+=a.aa?a.aa.Xc():"";e+=g.qa?a.rb:"";e+=g.ta&&!o(j.title)?"&utmdt="+c.d(j.title):"";e+="&utmhid="+c.uc()+"&utmr="+a.va+"&utmp="+a.Tc(b);return e};a.Tc=function(b){var e=a.a[n];b=h!=b&&""!=b?c.d(b,true):c.d(e.pathname+unescape(e.search),true);return b};a.$c=
+function(b){if(a.Q()){var e="";if(a.l!=h&&a.l.N().length>0)e+="&utme="+c.d(a.l.N());e+=a.Ia(b);x.O(e,a.H,a.a,a.f)}};a.qc=function(){var b=new c.Y(a.a,g);return b.Ha(a.f)?b.Wc():h};a._getLinkerUrl=function(b,e){var j=f(b,"#"),t=b,v=a.qc();if(v)if(e&&1>=j[w])t+="#"+v;else if(!e||1>=j[w])if(1>=j[w])t+=(q(b,"?")?"&":"?")+v;else t=j[0]+(q(b,"?")?"&":"?")+v+"#"+j[1];return t};a.Zb=function(){var b;if(a.A&&a.A[w]>=10&&!q(a.A,"=")){a.u.Uc(a.A);a.u.cd();c._gasoDomain=g.g;c._gasoCPath=g.p;b=a.a.createElement("script");
+b.type="text/javascript";b.id="_gasojs";b.src="https://www.google.com/analytics/reporting/overlay_js?gaso="+a.A+"&"+c.wa();a.a.getElementsByTagName("head")[0].appendChild(b)}};a.Jc=function(){var b=a.a[c.m],e=a.ja,j=a.u,t=a.f+"",v=a.e,y=v?v.gaGlobal:h,E,F=q(b,c.r+t+"."),I=q(b,c.W+t),G=q(b,c.ma+t),C,D=[],H="",K=false,J;b=o(b)?"":b;if(g.I){E=c.Db(a.a[n]);if(g.pa&&!o(E))H=E+"&";H+=a.a[n].search;if(!o(H)&&q(H,c.r)){j.Rc(H);if(!j.Jb())j.pc();C=j.ya()}r(j.Ba,j.Wb,j.fc);r(j.Aa,j.Na,j.Qa)}if(!o(C))if(o(j.K())||
+o(j.za())){C=p(H,"&",e);a.M=true}else{D=f(j.K(),".");t=D[0]}else if(F)if(!I||!G){C=p(b,";",e);a.M=true}else{C=s(b,c.r+t+".",";");D=f(s(b,c.W+t,";"),".")}else{C=[t,c.Gc(),e,e,e,1].join(".");a.M=true;K=true}C=f(C,".");if(v&&y&&y.dh==t){C[4]=y.sid?y.sid:C[4];if(K){C[3]=y.sid?y.sid:C[4];if(y.vid){J=f(y.vid,".");C[1]=J[0];C[2]=J[1]}}}j.Ub(C.join("."));D[0]=t;D[1]=D[1]?D[1]:0;D[2]=undefined!=D[2]?D[2]:g.Yc;D[3]=D[3]?D[3]:C[4];j.La(D.join("."));j.Vb(t);if(!o(j.Hc()))j.Ma(j.t());j.dc();j.Pa();j.ec()};a.Lc=
+function(){x=new c.jc(g)};a._initData=function(){var b;if(!z){a.Lc();a.f=a.Bc();a.u=new c.Y(a.a,g)}if(u())a.Jc();if(!z){if(u()){a.va=a.tc(a.Ac(),a.a.domain);if(g.sa){a.aa=new c.gc(g.ua);a.aa.xc()}if(g.qa){b=new c.n(a.f,a.a,a.va,a.ja,g);a.rb=b.yc(a.u,a.M)}}a.l=new c.Z;a.Ab=new c.Z;z=true}if(!c.Hb)a.Mc()};a._visitCode=function(){a._initData();var b=s(a.a[c.m],c.r+a.f+".",";"),e=f(b,".");return e[w]<4?"":e[1]};a._cookiePathCopy=function(b){a._initData();if(a.u)a.u.bd(a.f,b)};a.Mc=function(){var b=a.a[n].hash,
+e;e=b&&""!=b&&0==k(b,"#gaso=")?s(b,"gaso=","&"):s(a.a[c.m],c.Sa,";");if(e[w]>=10){a.A=e;if(a.e.addEventListener)a.e.addEventListener("load",a.Zb,false);else a.e.attachEvent("onload",a.Zb)}c.Hb=true};a.Q=function(){return a._visitCode()%10000<g.ha*100};a.Vc=function(){var b,e,j=a.a.links;if(!g.Kb){var t=a.a.domain;if("www."==l(t,0,4))t=l(t,4);g.B.push("."+t)}for(b=0;b<j[w]&&(g.Ga==-1||b<g.Ga);b++){e=j[b];if(i(e.host))if(!e.gatcOnclick){e.gatcOnclick=e.onclick?e.onclick:a.Qc;e.onclick=function(v){var y=
+!this.target||this.target=="_self"||this.target=="_top"||this.target=="_parent";y=y&&!a.oc(v);a.ad(v,this,y);return y?false:(this.gatcOnclick?this.gatcOnclick(v):true)}}}};a.Qc=function(){};a._trackPageview=function(b){if(u()){a._initData();if(g.B)a.Vc();a.$c(b);a.M=false}};a._trackTrans=function(){var b=a.f,e=[],j,t,v,y;a._initData();if(a.j&&a.Q()){for(j=0;j<a.j.la[w];j++){t=a.j.la[j];c.h(e,t.S());for(v=0;v<t.ca[w];v++)c.h(e,t.ca[v].S())}for(y=0;y<e[w];y++)x.O(e[y],a.H,a.a,b,true)}};a._setTrans=
+function(){var b=a.a,e,j,t,v,y=b.getElementById?b.getElementById("utmtrans"):(b.utmform&&b.utmform.utmtrans?b.utmform.utmtrans:h);a._initData();if(y&&y.value){a.j=new c.i;v=f(y.value,"UTM:");g.G=!g.G||""==g.G?"|":g.G;for(e=0;e<v[w];e++){v[e]=m(v[e]);j=f(v[e],g.G);for(t=0;t<j[w];t++)j[t]=m(j[t]);if("T"==j[0])a._addTrans(j[1],j[2],j[3],j[4],j[5],j[6],j[7],j[8]);else if("I"==j[0])a._addItem(j[1],j[2],j[3],j[4],j[5],j[6])}}};a._addTrans=function(b,e,j,t,v,y,E,F){a.j=a.j?a.j:new c.i;return a.j.nb(b,e,
+j,t,v,y,E,F)};a._addItem=function(b,e,j,t,v,y){var E;a.j=a.j?a.j:new c.i;E=a.j.xa(b);if(!E)E=a._addTrans(b,"","","","","","","");E.mb(e,j,t,v,y)};a._setVar=function(b){if(b&&""!=b&&A()){a._initData();var e=new c.Y(a.a,g),j=a.f;e.Na(j+"."+c.d(b));e.Qa();if(a.Q())x.O("&utmt=var",a.H,a.a,a.f)}};a._link=function(b,e){if(g.I&&b){a._initData();a.a[n].href=a._getLinkerUrl(b,e)}};a._linkByPost=function(b,e){if(g.I&&b&&b.action){a._initData();b.action=a._getLinkerUrl(b.action,e)}};a._setXKey=function(b,e,
+j){a.l._setKey(b,e,j)};a._setXValue=function(b,e,j){a.l._setValue(b,e,j)};a._getXKey=function(b,e){return a.l._getKey(b,e)};a._getXValue=function(b,e){return a.l.getValue(b,e)};a._clearXKey=function(b){a.l._clearKey(b)};a._clearXValue=function(b){a.l._clearValue(b)};a._createXObj=function(){a._initData();return new c.Z};a._sendXEvent=function(b){var e="";a._initData();if(a.Q()){e+="&utmt=event&utme="+c.d(a.l.Sc(b))+a.Ia();x.O(e,a.H,a.a,a.f,false,true)}};a._createEventTracker=function(b){a._initData();
+return new c.ic(b,a)};a._trackEvent=function(b,e,j,t){var v=true,y=a.Ab;if(h!=b&&h!=e&&""!=b&&""!=e){y._clearKey(5);y._clearValue(5);v=y._setKey(5,1,b)?v:false;v=y._setKey(5,2,e)?v:false;v=h==j||y._setKey(5,3,j)?v:false;v=h==t||y._setValue(5,1,t)?v:false;if(v)a._sendXEvent(y)}else v=false;return v};a.ad=function(b,e,j){a._initData();if(a.Q()){var t=new c.Z;t._setKey(6,1,e.href);var v=j?function(){a.rc(b,e)}:undefined;x.O("&utmt=event&utme="+c.d(t.N())+a.Ia(),a.H,a.a,a.f,false,true,v)}};a.rc=function(b,
+e){if(!b)b=a.e.event;var j=true;if(e.gatcOnclick)j=e.gatcOnclick(b);if(j||typeof j=="undefined")if(!e.target||e.target=="_self")a.e.location=e.href;else if(e.target=="_top")a.e.top.document.location=e.href;else if(e.target=="_parent")a.e.parent.document.location=e.href};a.oc=function(b){if(!b)b=a.e.event;var e=b.shiftKey||b.ctrlKey||b.altKey;if(!e)if(b.modifiers&&a.e.Event)e=b.modifiers&a.e.Event.CONTROL_MASK||b.modifiers&a.e.Event.SHIFT_MASK||b.modifiers&a.e.Event.ALT_MASK;return e};a._setDomainName=
+function(b){g.g=b};a.dd=function(){return g.g};a._addOrganic=function(b,e){c.h(g.fa,new c.cb(b,e))};a._clearOrganic=function(){g.fa=[]};a.hd=function(){return g.fa};a._addIgnoredOrganic=function(b){c.h(g.ea,b)};a._clearIgnoredOrganic=function(){g.ea=[]};a.ed=function(){return g.ea};a._addIgnoredRef=function(b){c.h(g.ga,b)};a._clearIgnoredRef=function(){g.ga=[]};a.fd=function(){return g.ga};a._setAllowHash=function(b){g.pb=b?1:0};a._setCampaignTrack=function(b){g.qa=b?1:0};a._setClientInfo=function(b){g.sa=
+b?1:0};a._getClientInfo=function(){return g.sa};a._setCookiePath=function(b){g.p=b};a._setTransactionDelim=function(b){g.G=b};a._setCookieTimeout=function(b){g.wb=b};a._setDetectFlash=function(b){g.ua=b?1:0};a._getDetectFlash=function(){return g.ua};a._setDetectTitle=function(b){g.ta=b?1:0};a._getDetectTitle=function(){return g.ta};a._setLocalGifPath=function(b){g.Da=b};a._getLocalGifPath=function(){return g.Da};a._setLocalServerMode=function(){g.D=0};a._setRemoteServerMode=function(){g.D=1};a._setLocalRemoteServerMode=
+function(){g.D=2};a.gd=function(){return g.D};a._getServiceMode=function(){return g.D};a._setSampleRate=function(b){g.ha=b};a._setSessionTimeout=function(b){g.Tb=b};a._setAllowLinker=function(b){g.I=b?1:0};a._setAllowAnchor=function(b){g.pa=b?1:0};a._setCampNameKey=function(b){g.db=b};a._setCampContentKey=function(b){g.eb=b};a._setCampIdKey=function(b){g.fb=b};a._setCampMediumKey=function(b){g.gb=b};a._setCampNOKey=function(b){g.hb=b};a._setCampSourceKey=function(b){g.ib=b};a._setCampTermKey=function(b){g.jb=
+b};a._setCampCIdKey=function(b){g.kb=b};a._getAccount=function(){return a.H};a._getVersion=function(){return _gat.lb};a.kd=function(b){g.B=[];if(b)g.B=b};a.md=function(b){g.Kb=b};a.ld=function(b){g.Ga=b};a._setReferrerOverride=function(b){a.yb=b};a.Ac=function(){return a.yb}};_gat._getTracker=function(d){var a=new _gat.kc(d);return a};

Propchange: felix/trunk/ipojo/core/doc/controller-lifecycle-handler_files/ga.js
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: felix/trunk/ipojo/core/doc/controller-lifecycle-handler_files/linkext7.gif
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/core/doc/controller-lifecycle-handler_files/linkext7.gif?rev=734735&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/trunk/ipojo/core/doc/controller-lifecycle-handler_files/linkext7.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: felix/trunk/ipojo/core/doc/controller-lifecycle-handler_files/logo.png
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/core/doc/controller-lifecycle-handler_files/logo.png?rev=734735&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/trunk/ipojo/core/doc/controller-lifecycle-handler_files/logo.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: felix/trunk/ipojo/core/doc/controller-lifecycle-handler_files/site.css
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/core/doc/controller-lifecycle-handler_files/site.css?rev=734735&view=auto
==============================================================================
--- felix/trunk/ipojo/core/doc/controller-lifecycle-handler_files/site.css (added)
+++ felix/trunk/ipojo/core/doc/controller-lifecycle-handler_files/site.css Thu Jan 15 07:35:17 2009
@@ -0,0 +1,25 @@
+/* @override http://felix.apache.org/site/media.data/site.css */
+
+body { background-color: #ffffff; color: #3b3b3b; font-family: Tahoma, Arial, sans-serif; font-size: 10pt; line-height: 140% }
+h1, h2, h3, h4, h5, h6 { font-weight: normal; color: #000000; line-height: 100%; margin-top: 0px}
+h1 { font-size: 200% }
+h2 { font-size: 175% }
+h3 { font-size: 150% }
+h4 { font-size: 140% }
+h5 { font-size: 130% }
+h6 { font-size: 120% }
+a { color: #1980af }
+a:visited { color: #1980af }
+a:hover { color: #1faae9 }
+.title { position: absolute; left: 1px; right: 1px; top:25px; height: 81px; background: url(http://felix.apache.org/site/media.data/gradient.png) repeat-x; background-position: bottom; }
+.logo { position: absolute; width: 15em; height: 81px; text-align: center; }
+.header { text-align: right; margin-right: 20pt; margin-top: 30pt;}
+.menu { border-top: 10px solid #f9bb00; position: absolute; top: 107px; left: 1px; width: 15em; bottom: 0px; padding: 0px; background-color: #fcfcfc }
+.menu ul { background-color: #fdf5d9; list-style: none; padding-left: 4em; margin-top: 0px; padding-top: 2em; padding-bottom: 2em; margin-left: 0px; color: #4a4a43}
+.menu a { text-decoration: none; color: #4a4a43 }
+.main { position: absolute; border-top: 10px solid #cde0ea; top: 107px; left: 15em; right: 1px; margin-left: 2px; padding-right: 4em; padding-left: 1em; padding-top: 1em;}
+.code { background-color: #eeeeee; border: solid 1px black; padding: 0.5em }
+.code-keyword { color: #880000 }
+.code-quote { color: #008800 }
+.code-object { color: #0000dd }
+.code-java { margin: 0em }
\ No newline at end of file

Propchange: felix/trunk/ipojo/core/doc/controller-lifecycle-handler_files/site.css
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: felix/trunk/ipojo/core/doc/ipojo-in-10-minutes.html
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/core/doc/ipojo-in-10-minutes.html?rev=734735&view=auto
==============================================================================
--- felix/trunk/ipojo/core/doc/ipojo-in-10-minutes.html (added)
+++ felix/trunk/ipojo/core/doc/ipojo-in-10-minutes.html Thu Jan 15 07:35:17 2009
@@ -0,0 +1,637 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head>
+
+
+  
+    <title>Apache Felix - iPOJO in 10 minutes</title>
+    <link rel="stylesheet" href="ipojo-in-10-minutes_files/site.css" type="text/css" media="all">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+  </head><body>
+    <div class="title"><div class="logo"><a href="http://felix.apache.org/site/index.html"><img alt="Apache Felix" src="ipojo-in-10-minutes_files/logo.png" border="0"></a></div><div class="header"><a href="http://www.apache.org/"><img alt="Apache" src="ipojo-in-10-minutes_files/apache.png" border="0"></a></div></div>
+    <div class="menu">
+<ul>
+	<li><a href="http://felix.apache.org/site/news.html" title="news">news</a></li>
+	<li><a href="http://felix.apache.org/site/license.html" title="license">license</a></li>
+	<li><span class="nobr"><a href="http://felix.apache.org/site/downloads.cgi" title="Visit page outside Confluence" rel="nofollow">downloads<sup><img class="rendericon" src="ipojo-in-10-minutes_files/linkext7.gif" alt="" align="absmiddle" border="0" width="7" height="7"></sup></a></span></li>
+	<li><a href="http://felix.apache.org/site/documentation.html" title="documentation">documentation</a></li>
+	<li><a href="http://felix.apache.org/site/mailinglists.html" title="mailinglists">mailing lists</a></li>
+	<li><a href="http://felix.apache.org/site/contributing.html" title="Contributing">contributing</a></li>
+	<li><span class="nobr"><a href="http://www.apache.org/" title="Visit page outside Confluence" rel="nofollow">asf<sup><img class="rendericon" src="ipojo-in-10-minutes_files/linkext7.gif" alt="" align="absmiddle" border="0" width="7" height="7"></sup></a></span></li>
+	<li><span class="nobr"><a href="http://www.apache.org/foundation/sponsorship.html" title="Visit page outside Confluence" rel="nofollow">sponsorship<sup><img class="rendericon" src="ipojo-in-10-minutes_files/linkext7.gif" alt="" align="absmiddle" border="0" width="7" height="7"></sup></a></span></li>
+	<li><span class="nobr"><a href="http://www.apache.org/foundation/thanks.html" title="Visit page outside Confluence" rel="nofollow">sponsors<sup><img class="rendericon" src="ipojo-in-10-minutes_files/linkext7.gif" alt="" align="absmiddle" border="0" width="7" height="7"></sup></a></span>
+<!-- ApacheCon Ad -->
+<iframe src="ipojo-in-10-minutes_files/button.html" style="border-width: 0pt; float: left;" scrolling="no" width="135" frameborder="0" height="135"></iframe>
+<p style="height: 100px;">
+<!-- ApacheCon Ad -->
+</p></li></ul> </div>
+    <div class="main">
+<table class="sectionMacro" border="0" cellpadding="5" cellspacing="0" width="100%"><tbody><tr>
+<td class="confluenceTd" valign="top" width="80%">
+<h1><a name="iPOJOin10minutes-iPOJOin10minutes"></a>iPOJO in 10 minutes</h1>
+
+<p><em>This page presents how to use the</em> <em>iPOJO</em> <em>runtime
+and its associated service component model. The concepts of the service
+component model are introduced, followed by a simple example that
+demonstrates the features of iPOJO.</em></p>
+
+<h2><a name="iPOJOin10minutes-Introduction"></a>Introduction</h2>
+
+<p>iPOJO aims to simplify service-oriented programming on OSGi frameworks; the name iPOJO is an abbreviation for <em>injected POJO</em>.
+iPOJO provides a new way to develop OSGi service components with the
+main goal being to simplify service component implementation by
+transparently managing the dynamics of the environment as well as other
+non-functional requirements. The iPOJO framework allows developers to
+more clearly separate functional code (i.e., the POJO) from the
+non-functional code (i.e., dependency management, service provision,
+configuration, etc.). iPOJO combines the functional and non-functional
+aspects at run time. To achieve this, iPOJO provides a simple and
+extensible service component model based on POJOs.</p>
+
+<h2><a name="iPOJOin10minutes-ThePOJOconcept"></a>The POJO concept</h2>
+
+<p>POJO is an acronym for Plain Old Java Object, but it embodies a
+concept that the simpler and less intrusive the design of a given
+framework, the better. The name is used to emphasize that a given
+object is not somehow special, but is an ordinary Java Object. Martin
+Fowler, Rebecca Parsons and Josh Mackenzie coined the term POJO in
+September 2000: "We wondered why people were so against using regular
+objects in their systems and concluded that it was because simple
+objects lacked a fancy name. So we gave them one, and it's caught on
+very nicely." From the developer's perspective, the iPOJO framework
+strives to only require POJOs in as much as it is possible.</p>
+
+<h2><a name="iPOJOin10minutes-iPOJOservicecomponentoverview"></a>iPOJO service component overview</h2>
+
+<p>A service component is able to provide and/or require services,
+where a service is an object that implements a given service interface
+embodied as a Java interface. In addition, iPOJO introduces a callback
+concept to notify a component about various state changes.</p>
+
+<p>The component is the central concept in iPOJO. In the core iPOJO
+model, a component describes service dependencies, provided services,
+and callbacks; this information is recorded in the component's
+metadata. Then, the second important concept in iPOJO is component
+instances. A component instances is a special <em>version</em> of the
+component. By merging component metadata and instance configuration,
+the iPOJO runtime is able to manage the component, i.e., manage its
+life cycle, inject required services, publish provided services,
+discover needed services.</p>
+
+<h2><a name="iPOJOin10minutes-Asimpleexample"></a>A simple example</h2>
+
+<p>In this tutorial we will present how to:</p>
+<ul>
+	<li>Publish an OSGi service</li>
+	<li>Require an OSGi service</li>
+	<li>Use lifecycle callbacks to activate and deactivate components</li>
+</ul>
+
+
+<h3><a name="iPOJOin10minutes-PresentationoftheSpellapplication"></a>Presentation of the <em>Spell</em> application</h3>
+
+<p>To illustrate iPOJO features, we will implement a very simple application. This application is composed by three components:</p>
+<ul>
+	<li>A component implementing a dictionary service</li>
+	<li>A component requiring the dictionary service and providing a spellchecker service</li>
+	<li>A component requiring the spellchecker and providing an user interface</li>
+</ul>
+
+
+<p><img src="ipojo-in-10-minutes_files/spell.png" align="absmiddle" border="0"></p>
+
+<h3><a name="iPOJOin10minutes-Preparingthetutorial"></a>Preparing the tutorial</h3>
+
+<p>This tutorial is based on Ant. So, you need to have the Ant program accessible in your path (see <span class="nobr"><a href="http://ant.apache.org/" title="Visit page outside Confluence" rel="nofollow">here<sup><img class="rendericon" src="ipojo-in-10-minutes_files/linkext7.gif" alt="" align="absmiddle" border="0" width="7" height="7"></sup></a></span> to download and install Ant). Download the tutorial archive available <span class="nobr"><a href="http://people.apache.org/%7Eclement/ipojo/tutorials/10min/tutorial.zip" title="Visit page outside Confluence" rel="nofollow">here<sup><img class="rendericon" src="ipojo-in-10-minutes_files/linkext7.gif" alt="" align="absmiddle" border="0" width="7" height="7"></sup></a></span> and then unzip it. The archive is composed by seven directories:</p>
+<ul>
+	<li>spell.services contains service interfaces used by the applications</li>
+	<li>spell.english contains an implementation of the Dictionary service (containing English words)</li>
+	<li>spell.checker
+contains an implementation of a Spell Checker. The spell checker
+requires a dictionary service and check if an input passage is correct
+(according to the words contained in the dictionary).</li>
+	<li>spell.gui
+contains a very simple user interface. This component uses a spell
+checker service. Then the user can interact with the spell checker with
+this user interface.</li>
+	<li>The task directory contains Ant tasks used to build the project</li>
+	<li>The solution directory contains an already developed version of the application.</li>
+	<li>Finally, the felix folder contains a configured version of the Felix runtime</li>
+</ul>
+
+
+<h3><a name="iPOJOin10minutes-Thespell.servicesproject"></a>The spell.services project</h3>
+
+<p>The spell.services project contains only service interfaces. It is not an iPOJO powered bundle.</p>
+
+<p>Go inside the Spell.services directory and create the file "src/spell/services/DictionaryService.java" for the following <em>Dictionary</em> service interface:</p>
+<div class="code"><div class="codeContent">
+<pre class="code-java"><span class="code-keyword">package</span> spell.services;
+/**
+ * A simple service <span class="code-keyword">interface</span> that defines a dictionary service.
+ * A dictionary service simply verifies the existence of a word.
+**/
+<span class="code-keyword">public</span> <span class="code-keyword">interface</span> DictionaryService {
+    /**
+     * Check <span class="code-keyword">for</span> the existence of a word.
+     * @param word the word to be checked.
+     * @<span class="code-keyword">return</span> <span class="code-keyword">true</span> <span class="code-keyword">if</span> the word is in the dictionary,
+     *         <span class="code-keyword">false</span> otherwise.
+     **/
+    <span class="code-keyword">public</span> <span class="code-object">boolean</span> checkWord(<span class="code-object">String</span> word);
+}</pre>
+</div></div>
+<p>Then, create the file "src/spell/services/SpellChecker.java" for the following <em>Spell Checker</em> service interface:</p>
+<div class="code"><div class="codeContent">
+<pre class="code-java"><span class="code-keyword">package</span> spell.services;
+/**
+ * A simple service <span class="code-keyword">interface</span> that defines a spell checker service.
+ * A spell checker service checks the spelling of all words in a
+ * given passage. A passage is any number of words separated by
+ * a space character and the following punctuation marks: comma,
+ * period, exclamation mark, question mark, semi-colon, and colon.
+**/
+<span class="code-keyword">public</span> <span class="code-keyword">interface</span> SpellChecker {
+    /**
+     * Checks a given passage <span class="code-keyword">for</span> spelling errors. A passage is any
+     * number of words separated by a space and any of the following
+     * punctuation marks: comma (,), period (.), exclamation mark (!),
+     * question mark (?), semi-colon (;), and colon(:).
+     * @param passage the passage to spell check.
+     * @<span class="code-keyword">return</span> An array of misspelled words or <span class="code-keyword">null</span> <span class="code-keyword">if</span> no
+     *         words are misspelled.
+    **/
+    <span class="code-keyword">public</span> <span class="code-object">String</span>[] check(<span class="code-object">String</span> passage);
+}</pre>
+</div></div>
+<p>Once created, you can build the project by launching Ant from the project directory.</p>
+<div class="code"><div class="codeContent">
+<pre class="code-java">$ ant
+Buildfile: build.xml
+clean:
+compile:
+    [mkdir] Created dir: d:\clement\workspaces\sandbox\ipojo\examples\tutorial-ant\
+            spell.services\output
+    [mkdir] Created dir: d:\clement\workspaces\sandbox\ipojo\examples\tutorial-ant\
+            spell.services\output\classes
+    [javac] Compiling 2 source files to d:\clement\workspaces\sandbox\ipojo\examples\
+            tutorial-ant\spell.services\output\classes
+<span class="code-keyword">package</span>:
+      [bnd] spell.services 2
+BUILD SUCCESSFUL
+Total time: 0 seconds</pre>
+</div></div>
+<p>The created bundle is inside the output directory (spell.services.jar). The build process use <span class="nobr"><a href="http://www.aqute.biz/Code/Bnd" title="Visit page outside Confluence" rel="nofollow">BND<sup><img class="rendericon" src="ipojo-in-10-minutes_files/linkext7.gif" alt="" align="absmiddle" border="0" width="7" height="7"></sup></a></span>. The bundle manifest is described in the spell.services.bnd file.<br>
+Once this project is done, we are able to implement a Dictionary service.</p>
+
+<h3><a name="iPOJOin10minutes-Thespell.englishproject:ProvidinganOSGiservice"></a>The spell.english project: Providing an OSGi service</h3>
+
+<p>The spell.english project is a simple dictionary implementation of
+the Dictionary service. It contains few English words. This
+implementation is an iPOJO component.<br>
+The first step is to implement the service. Create the "src/spell/english/EnglishDictionary.java" file for the following <em>Dictionary service</em> implementation:</p>
+<div class="code"><div class="codeContent">
+<pre class="code-java"><span class="code-keyword">package</span> spell.english;
+<span class="code-keyword">import</span> spell.services.DictionaryService;
+/**
+ * An implementation of the Dictionary service containing English words
+ * see DictionaryService <span class="code-keyword">for</span> details of the service.
+ **/
+<span class="code-keyword">public</span> class EnglishDictionary <span class="code-keyword">implements</span> DictionaryService {
+    <span class="code-comment">// The set of words contained in the dictionary.
+</span>    <span class="code-object">String</span>[] m_dictionary = { <span class="code-quote">"welcome"</span>, <span class="code-quote">"to"</span>, <span class="code-quote">"the"</span>, <span class="code-quote">"ipojo"</span>, <span class="code-quote">"tutorial"</span> };
+    /**
+     * Implements DictionaryService.checkWord(). Determines
+     * <span class="code-keyword">if</span> the passed in word is contained in the dictionary.
+     * @param word the word to be checked.
+     * @<span class="code-keyword">return</span> <span class="code-keyword">true</span> <span class="code-keyword">if</span> the word is in the dictionary,
+     *         <span class="code-keyword">false</span> otherwise.
+     **/
+    <span class="code-keyword">public</span> <span class="code-object">boolean</span> checkWord(<span class="code-object">String</span> word) {
+        word = word.toLowerCase();
+        <span class="code-comment">// This is very inefficient
+</span>        <span class="code-keyword">for</span> (<span class="code-object">int</span> i = 0; i &lt; m_dictionary.length; i++) {
+            <span class="code-keyword">if</span> (m_dictionary[i].equals(word)) {
+                <span class="code-keyword">return</span> <span class="code-keyword">true</span>;
+            }
+        }
+        <span class="code-keyword">return</span> <span class="code-keyword">false</span>;
+    }
+}</pre>
+</div></div>
+<p>Notice that this class does not contains neither OSGi nor iPOJO
+specific code. It is just an implementation of the Dictionary Service
+interface.<br>
+Once created, we need to describe this component to ask iPOJO to manage
+it. To achieve this, create the "metadata.xml" file in the
+spell.english directory:</p>
+<div class="code"><div class="codeContent">
+<pre class="code-xml"><span class="code-tag">&lt;ipojo&gt;</span>
+<span class="code-tag">&lt;component classname=<span class="code-quote">"spell.english.EnglishDictionary"</span>&gt;</span>
+	<span class="code-tag">&lt;provides/&gt;</span>
+<span class="code-tag">&lt;/component&gt;</span>
+<span class="code-tag">&lt;instance component=<span class="code-quote">"spell.english.EnglishDictionary"</span>/&gt;</span>
+<span class="code-tag">&lt;/ipojo&gt;</span></pre>
+</div></div>
+<p>This file describes the Dictionary service implementation. First it creates a <em>component</em>. This component has a <em>classname</em> attribute containing the implementation class name. The <em>'provides'</em>
+element indicates that the component provide a service. Provided
+service interfaces are computed by iPOJO, so it is not necessary to
+indicate them. The <em>instance</em> element asks iPOJO to create an
+instance of the described component when the bundle starts. The
+relation between components and instances is the same than between
+classes and objects in the object oriented programming. The <em>component</em>
+attribute indicates which component needs to be instantiated. By
+default, component type name is the implementation class (i.e. the
+classname attribute).</p>
+
+<p>Then, we are able to create the bundle. In the spell.english directory launch the ant command:</p>
+<div class="code"><div class="codeContent">
+<pre class="code-java">$ ant
+Buildfile: build.xml
+clean:
+   [delete] Deleting directory d:\clement\workspaces\sandbox\ipojo\examples\
+            tutorial-ant\spell.english\output\classes
+   [delete] Deleting directory d:\clement\workspaces\sandbox\ipojo\examples\
+            tutorial-ant\spell.english\output
+buildclasspath:
+compile:
+    [mkdir] Created dir: d:\clement\workspaces\sandbox\ipojo\examples\
+            tutorial-ant\spell.english\output
+    [mkdir] Created dir: d:\clement\workspaces\sandbox\ipojo\examples\
+            tutorial-ant\spell.english\output\classes
+    [javac] Compiling 1 source file to d:\clement\workspaces\sandbox\ipojo\examples\
+            tutorial-ant\spell.english\output\classes
+<span class="code-keyword">package</span>:
+      [bnd] spell.english 1
+    [ipojo] Input Bundle File : d:\clement\workspaces\sandbox\ipojo\examples\
+            tutorial-ant\spell.english\output\spell.english.jar
+    [ipojo] Metadata File : d:\clement\workspaces\sandbox\ipojo\examples\
+            tutorial-ant\spell.english\metadata.xml
+    [ipojo] Start bundle manipulation
+    [ipojo] Bundle manipulation - SUCCESS
+    [ipojo] Output File : d:\clement\workspaces\sandbox\ipojo\examples\
+            tutorial-ant\spell.english\output\spell.english.jar
+BUILD SUCCESSFUL
+Total time: 1 second</pre>
+</div></div>
+<p>The created bundle is inside the output directory
+(spell.english.jar). The build process is based on BND and on the iPOJO
+Ant task. The manifest of the bundle is described in the
+spell.english.bnd file.</p>
+
+<h3><a name="iPOJOin10minutes-Thespell.checkerproject:RequiringanOSGiservice"></a>The spell.checker project: Requiring an OSGi service</h3>
+
+<p>The spell.checker project aims to provide a <em>spell checker</em> service. However, to serve this service, this implementation requires a <em>dictionary</em>
+service. During this step, we will create an iPOJO component requiring
+a Dictionary service and providing the Spell Checker service.</p>
+
+<p>First create the file "src/spell/checker/SpellCheck.java" in the spell.checker directory for the following <em>Check Speller service</em> implementation:</p>
+<div class="code"><div class="codeContent">
+<pre class="code-java"><span class="code-keyword">package</span> spell.checker;
+<span class="code-keyword">import</span> java.util.ArrayList;
+<span class="code-keyword">import</span> java.util.List;
+<span class="code-keyword">import</span> java.util.StringTokenizer;
+<span class="code-keyword">import</span> spell.services.DictionaryService;
+<span class="code-keyword">import</span> spell.services.SpellChecker;
+<span class="code-keyword">public</span> class SpellCheck <span class="code-keyword">implements</span> SpellChecker {
+    <span class="code-keyword">private</span> DictionaryService m_dictionary;
+    /**
+     * Implements SpellChecker.check(). Checks the given passage <span class="code-keyword">for</span> misspelled words.
+     * @param passage the passage to spell check.
+     * @<span class="code-keyword">return</span> An array of misspelled words or <span class="code-keyword">null</span> <span class="code-keyword">if</span> no words are misspelled.
+     */
+    <span class="code-keyword">public</span> <span class="code-object">String</span>[] check(<span class="code-object">String</span> passage) {
+        <span class="code-comment">// No misspelled words <span class="code-keyword">for</span> an empty string.
+</span>        <span class="code-keyword">if</span> ((passage == <span class="code-keyword">null</span>) || (passage.length() == 0)) { <span class="code-keyword">return</span> <span class="code-keyword">null</span>; }
+        List errorList = <span class="code-keyword">new</span> ArrayList();
+        <span class="code-comment">// Tokenize the passage using spaces and punctuation.
+</span>        StringTokenizer st = <span class="code-keyword">new</span> StringTokenizer(passage, <span class="code-quote">" ,.!?;:"</span>);
+        <span class="code-comment">// Loop through each word in the passage.
+</span>        <span class="code-keyword">while</span> (st.hasMoreTokens()) {
+            <span class="code-object">String</span> word = st.nextToken();
+            <span class="code-comment">// Check the current word.
+</span>            <span class="code-keyword">if</span> (! m_dictionary.checkWord(word)) {
+                <span class="code-comment">// If the word is not correct, then add it
+</span>                <span class="code-comment">// to the incorrect word list.
+</span>                errorList.add(word);
+            }
+        }
+        <span class="code-comment">// Return <span class="code-keyword">null</span> <span class="code-keyword">if</span> no words are incorrect.
+</span>        <span class="code-keyword">if</span> (errorList.size() == 0) { <span class="code-keyword">return</span> <span class="code-keyword">null</span>; }
+        <span class="code-comment">// Return the array of incorrect words.
+</span>        <span class="code-keyword">return</span> (<span class="code-object">String</span>[]) errorList.toArray(<span class="code-keyword">new</span> <span class="code-object">String</span>[errorList.size()]);
+    }
+}</pre>
+</div></div>
+<p>This class implements the SpellChecker service interface as it will provide it. Moreover, it has a <em>special</em>
+field "_m_dictionary_". This field represents the required service.
+iPOJO will inject a Dictionary service when needed. So, the class can
+use it directly. Notice that this class as no OSGi specific code, both
+the service providing and the requiring are managed by iPOJO. If the
+used dictionary service leaves, iPOJO will try to find another
+provider. If no more providers are available, the instance is
+invalidated, and the provided service is withdrawn from the service
+registry.</p>
+
+<p>Once implemented, we need to describe this component. Create the
+"metadata.xml" file in the spell.checker directory for the following
+component descriptor:</p>
+<div class="code"><div class="codeContent">
+<pre class="code-xml"><span class="code-tag">&lt;ipojo&gt;</span>
+<span class="code-tag">&lt;component classname=<span class="code-quote">"spell.checker.SpellCheck"</span>&gt;</span>
+	<span class="code-tag">&lt;requires field=<span class="code-quote">"m_dictionary"</span>/&gt;</span>
+	<span class="code-tag">&lt;provides/&gt;</span>
+<span class="code-tag">&lt;/component&gt;</span>
+<span class="code-tag">&lt;instance component=<span class="code-quote">"spell.checker.SpellCheck"</span>/&gt;</span>
+<span class="code-tag">&lt;/ipojo&gt;</span></pre>
+</div></div>
+<p>This description contains a '<em>requires'</em> element. This element indicates to iPOJO to manage the service dependency. The <em>field</em>
+attributes describe in which member of the class the service need to be
+injected. It is not necessary to write the required service as it is
+computed by iPOJO. Notice that iPOJO can inject required service by
+invoking methods too.</p>
+
+<p>Finally, we are able to build the bundle. As for previous projects, launch Ant from the project directory.</p>
+
+<h3><a name="iPOJOin10minutes-Thespell.checker.guiproject"></a>The spell.checker.gui project</h3>
+
+<p>The spell.check.gui project contains a very simple user interface (in Swing) allowing a user to interact with a <em>spell checker</em> service.</p>
+
+<p>Create the "src\spell\gui\SpellCheckerGui.java" for the following implementation:</p>
+<div class="code"><div class="codeContent">
+<pre class="code-java"><span class="code-keyword">package</span> spell.gui;
+<span class="code-keyword">import</span> javax.swing.JButton;
+<span class="code-keyword">import</span> javax.swing.JFrame;
+<span class="code-keyword">import</span> javax.swing.JLabel;
+<span class="code-keyword">import</span> javax.swing.JTextField;
+<span class="code-keyword">import</span> spell.services.SpellChecker;
+/**
+ * A very simple Gui interacting with the CheckSpeller service
+ */
+<span class="code-keyword">public</span> class SpellCheckerGui <span class="code-keyword">extends</span> JFrame {
+    /**
+     * Swing component where the user write the passage to check.
+     */
+    <span class="code-keyword">private</span> JTextField m_passage = <span class="code-keyword">null</span>;
+
+    /**
+     * Check button
+     */
+    <span class="code-keyword">private</span> JButton m_checkButton = <span class="code-keyword">null</span>;
+
+    /**
+     * Area where the result is displayed.
+     */
+    <span class="code-keyword">private</span> JLabel m_result = <span class="code-keyword">null</span>;
+    /**
+     * Service dependency on the SpellChecker.
+     */
+    <span class="code-keyword">private</span> SpellChecker m_checker;
+
+    /**
+     * Constructor.
+     * Initialize the GUI.
+     */
+    <span class="code-keyword">public</span> SpellCheckerGui() {
+        <span class="code-keyword">super</span>();
+        initComponents();
+        <span class="code-keyword">this</span>.setTitle(<span class="code-quote">"Spellchecker Gui"</span>);
+    }
+    /**
+     * Initialize the Swing Gui.
+     */
+    <span class="code-keyword">private</span> void initComponents() {
+        java.awt.GridBagConstraints gridBagConstraints;
+        m_checkButton = <span class="code-keyword">new</span> javax.swing.JButton();
+        m_result = <span class="code-keyword">new</span> javax.swing.JLabel();
+        m_passage = <span class="code-keyword">new</span> javax.swing.JTextField();
+        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); <span class="code-comment">//Stop Felix
+</span>        getContentPane().setLayout(<span class="code-keyword">new</span> java.awt.GridBagLayout());
+        m_checkButton.setText(<span class="code-quote">"Check"</span>);
+        m_checkButton.addActionListener(<span class="code-keyword">new</span> java.awt.event.ActionListener() {
+            <span class="code-keyword">public</span> void actionPerformed(java.awt.event.ActionEvent e) {
+                check();
+            }
+        });
+        gridBagConstraints = <span class="code-keyword">new</span> java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 1;
+        gridBagConstraints.insets = <span class="code-keyword">new</span> java.awt.Insets(2, 2, 2, 2);
+        getContentPane().add(m_checkButton, gridBagConstraints);
+        m_result.setPreferredSize(<span class="code-keyword">new</span> java.awt.Dimension(175, 20));
+        gridBagConstraints = <span class="code-keyword">new</span> java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 2;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.insets = <span class="code-keyword">new</span> java.awt.Insets(2, 2, 2, 2);
+        getContentPane().add(m_result, gridBagConstraints);
+        m_passage.setPreferredSize(<span class="code-keyword">new</span> java.awt.Dimension(175, 20));
+        gridBagConstraints = <span class="code-keyword">new</span> java.awt.GridBagConstraints();
+        gridBagConstraints.gridx = 0;
+        gridBagConstraints.gridy = 0;
+        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
+        gridBagConstraints.insets = <span class="code-keyword">new</span> java.awt.Insets(2, 2, 2, 2);
+        getContentPane().add(m_passage, gridBagConstraints);
+        pack();
+    }
+    /**
+     * Check Button action.
+     * Collects the user input and checks it.
+     */
+    <span class="code-keyword">private</span> void check() {
+        <span class="code-object">String</span>[] result = m_checker.check(m_passage.getText());
+        <span class="code-keyword">if</span> (result != <span class="code-keyword">null</span>) {
+            m_result.setText(result.length + <span class="code-quote">" word(s) are mispelled"</span>);
+        } <span class="code-keyword">else</span> {
+            m_result.setText(<span class="code-quote">"All words are correct"</span>);
+        }
+    }
+    /**
+     * Start callback.
+     * This method will be called when the instance becomes valid.
+     * It set the Gui visibility to <span class="code-keyword">true</span>.
+     */
+    <span class="code-keyword">public</span> void start() {
+        <span class="code-keyword">this</span>.setVisible(<span class="code-keyword">true</span>);
+    }
+    /**
+     * Stop callback.
+     *  This method will be called when the instance becomes invalid or stops.
+     *  It deletes the Gui.
+     */
+    <span class="code-keyword">public</span> void stop() {
+        <span class="code-keyword">this</span>.dispose();
+    }
+}</pre>
+</div></div>
+<p>Look at the three last methods. The <em>check</em> methods collect the user input and use a <em>Check speller</em> service to check this input. This method is called when the button is pressed by the user. The <em>start</em> and <em>stop</em>
+methods are lifecycle callbacks. As we need to display the user
+interface when the instance is created and to delete it when the
+instance stops, we need a way to be notified when we need to execute
+these actions. iPOJO provide an easy way to do this. The component
+provides two callback methods for its activation and deactivation,
+start and stop, respectively. Callbacks are used when the component
+needs to be informed about a component state change. In iPOJO, the
+component state is either <b>INVALID</b> (i.e., not all of the component's constraints are satisfied) or <b>VALID</b>
+(i.e., all of the component's constraints are satisfied). In this
+example, the start callback method set the GUI visibility to true; the
+stop callback method deletes the GUI. The component metadata will
+instruct iPOJO to invoke these methods when the component's state
+changes to <b>VALID</b> or <b>INVALID</b> respectively.</p>
+
+<p>Create the <em>metadata.xml</em> file in the spell.chercker.gui directory with the following content:</p>
+<div class="code"><div class="codeContent">
+<pre class="code-xml"><span class="code-tag">&lt;ipojo&gt;</span>
+<span class="code-tag">&lt;component classname=<span class="code-quote">"spell.gui.SpellCheckerGui"</span>&gt;</span>
+	<span class="code-tag">&lt;requires field=<span class="code-quote">"m_checker"</span>/&gt;</span>
+	<span class="code-tag">&lt;callback transition=<span class="code-quote">"validate"</span> method=<span class="code-quote">"start"</span>/&gt;</span>
+	<span class="code-tag">&lt;callback transition=<span class="code-quote">"invalidate"</span> method=<span class="code-quote">"stop"</span>/&gt;</span>
+<span class="code-tag">&lt;/component&gt;</span>
+<span class="code-tag">&lt;instance component=<span class="code-quote">"spell.gui.SpellCheckerGui"</span>/&gt;</span>
+<span class="code-tag">&lt;/ipojo&gt;</span></pre>
+</div></div>
+<p>The component element again has the '<em>classname'</em> attribute that refers to the component implementation class. The '<em>requires</em>' element describes the <em>Check Speller</em> service dependency by simply specifying its associated component field. The '<em>callback'</em> elements describe which method to invoke when the component's state changes. Then the <em>'instance'</em> element asks iPOJO to create an instance of the component.</p>
+
+<p>Once this file is created, you can compile the project by launching <em>ant</em> in the spell.checker.gui directory.</p>
+
+<h2><a name="iPOJOin10minutes-Runningtheapplication"></a>Running the application</h2>
+
+<p>To run the example, start Felix. A distribution of Felix is provided
+in the felix directory. This version is configured to launch iPOJO
+automatically. From the Felix directory, launch the following command
+to start the framework. Then enter a profile name.</p>
+<div class="code"><div class="codeContent">
+<pre class="code-java">java -jar bin/felix.jar</pre>
+</div></div>
+<p>You can check installed bundles by using the '<em>ps</em>' command:</p>
+<div class="code"><div class="codeContent">
+<pre class="code-java">-&gt; ps
+START LEVEL 1
+   ID   State        Level  Name
+[   0] [Active     ] [   0] <span class="code-object">System</span> Bundle (1.0.3)
+[   1] [Active     ] [   1] Apache Felix Shell Service (1.0.0)
+[   2] [Active     ] [   1] Apache Felix Shell TUI (1.0.0)
+[   3] [Active     ] [   1] Apache Felix Bundle Repository (1.0.2)
+[   4] [Active     ] [   1] iPOJO (1.0.0)
+-&gt;</pre>
+</div></div>
+<p>iPOJO runtime is the bundle 4. Once started, install the four created bundles as above:</p>
+<div class="code"><div class="codeContent">
+<pre class="code-java">start file:../spell.services/output/spell.services.jar
+start file:../spell.english/output/spell.english.jar
+start file:../spell.checker/output/spell.checker.jar
+start file:../spell.checker.gui/output/spell.checker.gui.jar</pre>
+</div></div>
+<p>When starting the GUI bundle, the user interface appears. Indeed, the <em>Check Speller</em> service is provided. You can interact with this service by entering a passage and clicking on the check button:<br>
+<img src="ipojo-in-10-minutes_files/ss.png" align="absmiddle" border="0"><br>
+Then, stop the <em>Dictionary</em> service provider (with the <em>stop 6</em>) command. The GUI disappears. Indeed, Spell Checker service cannot be provided as it depends on the Dictionary service.<br>
+<img src="ipojo-in-10-minutes_files/spell2.png" align="absmiddle" border="0"><br>
+Then, restart the Dictionary service provider with the <em>start 6</em> command. The GUI reappears immediately. You can try to stop the <em>check speller</em> service provider without stopping the <em>dictionary</em> service provider with the <em>stop 7</em> command. As for the last manipulation, the GUI disappears.<br>
+<img src="ipojo-in-10-minutes_files/spell3.png" align="absmiddle" border="0"><br>
+To go further in the exploration, modify the spell.cheker implementation. For example, add a simple trace, printing wrong words:</p>
+<div class="code"><div class="codeContent">
+<pre class="code-java"><span class="code-comment">// ...
+</span>        <span class="code-comment">// Return <span class="code-keyword">null</span> <span class="code-keyword">if</span> no words are incorrect.
+</span>        <span class="code-keyword">if</span> (errorList.size() == 0) { <span class="code-keyword">return</span> <span class="code-keyword">null</span>; }
+
+        <span class="code-comment">// Return the array of incorrect words.
+</span>        <span class="code-object">System</span>.out.println(<span class="code-quote">"Wrong words:"</span> + errorList); <span class="code-comment">// &lt;-- Add <span class="code-keyword">this</span> line
+</span>        <span class="code-keyword">return</span> (<span class="code-object">String</span>[]) errorList.toArray(<span class="code-keyword">new</span> <span class="code-object">String</span>[errorList.size()]);</pre>
+</div></div>
+
+<p>Then rebuild the spell.checker bundle and update it (with the
+'update 7' command). You will see the gui "blinking". In fact, the gui
+was stopped as the required spell checker service was no more
+available. As soon as it was back, the gui restarts. The gui didn't
+lose its state. The other services weren't stopped during the update.<br>
+You can uninstall the check service bundle and then re-install a new one (or the same one), you will see the same behavior. </p>
+
+<h2><a name="iPOJOin10minutes-Conclusion"></a>Conclusion</h2>
+
+<p>We saw how to use easily iPOJO to build service-oriented component. In this tutorial, we have demonstrated how to:</p>
+<ul>
+	<li>Publish OSGi services</li>
+	<li>Require OSGi services</li>
+	<li>Use lifecycle callbacks to activate and deactivate components</li>
+</ul>
+
+
+<p>iPOJO provides a lot of others features that you can try in the
+others available tutorials. Subscribe to the Felix users mailing list
+by sending a message to <span class="nobr"><a href="mailto:users-subscribe@felix.apache.org" title="Send mail to users-subscribe@felix.apache.org" rel="nofollow">users-subscribe@felix.apache.org<sup><img class="rendericon" src="ipojo-in-10-minutes_files/mail_small.gif" alt="" align="absmiddle" border="0" width="13" height="12"></sup></a></span>; after subscribing, email questions or feedback to <span class="nobr"><a href="mailto:users@felix.apache.org" title="Send mail to users@felix.apache.org" rel="nofollow">users@felix.apache.org<sup><img class="rendericon" src="ipojo-in-10-minutes_files/mail_small.gif" alt="" align="absmiddle" border="0" width="13" height="12"></sup></a></span>.</p>
+</td>
+<td class="confluenceTd" valign="top" width="20%">
+<h6><a name="iPOJOin10minutes-Overview"></a><b>Overview</b></h6>
+<ul>
+	<li><a href="http://felix.apache.org/site/apache-felix-ipojo.html" title="Apache Felix iPOJO">Home Page</a></li>
+	<li><a href="http://felix.apache.org/site/apache-felix-ipojo-feature-overview.html" title="Apache Felix iPOJO Feature Overview">iPOJO Feature Overview</a></li>
+	<li><a href="http://felix.apache.org/site/download.html" title="Download">Download &amp; Install </a></li>
+</ul>
+
+
+<h6><a name="iPOJOin10minutes-GettingStarted"></a><b>Getting Started</b></h6>
+<ul>
+	<li><a href="" title="iPOJO in 10 minutes">iPOJO in 10 minutes</a></li>
+	<li><a href="http://felix.apache.org/site/how-to-use-ipojo-annotations.html" title="How to use iPOJO Annotations">How to use iPOJO Annotations</a></li>
+	<li><a href="http://felix.apache.org/site/ipojo-hello-word-maven-based-tutorial.html" title="iPOJO Hello Word (Maven-Based) tutorial">iPOJO Hello Word (Maven-Based) tutorial</a></li>
+	<li><a href="http://felix.apache.org/site/ipojo-advanced-tutorial.html" title="iPOJO Advanced Tutorial">iPOJO Advanced Tutorial</a></li>
+	<li><a href="http://felix.apache.org/site/ipojo-composition-tutorial.html" title="iPOJO Composition Tutorial">iPOJO Composition Tutorial</a></li>
+</ul>
+
+
+<h6><a name="iPOJOin10minutes-UserGuide"></a><b>User Guide</b></h6>
+<ul>
+	<li><a href="http://felix.apache.org/site/describing-components.html" title="Describing components">Describing components (handler list) </a></li>
+	<li><a href="http://felix.apache.org/site/using-xml-schemas.html" title="Using XML Schemas">Using XML Schemas</a></li>
+	<li><a href="http://felix.apache.org/site/apache-felix-ipojo-testing-components.html" title="apache-felix-ipojo-testing-components">Testing components</a></li>
+	<li><a href="http://felix.apache.org/site/ipojo-advanced-topics.html" title="iPOJO Advanced Topics">Advanced Topics</a></li>
+	<li><a href="http://felix.apache.org/site/ipojo-faq.html" title="iPOJO FAQ">FAQ</a></li>
+</ul>
+
+
+<h6><a name="iPOJOin10minutes-Tools"></a><b>Tools</b></h6>
+<ul>
+	<li><a href="http://felix.apache.org/site/ipojo-eclipse-plug-in.html" title="iPOJO Eclipse Plug-in">iPOJO Eclipse Plug-in</a></li>
+	<li><a href="http://felix.apache.org/site/ipojo-ant-task.html" title="iPOJO Ant Task">iPOJO Ant Task</a></li>
+	<li><a href="http://felix.apache.org/site/ipojo-maven-plug-in.html" title="iPOJO Maven Plug-in">iPOJO Maven Plug-in</a></li>
+	<li><a href="http://felix.apache.org/site/apache-felix-ipojo-junit4osgi.html" title="apache-felix-ipojo-junit4osgi">Junit4OSGi</a></li>
+	<li><a href="http://felix.apache.org/site/ipojo-concepts-overview.html" title="iPOJO Concepts Overview">iPOJO concepts overview</a></li>
+</ul>
+
+
+<h6><a name="iPOJOin10minutes-DeveloperGuide"></a><b>Developer Guide</b></h6>
+<ul>
+	<li>API: <span class="nobr"><a href="http://people.apache.org/%7Eclement/ipojo/api/1.0/" title="Visit page outside Confluence" rel="nofollow">1.0<sup><img class="rendericon" src="ipojo-in-10-minutes_files/linkext7.gif" alt="" align="absmiddle" border="0" width="7" height="7"></sup></a></span></li>
+	<li><a href="http://felix.apache.org/site/how-to-write-your-own-handler.html" title="How to write your own handler">How to write your own handler</a></li>
+	<li><a href="http://felix.apache.org/site/how-to-use-ipojo-manipulation-metadata.html" title="How to use iPOJO Manipulation Metadata">How to use iPOJO Manipulation Metadata</a></li>
+	<li><a href="http://felix.apache.org/site/dive-into-the-ipojo-manipulation-depths.html" title="Dive into the iPOJO Manipulation depths">Dive into the iPOJO Manipulation depths</a></li>
+</ul>
+
+
+<h6><a name="iPOJOin10minutes-Misc&amp;Contact"></a><b>Misc &amp; Contact</b></h6>
+<ul>
+	<li><a href="http://felix.apache.org/site/apache-felix-ipojo-issuestracker.html" title="apache-felix-ipojo-issuestracker">Issues Tracker</a></li>
+	<li><a href="http://felix.apache.org/site/apache-felix-ipojo-supportedvms.html" title="apache-felix-ipojo-supportedVMs">Supported JVMs</a></li>
+	<li><a href="http://felix.apache.org/site/apache-felix-ipojo-supportedosgi.html" title="apache-felix-ipojo-supportedOSGi">Supported OSGi Implementations</a></li>
+	<li><span class="nobr"><a href="http://ipojo-dark-side.blogspot.com/" title="Visit page outside Confluence" rel="nofollow">iPOJO's Dark Side Blog<sup><img class="rendericon" src="ipojo-in-10-minutes_files/linkext7.gif" alt="" align="absmiddle" border="0" width="7" height="7"></sup></a></span></li>
+	<li><a href="http://felix.apache.org/site/future-ideas.html" title="Future Ideas">Future Ideas</a></li>
+	<li><a href="http://felix.apache.org/site/contact.html" title="Contact">Contact</a></li>
+	<li><a href="http://felix.apache.org/site/related-works.html" title="Related Works">Related Works</a></li>
+	<li><a href="http://felix.apache.org/site/article-presentations.html" title="Article &amp; Presentations">Article &amp; Presentations</a></li>
+</ul>
+
+
+<hr>
+<div class="" align="center">
+<p><span class="nobr"><a href="http://cwiki.apache.org/confluence/createrssfeed.action?types=blogpost&amp;statuses=created&amp;statuses=modified&amp;spaces=FELIX&amp;labelString=iPOJO&amp;rssType=atom&amp;maxResults=10&amp;timeSpan=5&amp;publicFeed=true&amp;title=iPOJO%20Atom%20Feed" title="Stay tuned!" rel="nofollow"><img src="ipojo-in-10-minutes_files/feed-icon-32x32.png" align="absmiddle" border="0"><sup><img class="rendericon" src="ipojo-in-10-minutes_files/linkext7.gif" alt="" align="absmiddle" border="0" width="7" height="7"></sup></a></span></p></div>
+
+<script type="text/javascript">
+var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+</script><script src="ipojo-in-10-minutes_files/ga.js" type="text/javascript"></script>
+<script type="text/javascript">
+var pageTracker = _gat._getTracker("UA-1518442-4");
+pageTracker._trackPageview();
+</script>
+</td></tr></tbody></table>
+    </div>
+  </body></html>
\ No newline at end of file

Propchange: felix/trunk/ipojo/core/doc/ipojo-in-10-minutes.html
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: felix/trunk/ipojo/core/doc/ipojo-in-10-minutes_files/apache.png
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/core/doc/ipojo-in-10-minutes_files/apache.png?rev=734735&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/trunk/ipojo/core/doc/ipojo-in-10-minutes_files/apache.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: felix/trunk/ipojo/core/doc/ipojo-in-10-minutes_files/button.html
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/core/doc/ipojo-in-10-minutes_files/button.html?rev=734735&view=auto
==============================================================================
--- felix/trunk/ipojo/core/doc/ipojo-in-10-minutes_files/button.html (added)
+++ felix/trunk/ipojo/core/doc/ipojo-in-10-minutes_files/button.html Thu Jan 15 07:35:17 2009
@@ -0,0 +1,5 @@
+<html><head>
+<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"><!-- ads start -->
+</head><body><a href="http://eu.apachecon.com/c/aceu2009/" target="_blank"><img src="button_data/2009-europe-125x125.png" title="ApacheCon Europe 2009" border="0" width="125" height="125"></a>
+<!-- ads end -->
+</body></html>
\ No newline at end of file

Propchange: felix/trunk/ipojo/core/doc/ipojo-in-10-minutes_files/button.html
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: felix/trunk/ipojo/core/doc/ipojo-in-10-minutes_files/button_data/2009-europe-125x125.png
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/core/doc/ipojo-in-10-minutes_files/button_data/2009-europe-125x125.png?rev=734735&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/trunk/ipojo/core/doc/ipojo-in-10-minutes_files/button_data/2009-europe-125x125.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: felix/trunk/ipojo/core/doc/ipojo-in-10-minutes_files/feed-icon-32x32.png
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/core/doc/ipojo-in-10-minutes_files/feed-icon-32x32.png?rev=734735&view=auto
==============================================================================
Binary file - no diff available.

Propchange: felix/trunk/ipojo/core/doc/ipojo-in-10-minutes_files/feed-icon-32x32.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream