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

<channel>
	<title>Matheus Bratfisch &#187; java</title>
	<atom:link href="http://www.matbra.com/category/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.matbra.com</link>
	<description>&#34;Cogito ergo sum&#34;</description>
	<lastBuildDate>Tue, 20 Dec 2011 00:03:21 +0000</lastBuildDate>
	<language>pt</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>JavaSpaces &#8211; Um exemplo introdutório.</title>
		<link>http://www.matbra.com/2010/12/01/javaspaces-um-exemplo-introdutorio/</link>
		<comments>http://www.matbra.com/2010/12/01/javaspaces-um-exemplo-introdutorio/#comments</comments>
		<pubDate>Wed, 01 Dec 2010 19:35:31 +0000</pubDate>
		<dc:creator>Matheus (X-warrior) Bratfisch</dc:creator>
				<category><![CDATA[Aprendendo]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[computação distribuida]]></category>
		<category><![CDATA[javaspaces]]></category>

		<guid isPermaLink="false">http://www.matbra.com/?p=1021</guid>
		<description><![CDATA[Boa tarde, Este exemplo é um serviço de microblog, &#8220;semelhante&#8221; ao twitter. O mesmo utiliza o JavaSpaces. JavaSpaces &#8211; examplo Espero que seja util, Matheus]]></description>
			<content:encoded><![CDATA[<p>Boa tarde,</p>
<p>Este exemplo é um serviço de microblog, &#8220;semelhante&#8221; ao twitter. O mesmo utiliza o JavaSpaces. </p>
<p><a href='http://www.matbra.com/wp-content/uploads/javaspaces-example.zip'>JavaSpaces &#8211; examplo</a></p>
<p>Espero que seja util,<br />
Matheus</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matbra.com/2010/12/01/javaspaces-um-exemplo-introdutorio/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WebServices &#8211; Um exemplo introdutório.</title>
		<link>http://www.matbra.com/2010/10/07/webservices-um-exemplo-introdutorio/</link>
		<comments>http://www.matbra.com/2010/10/07/webservices-um-exemplo-introdutorio/#comments</comments>
		<pubDate>Thu, 07 Oct 2010 19:23:46 +0000</pubDate>
		<dc:creator>Matheus (X-warrior) Bratfisch</dc:creator>
				<category><![CDATA[Aprendendo]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[computação distribuida]]></category>
		<category><![CDATA[glassfish]]></category>
		<category><![CDATA[Netbeans]]></category>
		<category><![CDATA[webservices]]></category>

		<guid isPermaLink="false">http://www.matbra.com/?p=983</guid>
		<description><![CDATA[Ola, Neste exemplo é demonstrado a criação de um Cliente para um Web Services. O exemplo de um Web Service que também é Cliente (Collector), e um Web Service que é somente Web Service. (Store). O programa utilizado para criação utilizado foi o NetBeans com o GlassFish. A versão do netbeans foi netbeans-6.9.1-ml-java. Cliente, Coletor, [...]]]></description>
			<content:encoded><![CDATA[<p>Ola,</p>
<p>Neste exemplo é demonstrado a criação de um Cliente para um Web Services. O exemplo de um Web Service que também é Cliente (Collector), e um Web Service que é somente Web Service. (Store). </p>
<p>O programa utilizado para criação utilizado foi o NetBeans com o GlassFish. A versão do netbeans foi netbeans-6.9.1-ml-java.</p>
<p><a href='http://www.matbra.com/wp-content/uploads/Cliente-collector-store-funcionando.tar.gz'>Cliente, Coletor, Lojas &#8211; Exemplo de WebServices</a></p>
<p>Espero que o exemplo seja útil a você.<br />
Matheus </p>
]]></content:encoded>
			<wfw:commentRss>http://www.matbra.com/2010/10/07/webservices-um-exemplo-introdutorio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Um exemplo da utilização de CORBA</title>
		<link>http://www.matbra.com/2010/09/21/um-exemplo-da-utilizacao-de-corba/</link>
		<comments>http://www.matbra.com/2010/09/21/um-exemplo-da-utilizacao-de-corba/#comments</comments>
		<pubDate>Tue, 21 Sep 2010 22:46:54 +0000</pubDate>
		<dc:creator>Matheus (X-warrior) Bratfisch</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[CORBA]]></category>

		<guid isPermaLink="false">http://www.matbra.com/?p=925</guid>
		<description><![CDATA[Olá, CORBA (Common Object Request Broker Architecture) é um padrão definido pelo grupo OMG (Object Management Group), este permite a interação entre Objetos Distribuídos, em diferentes linguagens e sistemas. Ele também proporciona total transparência na comunicação entre os objetos distribuídos. A localização de objetos é feito via suas referências, que são resolvidas pelo ORB. A [...]]]></description>
			<content:encoded><![CDATA[<p>Olá,</p>
<p>CORBA (Common Object Request Broker Architecture) é um padrão definido pelo grupo OMG (Object Management Group), este permite a interação entre Objetos Distribuídos, em diferentes linguagens e sistemas.  Ele também proporciona total transparência na comunicação entre os objetos distribuídos. A localização de objetos é feito via suas referências, que são resolvidas pelo ORB. A linguagem IDL (Interface Definition Language) é a tecnologia utilizada para descrever as interfaces dos objetos. Esta é uma linguagem puramente declarativa. Ela possui seus próprios tipos de dados, que são mapeados para tipos de dados nas linguagens suportadas. Existe o Compilador IDL que gera os códigos responsáveis pela comunicação entre objetos, mapeia os tipos de dados, se encarrega de fazer a serialização dos dados. </p>
<p>Mas na prática como funciona? Bom, possuimos as definições em um arquivo .idl, neste caso o arquivo <a href='http://www.matbra.com/wp-content/uploads/Bank-idl.txt'>Bank-idl</a> (lembre-se de renomea-lo para bank.idl).</p>
<p><span id="more-925"></span></p>
<p>Acessando esse arquivo vocês verão diversas definições como: </p>
<p>Definição do modulo</p>
<blockquote><p>
module banco {
</p></blockquote>
<p>Definição do tipo valor</p>
<blockquote><p>  typedef double valor; </p></blockquote>
<p>  Definição da estrutura de dados Transação</p>
<blockquote><p>struct transacao {<br />
    unsigned long data; // Formato: ddmmyyyy<br />
    string<12>    descricao;<br />
    valor         quantia;<br />
  };</p></blockquote>
<p>Definição da interface, seus métodos, variaveis, excessões</p>
<blockquote><p>interface auto_atendimento {<br />
    readonly attribute string boas_vindas;<br />
    valor saldo ( in conta c )<br />
    raises ( conta_inval );<br />
   void extrato ( in conta c,<br />
    out transacoes t, out valor saldo )<br />
    raises ( conta_inval );<br />
    void transferencia ( in conta origem,<br />
    in conta destino, in valor v )<br />
    raises ( conta_inval, saldo_insuf );<br />
    void investimento ( in conta c,<br />
    in aplicacao apl, in valor v )<br />
    raises ( conta_inval, saldo_insuf );<br />
  };</p></blockquote>
<p>Com este arquivo, você pode criar as diversas interfaces com diferentes compiladores para diferentes linguagens. Para gerar as interfaces utilize </p>
<blockquote><p>idlj -fall bank.idl</p></blockquote>
<p>O mesmo irá gerar diversos arquivos dentro da pasta banco, com arquivos .java, com interfaces, métodos e exceções. Os mesmos devem ser ainda implementados para funcionar como você desejar. </p>
<p><a href='http://www.matbra.com/wp-content/uploads/CORBA.tar.gz'>Um exemplo de implementação de um Servidor de Banco e um Cliente em Java, utilizando CORBA com IDL</a></p>
<p>Matheus</p>
<p>PS: Isto foi apenas uma breve introdução. O CORBA utiliza diversas outras definições como o OMA e outras.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matbra.com/2010/09/21/um-exemplo-da-utilizacao-de-corba/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Java RMI &#8211; Introdução e Exemplo</title>
		<link>http://www.matbra.com/2010/09/02/java-rmi-introducao-e-exemplo/</link>
		<comments>http://www.matbra.com/2010/09/02/java-rmi-introducao-e-exemplo/#comments</comments>
		<pubDate>Thu, 02 Sep 2010 23:49:33 +0000</pubDate>
		<dc:creator>Matheus (X-warrior) Bratfisch</dc:creator>
				<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.matbra.com/?p=854</guid>
		<description><![CDATA[Boa noite, Java RMI (Remote Method Invocation), é um mecanismo que permite ao usuário, criar aplicações distribuídas utilizando Java. Sem ter muitas preocupações com Protocolo, sockets entre outros. Mas como ele funciona? Bom toda a mágica é feita pelo próprio RMI. O mesmo possui um servidor chamado RMIREGISTRY, onde o seu Servidor se conecta e [...]]]></description>
			<content:encoded><![CDATA[<p>Boa noite,</p>
<p>Java RMI (Remote Method Invocation), é um mecanismo que permite ao usuário, criar aplicações distribuídas utilizando Java. Sem ter muitas preocupações com Protocolo, sockets entre outros. Mas como ele funciona? Bom toda a mágica é feita pelo próprio RMI. O mesmo possui um servidor chamado RMIREGISTRY, onde o seu Servidor se conecta e diz que está ali. A partir desse momento os Clientes conseguem invocar o servidor. </p>
<p>Um exemplo de um Servidor de Veiculo onde os Clientes podem pesquisar e adicionar novos Veículos. </p>
<p><span id="more-854"></span></p>
<p>Interface Servidor: </p>
<div class="codesnip-container" >
<div class="java codesnip" style="font-family:monospace;"><span class="kw1">import</span> <span class="co2">java.rmi.Remote</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">java.rmi.RemoteException</span><span class="sy0">;</span><br />
<span class="kw1">import</span> <span class="co2">java.util.List</span><span class="sy0">;</span></p>
<p><span class="kw1">public</span> <span class="kw1">interface</span> MethosInterfaces <span class="kw1">extends</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aremote+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Remote</span></a> <span class="br0">&#123;</span></p>
<p>&nbsp; &nbsp;<span class="kw1">public</span> List<span class="sy0">&lt;</span>Vehicle<span class="sy0">&gt;</span> search<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> field, <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> value<span class="br0">&#41;</span> <span class="kw1">throws</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aremoteexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">RemoteException</span></a><span class="sy0">;</span><br />
&nbsp; &nbsp;<span class="kw1">public</span> <span class="kw4">void</span> add<span class="br0">&#40;</span>Vehicle v<span class="br0">&#41;</span> <span class="kw1">throws</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aremoteexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">RemoteException</span></a><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>Os métodos nessa interface serão implementados por nosso servidor, essa interface extend Remote que é uma Classe necessária para fazer o RMI funcionar. Se sua interface não extende-la não irá funcionar. Todos os métodos devem possuir o tratamento de exceção, para garantir o que vai acontecer caso o servidor não seja encontrado. </p>
<p>Servidor: </p>
<div class="codesnip-container" >
<div class="java codesnip" style="font-family:monospace;"><span class="kw1">public</span> <span class="kw1">class</span> ServerAn <span class="kw1">implements</span> MethosInterfaces <span class="br0">&#123;</span></div>
</div>
<p>Classe extende nossa interface e implementa os métodos (não irei mostra-los aqui). </p>
<p>Para criar o servidor utilizei o seguinte:</p>
<div class="codesnip-container" >
<div class="java codesnip" style="font-family:monospace;"><span class="kw1">public</span> <span class="kw1">static</span> <span class="kw4">void</span> main<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a><span class="br0">&#91;</span><span class="br0">&#93;</span> args<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">try</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ServerAn server <span class="sy0">=</span> <span class="kw1">new</span> ServerAn<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; MethosInterfaces stub <span class="sy0">=</span> <span class="br0">&#40;</span>MethosInterfaces<span class="br0">&#41;</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aunicastremoteobject+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">UnicastRemoteObject</span></a>.<span class="me1">exportObject</span><span class="br0">&#40;</span>server, 0<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aregistry+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Registry</span></a> registry <span class="sy0">=</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Alocateregistry+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">LocateRegistry</span></a>.<span class="me1">getRegistry</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; registry.<span class="me1">bind</span><span class="br0">&#40;</span><span class="st0">&quot;Server&quot;</span>, stub<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;Servider running&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">catch</span> <span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Exception</span></a> ex<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ex.<span class="me1">printStackTrace</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</div>
<p>Bom no main criamos um novo ServerAn(), exportamos o nosso Servidor, registramos com o bind o nosso Servidor.</p>
<p>Cliente Enviador:</p>
<div class="codesnip-container" >
<div class="java codesnip" style="font-family:monospace;"><span class="kw1">public</span> <span class="kw1">class</span> ClientSender <span class="br0">&#123;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">public</span> <span class="kw1">static</span> <span class="kw4">void</span> main<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a><span class="br0">&#91;</span><span class="br0">&#93;</span> args<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">try</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aregistry+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Registry</span></a> registry <span class="sy0">=</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Alocateregistry+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">LocateRegistry</span></a>.<span class="me1">getRegistry</span><span class="br0">&#40;</span><span class="st0">&quot;localhost&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; MethosInterfaces stub <span class="sy0">=</span> <span class="br0">&#40;</span>MethosInterfaces<span class="br0">&#41;</span> registry.<span class="me1">lookup</span><span class="br0">&#40;</span><span class="st0">&quot;Server&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;Sending new Vehicle to server&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; stub.<span class="me1">add</span><span class="br0">&#40;</span><span class="kw1">new</span> Vehicle<span class="br0">&#40;</span><span class="st0">&quot;Matheus2&quot;</span>, <span class="nu0">5000</span>, <span class="st0">&quot;Caminhão&quot;</span>, <span class="st0">&quot;&quot;</span>, 2008<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">catch</span> <span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Exception</span></a> ex<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ex.<span class="me1">printStackTrace</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>Basicamente, procuramos o RMIREGISTRY em &#8220;localhost&#8221; e procuramos pelo nosso servidor nomeado &#8220;Server&#8221;, com referencia para o mesmo adicionamos um novo Veículo. Para procurar é a mesma coisa porém receberemos uma Lista de veículos ao invés de não receber nada. </p>
<p>Para o objeto poder ser transmitido ele deve ser &#8220;serializable&#8221;. </p>
<p><a href='http://www.matbra.com/wp-content/uploads/JavaRMI-Example.tar.gz'>Java RMI &#8211; Anúncios de Carros (Exemplo)</a></p>
<p>Lembrando que, o rmiregistry procura no seu Java PATH e no diretório que o mesmo foi executado pelas interfaces. Então neste exemplo, para simplicidade, acesse o diretório com os códigos fontes, compile-os execute o RMIREGISTRY no mesmo. E em seguida o Servidor, após isso em outro prompt execute o(s) Clientes. O nome do programa é RMIREGISTRY, execute-o com seu nome. </p>
<p>Espero que seja util,<br />
Matheus</p>
<p>PS: Java ME não vem com o RMI</p>
<p>Referencias:<br />
<a href="http://infolab.stanford.edu/CHAIMS/Doc/Details/Protocols/rmi/rmi_description.html" target="_blank">http://infolab.stanford.edu/CHAIMS/Doc/Details/Protocols/rmi/rmi_description.html</a><br />
<a href="http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136424.html" target="_blank">http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136424.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.matbra.com/2010/09/02/java-rmi-introducao-e-exemplo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Enviar arquivos via XML-RPC em Java.</title>
		<link>http://www.matbra.com/2009/09/17/enviar-arquivos-via-xml-rpc-em-java/</link>
		<comments>http://www.matbra.com/2009/09/17/enviar-arquivos-via-xml-rpc-em-java/#comments</comments>
		<pubDate>Thu, 17 Sep 2009 22:23:04 +0000</pubDate>
		<dc:creator>Matheus (X-warrior) Bratfisch</dc:creator>
				<category><![CDATA[Aprendendo]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[cliente]]></category>
		<category><![CDATA[servidor]]></category>
		<category><![CDATA[xmlrpc]]></category>

		<guid isPermaLink="false">http://www.matbra.com/?p=496</guid>
		<description><![CDATA[Olá, Hoje o Jorge me perguntou se eu sabia como enviar arquivos via XML-RPC. Pensando no assunto não me recordava como devia ser feito, resolvi dar uma rápida pesquisada para ensina-lo. Acabei me entretendo e resolvi modificar o Cliente e Servidor Java XML-RPC para fazer o mesmo. Implementei o mesmo e não foi complexo só [...]]]></description>
			<content:encoded><![CDATA[<p>Olá,</p>
<p>Hoje o Jorge me perguntou se eu sabia como enviar arquivos via XML-RPC. Pensando no assunto não me recordava como devia ser feito, resolvi dar uma rápida pesquisada para ensina-lo. Acabei me entretendo e resolvi modificar o <a href="http://www.matbra.com/2009/05/16/cliente-e-servidor-java-xml-rpc/">Cliente e Servidor Java XML-RPC</a> para fazer o mesmo. </p>
<p>Implementei o mesmo e não foi complexo só olhei a documentação do <a href="http://ws.apache.org/xmlrpc/types.html" target="_blank">Apache XML-RPC</a> para ver como eram enviados bytes. Os mesmos eram enviados codificando o array de bytes (byte[]) em Base64. Pesquisei um pouco como fazer isso e achei uma <a href="http://iharder.net/current/java/base64/" target="_blank">Biblioteca Java de Base64 em dominio publico</a>. Também procurei por como <a href="http://www.java-tips.org/java-se-tips/java.io/reading-a-file-into-a-byte-array.html" target="_blank">pegar o array de bytes de um arquivo</a> e como <a href="http://www.velocityreviews.com/forums/t388750-write-byte-to-file.html" target="_blank">criar um novo arquivo apartir de um array de bytes</a> (byte[]). </p>
<p>Esses sites onde peguei ambos os métodos estão como comentarios no arquivo. </p>
<p><a href='http://www.matbra.com/2009/09/17/enviar-arquivos-via-xml-rpc-em-java/xml-rpc-transferencia-de-arquivo/' rel='attachment wp-att-497'>XML-RPC-Transferencia-De-Arquivo</a></p>
<p>Espero que seja útil,<br />
Matheus</p>
<p>PS: Da maneira como eu implementei qualquer arquivo do sistema que o Cliente XML-RPC pedir o Servidor irá enviar, isso criaria uma possivel brecha de segurança. </p>
<p>PS2: Caso deseja que o Cliente envie arquivos para o Servidor, o Cliente deve pegar o array de bytes do Arquivo, codifica-lo em base64 e passa-lo como parametro. O Servidor irá receber este parametro, decodificar após isso manipu-le o array de bytes como você desejar. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.matbra.com/2009/09/17/enviar-arquivos-via-xml-rpc-em-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MD5 &#8220;Decrypter&#8221;, Java</title>
		<link>http://www.matbra.com/2009/06/23/md5-decrypter-java/</link>
		<comments>http://www.matbra.com/2009/06/23/md5-decrypter-java/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 01:00:57 +0000</pubDate>
		<dc:creator>Matheus (X-warrior) Bratfisch</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[Programação Concorrente]]></category>
		<category><![CDATA[brute force]]></category>
		<category><![CDATA[computação distribuida]]></category>
		<category><![CDATA[exercicios]]></category>
		<category><![CDATA[força bruta]]></category>
		<category><![CDATA[md5]]></category>

		<guid isPermaLink="false">http://www.matbra.com/?p=331</guid>
		<description><![CDATA[Boa noite, Nas aulas de programação concorrente o professor passou uma introdução de Programação Distribuida e pediu que nós criassemos algo que utilizasse ela. Então eu sugeri ao meu colega Olav para implementarmos um &#8220;quebrador&#8221; de senha por força bruta. O mesmo funciona da seguinte maneira, existe um master onde os slaves se conectam, o [...]]]></description>
			<content:encoded><![CDATA[<p>Boa noite, </p>
<p>Nas aulas de programação concorrente o professor passou uma introdução de Programação Distribuida e pediu que nós criassemos algo que utilizasse ela. Então eu sugeri ao meu colega Olav para implementarmos um &#8220;quebrador&#8221; de senha por força bruta. O mesmo funciona da seguinte maneira, existe um master onde os slaves se conectam, o master informa a string a ser quebrada e qual faixa de caracteres o slave deve tentar. Após terminar aquela faixa caso ele não obtenha sucesso o slave recebe uma nova faixa, caso ele encontre, ele informa o master qual a string utilizada para gerar tal MD5. </p>
<p><a href="http://www.matbra.com/?attachment_id=330">Implementação do &#8220;MD5 Decrypter&#8221;<br />
</a></p>
<p>Existem muitas coisas que ainda podem ser aperfeiçoadas nesse programa como:<br />
- Não precisar um número fixo de Slaves. Aceitar todos que forem se conectando em tempo real.<br />
- Melhor distribuição de faixas. </p>
<p>Ele pode ser praticamente o inicio de um programa de Força Bruta Distribuida, que já devem existir vários por ai.</p>
<p>Espero que goste,<br />
Matheus</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matbra.com/2009/06/23/md5-decrypter-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exercício Estacionamento, Java, Programação Concorrente.</title>
		<link>http://www.matbra.com/2009/06/22/exercicio-estacionamento-java-programacao-concorrente/</link>
		<comments>http://www.matbra.com/2009/06/22/exercicio-estacionamento-java-programacao-concorrente/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 21:12:28 +0000</pubDate>
		<dc:creator>Matheus (X-warrior) Bratfisch</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[Programação Concorrente]]></category>
		<category><![CDATA[exercicios]]></category>

		<guid isPermaLink="false">http://www.matbra.com/?p=325</guid>
		<description><![CDATA[Boa tarde, Semana passada fiz a última prova de Programação Concorrente deste semestre. O problema que devia se solucionar era o seguinte: O estacionamento de uma universidade possui 30 vagas. Enquanto o mesmo possue vagas, não existe prioridade para quem estaciona. Quando o mesmo está cheio, forma-se uma fila, onde professores possuem a mais alta [...]]]></description>
			<content:encoded><![CDATA[<p>Boa tarde, </p>
<p>Semana passada fiz a última prova de Programação Concorrente deste semestre. O problema que devia se solucionar era o seguinte: </p>
<blockquote><p> O estacionamento de uma universidade possui 30 vagas. Enquanto o mesmo possue vagas, não existe prioridade para quem estaciona. Quando o mesmo está cheio, forma-se uma fila, onde professores possuem a mais alta prioridade, seguido pelos funcionarios e após os alunos. Utilize java com Threads para &#8220;simular&#8221; este problema. Utilize 10 professores, 15 funcionários, 30 alunos.</p></blockquote>
<p>O Professor Mazzucco, disponibilizou uma implementação do mesmo que vou disponibilizar para vocês. </p>
<p><a href="http://www.matbra.com/?attachment_id=326">Implementação problema estacionamento em Java</a></p>
<p>Matheus</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matbra.com/2009/06/22/exercicio-estacionamento-java-programacao-concorrente/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cliente e Servidor, Java XML-RPC</title>
		<link>http://www.matbra.com/2009/05/16/cliente-e-servidor-java-xml-rpc/</link>
		<comments>http://www.matbra.com/2009/05/16/cliente-e-servidor-java-xml-rpc/#comments</comments>
		<pubDate>Sat, 16 May 2009 03:42:14 +0000</pubDate>
		<dc:creator>Matheus (X-warrior) Bratfisch</dc:creator>
				<category><![CDATA[Aprendendo]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[cliente]]></category>
		<category><![CDATA[servidor]]></category>
		<category><![CDATA[xmlrpc]]></category>

		<guid isPermaLink="false">http://www.matbra.com/?p=245</guid>
		<description><![CDATA[Boa noite, Como havia comentado a algum tempo atrás, estava trabalhando com um cliente XML-RPC em Java, durante a fase de desenvolvimento do mesmo tive que criar um servidor XML-RPC hipotetico para testar as funcionalidades do cliente, enquanto o servidor certo ainda não estava disponivel para minha pessoa. Resumidamente para você que não conhece XML-RPC [...]]]></description>
			<content:encoded><![CDATA[<p>Boa noite, </p>
<p>Como havia comentado a algum tempo atrás, estava trabalhando com um cliente XML-RPC em Java, durante a fase de desenvolvimento do mesmo tive que criar um servidor XML-RPC hipotetico para testar as funcionalidades do cliente, enquanto o servidor certo ainda não estava disponivel para minha pessoa.</p>
<p>Resumidamente para você que não conhece XML-RPC ele é um &#8220;formato&#8221; , um &#8220;jeito&#8221;, não sei ao certo a palavra certa para definir agora, onde você cria um servidor e o mesmo quando requisitado faz as operações necessarias e retorna um resultado. Um exemplo seria, você tem um código de criptografia que funciona MUITO bem em C, mas seu sistema é todo em Java, você poderia criar um Cliente JAVA e um Servidor C onde o Java faria requisição para Criptografar as coisas. Talvez utilizar XML-RPC de Java para Java possa ser meio estranho, mas quando os serviços estão distantes, pode ser algo util. </p>
<p>Para começar a mexer com o XML-RPC no Java eu utilizei o <a href="http://www.apache.org/dyn/closer.cgi/ws/xmlrpc/" target="_blank">apache xml-rpc</a>. Após isso apenas desenvolvi.</p>
<p>Baixe os <a href="http://www.matbra.com/?attachment_id=247">exemplos cliente e servidor xml-rpc em java</a>.</p>
<p>Servidor: </p>
<blockquote><p>package xmlrpc;</p>
<p>import org.apache.xmlrpc.server.PropertyHandlerMapping;<br />
import org.apache.xmlrpc.server.XmlRpcServer;<br />
import org.apache.xmlrpc.webserver.WebServer;</p>
<p>public class ServidorXMLRPCParaTestes {</p>
<p>	private static ServidorXMLRPCParaTestes euMesmo = null;</p>
<p>	private ServidorXMLRPCParaTestes() {<br />
		try {<br />
			WebServer server = new WebServer(8185); // Cria um servidor na porta 8185<br />
			XmlRpcServer servidor = server.getXmlRpcServer(); // Pega o servidor XmlRpc<br />
			PropertyHandlerMapping phm = new PropertyHandlerMapping();<br />
			phm.addHandler(&#8220;Calc&#8221;, Calculadora.class); // Adiciona um novo &#8220;handler&#8221; ao PHM<br />
			servidor.setHandlerMapping(phm); // Define o handler no servidor<br />
			server.start(); // inicia o servidor.<br />
		} catch (Exception exception) {<br />
			System.err.println(&#8220;JavaServer: &#8221; + exception);<br />
		}<br />
	}</p>
<p>	public static ServidorXMLRPCParaTestes obterInstÃ¢ncia() {<br />
		if (euMesmo == null)<br />
			euMesmo = new ServidorXMLRPCParaTestes();<br />
		return euMesmo;<br />
	}<br />
}
</p></blockquote>
<p>- Eu utilizeo o obterInstancia para não poder existir mais de um ServidorXMLRPC <img src='http://www.matbra.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
- O handler faz o seguinte, quando for chamado Calc.METODO no servidor ele irá buscar dentro do Calculadora.class </p>
<p><span id="more-245"></span></p>
<p>Handler Calculadora: </p>
<blockquote><p>package xmlrpc;</p>
<p>public class Calculadora {</p>
<p>	public int soma(int x, int y) {<br />
		return x + y;<br />
	}<br />
	public int subtracao(int x, int y) {<br />
		return x &#8211; y;<br />
	}</p>
<p>}</p></blockquote>
<p>Cliente XML-RPC generico:</p>
<blockquote><p>package xmlrpc;</p>
<p>import java.net.URL;<br />
import org.apache.xmlrpc.*;<br />
import org.apache.xmlrpc.client.XmlRpcClient;<br />
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;</p>
<p>public class ClienteXmlRpc {</p>
<p>	private static final String urlServidor = &#8220;http://localhost:8185&#8243;; //DEFINE A URL DO SERVIDOR<br />
	private XmlRpcClient xmlrpc;</p>
<p>    public ClienteXmlRpc() {<br />
    	try {<br />
    		XmlRpcClientConfigImpl configuraÃ§Ã£oCliente = new XmlRpcClientConfigImpl();<br />
    		configuraÃ§Ã£oCliente.setServerURL(new URL(urlServidor)); </p>
<p>    		xmlrpc = new XmlRpcClient();<br />
    		xmlrpc.setConfig(configuraÃ§Ã£oCliente);</p>
<p>    	} catch (Exception exception) {<br />
    		exception.printStackTrace();<br />
    	}<br />
    }</p>
<p>    public Object executar(String comando, Object[] parametros) {<br />
    	try {<br />
			Object resposta = xmlrpc.execute(comando, parametros);<br />
			return resposta;<br />
		} catch (XmlRpcException e) {<br />
			e.printStackTrace();<br />
			return null;<br />
		}<br />
    }</p>
<p>}</p></blockquote>
<p>- Acredito que o Cliente XML-RPC e o Cliente são auto-explicativos. Qualquer duvida entre em contato. </p>
<p>CalculadoraCliente: </p>
<blockquote><p>package cliente;</p>
<p>import xmlrpc.ClienteXmlRpc;</p>
<p>public class CalculadoraCliente {<br />
	private ClienteXmlRpc cliente;</p>
<p>	public CalculadoraCliente() {<br />
		cliente = new ClienteXmlRpc();<br />
	}</p>
<p>	public int soma(int x, int y) {<br />
		Object[] parametros = new Object[]{new Integer(x), new Integer(y)};<br />
		Integer resultado = (Integer) cliente.executar(&#8220;Calc.soma&#8221;, parametros);<br />
		return resultado;<br />
	}</p>
<p>	public int subtracao(int x, int y) {<br />
		Object[] parametros = new Object[]{new Integer(x), new Integer(y)};<br />
		Integer resultado = (Integer) cliente.executar(&#8220;Calc.subtracao&#8221;, parametros);<br />
		return resultado;<br />
	}<br />
}
</p></blockquote>
<p>Para rodar os mesmos e testar gerei 2 classes com main e executei as mesmas (executando primeiro o servidor é claro)</p>
<p>RodarServidor:</p>
<blockquote><p>import xmlrpc.ServidorXMLRPCParaTestes;</p>
<p>public class RodarServidor {</p>
<p>	/**<br />
	 * @param args<br />
	 */<br />
	public static void main(String[] args) {<br />
		// TODO Auto-generated method stub<br />
		ServidorXMLRPCParaTestes Servidor = ServidorXMLRPCParaTestes.obterInstÃ¢ncia();<br />
	}</p>
<p>}
</p></blockquote>
<p>RequisicaoCliente:</p>
<blockquote><p>import cliente.CalculadoraCliente;</p>
<p>public class RequisicaoCliente {</p>
<p>	/**<br />
	 * @param args<br />
	 */<br />
	public static void main(String[] args) {<br />
		CalculadoraCliente x = new CalculadoraCliente();<br />
		System.out.println(x.soma(1, 1));<br />
	}</p>
<p>}
</p></blockquote>
<p>Abraços,<br />
Matheus</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matbra.com/2009/05/16/cliente-e-servidor-java-xml-rpc/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

