{"id":1072,"date":"2006-06-22T19:33:00","date_gmt":"2006-06-23T02:33:00","guid":{"rendered":"http:\/\/kodegeek.com\/blog\/?p=1072"},"modified":"2011-02-28T18:33:46","modified_gmt":"2011-03-01T01:33:46","slug":"echando-codigo-%c2%bfmonitoreando-servicios-rpc-usando-java-onc-rpc-y-el-protocolo-jabber-ii","status":"publish","type":"post","link":"http:\/\/kodegeek.com\/blog\/2006\/06\/22\/echando-codigo-%c2%bfmonitoreando-servicios-rpc-usando-java-onc-rpc-y-el-protocolo-jabber-ii\/","title":{"rendered":"Echando c\u00f3digo: \u00bfMonitoreando servicios RPC usando Java, ONC RPC y el protocolo Jabber? (II)"},"content":{"rendered":"<p><a title=\"Photo Sharing\" href=\"http:\/\/www.flickr.com\/photos\/josevnz\/172338149\/\"><img decoding=\"async\" loading=\"lazy\" src=\"http:\/\/static.flickr.com\/61\/172338149_0248b0c352.jpg\" alt=\"java rpc\" width=\"500\" height=\"375\" \/><br \/>\nEl taxista se encarg\u00f3 de decirle a su novia, y esta reg\u00f3 el cuento por all\u00ed&#8230;<\/a><\/p>\n<p><a href=\"http:\/\/kodegeek.com\/2006\/06\/echando-cdigo-monitoreando-servicios.shtml\">En una primera parte<\/a> les comentaba como hablar con NFS y a Rstatd desde Java usando RPC. Ahora vamos a terminar la aplicaci\u00f3n enviando mensajes usando Jabber.<\/p>\n<p>El protocolo de Jabber es muy completo. Sin embargo con esas caracter\u00edsticas viene la complejidad, as\u00ed que decid\u00ed tomar un atajo y en vez de complicarme la vida viendo como trabaja el protocolo me decid\u00ed a usar las libreria <a href=\"http:\/\/www.jivesoftware.org\/smack\/\">Smack<\/a> (JiveSoftware, OpenSource). Como este articulo no se trata de como instalar un servidor de <a href=\"http:\/\/www.jabber.org\/\">Jabber<\/a> entonces vamos a utilizar una cuenta de <a href=\"http:\/\/talk.google.com\/\">Google Talk<\/a> la cual habla el protocolo abierto <a href=\"http:\/\/www.xmpp.org\/\">XMPP<\/a> .<\/p>\n<p>No me gusta guardar ni usuarios ni passwords en el c\u00f3digo, y mucho menos si el c\u00f3digo va a estar en Internet :), as\u00ed que modificamos un poco el archivo build.xml para leer un nuevo archivo de propiedades el cual tendr\u00e1 los parametros requeridos para esta prueba.<\/p>\n<p>Bueno, y el c\u00f3digo super sencillo para probar la parte de la mensajer\u00eda:<\/p>\n<p><!--  .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> org.jivesoftware.smack.Chat;<span class=\"gutter\">   \r\n4:<\/span><span class=\"syntax9\">import<\/span> org.jivesoftware.smack.XMPPConnection;<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=\"gutterH\">  \r\n10:<\/span><span class=\"syntax8\">public<\/span> <span class=\"syntax10\">class<\/span> TestJabber <span class=\"syntax8\">extends<\/span> TestCase <span class=\"syntax18\">{<\/span><span class=\"gutter\">  \r\n11:<\/span>   <span class=\"gutter\">  \r\n12:<\/span>   <span class=\"gutter\">  \r\n13:<\/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\n14:<\/span>                <span class=\"syntax14\">super<\/span>.<span class=\"syntax6\">setUp<\/span>();<span class=\"gutterH\">  \r\n15:<\/span>        <span class=\"syntax18\">}<\/span><span class=\"gutter\">  \r\n16:<\/span><span class=\"gutter\">  \r\n17:<\/span>        <span class=\"syntax3\">\/**<\/span><span class=\"gutter\">  \r\n18:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Test<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">basic<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">functionality<\/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\">Smack<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">API<\/span><span class=\"gutter\">  \r\n19:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span><span class=\"gutterH\">  \r\n20:<\/span>        <span class=\"syntax8\">public<\/span> <span class=\"syntax10\">void<\/span> <span class=\"syntax6\">testJabber<\/span>() <span class=\"syntax18\">{<\/span><span class=\"gutter\">  \r\n21:<\/span>                XMPPConnection conn <span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>;<span class=\"gutter\">  \r\n22:<\/span>                Chat chat <span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>;<span class=\"gutter\">  \r\n23:<\/span>           <span class=\"gutter\">  \r\n24:<\/span>                <span class=\"syntax8\">try<\/span> <span class=\"syntax18\">{<\/span><span class=\"gutterH\">  \r\n25:<\/span>                        Assert.<span class=\"syntax6\">assertNotNull<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Please<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">setup<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">the<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">address<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">for<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">the<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">Google<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">talk<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">server<\/span><span class=\"syntax13\">\"<\/span>,System.<span class=\"syntax6\">getProperty<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">jabber.talk.server<\/span><span class=\"syntax13\">\"<\/span>));<span class=\"gutter\">  \r\n26:<\/span>                        Assert.<span class=\"syntax6\">assertNotNull<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Please<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">setup<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">the<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">receiving<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">user<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">for<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">the<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">Google<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">talk<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">server<\/span><span class=\"syntax13\">\"<\/span>,System.<span class=\"syntax6\">getProperty<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">jabber.talk.port<\/span><span class=\"syntax13\">\"<\/span>));<span class=\"gutter\">  \r\n27:<\/span>                        Assert.<span class=\"syntax6\">assertNotNull<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Please<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">setup<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">the<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">send<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">address<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">for<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">the<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">Google<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">talk<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">server<\/span><span class=\"syntax13\">\"<\/span>,System.<span class=\"syntax6\">getProperty<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">jabber.talk.send.user<\/span><span class=\"syntax13\">\"<\/span>));<span class=\"gutter\"> \r\n28:<\/span>                        Assert.<span class=\"syntax6\">assertNotNull<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Please<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">setup<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">the<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">send<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">password<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">for<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">the<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">Google<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">talk<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">server<\/span><span class=\"syntax13\">\"<\/span>,System.<span class=\"syntax6\">getProperty<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">jabber.talk.send.password<\/span><span class=\"syntax13\">\"<\/span>));<span class=\"gutter\">  \r\n29:<\/span>                        Assert.<span class=\"syntax6\">assertNotNull<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Please<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">setup<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">the<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">receiving<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">user<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">for<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">the<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">Google<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">talk<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">server<\/span><span class=\"syntax13\">\"<\/span>,System.<span class=\"syntax6\">getProperty<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">jabber.talk.rec.user<\/span><span class=\"syntax13\">\"<\/span>));<span class=\"gutterH\">  \r\n30:<\/span>                   <span class=\"gutter\">  \r\n31:<\/span>                        conn <span class=\"syntax18\">=<\/span><span class=\"gutter\">  \r\n32:<\/span>                                <span class=\"syntax8\">new<\/span> <span class=\"syntax6\">XMPPConnection<\/span>(<span class=\"gutter\">  \r\n33:<\/span>                                System.<span class=\"syntax6\">getProperty<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">jabber.talk.server<\/span><span class=\"syntax13\">\"<\/span>),<span class=\"gutter\">  \r\n34:<\/span>                                Integer.<span class=\"syntax6\">parseInt<\/span>(System.<span class=\"syntax6\">getProperty<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">jabber.talk.port<\/span><span class=\"syntax13\">\"<\/span>)));<span class=\"gutterH\">  \r\n35:<\/span>                   <span class=\"gutter\">  \r\n36:<\/span>                        Assert.<span class=\"syntax6\">assertNotNull<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">XMPPConnection<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">is<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">null<\/span><span class=\"syntax13\">\"<\/span>, conn);<span class=\"gutter\">  \r\n37:<\/span>                        Assert.<span class=\"syntax6\">assertTrue<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">We<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">could<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">not<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">connect<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">to<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">the<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">server<\/span><span class=\"syntax13\">\"<\/span>, conn.<span class=\"syntax6\">isConnected<\/span>());<span class=\"gutter\">  \r\n38:<\/span>                   <span class=\"gutter\">  \r\n39:<\/span>                        conn.<span class=\"syntax6\">login<\/span>(<span class=\"gutterH\">  \r\n40:<\/span>                               System.<span class=\"syntax6\">getProperty<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">jabber.talk.send.user<\/span><span class=\"syntax13\">\"<\/span>),<span class=\"gutter\">  \r\n41:<\/span>                               System.<span class=\"syntax6\">getProperty<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">jabber.talk.send.password<\/span><span class=\"syntax13\">\"<\/span>));<span class=\"gutter\">  \r\n42:<\/span>                        Assert.<span class=\"syntax6\">assertTrue<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Could<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">not<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">authenticate<\/span><span class=\"syntax13\">\"<\/span>,conn.<span class=\"syntax6\">isAuthenticated<\/span>());<span class=\"gutter\">  \r\n43:<\/span>                   <span class=\"gutter\">  \r\n44:<\/span>                        chat <span class=\"syntax18\">=<\/span> conn.<span class=\"syntax6\">createChat<\/span>(System.<span class=\"syntax6\">getProperty<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">jabber.talk.rec.user<\/span><span class=\"syntax13\">\"<\/span>));<span class=\"gutterH\">  \r\n45:<\/span>                        Assert.<span class=\"syntax6\">assertNotNull<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Jabber<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">Chat<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">is<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">null<\/span><span class=\"syntax13\">\"<\/span>, chat);<span class=\"gutter\">  \r\n46:<\/span>                   <span class=\"gutter\">  \r\n47:<\/span>                        <span class=\"syntax3\">\/**<\/span><span class=\"gutter\">  \r\n48:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">This<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">is<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">VERY<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">important<\/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\">don<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">wait<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">a<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">little<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">bit<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">then<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">message<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">will<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">not<\/span><span class=\"gutter\">  \r\n49:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">be<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">sent<\/span><span class=\"syntax3\">.<\/span><span class=\"gutterH\">  \r\n50:<\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\">        <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span><span class=\"gutter\">  \r\n51:<\/span>                        Thread.<span class=\"syntax6\">sleep<\/span>(<span class=\"syntax5\">500<\/span>);<span class=\"gutter\">  \r\n52:<\/span>                        chat.<span class=\"syntax6\">sendMessage<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Hey,<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">this<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">is<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">a<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">message<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">from<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">http:\/\/KodeGeek.com<\/span><span class=\"syntax13\">\"<\/span>);<span class=\"gutter\">  \r\n53:<\/span><span class=\"gutter\">  \r\n54:<\/span>                <span class=\"syntax18\">}<\/span> <span class=\"syntax8\">catch<\/span> (Throwable throwbl) <span class=\"syntax18\">{<\/span><span class=\"gutterH\">  \r\n55:<\/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\">  \r\n56:<\/span>                        throwbl.<span class=\"syntax6\">printStackTrace<\/span>();<span class=\"gutter\">  \r\n57:<\/span>                <span class=\"syntax18\">}<\/span> <span class=\"syntax8\">finally<\/span> <span class=\"syntax18\">{<\/span><span class=\"gutter\">  \r\n58:<\/span>                        <span class=\"syntax8\">if<\/span> (conn <span class=\"syntax18\">!<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>) <span class=\"syntax18\">{<\/span><span class=\"gutter\">  \r\n59:<\/span>                                conn.<span class=\"syntax6\">close<\/span>();<span class=\"gutterH\">  \r\n60:<\/span>                        <span class=\"syntax18\">}<\/span><span class=\"gutter\">  \r\n61:<\/span>                <span class=\"syntax18\">}<\/span><span class=\"gutter\">  \r\n62:<\/span>        <span class=\"syntax18\">}<\/span><span class=\"gutter\">  \r\n63:<\/span><span class=\"syntax18\">}<\/span><\/pre>\n<p>Aqui pueden ver como trabaja, una foto vale m\u00e1s que mil palabras:<\/p>\n<p><a title=\"Photo Sharing\" href=\"http:\/\/www.flickr.com\/photos\/josevnz\/174932357\/\"><img decoding=\"async\" loading=\"lazy\" src=\"http:\/\/static.flickr.com\/70\/174932357_f3a2b31173.jpg\" alt=\"jabbertest\" width=\"500\" height=\"400\" \/><br \/>\nMandando mensajes a Jabber desde JUnit. En este caso una cuenta est\u00e1 en Jabber.org y la otra en talk.google.com<\/a><\/p>\n<p>Si revizan el c\u00f3digo fuente ver\u00e1n que tuve que poner un <a href=\"http:\/\/www.jivesoftware.org\/community\/thread.jspa?threadID=20379\">peque\u00f1o hack<\/a>. Sin embargo no es un gran problema y la librer\u00eda hace lo que promete.<\/p>\n<p>Como siempre el c\u00f3digo fuente y los binarios est\u00e1n disponibles para que jueguen con ellos. Espero esto les de algunas ideas de como monitorear sus servidores. En una \u00faltima entrega les mostrar\u00e9 como poner todo junto.<\/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><a rel=\"tag\" href=\"http:\/\/www.blogalaxia.com\/tags\/perl\"><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>El taxista se encarg\u00f3 de decirle a su novia, y esta reg\u00f3 el cuento por all\u00ed&#8230; En una primera parte les comentaba como hablar con NFS y a Rstatd desde Java usando RPC. Ahora vamos a terminar la aplicaci\u00f3n enviando mensajes usando Jabber. El protocolo de Jabber es muy completo. Sin embargo con esas caracter\u00edsticas <a class=\"read-more\" href=\"http:\/\/kodegeek.com\/blog\/2006\/06\/22\/echando-codigo-%c2%bfmonitoreando-servicios-rpc-usando-java-onc-rpc-y-el-protocolo-jabber-ii\/\">[&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\/1072"}],"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=1072"}],"version-history":[{"count":3,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts\/1072\/revisions"}],"predecessor-version":[{"id":2783,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts\/1072\/revisions\/2783"}],"wp:attachment":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/media?parent=1072"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/categories?post=1072"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/tags?post=1072"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}