{"id":1071,"date":"2006-06-21T19:00:00","date_gmt":"2006-06-22T02:00:00","guid":{"rendered":"http:\/\/kodegeek.com\/blog\/?p=1071"},"modified":"2011-02-28T18:44:51","modified_gmt":"2011-03-01T01:44:51","slug":"echando-codigo-%c2%bfmonitoreando-servicios-rpc-usando-java-onc-rpc-y-el-protocolo-jabber-i","status":"publish","type":"post","link":"http:\/\/kodegeek.com\/blog\/2006\/06\/21\/echando-codigo-%c2%bfmonitoreando-servicios-rpc-usando-java-onc-rpc-y-el-protocolo-jabber-i\/","title":{"rendered":"Echando c\u00f3digo: \u00bfMonitoreando servicios RPC usando Java, ONC RPC y el protocolo Jabber? (I)"},"content":{"rendered":"<p><a title=\"Photo Sharing\" href=\"http:\/\/www.flickr.com\/photos\/josevnz\/172332426\/\"><img decoding=\"async\" loading=\"lazy\" src=\"http:\/\/static.flickr.com\/76\/172332426_c7bdd418d1.jpg\" alt=\"Java + ONRPC\" width=\"500\" height=\"375\" \/><\/a><br \/>\n<a title=\"Photo Sharing\" href=\"http:\/\/www.flickr.com\/photos\/josevnz\/172332426\/\">La sabiduria de los taxistas<\/a><\/p>\n<p>\u00bfQue diria usted si yo le dijera que es posible hacer un sistema de monitoreo usando <a href=\"http:\/\/java.net\">Java<\/a>, <a href=\"http:\/\/en.wikipedia.org\/wiki\/ONC_RPC\">ONCR RPC<\/a> y el protocolo <a href=\"http:\/\/jabber.org\">Jabber<\/a>? Es mucho m\u00e1s sencillo de lo que usted cree y es algo que siempre quise hacer en la compa\u00f1ia en la cual trabajaba anteriormente (en la actual estoy trabajando similar, pero mucho m\u00e1s sofisticado :D) y nunca tuve tiempo de hacer.<\/p>\n<p>Pero bueno, demasiada habladera de paja, veamos que hay que poner en orden:<\/p>\n<ol>\n<li>Asumimos que los servicios que queremos monitorear se basan en ONRC RPC. Ejemplo de ellos son <span style=\"font-style: italic;\">NIS, NFS, Rusers, Rquota<\/span> y en nuestro caso <span style=\"font-style: italic;\">Rstatd<\/span> que aunque es muchisimo m\u00e1s limitado que <a href=\"http:\/\/kodegeek.com\/2006\/01\/echando-cdigo-como-preguntar-por-los.shtml\">SNMP<\/a> est\u00e1 presente en muchos servidores, corriendo de gr\u00e1tis \ud83d\ude42<\/li>\n<li>ONRC RPC tiene unos archivos que describen como usar los servicios remoto, llamados &#8216;stubs&#8217;. Si alguna vez ha utilizado <a href=\"http:\/\/java.sun.com\/products\/jdk\/rmi\/\">RMI <\/a>el concepto le ser\u00e1 familiar. Pero hay un problema, los &#8216;stubs&#8217; son muy similares a el lenguaje C, por lo que necesitamos una herramienta que nos sirva como puente. Para ello usamos el compilador de remote tea: <span style=\"font-weight: bold;\">jrpcgen.jar<\/span>.<\/li>\n<li>Una vez obtenidos las interfaces y clientes en Java entonces las compilamos y nos valemos de las librerias de comunicaci\u00f3n provistas por remote tea (<span style=\"font-weight: bold;\">onrpc.jar<\/span>).<\/li>\n<li>De all\u00ed armamos los programas que van a hacer la consulta por medio de RPC. Luego nos preocupamos de como enviar los datos usando Jabber.<\/li>\n<\/ol>\n<p>Lo primero que hay que hacer es generar las interfaces. El precompilador jrpcgen no tiene una tarea de Ant, sin embargo <a href=\"http:\/\/elangelnegro.cvs.sourceforge.net\/elangelnegro\/etc\/build\/monitoring-rpc\/build.xml?revision=1.5&amp;view=markup\">nosotros nos valemos de un macro<\/a> con el cual preparamos las fuentes. Note que primero limpiamos los archivos &#8216;.x&#8217; utilizando al precompilador cpp y es all\u00ed cuando podemos usar a jrpcgen.<\/p>\n<p>El macro en Ant es muy sencillo:<br \/>\n<!--  .syntax0 { color: #000000; } .syntax1 { color: #cc0000; } .syntax2 { color: #ff8400; } .syntax3 { color: #6600cc; } .syntax4 { color: #cc6600; } .syntax5 { color: #ff0000; } .syntax6 { color: #9966ff; } .syntax7 { background: #ffffcc; color: #ff0066; } .syntax8 { color: #006699; font-weight: bold; } .syntax9 { color: #009966; font-weight: bold; } .syntax10 { color: #0099ff; font-weight: bold; } .syntax11 { color: #66ccff; font-weight: bold; } .syntax12 { color: #02b902; } .syntax13 { color: #ff00cc; } .syntax14 { color: #cc00cc; } .syntax15 { color: #9900cc; } .syntax16 { color: #6600cc; } .syntax17 { color: #0000ff; } .syntax18 { color: #000000; font-weight: bold; } .gutter { background: #dbdbdb; color: #000000; } .gutterH { background: #dbdbdb; color: #990066; } --><br \/>\n&#8211;&gt;<\/p>\n<p>&nbsp;<\/p>\n<pre><span class=\"gutter\">62:<\/span>        <span class=\"syntax1\">&lt;!--<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">Special<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">macro<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">to<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">enable<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">the<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">RPC<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">stub<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">generation<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">--&gt;<\/span><span class=\"gutter\">\r\n63:<\/span>        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">macrodef<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">name<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">rpcgen<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">\r\n64:<\/span>                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">attribute<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">name<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">xfile<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutterH\">\r\n65:<\/span>                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">attribute<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">name<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">clientJavaFile<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">\r\n66:<\/span>                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">sequential<\/span><span class=\"syntax17\">&gt;\r\n<\/span><span class=\"gutter\">67:<\/span>                        <span class=\"syntax1\">&lt;!--<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">Preprocess<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">the<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">'x'<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">files<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">--&gt;<\/span><span class=\"gutter\">\r\n68:<\/span>                        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">exec<\/span><span class=\"syntax17\">\r\n<\/span><span class=\"gutter\">69:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">executable<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">\/usr\/bin\/cpp<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutterH\">\r\n70:<\/span>                                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">arg<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">line<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">${rpc.include.local}\/@{xfile}.x<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">\r\n71:<\/span>                                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">arg<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">line<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">${rpc.include.local}\/@{xfile}.cpp<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;\r\n<\/span><span class=\"gutter\">72:<\/span>                        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">exec<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">\r\n73:<\/span>                        <span class=\"syntax1\">&lt;!--<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">Cleanup<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">remaining<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">artifacts<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">--&gt;<\/span><span class=\"gutter\">\r\n74:<\/span>                        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">replaceregexp<\/span><span class=\"syntax17\"> <\/span><span class=\"gutterH\">\r\n75:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">file<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">${rpc.include.local}\/@{xfile}.cpp<\/span><span class=\"syntax13\">\"<\/span><span class=\"gutter\">\r\n76:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">match<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">^#<\/span><span class=\"syntax13\">\"<\/span><span class=\"gutter\">\r\n77:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">replace<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">\/\/<\/span><span class=\"syntax13\">\"<\/span><span class=\"gutter\">\r\n78:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">byline<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">true<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">\r\n79:<\/span>                        <span class=\"syntax1\">&lt;!--<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">generate<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">the<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">Java<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">classes<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">--&gt;<\/span><span class=\"gutterH\">\r\n80:<\/span>                        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">java<\/span><span class=\"gutter\">\r\n81:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">classname<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">org.acplt.oncrpc.apps.jrpcgen.jrpcgen<\/span><span class=\"syntax13\">\"\r\n<\/span><span class=\"gutter\">82:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">dir<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">${rpc.include.local}<\/span><span class=\"syntax13\">\"<\/span><span class=\"gutter\">\r\n83:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">fork<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">true<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">\r\n84:<\/span>                                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">classpath<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">refid<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">path.classpath<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutterH\">\r\n85:<\/span>                                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">arg<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">value<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">-p<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;\r\n<\/span><span class=\"gutter\">86:<\/span>                                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">arg<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">value<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">${package.tree}<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;\r\n<\/span><span class=\"gutter\">87:<\/span>                                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">arg<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">value<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">-nobackup<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">\r\n88:<\/span>                                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">arg<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">value<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">-noserver<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">\r\n89:<\/span>                                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">arg<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">value<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">-verbose<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutterH\">\r\n90:<\/span>                                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">arg<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">value<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">-withcallinfo<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">\r\n91:<\/span>                                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">arg<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">value<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">-bean<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">\r\n92:<\/span>                                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">arg<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">value<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">-c<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">\r\n93:<\/span>                                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">arg<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">value<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">@{clientJavaFile}<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;\r\n<\/span><span class=\"gutter\">94:<\/span>                                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">arg<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">value<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">-d<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutterH\">\r\n95:<\/span>                                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">arg<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">value<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">${stub}<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;\r\n<\/span><span class=\"gutter\">96:<\/span>                                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">arg<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">value<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">@{xfile}.cpp<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;<\/span>\r\n<span class=\"gutter\">97:<\/span>                        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">java<\/span><span class=\"syntax17\">&gt;\r\n<\/span><span class=\"gutter\">98:<\/span>                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">sequential<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">\r\n99:<\/span>        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">macrodef<\/span><span class=\"syntax17\">&gt;<\/span><\/pre>\n<p>Una vez definido llamarlo es muy sencillo (note que primero generamos el c\u00f3digo Java de las interfaces y luego m\u00e1s delante compilamos el c\u00f3digo de la aplicaci\u00f3n junto con el de las interfaces):<br \/>\n<!--  .syntax0 { color: #000000; } .syntax1 { color: #cc0000; } .syntax2 { color: #ff8400; } .syntax3 { color: #6600cc; } .syntax4 { color: #cc6600; } .syntax5 { color: #ff0000; } .syntax6 { color: #9966ff; } .syntax7 { background: #ffffcc; color: #ff0066; } .syntax8 { color: #006699; font-weight: bold; } .syntax9 { color: #009966; font-weight: bold; } .syntax10 { color: #0099ff; font-weight: bold; } .syntax11 { color: #66ccff; font-weight: bold; } .syntax12 { color: #02b902; } .syntax13 { color: #ff00cc; } .syntax14 { color: #cc00cc; } .syntax15 { color: #9900cc; } .syntax16 { color: #6600cc; } .syntax17 { color: #0000ff; } .syntax18 { color: #000000; font-weight: bold; } .gutter { background: #dbdbdb; color: #000000; } .gutterH { background: #dbdbdb; color: #990066; } --><br \/>\n&#8211;&gt;<\/p>\n<p>&nbsp;<\/p>\n<pre><span class=\"gutter\">101:<\/span>        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">target<\/span><span class=\"syntax17\">\r\n<\/span><span class=\"gutter\">102:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">name<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">rpcstub<\/span><span class=\"syntax13\">\"<\/span><span class=\"gutter\">\r\n103:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">depends<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">init<\/span><span class=\"syntax13\">\"<\/span><span class=\"gutter\">\r\n104:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">description<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Create<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">the<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">RPC<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">Java<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">stub<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">objects<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutterH\">\r\n105:<\/span>                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">copy<\/span><span class=\"syntax17\">\r\n<\/span><span class=\"gutter\">106:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">todir<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">${rpc.include.local}<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\r\n<\/span><span class=\"gutter\">107:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">overwrite<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">true<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">&gt;\r\n<\/span><span class=\"gutter\">108:<\/span>                        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">fileset<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">dir<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">${rpc.include.dir}<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">&gt;\r\n<\/span><span class=\"gutter\">109:<\/span>                                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">include<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">name<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">*.x<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutterH\">\r\n110:<\/span>                                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">include<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">name<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">*.h<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;\r\n<\/span><span class=\"gutter\">111:<\/span>                        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">fileset<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">\r\n112:<\/span>                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">copy<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">\r\n113:<\/span>                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">rpcgen<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">xfile<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">rstat<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">clientJavaFile<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">RstatClient<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;\r\n<\/span><span class=\"gutter\">114:<\/span>                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">rpcgen<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">xfile<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">mount<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">clientJavaFile<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">MountClient<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutterH\">\r\n115:<\/span>                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">rpcgen<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">xfile<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">nfs_prot<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">clientJavaFile<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">NfsProtClient<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"syntax17\">\r\n<\/span><span class=\"gutter\">116:<\/span>        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">target<\/span><span class=\"syntax17\">&gt;<\/span><\/pre>\n<p>La compilaci\u00f3n no depende de la generaci\u00f3n de las interfaces ya que estas se guardan en CVS y si por algunas raz\u00f3n cambian es entonces que volver\u00e1n a ser creadas. Es decir, una vez creadas las interfaces solamente nos tenemos que preocupar por compilar:<br \/>\n<!--  .syntax0 { color: #000000; } .syntax1 { color: #cc0000; } .syntax2 { color: #ff8400; } .syntax3 { color: #6600cc; } .syntax4 { color: #cc6600; } .syntax5 { color: #ff0000; } .syntax6 { color: #9966ff; } .syntax7 { background: #ffffcc; color: #ff0066; } .syntax8 { color: #006699; font-weight: bold; } .syntax9 { color: #009966; font-weight: bold; } .syntax10 { color: #0099ff; font-weight: bold; } .syntax11 { color: #66ccff; font-weight: bold; } .syntax12 { color: #02b902; } .syntax13 { color: #ff00cc; } .syntax14 { color: #cc00cc; } .syntax15 { color: #9900cc; } .syntax16 { color: #6600cc; } .syntax17 { color: #0000ff; } .syntax18 { color: #000000; font-weight: bold; } .gutter { background: #dbdbdb; color: #000000; } .gutterH { background: #dbdbdb; color: #990066; } --><br \/>\n&#8211;&gt;<\/p>\n<p>&nbsp;<\/p>\n<pre><span class=\"gutter\">118:<\/span>        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">target<\/span><span class=\"syntax17\"> <\/span><span class=\"gutter\">\r\n119:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">name<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">build<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\r\n<\/span><span class=\"gutterH\">120:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">depends<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">init<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\r\n<\/span><span class=\"gutter\">121:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">description<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Compile<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">the<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">Java<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">source<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">code<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">&gt;\r\n<\/span><span class=\"gutter\">122:<\/span>                <span class=\"syntax1\">&lt;!--<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">Compile<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">the<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">stub<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">--&gt;\r\n<\/span><span class=\"gutter\">123:<\/span>                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">javac<\/span><span class=\"syntax17\"> <\/span><span class=\"gutter\">\r\n124:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">srcdir<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">${stub}<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\"> <\/span><span class=\"gutterH\">\r\n125:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">destdir<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">${build}<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\"> <\/span><span class=\"gutter\">\r\n126:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">deprecation<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">true<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\"> <\/span><span class=\"gutter\">\r\n127:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">optimize<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">false<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\r\n<\/span><span class=\"gutter\">128:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">debug<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">true<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">\r\n129:<\/span>                                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">include<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">name<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">**\/*.java<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;\r\n<\/span><span class=\"gutterH\">130:<\/span>                                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">classpath<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">refid<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">path.classpath<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">\r\n131:<\/span>                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">javac<\/span><span class=\"syntax17\">&gt;\r\n<\/span><span class=\"gutter\">132:<\/span>                <span class=\"syntax1\">&lt;!--<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">Compile<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">the<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">app<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">--&gt;\r\n<\/span><span class=\"gutter\">133:<\/span>                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">javac<\/span><span class=\"syntax17\"> <\/span><span class=\"gutter\">\r\n134:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">srcdir<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">${src}\/main<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\"> <\/span><span class=\"gutterH\">\r\n135:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">destdir<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">${build}<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\r\n<\/span><span class=\"gutter\">136:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">deprecation<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">true<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\"> <\/span><span class=\"gutter\">\r\n137:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">optimize<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">false<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\"> <\/span><span class=\"gutter\">\r\n138:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">debug<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">true<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">&gt;\r\n<\/span><span class=\"gutter\">139:<\/span>                        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">include<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">name<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">${package.path}\/**\/*.java<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;\r\n<\/span><span class=\"gutterH\">140:<\/span>                        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">classpath<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">refid<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">path.classpath<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;\r\n<\/span><span class=\"gutter\">141:<\/span>                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">javac<\/span><span class=\"syntax17\">&gt;\r\n<\/span><span class=\"gutter\">142:<\/span>                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">copy<\/span><span class=\"syntax17\"> <\/span><span class=\"gutter\">\r\n143:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">todir<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">${build}<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\"> <\/span><span class=\"gutter\">\r\n144:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">overwrite<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">true<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">&gt;\r\n<\/span><span class=\"gutterH\">145:<\/span>                        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">fileset<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">dir<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">${properties}\/main<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">\r\n146:<\/span>                                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">include<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">name<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">${package.path}\/**\/*.properties<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">\r\n147:<\/span>                        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">fileset<\/span><span class=\"syntax17\">&gt;\r\n<\/span><span class=\"gutter\">148:<\/span>                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">copy<\/span><span class=\"syntax17\">&gt;\r\n<\/span><span class=\"gutter\">149:<\/span>                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">copy<\/span><span class=\"syntax17\">\r\n<\/span><span class=\"gutterH\">150:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">todir<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">${build}<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">overwrite<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">true<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">\r\n151:<\/span>                        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">fileset<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">dir<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">.<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">\r\n152:<\/span>                                        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">include<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">name<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">log4j.properties<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">\r\n153:<\/span>                        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">fileset<\/span><span class=\"syntax17\">&gt;\r\n<\/span><span class=\"gutter\">154:<\/span>                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">copy<\/span><span class=\"syntax17\">&gt;\r\n<\/span><span class=\"gutterH\">155:<\/span>        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">target<\/span><span class=\"syntax17\">&gt;<\/span><\/pre>\n<p>El siguiente paso es preparar las pruebas de unidad con Junit. Lo primero que hacemos es decirle a ant que es lo que queremos ejecutar y en que orden (si no est\u00e1 familiarizado con Junit, le recomiendo que busque una de las tantas referencias que hay en Internet):<br \/>\n<!--  .syntax0 { color: #000000; } .syntax1 { color: #cc0000; } .syntax2 { color: #ff8400; } .syntax3 { color: #6600cc; } .syntax4 { color: #cc6600; } .syntax5 { color: #ff0000; } .syntax6 { color: #9966ff; } .syntax7 { background: #ffffcc; color: #ff0066; } .syntax8 { color: #006699; font-weight: bold; } .syntax9 { color: #009966; font-weight: bold; } .syntax10 { color: #0099ff; font-weight: bold; } .syntax11 { color: #66ccff; font-weight: bold; } .syntax12 { color: #02b902; } .syntax13 { color: #ff00cc; } .syntax14 { color: #cc00cc; } .syntax15 { color: #9900cc; } .syntax16 { color: #6600cc; } .syntax17 { color: #0000ff; } .syntax18 { color: #000000; font-weight: bold; } .gutter { background: #dbdbdb; color: #000000; } .gutterH { background: #dbdbdb; color: #990066; } --><br \/>\n&#8211;&gt;<\/p>\n<p>&nbsp;<\/p>\n<pre><span class=\"gutterH\">205:<\/span>        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">target<\/span><span class=\"syntax17\"> <\/span><span class=\"gutter\">\r\n206:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">name<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">test<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\"> <\/span><span class=\"gutter\">\r\n207:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">depends<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">build<\/span><span class=\"syntax13\">\"<\/span><span class=\"gutter\">\r\n208:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">description<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Unit<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">tests<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">\r\n209:<\/span>                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">echo<\/span><span class=\"syntax17\">&gt;<\/span>Running unit tests<span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">echo<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutterH\">\r\n210:<\/span>                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">javac<\/span><span class=\"syntax17\"> <\/span><span class=\"gutter\">\r\n211:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">srcdir<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">${src}\/test<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\r\n<\/span><span class=\"gutter\">212:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">destdir<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">${test}<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\"> <\/span><span class=\"gutter\">\r\n213:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">includes<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">${package.path}\/**\/Test*<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\"> <\/span><span class=\"gutter\">\r\n214:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">deprecation<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">true<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\r\n<\/span><span class=\"gutterH\">215:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">optimize<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">false<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\r\n<\/span><span class=\"gutter\">216:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">debug<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">true<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">\r\n217:<\/span>                        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">classpath<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">refid<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">path.test<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">\r\n218:<\/span>                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">javac<\/span><span class=\"syntax17\">&gt;\r\n<\/span><span class=\"gutter\">219:<\/span>\r\n<span class=\"gutterH\">220:<\/span>                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">junit<\/span><span class=\"syntax17\">\r\n<\/span><span class=\"gutter\">221:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">fork<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">yes<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\"> <\/span><span class=\"gutter\">\r\n222:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">printsummary<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">on<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\r\n<\/span><span class=\"gutter\">223:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">maxmemory<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">300m<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">\r\n224:<\/span>                        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">classpath<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">refid<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">path.test<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;\r\n<\/span><span class=\"gutterH\">225:<\/span>                        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">formatter<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">type<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">xml<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">\r\n226:<\/span>                        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">formatter<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">type<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">plain<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;\r\n<\/span><span class=\"gutter\">227:<\/span>                        <span class=\"syntax1\">&lt;!--<\/span><span class=\"syntax1\">\r\n<\/span><span class=\"gutter\">228:<\/span><span class=\"syntax1\">        <\/span><span class=\"syntax1\">        <\/span><span class=\"syntax1\">        <\/span><span class=\"syntax1\">-<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">As<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">root,<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">set<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">the<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">following<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">property<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">on<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">the<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">\/etc\/exports<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">file:\r\n<\/span><span class=\"gutter\">229:<\/span><span class=\"syntax1\">        <\/span><span class=\"syntax1\">        <\/span><span class=\"syntax1\">        <\/span><span class=\"syntax1\">\/usr\/local\/src<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">127.0.0.1\/255.0.0.0(insecure,ro)\r\n<\/span><span class=\"gutterH\">230:<\/span><span class=\"syntax1\">        <\/span><span class=\"syntax1\">        <\/span><span class=\"syntax1\">        <\/span><span class=\"syntax1\">-<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">Then:<\/span><span class=\"gutter\">\r\n231:<\/span><span class=\"syntax1\">        <\/span><span class=\"syntax1\">        <\/span><span class=\"syntax1\">        <\/span><span class=\"syntax1\">\/etc\/init.d\/nfs<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">start<\/span><span class=\"syntax1\">   <\/span><span class=\"syntax1\">        <\/span><span class=\"syntax1\">        <\/span><span class=\"gutter\">\r\n232:<\/span><span class=\"syntax1\">        <\/span><span class=\"syntax1\">        <\/span><span class=\"syntax1\">        <\/span><span class=\"syntax1\">--&gt;<\/span><span class=\"gutter\">\r\n233:<\/span>                        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">sysproperty<\/span><span class=\"syntax17\"> <\/span><span class=\"gutter\">\r\n234:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">key<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">test.nfs.dir<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\"> <\/span><span class=\"gutterH\">\r\n235:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">value<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">\/usr\/local\/src<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">\r\n236:<\/span>\r\n<span class=\"gutter\">237:<\/span>                        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">sysproperty<\/span><span class=\"syntax17\"> <\/span><span class=\"gutter\">\r\n238:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">key<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">test.nfs.server<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\r\n<\/span><span class=\"gutter\">239:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">value<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">localhost<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutterH\">\r\n240:<\/span>               <span class=\"gutter\">\r\n241:<\/span>                        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">sysproperty<\/span><span class=\"syntax17\"> <\/span><span class=\"gutter\">\r\n242:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">key<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">test.rstat.server<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\"> <\/span><span class=\"gutter\">\r\n243:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">value<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">localhost<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;\r\n<\/span><span class=\"gutter\">244:<\/span>               <span class=\"gutterH\">\r\n245:<\/span>                        <span class=\"syntax1\">&lt;!--<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">Wait<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">35<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">seconds<\/span><span class=\"syntax1\"> <\/span><span class=\"syntax1\">--&gt;<\/span><span class=\"gutter\">\r\n246:<\/span>                        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">sysproperty<\/span><span class=\"syntax17\"> <\/span><span class=\"gutter\">\r\n247:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">key<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">test.rstat.wait<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\"> <\/span><span class=\"gutter\">\r\n248:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">value<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">35000<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">\r\n249:<\/span>               <span class=\"gutterH\">\r\n250:<\/span>                        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">test<\/span><span class=\"syntax17\">\r\n<\/span><span class=\"gutter\">251:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">name<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">${testcase}<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\"> <\/span><span class=\"gutter\">\r\n252:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">todir<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">${test}<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\"> <\/span><span class=\"gutter\">\r\n253:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">if<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">testcase<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">\r\n254:<\/span>\r\n<span class=\"gutterH\">255:<\/span>                        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">batchtest<\/span><span class=\"syntax17\">\r\n<\/span><span class=\"gutter\">256:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">todir<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">${test}<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\r\n<\/span><span class=\"gutter\">257:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">unless<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">testcase<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">\r\n258:<\/span>                                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">fileset<\/span><span class=\"syntax17\">\r\n<\/span><span class=\"gutter\">259:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">dir<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">${test}<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\r\n<\/span><span class=\"gutterH\">260:<\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">        <\/span><span class=\"syntax17\">includes<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">**\/Test*.class<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">\r\n261:<\/span>                        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">batchtest<\/span><span class=\"syntax17\">&gt;<\/span>   <span class=\"gutter\">\r\n262:<\/span>                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">junit<\/span><span class=\"syntax17\">&gt;\r\n<\/span><span class=\"gutter\">263:<\/span>       <span class=\"gutter\">\r\n264:<\/span>                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">junitreport<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">todir<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">${test}<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutterH\">\r\n265:<\/span>                        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">fileset<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">dir<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">${test}<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">\r\n266:<\/span>                                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">include<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">name<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">TEST-*.xml<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;\r\n<\/span><span class=\"gutter\">267:<\/span>                        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">fileset<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">\r\n268:<\/span>                        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">report<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">format<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">frames<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\"> <\/span><span class=\"syntax17\">todir<\/span><span class=\"syntax17\">=<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax13\">${test}<\/span><span class=\"syntax13\">\"<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">&gt;\r\n<\/span><span class=\"gutter\">269:<\/span>                <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">junitreport<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutterH\">\r\n270:<\/span>        <span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">\/<\/span><span class=\"syntax17\">target<\/span><span class=\"syntax17\">&gt;<\/span><\/pre>\n<p>Es entonces cuando podremos utilizar las clases cliente. Me gusta probar las cosas antes de ponerlas juntas, as\u00ed que <a href=\"http:\/\/elangelnegro.cvs.sourceforge.net\/elangelnegro\/src\/java\/test\/com\/kodegeek\/blog\/monitoring\/rpc\/TestRpcStubs.java?view=markup\">escrib\u00ed algunas pruebas de unidad (Unit tests) <\/a>con <a href=\"http:\/\/junit.org\">JUnit<\/a> vemos que tan bien o mal est\u00e1n las clases generadas:<br \/>\n<!--  .syntax0 { color: #000000; } .syntax1 { color: #cc0000; } .syntax2 { color: #ff8400; } .syntax3 { color: #6600cc; } .syntax4 { color: #cc6600; } .syntax5 { color: #ff0000; } .syntax6 { color: #9966ff; } .syntax7 { background: #ffffcc; color: #ff0066; } .syntax8 { color: #006699; font-weight: bold; } .syntax9 { color: #009966; font-weight: bold; } .syntax10 { color: #0099ff; font-weight: bold; } .syntax11 { color: #66ccff; font-weight: bold; } .syntax12 { color: #02b902; } .syntax13 { color: #ff00cc; } .syntax14 { color: #cc00cc; } .syntax15 { color: #9900cc; } .syntax16 { color: #6600cc; } .syntax17 { color: #0000ff; } .syntax18 { color: #000000; font-weight: bold; } .gutter { background: #dbdbdb; color: #000000; } .gutterH { background: #dbdbdb; color: #990066; } --><br \/>\n&#8211;&gt;<\/p>\n<p>&nbsp;<\/p>\n<pre><span class=\"gutter\">1:<\/span><span class=\"syntax9\">package<\/span> com.kodegeek.blog.monitoring.rpc;<span class=\"gutter\">\r\n2:<\/span><span class=\"gutter\">\r\n3:<\/span><span class=\"syntax9\">import<\/span> java.net.InetAddress;<span class=\"gutter\">\r\n4:<\/span><span class=\"syntax9\">import<\/span> java.util.ResourceBundle;<span class=\"gutterH\">\r\n5:<\/span><span class=\"gutter\">\r\n6:<\/span><span class=\"syntax9\">import<\/span> junit.framework.Assert;<span class=\"gutter\">\r\n7:<\/span><span class=\"syntax9\">import<\/span> junit.framework.TestCase;<span class=\"gutter\">\r\n8:<\/span><span class=\"gutter\">\r\n9:<\/span><span class=\"syntax9\">import<\/span> org.acplt.oncrpc.OncRpcClientAuthUnix;<span class=\"gutterH\">\r\n10:<\/span><span class=\"syntax9\">import<\/span> org.acplt.oncrpc.OncRpcProtocols;<span class=\"gutter\">\r\n11:<\/span><span class=\"gutter\">\r\n12:<\/span><span class=\"syntax8\">public<\/span> <span class=\"syntax10\">class<\/span> TestRpcStubs <span class=\"syntax8\">extends<\/span> TestCase <span class=\"syntax18\">{<\/span><span class=\"gutter\">\r\n13:<\/span><span class=\"gutter\">\r\n14:<\/span>        <span class=\"syntax3\">\/**<\/span><span class=\"gutterH\">\r\n15:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Default<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">max<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">timeout<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">value<\/span><span class=\"syntax3\">,<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">in<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">miliseconds<\/span><span class=\"gutter\">  \r\n16:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span><span class=\"gutter\">  \r\n17:<\/span>        <span class=\"syntax8\">public<\/span> <span class=\"syntax8\">static<\/span> <span class=\"syntax8\">final<\/span> <span class=\"syntax10\">int<\/span> MAX_TIMEOUT <span class=\"syntax18\">=<\/span> <span class=\"syntax5\">1000<\/span><span class=\"syntax18\">*<\/span><span class=\"syntax5\">60<\/span>;<span class=\"gutter\">  \r\n18:<\/span> <span class=\"gutter\">  \r\n19:<\/span>        <span class=\"syntax8\">private<\/span> <span class=\"syntax8\">static<\/span> ResourceBundle NFS_BUNDLE;<span class=\"gutterH\">  \r\n20:<\/span>        <span class=\"syntax8\">private<\/span> <span class=\"syntax8\">static<\/span> ResourceBundle RSTAT_BUNDLE;<span class=\"gutter\">  \r\n21:<\/span> <span class=\"gutter\">  \r\n22:<\/span>        <span class=\"syntax18\">{<\/span><span class=\"gutter\">  \r\n23:<\/span>                NFS_BUNDLE <span class=\"syntax18\">=<\/span> ResourceBundle.<span class=\"syntax6\">getBundle<\/span>(NfsPing.<span class=\"syntax10\">class<\/span>.<span class=\"syntax6\">getName<\/span>());<span class=\"gutter\">  \r\n24:<\/span>                RSTAT_BUNDLE <span class=\"syntax18\">=<\/span> ResourceBundle.<span class=\"syntax6\">getBundle<\/span>(RstatPing.<span class=\"syntax10\">class<\/span>.<span class=\"syntax6\">getName<\/span>());<span class=\"gutterH\">  \r\n25:<\/span>        <span class=\"syntax18\">}<\/span><span class=\"gutter\">  \r\n26:<\/span> <span class=\"gutter\">  \r\n27:<\/span>        <span class=\"syntax8\">protected<\/span> <span class=\"syntax10\">void<\/span> <span class=\"syntax6\">setUp<\/span>() <span class=\"syntax8\">throws<\/span> Exception <span class=\"syntax18\">{<\/span><span class=\"gutter\">  \r\n28:<\/span>                <span class=\"syntax14\">super<\/span>.<span class=\"syntax6\">setUp<\/span>();<span class=\"gutter\">  \r\n29:<\/span>                System.out.<span class=\"syntax6\">println<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Make<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">sure<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">all<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">the<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">services<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">are<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">running<\/span><span class=\"syntax13\">\u00a0<\/span><span class=\"syntax13\">with<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">'\/usr\/sbin\/rpcinfo<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">-p'<\/span><span class=\"syntax13\">\"<\/span>);<span class=\"gutterH\">  \r\n30:<\/span>        <span class=\"syntax18\">}<\/span><span class=\"gutter\">  \r\n31:<\/span> <span class=\"gutter\">  \r\n32:<\/span>        <span class=\"syntax3\">\/**<\/span><span class=\"gutter\">  \r\n33:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Simple<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">test<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">for<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">NFS<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">client<\/span><span class=\"syntax3\">,<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">using<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">generated<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">RPC<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">stubs<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">directly<\/span><span class=\"gutter\">  \r\n34:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"gutterH\">  \r\n35:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span><span class=\"gutter\">  \r\n36:<\/span>        <span class=\"syntax8\">public<\/span> <span class=\"syntax10\">void<\/span> <span class=\"syntax6\">testNfs<\/span>() <span class=\"syntax18\">{<\/span><span class=\"gutter\">  \r\n37:<\/span>                MountClient mount <span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>;<span class=\"gutter\">  \r\n38:<\/span>                exports exportsList <span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>;<span class=\"gutter\">  \r\n39:<\/span>                fhstatus fhStatus <span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>;<span class=\"gutterH\">  \r\n40:<\/span>                OncRpcClientAuthUnix authUnix <span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>;<span class=\"gutter\">  41:<\/span>                <span class=\"syntax8\">try<\/span> <span class=\"syntax18\">{<\/span><span class=\"gutter\">  42:<\/span>                        authUnix <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">OncRpcClientAuthUnix<\/span>(<span class=\"gutter\">  43:<\/span>                                        System.<span class=\"syntax6\">getProperty<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">test.nfs.server<\/span><span class=\"syntax13\">\"<\/span>),<span class=\"gutter\">  44:<\/span>                                        Integer.<span class=\"syntax6\">parseInt<\/span>(NFS_BUNDLE.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">NfsPing.user.id<\/span><span class=\"syntax13\">\"<\/span>)),<span class=\"gutterH\">  45:<\/span>                                        Integer.<span class=\"syntax6\">parseInt<\/span>(NFS_BUNDLE.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">NfsPing.user.group<\/span><span class=\"syntax13\">\"<\/span>))<span class=\"gutter\">  46:<\/span>                        );<span class=\"gutter\">  47:<\/span>                        Assert.<span class=\"syntax6\">assertNotNull<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Auth<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">Unix<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">is<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">null<\/span><span class=\"syntax13\">\"<\/span>, authUnix);<span class=\"gutter\">  48:<\/span>                        <span class=\"syntax2\">\/\/<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">Get<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">the<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">list<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">of<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">exported<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">directories<\/span><span class=\"gutter\">  49:<\/span>                        mount <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">MountClient<\/span>(<span class=\"gutterH\">  50:<\/span>                                        InetAddress.<span class=\"syntax6\">getByName<\/span>(System.<span class=\"syntax6\">getProperty<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">test.nfs.server<\/span><span class=\"syntax13\">\"<\/span>)),<span class=\"gutter\">  51:<\/span>                                        OncRpcProtocols.ONCRPC_TCP);<span class=\"gutter\">  52:<\/span>                        Assert.<span class=\"syntax6\">assertNotNull<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Mount<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">is<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">null<\/span><span class=\"syntax13\">\"<\/span>, mount);<span class=\"gutter\">  53:<\/span>                        exportsList <span class=\"syntax18\">=<\/span> mount.<span class=\"syntax6\">MOUNTPROC_EXPORT_1<\/span>();<span class=\"gutter\">  54:<\/span>                        Assert.<span class=\"syntax6\">assertNotNull<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Export<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">list<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">is<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">null<\/span><span class=\"syntax13\">\"<\/span>, exportsList);<span class=\"gutterH\">  55:<\/span>                        exportnode node <span class=\"syntax18\">=<\/span> exportsList.value;<span class=\"gutter\">  56:<\/span>                        Assert.<span class=\"syntax6\">assertNotNull<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">No<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">nodes<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">are<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">being<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">exported<\/span><span class=\"syntax13\">\"<\/span>, node);<span class=\"gutter\">  57:<\/span>                        <span class=\"syntax8\">while<\/span> (node <span class=\"syntax18\">!<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>) <span class=\"syntax18\">{<\/span><span class=\"gutter\">  58:<\/span>                                Object [] nodeForm <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> Object[<span class=\"syntax5\">1<\/span>];<span class=\"gutter\">  59:<\/span>                                nodeForm[<span class=\"syntax5\">0<\/span>] <span class=\"syntax18\">=<\/span> node.ex_dir.value;<span class=\"gutterH\">  60:<\/span>                                System.out.<span class=\"syntax6\">printf<\/span>(<span class=\"gutter\">  61:<\/span>                                                NFS_BUNDLE.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">NfsPing.msg.exportedFs<\/span><span class=\"syntax13\">\"<\/span>), nodeForm<span class=\"gutter\">  62:<\/span>                                );<span class=\"gutter\">  63:<\/span>                         <span class=\"gutter\">  64:<\/span>                                mount.<span class=\"syntax6\">getClient<\/span>().<span class=\"syntax6\">setAuth<\/span>(authUnix);<span class=\"gutterH\">  65:<\/span>                                mount.<span class=\"syntax6\">getClient<\/span>().<span class=\"syntax6\">setTimeout<\/span>(MAX_TIMEOUT);<span class=\"gutter\">  66:<\/span>                         <span class=\"gutter\">  67:<\/span>                                fhStatus <span class=\"syntax18\">=<\/span> mount.<span class=\"syntax6\">MOUNTPROC_MNT_1<\/span>(<span class=\"syntax8\">new<\/span> <span class=\"syntax6\">dirpath<\/span>(System.<span class=\"syntax6\">getProperty<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">test.nfs.dir<\/span><span class=\"syntax13\">\"<\/span>)));<span class=\"gutter\">  68:<\/span>                                <span class=\"syntax8\">if<\/span> (fhStatus <span class=\"syntax18\">=<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>) <span class=\"syntax18\">{<\/span><span class=\"gutter\">  69:<\/span>                                        Assert.<span class=\"syntax6\">fail<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">unable<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">to<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">get<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">fhStatus<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">for:<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span>System.<span class=\"syntax6\">getProperty<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">test.nfs.dir<\/span><span class=\"syntax13\">\"<\/span>));<span class=\"gutterH\">  70:<\/span>                                <span class=\"syntax18\">}<\/span><span class=\"gutter\">  71:<\/span>                                <span class=\"syntax2\">\/\/<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">Get<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">the<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">next<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">node<\/span><span class=\"gutter\">  72:<\/span>                                node <span class=\"syntax18\">=<\/span> node.ex_next.value;<span class=\"gutter\">  73:<\/span>                        <span class=\"syntax18\">}<\/span><span class=\"gutter\">  74:<\/span>                <span class=\"syntax18\">}<\/span> <span class=\"syntax8\">catch<\/span> (Throwable throwbl) <span class=\"syntax18\">{<\/span><span class=\"gutterH\">  75:<\/span>                        Assert.<span class=\"syntax6\">fail<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Got<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">an<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">exception:<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span> throwbl.<span class=\"syntax6\">toString<\/span>());<span class=\"gutter\">  76:<\/span>                        throwbl.<span class=\"syntax6\">printStackTrace<\/span>();<span class=\"gutter\">  77:<\/span>                <span class=\"syntax18\">}<\/span> <span class=\"syntax8\">finally<\/span> <span class=\"syntax18\">{<\/span><span class=\"gutter\">  78:<\/span>                        <span class=\"syntax2\">\/\/<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">Empty<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">for<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">now<\/span><span class=\"gutter\">  79:<\/span>                <span class=\"syntax18\">}<\/span><span class=\"gutterH\">  80:<\/span>        <span class=\"syntax18\">}<\/span><span class=\"gutter\">  81:<\/span><span class=\"gutter\">  82:<\/span>        <span class=\"syntax3\">\/**<\/span><span class=\"gutter\">  83:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Simple<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">test<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">for<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Rstat<\/span><span class=\"syntax3\">,<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">using<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">generated<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">RPC<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">stubs<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">directly<\/span><span class=\"gutter\">  84:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Timestamps<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">are<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">separated<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">into<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">seconds<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">(<\/span><span class=\"syntax3\">standard<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">UNIX<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">time<\/span><span class=\"syntax3\">)<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">and<\/span><span class=\"gutterH\">  85:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">microseconds<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">The<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">availability<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">of<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">a<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">current<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">timestamp<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">allows<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">proper<\/span><span class=\"gutter\">  86:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">calculation<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">of<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">interval<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">between<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">measurements<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">without<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">worrying<\/span><span class=\"gutter\">  87:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">about<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">network<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">latency<\/span><span class=\"syntax3\">.<\/span><span class=\"gutter\">  88:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"gutter\">  89:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Most<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">values<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">are<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">counters<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">To<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">get<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">real<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">numbers<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">you<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">have<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">to<\/span><span class=\"gutterH\">  90:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">fetch<\/span><span class=\"syntax3\">(<\/span><span class=\"syntax3\">)<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">samples<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">regularly<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">and<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">divide<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">counter<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">increments<\/span><span class=\"gutter\">  91:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">by<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">time<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">interval<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">between<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">samples<\/span><span class=\"syntax3\">.<\/span><span class=\"gutter\">  92:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"gutter\">  93:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">The<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">cpu_time<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">array<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">holds<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">ticks<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">spent<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">in<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">various<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">CPU<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">states<\/span><span class=\"gutter\">  94:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">(<\/span><span class=\"syntax3\">averaged<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">over<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">all<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">CPUs<\/span><span class=\"syntax3\">)<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">If<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">you<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">know<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">regular<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">tick<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">rate<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">of<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">target<\/span><span class=\"gutterH\">  95:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">system<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">you<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">may<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">calculate<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">number<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">of<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">CPUs<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">from<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">sum<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">of<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">C<\/span><span class=\"syntax17\">&lt;<\/span><span class=\"syntax17\">cpu_time<\/span><span class=\"syntax17\">&gt;<\/span><span class=\"gutter\">  96:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">increments<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">and<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">time<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">interval<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">between<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">samples<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Most<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">often<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">you<\/span><span class=\"gutter\">  97:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">will<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">be<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">interested<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">in<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">percentage<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">of<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">CPU<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">states<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">only<\/span><span class=\"syntax3\">.<\/span><span class=\"gutter\">  98:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span><span class=\"gutter\">  99:<\/span>        <span class=\"syntax8\">public<\/span> <span class=\"syntax10\">void<\/span> <span class=\"syntax6\">testRstat<\/span>() <span class=\"syntax18\">{<\/span><span class=\"gutterH\"> 100:<\/span>                OncRpcClientAuthUnix authUnix <span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>;<span class=\"gutter\"> 101:<\/span>                RstatClient rstat <span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>;<span class=\"gutter\"> 102:<\/span>                statstime stats <span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>;<span class=\"gutter\"> 103:<\/span>                statstime stats2 <span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>;<span class=\"gutter\"> 104:<\/span>                <span class=\"syntax8\">try<\/span> <span class=\"syntax18\">{<\/span><span class=\"gutterH\"> 105:<\/span>                        authUnix <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">OncRpcClientAuthUnix<\/span>(<span class=\"gutter\"> 106:<\/span>                                        System.<span class=\"syntax6\">getProperty<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">test.rstat.server<\/span><span class=\"syntax13\">\"<\/span>),<span class=\"gutter\"> 107:<\/span>                                        Integer.<span class=\"syntax6\">parseInt<\/span>(RSTAT_BUNDLE.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">RstatPing.user.id<\/span><span class=\"syntax13\">\"<\/span>)),<span class=\"gutter\"> 108:<\/span>                                        Integer.<span class=\"syntax6\">parseInt<\/span>(RSTAT_BUNDLE.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">RstatPing.user.group<\/span><span class=\"syntax13\">\"<\/span>))<span class=\"gutter\"> 109:<\/span>                        );<span class=\"gutterH\"> 110:<\/span>                        Assert.<span class=\"syntax6\">assertNotNull<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Auth<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">Unix<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">is<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">null<\/span><span class=\"syntax13\">\"<\/span>, authUnix);<span class=\"gutter\"> 111:<\/span>                 <span class=\"gutter\"> 112:<\/span>                        rstat <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">RstatClient<\/span>(<span class=\"gutter\"> 113:<\/span>                                        InetAddress.<span class=\"syntax6\">getByName<\/span>(System.<span class=\"syntax6\">getProperty<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">test.rstat.server<\/span><span class=\"syntax13\">\"<\/span>)),<span class=\"gutter\"> 114:<\/span>                                        OncRpcProtocols.ONCRPC_UDP<span class=\"gutterH\"> 115:<\/span>                                        );<span class=\"gutter\"> 116:<\/span>                        Assert.<span class=\"syntax6\">assertNotNull<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Rstat<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">is<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">null<\/span><span class=\"syntax13\">\"<\/span>, rstat);<span class=\"gutter\"> 117:<\/span>                        rstat.<span class=\"syntax6\">getClient<\/span>().<span class=\"syntax6\">setAuth<\/span>(authUnix);<span class=\"gutter\"> 118:<\/span>                        rstat.<span class=\"syntax6\">getClient<\/span>().<span class=\"syntax6\">setTimeout<\/span>(MAX_TIMEOUT);<span class=\"gutter\"> 119:<\/span>                        stats <span class=\"syntax18\">=<\/span> rstat.<span class=\"syntax6\">RSTATPROC_STATS_3<\/span>();<span class=\"gutterH\"> 120:<\/span>                        Assert.<span class=\"syntax6\">assertNotNull<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">statsswtch<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">stats<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">is<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">null<\/span><span class=\"syntax13\">\"<\/span>, stats);<span class=\"gutter\"> 121:<\/span>                 <span class=\"gutter\"> 122:<\/span>                        <span class=\"syntax2\">\/\/<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">Now<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">wait<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">a<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">little<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">bit<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">before<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">taking<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">the<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">next<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">snapshot<\/span><span class=\"gutter\"> 123:<\/span>                        <span class=\"syntax10\">long<\/span> wait <span class=\"syntax18\">=<\/span> Long.<span class=\"syntax6\">parseLong<\/span>(System.<span class=\"syntax6\">getProperty<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">test.rstat.wait<\/span><span class=\"syntax13\">\"<\/span>));<span class=\"gutter\"> 124:<\/span>                        Thread.<span class=\"syntax6\">sleep<\/span>(wait);<span class=\"gutterH\"> 125:<\/span>                 <span class=\"gutter\"> 126:<\/span>                        <span class=\"syntax2\">\/\/<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">Get<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">another<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">snapshot<\/span><span class=\"gutter\"> 127:<\/span>                        stats2 <span class=\"syntax18\">=<\/span> rstat.<span class=\"syntax6\">RSTATPROC_STATS_3<\/span>();<span class=\"gutter\"> 128:<\/span>                 <span class=\"gutter\"> 129:<\/span>                        <span class=\"syntax10\">long<\/span> timeElaps <span class=\"syntax18\">=<\/span>  stats2.<span class=\"syntax6\">getCurtime<\/span>().tv_sec <span class=\"syntax18\">-<\/span>stats.<span class=\"syntax6\">getCurtime<\/span>().tv_sec;<span class=\"gutterH\"> 130:<\/span>                 <span class=\"gutter\"> 131:<\/span>                        Object [] statColl <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> Object[<span class=\"syntax5\">23<\/span>];<span class=\"gutter\"> 132:<\/span>                        statColl[<span class=\"syntax5\">0<\/span>] <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">Long<\/span>((stats2.if_collisions <span class=\"syntax18\">-<\/span>stats.if_collisions)<span class=\"syntax18\">\/<\/span> timeElaps);<span class=\"gutter\"> 133:<\/span>                        statColl[<span class=\"syntax5\">1<\/span>] <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">Long<\/span>((stats2.if_ierrors <span class=\"syntax18\">-<\/span>stats.if_ierrors) <span class=\"syntax18\">\/<\/span>timeElaps);<span class=\"gutter\"> 134:<\/span>                        statColl[<span class=\"syntax5\">2<\/span>] <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">Long<\/span>((stats2.if_ipackets <span class=\"syntax18\">-<\/span>stats.if_ipackets) <span class=\"syntax18\">\/<\/span>timeElaps);<span class=\"gutterH\"> 135:<\/span>                        statColl[<span class=\"syntax5\">3<\/span>] <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">Long<\/span>((stats2.if_oerrors <span class=\"syntax18\">-<\/span>stats.if_oerrors) <span class=\"syntax18\">\/<\/span>timeElaps);<span class=\"gutter\"> 136:<\/span>                        statColl[<span class=\"syntax5\">4<\/span>] <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">Long<\/span>((stats2.if_opackets <span class=\"syntax18\">-<\/span>stats.if_opackets) <span class=\"syntax18\">\/<\/span>timeElaps);<span class=\"gutter\"> 137:<\/span>                        statColl[<span class=\"syntax5\">5<\/span>] <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">Long<\/span>((stats2.v_intr <span class=\"syntax18\">-<\/span>stats.v_intr) <span class=\"syntax18\">\/<\/span>timeElaps);<span class=\"gutter\"> 138:<\/span>                        statColl[<span class=\"syntax5\">6<\/span>] <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">Long<\/span>((stats2.v_pgpgin <span class=\"syntax18\">-<\/span>stats.v_pgpgin) <span class=\"syntax18\">\/<\/span>timeElaps);<span class=\"gutter\"> 139:<\/span>                        statColl[<span class=\"syntax5\">7<\/span>] <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">Long<\/span>((stats2.v_pgpgout <span class=\"syntax18\">-<\/span>stats.v_pgpgout) <span class=\"syntax18\">\/<\/span>timeElaps);<span class=\"gutterH\"> 140:<\/span>                        statColl[<span class=\"syntax5\">8<\/span>] <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">Long<\/span>((stats2.v_pswpin <span class=\"syntax18\">-<\/span>stats.v_pswpin) <span class=\"syntax18\">\/<\/span>timeElaps);<span class=\"gutter\"> 141:<\/span>                        statColl[<span class=\"syntax5\">9<\/span>] <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">Long<\/span>((stats2.v_pswpout <span class=\"syntax18\">-<\/span>stats.v_pswpout) <span class=\"syntax18\">\/<\/span>timeElaps);<span class=\"gutter\"> 142:<\/span>                        statColl[<span class=\"syntax5\">10<\/span>] <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">Long<\/span>((stats2.v_swtch <span class=\"syntax18\">-<\/span>stats.v_swtch) <span class=\"syntax18\">\/<\/span>timeElaps);<span class=\"gutter\"> 143:<\/span>                        statColl[<span class=\"syntax5\">11<\/span>] <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">Double<\/span>(stats2.<span class=\"syntax6\">getAvenrun<\/span>(<span class=\"syntax5\">0<\/span>) <span class=\"syntax18\">\/<\/span> <span class=\"syntax5\">256<\/span>.<span class=\"syntax5\">0<\/span>);<span class=\"gutter\"> 144:<\/span>                        statColl[<span class=\"syntax5\">12<\/span>] <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">Double<\/span>(stats2.<span class=\"syntax6\">getAvenrun<\/span>(<span class=\"syntax5\">1<\/span>) <span class=\"syntax18\">\/<\/span> <span class=\"syntax5\">256<\/span>.<span class=\"syntax5\">0<\/span>);<span class=\"gutterH\"> 145:<\/span>                        statColl[<span class=\"syntax5\">13<\/span>] <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">Double<\/span>(stats2.<span class=\"syntax6\">getAvenrun<\/span>(<span class=\"syntax5\">2<\/span>) <span class=\"syntax18\">\/<\/span> <span class=\"syntax5\">256<\/span>.<span class=\"syntax5\">0<\/span>);<span class=\"gutter\"> 146:<\/span>                        statColl[<span class=\"syntax5\">14<\/span>] <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">Long<\/span>((stats2.<span class=\"syntax6\">getCp_time<\/span>(<span class=\"syntax5\">0<\/span>) <span class=\"syntax18\">-<\/span>stats.<span class=\"syntax6\">getCp_time<\/span>(<span class=\"syntax5\">0<\/span>))<span class=\"syntax18\">\/<\/span> timeElaps);<span class=\"gutter\"> 147:<\/span>                        statColl[<span class=\"syntax5\">15<\/span>] <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">Long<\/span>((stats2.<span class=\"syntax6\">getCp_time<\/span>(<span class=\"syntax5\">1<\/span>) <span class=\"syntax18\">-<\/span>stats.<span class=\"syntax6\">getCp_time<\/span>(<span class=\"syntax5\">1<\/span>)) <span class=\"syntax18\">\/<\/span> timeElaps);<span class=\"gutter\"> 148:<\/span>                        statColl[<span class=\"syntax5\">16<\/span>] <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">Long<\/span>((stats2.<span class=\"syntax6\">getCp_time<\/span>(<span class=\"syntax5\">2<\/span>) <span class=\"syntax18\">-<\/span>stats.<span class=\"syntax6\">getCp_time<\/span>(<span class=\"syntax5\">2<\/span>)) <span class=\"syntax18\">\/<\/span> timeElaps);<span class=\"gutter\"> 149:<\/span>                        statColl[<span class=\"syntax5\">17<\/span>] <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">Long<\/span>((stats2.<span class=\"syntax6\">getCp_time<\/span>(<span class=\"syntax5\">3<\/span>) <span class=\"syntax18\">-<\/span>stats.<span class=\"syntax6\">getCp_time<\/span>(<span class=\"syntax5\">3<\/span>))<span class=\"syntax18\">\/<\/span> timeElaps);<span class=\"gutterH\"> 150:<\/span>                        statColl[<span class=\"syntax5\">18<\/span>] <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">Long<\/span>((stats2.<span class=\"syntax6\">getDk_xfer<\/span>(<span class=\"syntax5\">0<\/span>) <span class=\"syntax18\">-<\/span>stats.<span class=\"syntax6\">getDk_xfer<\/span>(<span class=\"syntax5\">0<\/span>))<span class=\"syntax18\">\/<\/span> timeElaps);<span class=\"gutter\"> 151:<\/span>                        statColl[<span class=\"syntax5\">19<\/span>] <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">Long<\/span>((stats2.<span class=\"syntax6\">getDk_xfer<\/span>(<span class=\"syntax5\">1<\/span>) <span class=\"syntax18\">-<\/span>stats.<span class=\"syntax6\">getDk_xfer<\/span>(<span class=\"syntax5\">1<\/span>)) <span class=\"syntax18\">\/<\/span> timeElaps);<span class=\"gutter\"> 152:<\/span>                        statColl[<span class=\"syntax5\">20<\/span>] <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">Long<\/span>((stats2.<span class=\"syntax6\">getDk_xfer<\/span>(<span class=\"syntax5\">2<\/span>) <span class=\"syntax18\">-<\/span>stats.<span class=\"syntax6\">getDk_xfer<\/span>(<span class=\"syntax5\">2<\/span>)) <span class=\"syntax18\">\/<\/span> timeElaps);<span class=\"gutter\"> 153:<\/span>                        statColl[<span class=\"syntax5\">21<\/span>] <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">Long<\/span>((stats2.<span class=\"syntax6\">getDk_xfer<\/span>(<span class=\"syntax5\">3<\/span>) <span class=\"syntax18\">-<\/span>stats.<span class=\"syntax6\">getDk_xfer<\/span>(<span class=\"syntax5\">3<\/span>)) <span class=\"syntax18\">\/<\/span> timeElaps);<span class=\"gutter\"> 154:<\/span>                        statColl[<span class=\"syntax5\">22<\/span>] <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">Long<\/span>(stats2.<span class=\"syntax6\">getBoottime<\/span>().tv_sec);<span class=\"gutterH\"> 155:<\/span>                 <span class=\"gutter\"> 156:<\/span>                        StringBuffer info <span class=\"syntax18\">=<\/span> <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">StringBuffer<\/span>();<span class=\"gutter\"> 157:<\/span>                        info.<span class=\"syntax6\">append<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Rstat<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">unit<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">test\\n<\/span><span class=\"syntax13\">\"<\/span>);<span class=\"gutter\"> 158:<\/span>                        info.<span class=\"syntax6\">append<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Time<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">elapsed<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">between<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">measures<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">(seconds):<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span>timeElaps <span class=\"syntax18\">+<\/span> <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">\\n<\/span><span class=\"syntax13\">\"<\/span>);<span class=\"gutter\"> 159:<\/span>                        info.<span class=\"syntax6\">append<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">if_collisions=%s\\n<\/span><span class=\"syntax13\">\"<\/span>);<span class=\"gutterH\"> 160:<\/span>                        info.<span class=\"syntax6\">append<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">if_ierrors=%s\\n<\/span><span class=\"syntax13\">\"<\/span>);<span class=\"gutter\"> 161:<\/span>                        info.<span class=\"syntax6\">append<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">if_ipackets=%s\\n<\/span><span class=\"syntax13\">\"<\/span>);<span class=\"gutter\"> 162:<\/span>                        info.<span class=\"syntax6\">append<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">if_oerrors=%s\\n<\/span><span class=\"syntax13\">\"<\/span>);<span class=\"gutter\"> 163:<\/span>                        info.<span class=\"syntax6\">append<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">if_opackets=%s\\n<\/span><span class=\"syntax13\">\"<\/span>);<span class=\"gutter\"> 164:<\/span>                        info.<span class=\"syntax6\">append<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">v_intr=%s\\n<\/span><span class=\"syntax13\">\"<\/span>);<span class=\"gutterH\"> 165:<\/span>                        info.<span class=\"syntax6\">append<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">v_pgpgin=%s\\n<\/span><span class=\"syntax13\">\"<\/span>);<span class=\"gutter\"> 166:<\/span>                        info.<span class=\"syntax6\">append<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">v_pgpgout=%s\\n<\/span><span class=\"syntax13\">\"<\/span>);<span class=\"gutter\"> 167:<\/span>                        info.<span class=\"syntax6\">append<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">v_pswpin=%s\\n<\/span><span class=\"syntax13\">\"<\/span>);<span class=\"gutter\"> 168:<\/span>                        info.<span class=\"syntax6\">append<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">v_pswpout=%s\\n<\/span><span class=\"syntax13\">\"<\/span>);<span class=\"gutter\"> 169:<\/span>                        info.<span class=\"syntax6\">append<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">v_swtch=%s\\n<\/span><span class=\"syntax13\">\"<\/span>);<span class=\"gutterH\"> 170:<\/span>                        info.<span class=\"syntax6\">append<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Avenrun<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">(CPU<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">load)<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">0=%s\\n<\/span><span class=\"syntax13\">\"<\/span>);<span class=\"gutter\"> 171:<\/span>                        info.<span class=\"syntax6\">append<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Avenrun<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">(CPU<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">load)<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">1=%s\\n<\/span><span class=\"syntax13\">\"<\/span>);<span class=\"gutter\"> 172:<\/span>                        info.<span class=\"syntax6\">append<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Avenrun<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">(CPU<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">load)<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">2=%s\\n<\/span><span class=\"syntax13\">\"<\/span>);<span class=\"gutter\"> 173:<\/span>                        info.<span class=\"syntax6\">append<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">CP_time<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">0<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">Usr=%s\\n<\/span><span class=\"syntax13\">\"<\/span>);<span class=\"gutter\"> 174:<\/span>                        info.<span class=\"syntax6\">append<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">CP_time<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">1<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">System=%s\\n<\/span><span class=\"syntax13\">\"<\/span>);<span class=\"gutterH\"> 175:<\/span>                        info.<span class=\"syntax6\">append<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">CP_time<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">2<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">Wio=%s\\n<\/span><span class=\"syntax13\">\"<\/span>);<span class=\"gutter\"> 176:<\/span>                        info.<span class=\"syntax6\">append<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">CP_time<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">3<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">Idle=%s\\n<\/span><span class=\"syntax13\">\"<\/span>);<span class=\"gutter\"> 177:<\/span>                        info.<span class=\"syntax6\">append<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Dk_xfer<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">0=%s\\n<\/span><span class=\"syntax13\">\"<\/span>);<span class=\"gutter\"> 178:<\/span>                        info.<span class=\"syntax6\">append<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Dk_xfer<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">1=%s\\n<\/span><span class=\"syntax13\">\"<\/span>);<span class=\"gutter\"> 179:<\/span>                        info.<span class=\"syntax6\">append<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Dk_xfer<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">2=%s\\n<\/span><span class=\"syntax13\">\"<\/span>);<span class=\"gutterH\"> 180:<\/span>                        info.<span class=\"syntax6\">append<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Dk_xfer<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">3=%s\\n<\/span><span class=\"syntax13\">\"<\/span>);<span class=\"gutter\"> 181:<\/span>                        info.<span class=\"syntax6\">append<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Raw<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">uptime<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">in<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">seconds=%s\\n<\/span><span class=\"syntax13\">\"<\/span>);<span class=\"gutter\"> 182:<\/span>                 <span class=\"gutter\"> 183:<\/span>                        <span class=\"syntax2\">\/\/<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">Spit<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">the<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">results<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">out<\/span><span class=\"gutter\"> 184:<\/span>                        System.out.<span class=\"syntax6\">printf<\/span>(<span class=\"gutterH\"> 185:<\/span>                                        info.<span class=\"syntax6\">toString<\/span>(),<span class=\"gutter\"> 186:<\/span>                                        statColl<span class=\"gutter\"> 187:<\/span>                                        );<span class=\"gutter\"> 188:<\/span>                <span class=\"syntax18\">}<\/span> <span class=\"syntax8\">catch<\/span> (Throwable throwbl) <span class=\"syntax18\">{<\/span><span class=\"gutter\"> \r\n189:<\/span>                        Assert.<span class=\"syntax6\">fail<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Got<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">an<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">exception:<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span> throwbl.<span class=\"syntax6\">toString<\/span>());<span class=\"gutterH\"> \r\n190:<\/span>                        throwbl.<span class=\"syntax6\">printStackTrace<\/span>();<span class=\"gutter\"> \r\n191:<\/span>                <span class=\"syntax18\">}<\/span> <span class=\"syntax8\">finally<\/span> <span class=\"syntax18\">{<\/span><span class=\"gutter\"> 1\r\n92:<\/span>                        <span class=\"syntax2\">\/\/<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">Empty<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">for<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">now<\/span><span class=\"gutter\"> \r\n193:<\/span>                <span class=\"syntax18\">}<\/span><span class=\"gutter\"> \r\n194:<\/span>        <span class=\"syntax18\">}<\/span><span class=\"gutterH\"> \r\n195:<\/span><span class=\"syntax18\">}<\/span><\/pre>\n<p>El resultado de las pruebas de unidad es el siguiente:<\/p>\n<blockquote>\n<pre>Make sure all the services are running with '\/usr\/sbin\/rpcinfo -p'Exported filesystem: \/usr\/local\/srcMake sure all the services are running with'\/usr\/sbin\/rpcinfo -p'Rstat unit testTime elapsed between measures (seconds): 37if_collisions=0if_ierrors=0if_ipackets=4if_oerrors=0if_opackets=4v_intr=1015v_pgpgin=0v_pgpgout=0v_pswpin=0v_pswpout=0v_swtch=775Avenrun (CPU load) 0=1.4296875Avenrun (CPU load) 1=0.94921875Avenrun (CPU load) 2=0.6875CP_time 0 Usr=29CP_time 1 System=0CP_time 2 Wio=2CP_time 3 Idle=61Dk_xfer 0=0Dk_xfer 1=0Dk_xfer 2=0Dk_xfer 3=0Raw uptime in seconds=1150929416<\/pre>\n<\/blockquote>\n<p>El siguiente paso es probar como enviar informaci\u00f3n usando el protocolo de Jabber, pero eso se los mostrar\u00e9 en un siguiente articulo \ud83d\ude09<\/p>\n<p>El sistema no es de grado comercial; Uno de verdad deber\u00eda estar en capacidad de monitorear varios servidores a la vez, y si debe escalar entonces quizas usar Jabber como presentaci\u00f3n quizas no sea lo adecuado. Pero nadie niega que fu\u00e9 divertido \ud83d\ude09<\/p>\n<p>Referencias:<\/p>\n<ul>\n<li><a href=\"http:\/\/www.redbooks.ibm.com\/abstracts\/redp3882.html\">IBM RedBook System Management API for z\/VM<\/a><\/li>\n<li>Remote Tea <a href=\"http:\/\/remotetea.sourceforge.net\/\">website<\/a>, <a href=\"http:\/\/remotetea.sourceforge.net\/javadoc\/index.html\">API<\/a><\/li>\n<\/ul>\n<p>Por ahora no pienso colocar el c\u00f3digo para que se lo baje, aunque si lo puede revizar utilizando la interfaz web a <a href=\"http:\/\/elangelnegro.cvs.sourceforge.net\/elangelnegro\/\">CVS.<\/a><\/p>\n<p>Buscar en Technorati: <a rel=\"tag\" href=\"http:\/\/technorati.com\/tag\/venezuela\">venezuela<\/a>, <a rel=\"tag\" href=\"http:\/\/technorati.com\/tag\/java\">java<\/a>, <a rel=\"tag\" href=\"http:\/\/technorati.com\/tag\/linux\">linux<\/a>, <a rel=\"tag\" href=\"http:\/\/technorati.com\/tag\/open+source\">Open Source<\/a>, <a rel=\"tag\" href=\"http:\/\/technorati.com\/tag\/rpc\">rpc<\/a>, <a rel=\"tag\" href=\"http:\/\/technorati.com\/tag\/jabber\">jabber<\/a><br \/>\nBuscar en Blogalaxia: <a rel=\"tag\" href=\"http:\/\/www.blogalaxia.com\/tags\/venezuela\">venezuela<\/a>, <a rel=\"tag\" href=\"http:\/\/www.blogalaxia.com\/tags\/java\">java<\/a>, <a rel=\"tag\" href=\"http:\/\/www.blogalaxia.com\/tags\/linux\">linux<\/a>, <a rel=\"tag\" href=\"http:\/\/www.blogalaxia.com\/tags\/open+source\">Open Source<\/a>, <a rel=\"tag\" href=\"http:\/\/www.blogalaxia.com\/tags\/rpc\">rpc<\/a>, <a rel=\"tag\" href=\"http:\/\/www.blogalaxia.com\/tags\/jabber\">jabber<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>La sabiduria de los taxistas \u00bfQue diria usted si yo le dijera que es posible hacer un sistema de monitoreo usando Java, ONCR RPC y el protocolo Jabber? Es mucho m\u00e1s sencillo de lo que usted cree y es algo que siempre quise hacer en la compa\u00f1ia en la cual trabajaba anteriormente (en la actual <a class=\"read-more\" href=\"http:\/\/kodegeek.com\/blog\/2006\/06\/21\/echando-codigo-%c2%bfmonitoreando-servicios-rpc-usando-java-onc-rpc-y-el-protocolo-jabber-i\/\">[&hellip;]<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[9],"tags":[],"_links":{"self":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts\/1071"}],"collection":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/comments?post=1071"}],"version-history":[{"count":4,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts\/1071\/revisions"}],"predecessor-version":[{"id":2785,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts\/1071\/revisions\/2785"}],"wp:attachment":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/media?parent=1071"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/categories?post=1071"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/tags?post=1071"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}