<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en" xml:base="http://www.lucianosilva.com/wp-atom.php">
	<title type="text">WEBCODELOG</title>
	<subtitle type="text">free codes, enjoy</subtitle>

	<updated>2010-02-14T23:20:44Z</updated>
	<generator uri="http://wordpress.org/" version="2.9.1">WordPress</generator>

	<link rel="alternate" type="text/html" href="http://www.lucianosilva.com" />
	<id>http://www.lucianosilva.com/feed/atom/</id>
	

			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/lucianosilva" /><feedburner:info uri="lucianosilva" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nd/2.0/" /><logo>http://creativecommons.org/images/public/somerights20.gif</logo><entry>
		<author>
			<name>Luciano</name>
						<uri>http://www.lucianosilva.com</uri>
					</author>
		<title type="html"><![CDATA[Autenticação e Autorização com a API do Twitter]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lucianosilva/~3/frM9on7QAWc/" />
		<id>http://www.lucianosilva.com/?p=366</id>
		<updated>2010-02-14T23:20:44Z</updated>
		<published>2010-02-14T00:27:01Z</published>
		<category scheme="http://www.lucianosilva.com" term="Programação" /><category scheme="http://www.lucianosilva.com" term="Redes Sociais" /><category scheme="http://www.lucianosilva.com" term="api" /><category scheme="http://www.lucianosilva.com" term="autenticação" /><category scheme="http://www.lucianosilva.com" term="json" /><category scheme="http://www.lucianosilva.com" term="twitter" />		<summary type="html"><![CDATA[O Twitter veio para ficar e isto eu não discuto e, este blog quando empolgado com o micro-blog público um exemplo simples de como utilizar o Twitter4j. Agora estou tentando mostrar uma forma mais avançada de comunicação com o Twitter, utilizando o modo de autenticação/autorização.
No exemplo anterior além de obter o Customer Key e Secret, [...]]]></summary>
		<content type="html" xml:base="http://www.lucianosilva.com/2010/02/13/autenticacao-e-autorizacao-com-a-api-do-twitter/">&lt;p&gt;O Twitter veio para ficar e isto eu não discuto e, este blog quando empolgado com o micro-blog&lt;a href="http://www.lucianosilva.com/2009/01/21/conhecendo-a-api-do-twitter/"&gt; público um exemplo&lt;/a&gt; simples de como utilizar o Twitter4j. Agora estou tentando mostrar uma forma mais avançada de comunicação com o Twitter, utilizando o modo de autenticação/autorização.&lt;/p&gt;
&lt;p&gt;No exemplo anterior além de obter o Customer Key e Secret, você irá precisar do Usuário e Senha do Twitter, para assim obter a comunicação devida. Bem, nem todo mundo sente-se disposto a oferecer seus dados confidênciais para um software ou site qualquer. Portanto, este novo exemplo mostrará como você deve comunicar com o Twitter deixando a autenticação por parte do micro-blog e autorização por parte do próprio usuário.&lt;/p&gt;
&lt;p&gt;Dando sequência ao assunto, inicialmente você precisará &lt;a href="https://twitter.com/apps/new"&gt;registrar uma aplicação&lt;/a&gt; no  Twitter caso ainda não a tenha, guarde os dados Consumer Key e Secret. Existem dois tipos de aplicações a Client (Desktop) e Browser (Web), sendo que a segunda precisará de uma url que receberá o Token de autenticação.&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration: line-through;"&gt;&lt;span style="color: #ff0000;"&gt;Infelizmente, este post foi prejudicado pela falta de um web hosting que suporte Java, a Locaweb (atual host deste blog) cobra valores mensais absurdos, que inviabiliza blogs com intuito simplesmente acadêmico, como este, de realizar testes utilizando a linguagem Java.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Consegui descobrir lendo &lt;a href="http://code.google.com/p/twitter-api/issues/detail?id=534" target="_blank"&gt;aqui&lt;/a&gt;, &lt;a href="http://www.tonyamoyal.com/2009/08/17/how-to-quickly-set-up-a-test-for-twitter-oauth-authentication-from-your-local-machine/" target="_blank"&gt;aqui&lt;/a&gt; e&lt;a href="http://www.martinadamek.com/2010/01/28/twitter-oauth-on-java-appengine/" target="_blank"&gt; aqui&lt;/a&gt; que é possível configurar o seu localhost como Callback URL no Twitter, assim não será necessário ter um site publicado na internet para seus testes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Web Autenticação&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Durante o registro você irá informar o tipo de aplicação Browser e uma Callback URL, é para onde o navegador será redirecionado após a autorização do usuário. Já o campo Application Website, é a origem da sua aplicação web, ou seja, serão aceitas as chamadas feitas apenas a partir deste site.&lt;/p&gt;
&lt;p&gt;O código abaixo irá fazer iniciar o processo de autenticação, o navegador vai ser redirecionado para a página de login do Twitter.&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
 final String CALLBACK_URL     = &amp;quot;http://127.0.0.1:8080/BlogTwitt4u/&amp;quot;; // a mesma configurada na aplicação
 final String CUSTOMER_KEY     = &amp;quot;6MWotGxvuNVGfK4lDqAqhg&amp;quot;;
 final String CUSTOMER_SEC     = &amp;quot;oRH0YviLum2Rrii25ePj0DEk6VnmNjoTG0ESUpqSY&amp;quot;;

 OAuthConsumer consumer         = new DefaultOAuthConsumer(CUSTOMER_KEY, CUSTOMER_SEC);
 OAuthProvider provider         = new DefaultOAuthProvider( &amp;quot;https://twitter.com/oauth/request_token&amp;quot;,
 &amp;quot;https://twitter.com/oauth/access_token&amp;quot;,
 &amp;quot;https://twitter.com/oauth/authorize&amp;quot; );

 //
 // Solicita a autorização
 //
 String authUrl = provider.retrieveRequestToken(consumer, CALLBACK_URL);
 session.setAttribute(&amp;quot;token&amp;quot;,         consumer.getToken());
 session.setAttribute(&amp;quot;tokenSecret&amp;quot;, consumer.getTokenSecret());

 //
 //
 // Redireciona para  o Twitter solicitar o Usuário e Senha, e Autorização para a aplicação
 // Em seguida será redirecionado para a callback url
 response.sendRedirect(authUrl);
&lt;/pre&gt;
&lt;p&gt;Após fazer o login e autorizar a sua aplicação, o navegador será redirecionado novamente para o seu site, com dois parâmetros preenchidos, como esta abaixo:&lt;/p&gt;
&lt;pre class="brush: java;"&gt;

http://127.0.0.1:8080/BlogTwitt4u/?oauth_token=RQVPENBxDbQuI1bJ1rjELuVSyZhMYqr8Fcs5eqyZw&amp;amp;oauth_verifier=a8FuEeitfdCR2IfgisfsHopMAUevs4cDyRWkbZz4
&lt;/pre&gt;
&lt;p&gt;Pronto, ai você já pode colher as informações que desejar, veja:&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
 if( oauthVerifier!=null &amp;amp;&amp;amp; !oauthVerifier.trim().equals(&amp;quot;&amp;quot;) ){

 String token            = (String) session.getAttribute(&amp;quot;token&amp;quot;);
 String tokenSecret        = (String) session.getAttribute(&amp;quot;tokenSecret&amp;quot;);

 //
 consumer.setTokenWithSecret(token, tokenSecret);

 //
 //
 provider.setOAuth10a(true);
 provider.retrieveAccessToken(consumer, oauthVerifier);

 out.println(&amp;quot;&amp;lt;h1&amp;gt;AUTORIZADO!&amp;lt;/h1&amp;gt;&amp;quot;);
 out.println(&amp;quot;&amp;lt;pre&amp;gt;&amp;quot;);
 out.println(&amp;quot;token:\t\t&amp;quot; + consumer.getToken());
 out.println(&amp;quot;tokenSecret:\t\t&amp;quot; + consumer.getTokenSecret());
 out.println(&amp;quot;oauthVerifier:\t\t&amp;quot; + oauthVerifier);
 out.println(&amp;quot;oauthToken:\t\t&amp;quot; + oauthToken);

 //
 //
 URL url                         = new URL(&amp;quot;http://twitter.com/statuses/mentions.json&amp;quot;);
 HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
 consumer.sign( urlConnection );
 urlConnection.connect();

 BufferedReader in    = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()) );
 String inputLine     = &amp;quot;&amp;quot;;
 String content       = &amp;quot;&amp;quot;;
 while ((inputLine = in.readLine()) != null){
     content += inputLine;
 }// while end
 in.close();

 int statusCode = urlConnection.getResponseCode();
 out.println(&amp;quot;statusCode: &amp;quot; + statusCode);
 out.println(&amp;quot;&amp;lt;/pre&amp;gt;&amp;quot;);

 JSONArray json = JSONArray.fromObject( content );

 out.println(&amp;quot;&amp;lt;hr&amp;gt;&amp;quot;);
 out.println(&amp;quot;&amp;lt;h3&amp;gt;Mentions&amp;lt;/h3&amp;gt;&amp;quot;);
 out.println(&amp;quot;&amp;lt;pre&amp;gt;&amp;quot;);
 for(int i=0; i&amp;lt;json.size(); i++){

 JSONObject obj = (JSONObject) json.get(i);
 if( obj!=null ){
   // JSONString str = (JSONString) obj.get(&amp;quot;text&amp;quot;);
   out.println(obj.getString(&amp;quot;text&amp;quot;));
 }

 }// for end
 out.println(&amp;quot;&amp;lt;/pre&amp;gt;&amp;quot;);

 }
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Desktop Autenticação&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Este é um exemplo comum, muito conhecido em qualquer pesquisa no Google, para utiliza-lo você deve ter uma aplicação do tipo Client.&lt;/p&gt;
&lt;p&gt;O código pede para que o usuário abra o navegador, acesse uma determinada URL e depois informe o código númerico no programa, nada eficaz né? Muitos programadores utilizam uma maneira nada elegante que é a de &amp;#8220;hackear&amp;#8221; esta página e pegar o código automáticamente, facilitando a vida de todo mundo. Faça isto por sua conta e risco. Perceba que quando comparado ao código de autenticação Web a única mudança é a utilização do código PIN, que não necessário informar na web.&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
&amp;lt;pre&amp;gt;
&amp;lt;pre&amp;gt;&amp;lt;pre&amp;gt;// Lembre-se de modificar estes valores para os seus
//
final String CUSTOMER_KEY = &amp;quot;6MWotGxvuNVGfK4lDq&amp;quot;;
final String CUSTOMER_SEC = &amp;quot;oRH0YviLum2Rrii25ePj0DEk6VnmNjoTG0ESUp&amp;quot;;

try {
HttpURLConnection request = null;
URL url = null;
OAuthConsumer consumer = new DefaultOAuthConsumer(CUSTOMER_KEY, CUSTOMER_SEC);

OAuthProvider provider = new DefaultOAuthProvider( &amp;lt;a href=&amp;quot;https://twitter.com/oauth/request_token&amp;quot;&amp;gt;https://twitter.com/oauth/request_token&amp;lt;/a&amp;gt;,
&amp;quot;https://twitter.com/oauth/access_token&amp;quot;,
&amp;quot;https://twitter.com/oauth/authorize&amp;quot;);

String authUrl = provider.retrieveRequestToken(consumer, OAuth.OUT_OF_BAND);
//
// URL Que irá retornar o PIN, necessário para formar o Token
System.out.println(authUrl);

String pinCode = JOptionPane.showInputDialog(&amp;quot;Acesse o endereço:\n&amp;quot; + authUrl + &amp;quot;\nE Informe o PIN:&amp;quot;);
System.out.println(&amp;quot;PIN Code: &amp;quot; + pinCode);

//
provider.retrieveAccessToken(consumer, pinCode);

String tokenKey = consumer.getToken();
String tokenSec = consumer.getTokenSecret();

System.out.println(&amp;quot;Token Key : &amp;quot; + tokenKey);
System.out.println(&amp;quot;Token Sec : &amp;quot; + tokenSec);

consumer.setTokenWithSecret(tokenKey, tokenSec);

url  = new URL(&amp;lt;a href=&amp;quot;http://twitter.com/statuses/mentions.xml&amp;quot;&amp;gt;http://twitter.com/statuses/mentions.xml&amp;lt;/a&amp;gt;);
 request = (HttpURLConnection) url.openConnection();
// sign the request
consumer.sign(request);

// send the request
request.connect();

// response status should be 200 OK
int statusCode = request.getResponseCode();
System.out.println(&amp;quot;Status Code : &amp;quot; + statusCode);

} catch (OAuthMessageSignerException e) {
e.printStackTrace();
} catch (OAuthNotAuthorizedException e) {
e.printStackTrace();
} catch (OAuthExpectationFailedException e) {
e.printStackTrace();
} catch (OAuthCommunicationException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
&lt;/pre&gt;
&lt;p&gt;Foram utilizadas as seguintes bibliotecas:&lt;br /&gt;
&lt;a href="http://commons.apache.org/beanutils/"&gt; Apache Commons BeansUtil 1.8&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://commons.apache.org/codec/"&gt; Apache Commons Codec 1.4&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://hc.apache.org/httpclient-3.x/"&gt; Apache Http Client 3.1&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://commons.apache.org/lang/"&gt; Apache Commons Lang 2.4&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://ezmorph.sourceforge.net/"&gt;ezmorph 1.0.6&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://json-lib.sourceforge.net/"&gt; json-lib 2.3&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Faça &lt;a href="http://www.lucianosilva.com/download/BlogTwitt4u.zip"&gt;download do projeto&lt;/a&gt;, que contêm ambos exemplos de autenticação.&lt;/p&gt;
&lt;!-- boo-widget start --&gt;
					&lt;script type="text/javascript"&gt;
					bb_keywords = "batman, ben10, anime, simpsons";
					bb_bid  = "41213";
					bb_lang  = "pt-BR";
					bb_name = "custom";bb_limit = "4";bb_format = "bbm";&lt;/script&gt;
					&lt;script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"&gt;&lt;/script&gt;
					&lt;!-- boo-widget end --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gb3tfNnH8bL0rsmfC5BKS5n7lIU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gb3tfNnH8bL0rsmfC5BKS5n7lIU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gb3tfNnH8bL0rsmfC5BKS5n7lIU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gb3tfNnH8bL0rsmfC5BKS5n7lIU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lucianosilva/~4/frM9on7QAWc" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.lucianosilva.com/2010/02/13/autenticacao-e-autorizacao-com-a-api-do-twitter/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.lucianosilva.com/2010/02/13/autenticacao-e-autorizacao-com-a-api-do-twitter/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.lucianosilva.com/2010/02/13/autenticacao-e-autorizacao-com-a-api-do-twitter/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luciano</name>
						<uri>http://www.lucianosilva.com</uri>
					</author>
		<title type="html"><![CDATA[Usando a API LastFm em Java]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lucianosilva/~3/fN13AK68-iw/" />
		<id>http://www.lucianosilva.com/?p=339</id>
		<updated>2010-02-02T00:41:37Z</updated>
		<published>2010-02-02T00:41:37Z</published>
		<category scheme="http://www.lucianosilva.com" term="Programação" /><category scheme="http://www.lucianosilva.com" term="Redes Sociais" /><category scheme="http://www.lucianosilva.com" term="api" /><category scheme="http://www.lucianosilva.com" term="Java" /><category scheme="http://www.lucianosilva.com" term="lastfm" />		<summary type="html"><![CDATA[A LastFm é a queridinha das rádios online, mesmo com diversos concorrentes de alto nível como iLike, Pandora, Imeem, e outros tantos, aqui no Brasil a LastFm é um grande sucesso, seus milhões de usuários brasileiros ignoraram o bloqueio de alguns recursos e continuam fazendo scrobbling de seus áudios diáriamente.
Além de um database music, o [...]]]></summary>
		<content type="html" xml:base="http://www.lucianosilva.com/2010/02/01/usando-a-api-lastfm-em-java/">&lt;p&gt;A LastFm é a queridinha das rádios online, mesmo com diversos concorrentes de alto nível como iLike, Pandora, Imeem, e outros tantos, aqui no Brasil a LastFm é um grande sucesso, seus milhões de usuários brasileiros ignoraram o bloqueio de alguns recursos &lt;em&gt;e continuam fazendo scrobbling &lt;/em&gt;de seus áudios diáriamente.&lt;/p&gt;
&lt;p&gt;Além de um database music, o LastFm é uma rede social e grande parte de suas informações são públicas e podem ser acessadas facilmente através de sua API.&lt;br /&gt;
Vamos dar inicio a um exemplo de como consumir os dados utilizando a library para Java &lt;a href="http://code.google.com/p/lastfm-java/"&gt;lastfm-java&lt;/a&gt;. Antes de tudo, se você não tiver uma conta no LastFm, crie-a agora e depois obtenha a &lt;a href="http://www.last.fm/api"&gt;API Key&lt;/a&gt;. Neste mesmo link você encontrará a documentação da API, que detalha claramente a funcionalidade de cada método disponível e como é o seu acesso e se necessita ou não de autenticação.&lt;/p&gt;
&lt;p&gt;Em nosso primeiro exemplo vamos fazer uma página web que irá listar as &lt;strong&gt;últimas faixas ouvidas &lt;/strong&gt;e a &lt;strong&gt;lista de amigos&lt;/strong&gt; de um usuário específico, com isto, você perceberá que nenhuma autenticação é necessária pois os dados são públicos.&lt;/p&gt;
&lt;p&gt;Criei a classe LastFmClient, para facilitar os casts necessários e centralizar as chamadas da API.&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
public class LastFmClient {
// altere para a sua api key
 private static final String APIKEY = &amp;quot;XyZaBc001&amp;quot;;
 private String uName = null;

/**
 *
 * @param uName
 */
 public LastFmClient(String uName){
 this.uName = uName;
 }

/**
 *
 * @return User/Friends List
 */
 public ArrayList&amp;lt;User&amp;gt; getFriends(){
 return (ArrayList&amp;lt;User&amp;gt;) User.getFriends(uName, APIKEY);
 }

 /**
 *
 * @return Tracks List
 */
 public ArrayList&amp;lt;Track&amp;gt; getTracks(){
 return (ArrayList&amp;lt;Track&amp;gt;) User.getRecentTracks(uName, APIKEY);
 }
}
&lt;/pre&gt;
&lt;p&gt;Isto é o suficiente para você montar a lista como descrito acima, veja:&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
 String userName = request.getParameter(&amp;quot;username&amp;quot;);
 if( userName!=null &amp;amp;&amp;amp; !userName.trim().equals(&amp;quot;&amp;quot;) ){
 // instancia a classe de backend
 LastFmClient client = new LastFmClient(userName);

 // seu código aqui
 }
&lt;/pre&gt;
&lt;p&gt;Ouvidas recentemente.&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;1&amp;quot;&amp;gt;
&amp;lt;% for(Track t : tracks){ %&amp;gt;
&amp;lt;tr&amp;gt;
 &amp;lt;td valign=&amp;quot;top&amp;quot; align=&amp;quot;left&amp;quot;&amp;gt;
 &amp;lt;br/&amp;gt;&amp;lt;strong&amp;gt;&amp;lt;%=t.getAlbum() %&amp;gt;&amp;lt;/strong&amp;gt;
 &amp;lt;br/&amp;gt;&amp;lt;em&amp;gt;&amp;lt;%=t.getArtist() %&amp;gt;&amp;lt;/em&amp;gt;
 &amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;% }// for end tracks %&amp;gt;
&amp;lt;/table&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Lista de amigos.&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;1&amp;quot;&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;%
 ArrayList&amp;lt;User&amp;gt; friends = client.getFriends();
 int count = 1;
 for(User f : friends){
%&amp;gt;
 &amp;lt;td valign=&amp;quot;top&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;
 &amp;lt;% if( f.getImageURL()!=null ){ %&amp;gt;&amp;lt;img src=&amp;quot;&amp;lt;%= f.getImageURL() %&amp;gt;&amp;quot;&amp;gt;&amp;lt;% } %&amp;gt;
 &amp;lt;br&amp;gt;&amp;lt;strong&amp;gt;&amp;lt;%=f.getName() %&amp;gt;&amp;lt;/strong&amp;gt;
 &amp;lt;br&amp;gt;&amp;lt;a href=&amp;quot;&amp;lt;%= f.getUrl() %&amp;gt;&amp;quot;&amp;gt;&amp;lt;%= f.getUrl() %&amp;gt;&amp;lt;/a&amp;gt;
 &amp;lt;br/&amp;gt;
 &amp;lt;/td&amp;gt;
&amp;lt;%
 if( count%5==0 ) out.print(&amp;quot;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;quot;);
 count++;

 }// for end friends

}//
%&amp;gt;
&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://www.lucianosilva.com/download/BlogLastFmWeb.zip"&gt;Faça download do código completo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Pronto, você conseguiu acessar dados do LastFm, usando o caminho correto e fácil, sem autenticação. Mas alguns dados são restritos e necessitam da autorização do usuário, informações básicas como a quantidade de músicas ouvidas, data de cadastro, nome, etc. são de acesso restrito.&lt;/p&gt;
&lt;!-- boo-widget start --&gt;
					&lt;script type="text/javascript"&gt;
					bb_keywords = "música, cd, dvd, bluray";
					bb_bid  = "41213";
					bb_lang  = "pt-BR";
					bb_name = "custom";bb_limit = "4";bb_format = "bbm";&lt;/script&gt;
					&lt;script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"&gt;&lt;/script&gt;
					&lt;!-- boo-widget end --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/UNAkvyiaHnlr9yKEhYmB1btQDos/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UNAkvyiaHnlr9yKEhYmB1btQDos/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/UNAkvyiaHnlr9yKEhYmB1btQDos/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UNAkvyiaHnlr9yKEhYmB1btQDos/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lucianosilva/~4/fN13AK68-iw" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.lucianosilva.com/2010/02/01/usando-a-api-lastfm-em-java/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.lucianosilva.com/2010/02/01/usando-a-api-lastfm-em-java/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.lucianosilva.com/2010/02/01/usando-a-api-lastfm-em-java/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luciano</name>
						<uri>http://www.lucianosilva.com</uri>
					</author>
		<title type="html"><![CDATA[crontab]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lucianosilva/~3/VlqTOR_zqQU/" />
		<id>http://www.lucianosilva.com/?p=350</id>
		<updated>2010-01-26T13:30:49Z</updated>
		<published>2010-01-26T01:35:27Z</published>
		<category scheme="http://www.lucianosilva.com" term="Ferramentas" /><category scheme="http://www.lucianosilva.com" term="Sistema Operacional" /><category scheme="http://www.lucianosilva.com" term="crontab" />		<summary type="html"><![CDATA[Algumas coisas só recebem o devido valor quando você precisa realmente delas!
Não é a primeira vez que utilizei o cron, muito pelo contrário já fiz uso desta ferramenta diversas vezes, mas na maioria delas alguma pessoa me auxiliou para montar o agendamento, porém, hoje foi diferente, então aproveitei para estudá-la um pouco mais.
Os parâmetros são [...]]]></summary>
		<content type="html" xml:base="http://www.lucianosilva.com/2010/01/25/crontab/">&lt;p&gt;Algumas coisas só recebem o devido valor quando você precisa realmente delas!&lt;/p&gt;
&lt;p&gt;Não é a primeira vez que utilizei o cron, muito pelo contrário já fiz uso desta ferramenta diversas vezes, mas na maioria delas alguma pessoa me auxiliou para montar o agendamento, porém, hoje foi diferente, então aproveitei para estudá-la um pouco mais.&lt;/p&gt;
&lt;p&gt;Os parâmetros são separados por espaço nesta sequência&lt;strong&gt; mm hh dd MM ss &lt;em&gt;&amp;lt;script&amp;gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;mm = minuto (0-59)&lt;br /&gt;
hh = hora (0-23)&lt;br /&gt;
dd = dia (1-31)&lt;br /&gt;
MM = mes (1-12)&lt;br /&gt;
ss = dia da semana (0-6)&lt;br /&gt;
script = comando a ser executado.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;A linha de comando abaixo para o cron, agenda uma chamada de programa  para ocorrer&lt;strong&gt; a cada dez minutos, de segunda a sexta, das 06h00 as  23h00, durante todo o ano&lt;/strong&gt;.&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
0-59/10 06-23 * 1-12 1-5 /u01/BugzillaOracleInterfaceNinecon/run.sh
&lt;/pre&gt;
&lt;p&gt;Perceba que na linha de comando utilizada como exemplo, fiz uma divisão 0-59/10 isto significa a cada minuto múltiplo de 10 (ex: 09:10, 09:20, 09:30, etc.) o comando será executado. Se ao crontrário tivesse sido especificado apenas o número 10, o cron iria executar no décimo minuto do horário (ex: 13:10, 14:10, 15:10, etc.).&lt;/p&gt;
&lt;p&gt;A vírgula corresponde a um &amp;#8220;E&amp;#8221;, então 10,20, programa a execução para as 10h00 e 12h00 apenas, já o hífen a um &amp;#8220;Intervalo&amp;#8221;, logo 06-23, diz que será executado entre 06h00 as 23h00.&lt;/p&gt;
&lt;p&gt;Por fim o (*) asterisco  corresponde a &amp;#8220;Todos&amp;#8221;, e pode ser colocado em qualquer um dos parâmetros.&lt;/p&gt;
&lt;p&gt;Você encontrará mais sobre o assunto com uma simples pesquisa no Google, veja &lt;a href="http://www.linuxweblog.com/crotab-tutorial"&gt;aqui&lt;/a&gt; e &lt;a href="http://pt.wikipedia.org/wiki/Crontab"&gt;aqui&lt;/a&gt; também.&lt;/p&gt;
&lt;!-- boo-widget start --&gt;
					&lt;script type="text/javascript"&gt;
					bb_keywords = "linux, crontab, redes";
					bb_bid  = "41213";
					bb_lang  = "pt-BR";
					bb_name = "custom";bb_limit = "4";bb_format = "bbm";&lt;/script&gt;
					&lt;script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"&gt;&lt;/script&gt;
					&lt;!-- boo-widget end --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/P7kaLEvaaceoD9rrGYXFjQjsk5o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/P7kaLEvaaceoD9rrGYXFjQjsk5o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/P7kaLEvaaceoD9rrGYXFjQjsk5o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/P7kaLEvaaceoD9rrGYXFjQjsk5o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lucianosilva/~4/VlqTOR_zqQU" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.lucianosilva.com/2010/01/25/crontab/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.lucianosilva.com/2010/01/25/crontab/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.lucianosilva.com/2010/01/25/crontab/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luciano</name>
						<uri>http://www.lucianosilva.com</uri>
					</author>
		<title type="html"><![CDATA[Manipulando BLOB &#8211; MySQL vs. Oracle]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lucianosilva/~3/VNVttPgwuv0/" />
		<id>http://www.lucianosilva.com/?p=323</id>
		<updated>2009-11-22T13:21:10Z</updated>
		<published>2009-11-17T01:55:03Z</published>
		<category scheme="http://www.lucianosilva.com" term="Programação" /><category scheme="http://www.lucianosilva.com" term="Java" /><category scheme="http://www.lucianosilva.com" term="mysql" /><category scheme="http://www.lucianosilva.com" term="oracle" />		<summary type="html"><![CDATA[A missão de um programador em manipular arquivos e armazená-los no banco de dados já não é uma tarefa desafiadora a tempos, visto que é extremamente fácil encontrar exemplos internet a fora, aqui vou fazer mais um, em que o foco é demonstrar a diferença de se realizar o mesmo procedimento utilizando o MySQL e [...]]]></summary>
		<content type="html" xml:base="http://www.lucianosilva.com/2009/11/16/manipulando-blob-mysql-vs-oracle/">&lt;p&gt;A missão de um programador em manipular arquivos e armazená-los no banco de dados já não é uma tarefa desafiadora a tempos, visto que é extremamente fácil encontrar exemplos internet a fora, aqui vou fazer mais um, em que o foco é demonstrar a diferença de se realizar o mesmo procedimento utilizando o MySQL e Oracle.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Oracle&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Primeiramente vamos fazer o processo para gravar um arquivo qualquer no banco de dados.&lt;br /&gt;
Criação da tabela que será utilizada para armazenar os arquivos.&lt;/p&gt;
&lt;pre class="brush: sql;"&gt;

CREATE TABLE ARQUIVOS(
ID     NUMBER(4)      NOT NULL,
TIPO   VARCHAR2(20)   NULL,
ARQ    BLOB           DEFAULT EMPTY_BLOB() NOT NULL,
CONSTRAINT PKARQ PRIMARY KEY(ID)
)
&lt;/pre&gt;
&lt;p&gt;Perceba que o campo ARQ que irá guardar o binário, tem como valor default a propriedade EMPTY_BLOB() &amp;#8211; Retorna um LOB vazio, para ser usado como um indicador para INSERT ou UPDATE.&lt;/p&gt;
&lt;p&gt;No geral, o processo para inserir um campo LOB (BLOB ou CLOB) no Oracle é um pouco burocrático, feito em duas etapas. Primeiro deve-se inserir o registro setando o campo BLOB como EMPTY_BLOB, no em seguida finalizamos com um SELECT FOR UPDATE no campo &amp;#8220;LOB&amp;#8221; especifico para que o byte[] seja gravado.&lt;/p&gt;
&lt;pre class="brush: java;"&gt;

// Inserindo o empty_blob
//
String sql  = &amp;quot;INSERT INTO arquivos(id, tipo, arq) VALUES(1, ?, EMPTY_BLOB())&amp;quot;;
conn   = ConnOracle.getInstance().getConn();
pstmt1   = conn.prepareStatement(sql);
pstmt1.setString(1, &amp;quot;TEXT&amp;quot;);
pstmt1.execute();
&lt;/pre&gt;
&lt;p&gt;Este passo irá fazer com que um arquivo seja armazenado no banco.&lt;/p&gt;
&lt;pre class="brush: java;"&gt;

// Faz o select como for update
// Inserir o binário
//
String ins  = &amp;quot;SELECT arq FROM arquivos WHERE id = 1 FOR UPDATE&amp;quot;;
pstmt2  = conn.prepareStatement(ins);
rset  = pstmt2.executeQuery(ins);
while( rset.next() ){
Blob blob   = rset.getBlob(1);
// filePath eh a String com o caminho do arquivo a ser gravado

File file    = new File( filePath );
byte[] bbuf   = new byte[1024];
InputStream bin  = new FileInputStream( file );
// Realiza o cast especifico para o driver Oracle
OutputStream bout  = ((BLOB) blob).getBinaryOutputStream();

int bytesRead   = 0;
while( (bytesRead = bin.read(bbuf))!=-1 ){
bout.write(bbuf, 0, bytesRead);
}//

if( bout!=null ) bout.close();

}// end while
conn.commit();
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;strong&gt;2. MySQL&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;A estrutura da tabela muda pouco, o mais importante é que o campo para armazenar o arquivo é do tipo LONGBLOB, veja:&lt;/p&gt;
&lt;pre class="brush: sql;"&gt;
CREATE TABLE ARQUIVOS(
ID     INT(4)        NOT NULL,
TIPO   VARCHAR(20)   NULL,
ARQ    LONGBLOB      NOT NULL,
PRIMARY KEY(ID)
);
&lt;/pre&gt;
&lt;p&gt;Gravar um campo LONGBLOB no MySQL, é tão fácil quando gravar um int ou uma String, e eu não estou falando no sentido figurado.&lt;/p&gt;
&lt;pre class="brush: java;"&gt;   File file    = new File( filePath );
byte[] bytes  = getBytesFromFile( file );&amp;lt;/pre&amp;gt;
// Inserindo o longblob
//
String sql  = &amp;quot;INSERT INTO arquivos(id, tipo, arq) VALUES(1, ?, ?)&amp;quot;;
conn   = ConnMysql.getInstance().getConn();
pstmt   = conn.prepareStatement(sql);
pstmt.setString(1, &amp;quot;TEXT&amp;quot;);
pstmt.setBytes(2, bytes);
pstmt.execute();
&lt;/pre&gt;
&lt;p&gt;O método &lt;em&gt;getBytesFromFile()&lt;/em&gt; é uma função genérica para converter o File em byte[], e somente este último é necessário para gravar, fácil assim.&lt;/p&gt;
&lt;p&gt;Não posso deixar de indicar &lt;a href="http://javafree.uol.com.br/artigo/851262/Manipulando-campos-BLOB-e-CLOB-com-JDBC.html" target="_blank"&gt;este artigo&lt;/a&gt; completo e bem detalhado, escrito por &lt;em&gt;Giovane Kuhn&lt;/em&gt; do JavaFree.&lt;/p&gt;
&lt;p&gt;Espero que estes simples códigos sejam proveitosos, abaixo estão as duas classes utilizadas para este post.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.lucianosilva.com/download/ManipulandoBlob_OracleMysql.zip"&gt;Faça download das classes&lt;/a&gt;.&lt;/p&gt;
&lt;!-- boo-widget start --&gt;
					&lt;script type="text/javascript"&gt;
					bb_keywords = "apocalipse, futebol, história, brasil";
					bb_bid  = "41213";
					bb_lang  = "pt-BR";
					bb_name = "custom";bb_limit = "4";bb_format = "bbm";&lt;/script&gt;
					&lt;script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"&gt;&lt;/script&gt;
					&lt;!-- boo-widget end --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zMzGzBoJq7BBr_e1xfn13DQCahc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zMzGzBoJq7BBr_e1xfn13DQCahc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zMzGzBoJq7BBr_e1xfn13DQCahc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zMzGzBoJq7BBr_e1xfn13DQCahc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lucianosilva/~4/VNVttPgwuv0" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.lucianosilva.com/2009/11/16/manipulando-blob-mysql-vs-oracle/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.lucianosilva.com/2009/11/16/manipulando-blob-mysql-vs-oracle/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.lucianosilva.com/2009/11/16/manipulando-blob-mysql-vs-oracle/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luciano</name>
						<uri>http://www.lucianosilva.com</uri>
					</author>
		<title type="html"><![CDATA[Enviando e-mail com PL/SQL para múltiplos endereços]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lucianosilva/~3/eUkLFQr8vAo/" />
		<id>http://www.lucianosilva.com/?p=312</id>
		<updated>2009-11-16T18:58:33Z</updated>
		<published>2009-11-16T18:54:03Z</published>
		<category scheme="http://www.lucianosilva.com" term="Banco de Dados" /><category scheme="http://www.lucianosilva.com" term="Programação" /><category scheme="http://www.lucianosilva.com" term="Java" /><category scheme="http://www.lucianosilva.com" term="oracle" /><category scheme="http://www.lucianosilva.com" term="procedure" /><category scheme="http://www.lucianosilva.com" term="utl_mail" />		<summary type="html"><![CDATA[A situação mais comum é o envio de e-mail para diversos destinatários, portanto, complementando o código já postado aqui sobre o envio de e-mails utilizando PLSQL.
Uma lista de destinatários formatada normalmente assim:
 Luciano &#60;luciano@lucianosilva.com&#62;, Grupos &#60;grupos@lucianosilva.com&#62;, Futebol &#60;futebol@cfb.com.br&#62; 
Este é o nosso problema, o Oracle não irá conseguir trabalhar com a String formatada dessa maneira, e irá [...]]]></summary>
		<content type="html" xml:base="http://www.lucianosilva.com/2009/11/16/enviando-e-mail-com-plsql-para-multiplos-enderecos/">&lt;p&gt;A situação mais comum é o envio de e-mail para diversos destinatários, portanto, complementando o código já postado &lt;a href="http://www.lucianosilva.com/2009/07/05/enviando-e-mail-com-plsql/"&gt;aqui&lt;/a&gt; sobre o envio de e-mails utilizando PLSQL.&lt;/p&gt;
&lt;p&gt;Uma lista de destinatários formatada normalmente assim:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt; Luciano &amp;lt;&lt;a href="mailto:luciano@lucianosilva.com"&gt;luciano@lucianosilva.com&lt;/a&gt;&amp;gt;, Grupos &amp;lt;&lt;a href="mailto:grupos@lucianosilva.com"&gt;grupos@lucianosilva.com&lt;/a&gt;&amp;gt;, Futebol &amp;lt;&lt;a href="mailto:futebol@cfb.com.br"&gt;futebol@cfb.com.br&lt;/a&gt;&amp;gt; &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Este é o nosso problema, o Oracle não irá conseguir trabalhar com a String formatada dessa maneira, e irá lançar o erro:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;ORA-29279: SMTP permanent error: 501 Bad address syntax&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Enfim, para conseguir solucionar o problema do envio de e-mail para multiplos destinatários, utilize a função abaixo, ela irá devolver apenas o endereço de e-mail.&lt;/p&gt;
&lt;pre class="brush: sql;"&gt;

FUNCTION FORMAT_ADDRESS(ADDR_LIST IN OUT VARCHAR2) RETURN VARCHAR2 IS
    ---
    ADDR VARCHAR2(256);
    I    PLS_INTEGER;
    ---
    FUNCTION LOOKUP_UNQUOTED_CHAR(STR IN VARCHAR2, CHRS IN VARCHAR2)
      RETURN PLS_INTEGER AS
      C            VARCHAR2(5);
      I            PLS_INTEGER;
      LEN          PLS_INTEGER;
      INSIDE_QUOTE BOOLEAN;
      ---
    BEGIN
      INSIDE_QUOTE := FALSE;
      I            := 1;
      LEN          := LENGTH(STR);
      WHILE (I &amp;lt;= LEN) LOOP
        C := SUBSTR(STR, I, 1);
        IF (INSIDE_QUOTE) THEN
          IF (C = '&amp;quot;') THEN
            INSIDE_QUOTE := FALSE;
          ELSIF (C = '\') THEN
            I := I + 1; -- Skip the quote character
          END IF;
          GOTO NEXT_CHAR;
        END IF;
        IF (C = '&amp;quot;') THEN
          INSIDE_QUOTE := TRUE;
          GOTO NEXT_CHAR;
        END IF;
        IF (INSTR(CHRS, C) &amp;gt;= 1) THEN
          RETURN I;
        END IF;
        &amp;lt;&amp;lt;NEXT_CHAR&amp;gt;&amp;gt;
        I := I + 1;
      END LOOP;
      RETURN 0;
    END;
  BEGIN
    ADDR_LIST := LTRIM(ADDR_LIST);
    I         := LOOKUP_UNQUOTED_CHAR(ADDR_LIST, ',;');
    IF (I &amp;gt;= 1) THEN
      ADDR      := SUBSTR(ADDR_LIST, 1, I - 1);
      ADDR_LIST := SUBSTR(ADDR_LIST, I + 1);
    ELSE
      ADDR      := ADDR_LIST;
      ADDR_LIST := '';
    END IF;
    I := LOOKUP_UNQUOTED_CHAR(ADDR, '&amp;lt;');
    IF (I &amp;gt;= 1) THEN
      ADDR := SUBSTR(ADDR, I + 1);
      I    := INSTR(ADDR, '&amp;gt;');
      IF (I &amp;gt;= 1) THEN
        ADDR := SUBSTR(ADDR, 1, I - 1);
      END IF;
    END IF;
    RETURN ADDR;
  END FORMAT_ADDRESS;
&lt;/pre&gt;
&lt;p&gt;A mudança do código anterior não é tão drástica, já que o parâmetro é entrada/saída, você pode fazer um looping na lista de endereços para adicionar um-a-um.&lt;/p&gt;
&lt;pre class="brush: sql;"&gt;
UTL_SMTP.MAIL(MAIL_CONN, V_FROM );
    WHILE( V_LIST_ADDRESS IS NOT NULL )LOOP
           UTL_SMTP.RCPT(MAIL_CONN, FORMAT_ADDRESS(V_LIST_ADDRESS) );   
    END LOOP;
&lt;/pre&gt;
&lt;p&gt;Veja que é uma modificação simples, porém, ganha-se muito quando é necessário deixar o programa o mais abrangente possível&lt;br /&gt;
Enjoy!&lt;/p&gt;
&lt;!-- boo-widget start --&gt;
					&lt;script type="text/javascript"&gt;
					bb_keywords = "hobbit, Isaac Asimov, Alice";
					bb_bid  = "41213";
					bb_lang  = "pt-BR";
					bb_name = "custom";bb_limit = "4";bb_format = "bbm";&lt;/script&gt;
					&lt;script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"&gt;&lt;/script&gt;
					&lt;!-- boo-widget end --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/fhqDRwflQiHw3aMEfhXdXk-Z18g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fhqDRwflQiHw3aMEfhXdXk-Z18g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/fhqDRwflQiHw3aMEfhXdXk-Z18g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fhqDRwflQiHw3aMEfhXdXk-Z18g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lucianosilva/~4/eUkLFQr8vAo" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.lucianosilva.com/2009/11/16/enviando-e-mail-com-plsql-para-multiplos-enderecos/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.lucianosilva.com/2009/11/16/enviando-e-mail-com-plsql-para-multiplos-enderecos/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.lucianosilva.com/2009/11/16/enviando-e-mail-com-plsql-para-multiplos-enderecos/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luciano</name>
						<uri>http://www.lucianosilva.com</uri>
					</author>
		<title type="html"><![CDATA[Enviando e-mail com PL/SQL]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lucianosilva/~3/_DUuuWHKiIs/" />
		<id>http://www.lucianosilva.com/?p=283</id>
		<updated>2009-07-12T00:03:10Z</updated>
		<published>2009-07-05T16:01:34Z</published>
		<category scheme="http://www.lucianosilva.com" term="Banco de Dados" /><category scheme="http://www.lucianosilva.com" term="Programação" /><category scheme="http://www.lucianosilva.com" term="Java" /><category scheme="http://www.lucianosilva.com" term="oracle" /><category scheme="http://www.lucianosilva.com" term="procedure" /><category scheme="http://www.lucianosilva.com" term="utl_mail" />		<summary type="html"><![CDATA[Em continuidade a nossa série &#8220;as mil-e-uma utilidades do seu banco de dados Oracle&#8221;, agora você poderá descobrir como é fácil enviar e-mails a partir do PL/SQL e saber o quanto isto é produtivo.
Vamos lá, para o envio de e-mails é necessário que o pacote UTL_MAIL esteja instalado.
Conectando como sysdba na instância ORCL.

C:\&#62;set oracle_sid=orcl
C:\&#62;sqlplus sys/oracle [...]]]></summary>
		<content type="html" xml:base="http://www.lucianosilva.com/2009/07/05/enviando-e-mail-com-plsql/">&lt;p&gt;Em continuidade a nossa série &amp;#8220;as mil-e-uma utilidades do seu banco de dados Oracle&amp;#8221;, agora você poderá descobrir como é fácil enviar e-mails a partir do PL/SQL e saber o quanto isto é produtivo.&lt;/p&gt;
&lt;p&gt;Vamos lá, para o envio de e-mails é necessário que o pacote UTL_MAIL esteja instalado.&lt;/p&gt;
&lt;p&gt;Conectando como sysdba na instância ORCL.&lt;/p&gt;
&lt;pre class="brush: sql;"&gt;
C:\&amp;gt;set oracle_sid=orcl
C:\&amp;gt;sqlplus sys/oracle as sysdba
&lt;/pre&gt;
&lt;p&gt;Instalando o pacote UTL_MAIL. Isto não é nenhuma novidade, mas a variável de ambiente %ORACLE_HOME% indica o caminho a qual o banco de dados foi instalado, neste caso, foi utilizada a versão 10.2.0 &amp;#8211; C:\oracle\product\10.2.0\db_1. Os sub-diretórios, contém os pacotes necessários para o UTL_MAIL funcionar.&lt;/p&gt;
&lt;pre class="brush: sql;"&gt;
SQL&amp;gt; set serveroutput on
SQL&amp;gt; @%ORACLE_HOME%/rdbms/admin/utlmail.sql
SQL&amp;gt; @%ORACLE_HOME%/rdbms/admin/prvtmail.plb
SQL&amp;gt; show errors;
&lt;/pre&gt;
&lt;p&gt;Pronto, isto é o suficiente para o nosso próximo passo, a criação da procedure de envio de e-mails.&lt;/p&gt;
&lt;p&gt;Crie uma package para agrupar todas as funcionalidades que podem ser comuns a diversos projetos, e reutilize o código quando necessário.&lt;/p&gt;
&lt;pre class="brush: sql;"&gt;
create or replace package PKG_BLOG_UTIL is

-- Author  : LUCIANO
-- Created : 05/07/2009

PROCEDURE enviar_email_auth(p_USUARIO   IN VARCHAR2,
p_SENHA     IN VARCHAR2,
p_TO        IN VARCHAR2,
p_COPIA     IN VARCHAR2,
p_SUBJECT   IN VARCHAR2,
p_MESSAGE   IN VARCHAR2);
end PKG_BLOG_UTIL;
&lt;/pre&gt;
&lt;p&gt;Veja agora a versão 1.0 desta implementação:&lt;/p&gt;
&lt;pre class="brush: sql;"&gt;
CREATE OR REPLACE PACKAGE BODY PKG_BLOG_UTIL IS

PROCEDURE ENVIAR_EMAIL_AUTH(P_HOST    IN VARCHAR2,
P_USUARIO IN VARCHAR2,
P_SENHA   IN VARCHAR2,
P_TO      IN VARCHAR2,
P_COPIA   IN VARCHAR2,
P_SUBJECT IN VARCHAR2,
P_MESSAGE IN VARCHAR2)
IS

MAIL_CONN   UTL_SMTP.CONNECTION;
V_HEADER    VARCHAR2(4000);
CRLF        VARCHAR2(2) := CHR(13) || CHR(10); -- quebra de linha

BEGIN

-- Abre a conexão
MAIL_CONN   := UTL_SMTP.OPEN_CONNECTION(P_HOST, 25);
UTL_SMTP.HELO(MAIL_CONN, P_HOST);

-- Faz a autenticação para envio de mensagem
UTL_SMTP.COMMAND(MAIL_CONN, 'AUTH LOGIN');
UTL_SMTP.COMMAND(MAIL_CONN, UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(UTL_RAW.CAST_TO_RAW(P_USUARIO))));
UTL_SMTP.COMMAND(MAIL_CONN, UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(UTL_RAW.CAST_TO_RAW(P_SENHA))));

-- Prepara o cabeçalho de
V_HEADER := 'Date:'    || TO_CHAR(SYSDATE, 'dd Mon yy hh24:mi:ss') || CRLF ||
'From:'    || p_USUARIO || CRLF ||
'Subject:' || p_SUBJECT || CRLF ||
'To:'      || p_TO      || CRLF ||
'Cc:'      || p_COPIA   || CRLF ||
CRLF || CRLF ||
p_MESSAGE;

--
UTL_SMTP.MAIL(MAIL_CONN, '&amp;lt;' || P_USUARIO || '&amp;gt;');
UTL_SMTP.RCPT(MAIL_CONN, '&amp;lt;' || P_TO || '&amp;gt;');
UTL_SMTP.DATA(MAIL_CONN, V_HEADER);

-- Fecha a conexão
UTL_SMTP.QUIT(MAIL_CONN);

END ENVIAR_EMAIL_AUTH;
END PKG_BLOG_UTIL;
&lt;/pre&gt;
&lt;p&gt;Algumas coisas podem ser melhoradas como, separar o corpo da mensagem do cabeçalho e utilizar o UTL_TCP.CRLF como separador de linhas no lugar da variável CRLF, veja como o código fica mais organizado:&lt;/p&gt;
&lt;pre class="brush: sql;"&gt;
/* APENAS UM TRECHO DO CÓDIGO */
UTL_SMTP.MAIL(MAIL_CONN, '&amp;lt;' || P_USUARIO || '&amp;gt;');
UTL_SMTP.RCPT(MAIL_CONN, '&amp;lt;' || P_TO || '&amp;gt;');

UTL_SMTP.open_data(MAIL_CONN);

-- Prepara o cabeçalho
UTL_SMTP.write_data(MAIL_CONN, 'From'    || ': ' || p_USUARIO || UTL_TCP.CRLF);
UTL_SMTP.write_data(MAIL_CONN, 'To'      || ': ' || p_TO      || UTL_TCP.CRLF);
UTL_SMTP.write_data(MAIL_CONN, 'Cc'      || ': ' || p_COPIA   || UTL_TCP.CRLF);
UTL_SMTP.write_data(MAIL_CONN, 'Subject' || ': ' || P_SUBJECT || UTL_TCP.CRLF);

-- Escreve a mensagem
UTL_SMTP.write_data(MAIL_CONN, UTL_TCP.CRLF || p_message);
UTL_SMTP.close_data(MAIL_CONN);
&lt;/pre&gt;
&lt;p&gt;Eu preferi adotar este segundo código como o mais recomendável, mesmo assim, alguns detalhes podem ser adaptados a sua realidade, por exemplo, criar uma constante para o Mail Host, e indicando que o envio de e-mails sempre será a partir daquele servidor ou fazer a sobrecarga da procedure &amp;#8211; a reutilização é uma benção.&lt;/p&gt;
&lt;p&gt;Veja que a assinatura da procedure abaixo é um overload do que foi mostrado acima, isto é um conceito de Orientação-a-Objetos suportado pelo PLSQL, permite que um método seja escrito com diversas assinaturas diferentes, e reaproveitando o código de maneira eficaz.&lt;/p&gt;
&lt;pre class="brush: sql;"&gt;
PROCEDURE ENVIAR_EMAIL_AUTH(P_USUARIO IN VARCHAR2,
P_SENHA   IN VARCHAR2,
P_TO      IN VARCHAR2,
P_COPIA   IN VARCHAR2,
P_SUBJECT IN VARCHAR2,
P_MESSAGE IN VARCHAR2)
IS
V_MAILHOST CONSTANT VARCHAR2(100) := 'pop.xxxx.com.br';
BEGIN

enviar_email_auth(P_HOST    =&amp;gt; v_mailhost,
P_USUARIO =&amp;gt; P_USUARIO,
P_SENHA   =&amp;gt; P_SENHA,
P_TO      =&amp;gt; P_TO,
P_COPIA   =&amp;gt; P_COPIA,
P_SUBJECT =&amp;gt; P_SUBJECT,
P_MESSAGE =&amp;gt; P_MESSAGE);
END ENVIAR_EMAIL_AUTH;
&lt;/pre&gt;
&lt;p&gt;A package completa, está disponível &lt;a href="http://www.lucianosilva.com/download/pkg_blog_util.rar"&gt;aqui &lt;/a&gt;para download.&lt;/p&gt;
&lt;p&gt;Não envie spam!&lt;/p&gt;
&lt;!-- boo-widget start --&gt;
					&lt;script type="text/javascript"&gt;
					bb_keywords = "utl_mail";
					bb_bid  = "41213";
					bb_lang  = "pt-BR";
					bb_name = "custom";bb_limit = "4";bb_format = "bbm";&lt;/script&gt;
					&lt;script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"&gt;&lt;/script&gt;
					&lt;!-- boo-widget end --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vw1Bm8Gqc_5EFwBq5E_vgdkb5ds/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vw1Bm8Gqc_5EFwBq5E_vgdkb5ds/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vw1Bm8Gqc_5EFwBq5E_vgdkb5ds/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vw1Bm8Gqc_5EFwBq5E_vgdkb5ds/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lucianosilva/~4/_DUuuWHKiIs" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.lucianosilva.com/2009/07/05/enviando-e-mail-com-plsql/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://www.lucianosilva.com/2009/07/05/enviando-e-mail-com-plsql/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://www.lucianosilva.com/2009/07/05/enviando-e-mail-com-plsql/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luciano</name>
						<uri>http://www.lucianosilva.com</uri>
					</author>
		<title type="html"><![CDATA[Chamando o bash a partir do PL/SQL com Java Stored Procedure]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lucianosilva/~3/Jkuq7hOmKY4/" />
		<id>http://lucianosilva.com/?p=271</id>
		<updated>2009-07-12T00:26:07Z</updated>
		<published>2009-07-03T02:53:09Z</published>
		<category scheme="http://www.lucianosilva.com" term="Banco de Dados" /><category scheme="http://www.lucianosilva.com" term="bash" /><category scheme="http://www.lucianosilva.com" term="Java" /><category scheme="http://www.lucianosilva.com" term="oracle" /><category scheme="http://www.lucianosilva.com" term="procedure" /><category scheme="http://www.lucianosilva.com" term="prompt" />		<summary type="html"><![CDATA[Se você sabe utilizar o recursos do Java Stored Procedure em seu banco de dados, significa que você é uma pessoa abençoada.
A não tão popular JSP compartilha alguns dos recursos da plataforma Java com a linguagem estrutural PL/SQL, eu disse alguns, pois existem limitações. Muitos desenvolvedores se beneficiam do pacote java.io.* quando falamos de Java Stored [...]]]></summary>
		<content type="html" xml:base="http://www.lucianosilva.com/2009/07/02/chamando-o-bash-a-partir-do-plsql-com-java-stored-procedure/">&lt;p&gt;Se você sabe utilizar o recursos do Java Stored Procedure em seu banco de dados, significa que você é uma pessoa abençoada.&lt;/p&gt;
&lt;p&gt;A não tão popular JSP compartilha alguns dos recursos da plataforma Java com a linguagem estrutural PL/SQL, eu disse alguns, pois existem limitações. Muitos desenvolvedores se beneficiam do pacote java.io.* quando falamos de Java Stored Procedure, visto que os recursos são mais amplos, quando comparado ao famoso UTL_FILE.&lt;/p&gt;
&lt;p&gt;Vamos realizar passo-a-passo utilizando o banco de dados Oracle 10g em ambiente windows, para a criação de uma Procedure, que irá chamar um programa Java (Java Stored Procedure), cujo este permitirá executar comandos do prompt (os mais antigos leiam Bash).&lt;/p&gt;
&lt;p&gt;É provavel que você encontre no Google diversas outras maneiras de criar a Java Stored Procedures, porém, o proposito aqui é mais amplo, ajudando a criar todo o ambiente, vamos lá!&lt;/p&gt;
&lt;p&gt;Primeiramente, o usuário de banco, &lt;em&gt;owner &lt;/em&gt;do objeto JSP, deve ter alguns permissões para manipular os arquivos no sistema operacional. Neste exemplo no nosso &lt;em&gt;schema&lt;/em&gt; será &lt;strong&gt;blog&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Informe o usuário (schema), tipo de acesso e, opcionalmente o diretório em que será permitida a manipulação do arquivo.&lt;/p&gt;
&lt;pre class="brush: sql;"&gt;
EXEC DBMS_JAVA.grant_permission('BLOG', 'java.io.FilePermission', '&amp;lt;&amp;lt;ALL FILES&amp;gt;&amp;gt;', 'read ,write, execute, delete');
EXEC Dbms_Java.Grant_Permission('BLOG', 'SYS:java.lang.RuntimePermission', 'writeFileDescriptor', '');
EXEC Dbms_Java.Grant_Permission('BLOG', 'SYS:java.lang.RuntimePermission', 'readFileDescriptor', '');
&lt;/pre&gt;
&lt;p&gt;Feito isto, os objetos de banco são simples, crie o programa abaixo com o usuário blog.&lt;/p&gt;
&lt;pre class="brush: sql;"&gt;
create or replace and compile java source named Bash as
package com.lucianosilva.oracle;
import java.io.*;
import java.lang.*;
public class Bash {

public static void command(String command) throws Exception {
final Process process = Runtime.getRuntime().exec(command);
process.waitFor();
process.destroy();
}

public static String commandReturn(String command) throws Exception {
final Process process = Runtime.getRuntime().exec(command);
process.waitFor();

String retCode = Integer.toString( process.exitValue() );

if ( retCode.equals(&amp;quot;0&amp;quot;) ){
retCode = retCode + &amp;quot; Executado com sucesso.&amp;quot;;
}else{
retCode = retCode + &amp;quot; Erro durante a execucao.&amp;quot;;
}

process.destroy();
return retCode;
}

public static void executeAsynchronousCommand(String command) throws Exception {
Runtime.getRuntime().exec( command );
}
}
&lt;/pre&gt;
&lt;p&gt;O método commandReturn não retorna o resultado do comando bash e sim uma mensagem informando se o comando foi bem executado ou não.&lt;/p&gt;
&lt;p&gt;Agora vamos testar, ainda como blog, faça:&lt;/p&gt;
&lt;pre class="brush: sql;"&gt;
CREATE OR REPLACE FUNCTION EXECUTAR_COMAND_BASH(P_COMMAND IN VARCHAR2)
RETURN VARCHAR2 AS
LANGUAGE JAVA NAME 'com.lucianosilva.oracle.Bash.commandReturn(java.lang.String) return java.lang.String';
&lt;/pre&gt;
&lt;p&gt;Isto é tudo! Um exemplo muito prático, sem dúvidas, já que dependendo da solução adotada a integração de procedures PLSQL com o crontab é muito comum e isto pode ajudar.&lt;/p&gt;
&lt;p&gt;Sayonara&lt;/p&gt;
&lt;!-- boo-widget start --&gt;
					&lt;script type="text/javascript"&gt;
					bb_keywords = "prompt";
					bb_bid  = "41213";
					bb_lang  = "pt-BR";
					bb_name = "custom";bb_limit = "4";bb_format = "bbm";&lt;/script&gt;
					&lt;script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"&gt;&lt;/script&gt;
					&lt;!-- boo-widget end --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/QIRJOzsFsqDM_hS4XvCZ-4j0HvM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QIRJOzsFsqDM_hS4XvCZ-4j0HvM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/QIRJOzsFsqDM_hS4XvCZ-4j0HvM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QIRJOzsFsqDM_hS4XvCZ-4j0HvM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lucianosilva/~4/Jkuq7hOmKY4" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.lucianosilva.com/2009/07/02/chamando-o-bash-a-partir-do-plsql-com-java-stored-procedure/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.lucianosilva.com/2009/07/02/chamando-o-bash-a-partir-do-plsql-com-java-stored-procedure/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.lucianosilva.com/2009/07/02/chamando-o-bash-a-partir-do-plsql-com-java-stored-procedure/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luciano</name>
						<uri>http://www.lucianosilva.com</uri>
					</author>
		<title type="html"><![CDATA[ToStringUtil() com Annotations versão 1.0.2]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lucianosilva/~3/MI-03Y7fkNI/" />
		<id>http://www.lucianosilva.com/?p=268</id>
		<updated>2009-03-08T03:28:32Z</updated>
		<published>2009-03-08T03:28:32Z</published>
		<category scheme="http://www.lucianosilva.com" term="Programação" /><category scheme="http://www.lucianosilva.com" term="Java" /><category scheme="http://www.lucianosilva.com" term="util" />		<summary type="html"><![CDATA[Dando continuidade a customização do toString(), certamente existirá aquele atributo que você não irá querer exibir no toString(), então seguindo a dica do @pauloprestes, resolvido com annotations:
Aqui está a interface para a anotação, o melhor seria utilizar o Target como FIELD, porém, como falei vamos exibir os atributos com base nos métodos públicos Getters.

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface [...]]]></summary>
		<content type="html" xml:base="http://www.lucianosilva.com/2009/03/08/tostringutil-com-annotations-versao-102/">&lt;p&gt;Dando continuidade a customização do toString(), certamente existirá aquele atributo que você não irá querer exibir no toString(), então seguindo a dica do &lt;a href="http://twitter.com/pauloprestes" target="_blank"&gt;@pauloprestes&lt;/a&gt;, resolvido com annotations:&lt;/p&gt;
&lt;p&gt;Aqui está a interface para a anotação, o melhor seria utilizar o Target como FIELD, porém, como falei vamos exibir os atributos com base nos métodos públicos &lt;em&gt;Getters&lt;/em&gt;.&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface NoToString{}
&lt;/pre&gt;
&lt;p&gt;Na classe ToStringUtil foi apenas acrescentado uma regra para não exibir os métodos marcados com a anotação @NoToString, sendo:&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
// Nao exibir os métodos que estejam com a Annotação NoToString
boolean isNotAnnotation = m.isAnnotationPresent(NoToString.class);
&lt;/pre&gt;
&lt;p&gt;Realizei alguns testes com tipos complexos e funcionou, talvez você tenha alguma sugestão para melhorar este tipo de tratamento.&lt;/p&gt;
&lt;p&gt;Baixe &lt;a href="http://www.lucianosilva.com/download/ToStringUtil_v1.0.2.zip"&gt;aqui&lt;/a&gt; a versão 1.0.2.&lt;/p&gt;
&lt;p&gt;Namastê!&lt;/p&gt;
&lt;!-- boo-widget start --&gt;
					&lt;script type="text/javascript"&gt;
					bb_keywords = "util";
					bb_bid  = "41213";
					bb_lang  = "pt-BR";
					bb_name = "custom";bb_limit = "4";bb_format = "bbm";&lt;/script&gt;
					&lt;script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"&gt;&lt;/script&gt;
					&lt;!-- boo-widget end --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8CPdUCT5oSpzb4C1AUbrPolSuNk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8CPdUCT5oSpzb4C1AUbrPolSuNk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8CPdUCT5oSpzb4C1AUbrPolSuNk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8CPdUCT5oSpzb4C1AUbrPolSuNk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lucianosilva/~4/MI-03Y7fkNI" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.lucianosilva.com/2009/03/08/tostringutil-com-annotations-versao-102/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://www.lucianosilva.com/2009/03/08/tostringutil-com-annotations-versao-102/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://www.lucianosilva.com/2009/03/08/tostringutil-com-annotations-versao-102/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luciano</name>
						<uri>http://www.lucianosilva.com</uri>
					</author>
		<title type="html"><![CDATA[Automatizando o toString() versão 1.0.1]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lucianosilva/~3/iSHee4uUscg/" />
		<id>http://www.lucianosilva.com/?p=253</id>
		<updated>2009-03-06T18:45:32Z</updated>
		<published>2009-03-06T18:45:32Z</published>
		<category scheme="http://www.lucianosilva.com" term="Programação" /><category scheme="http://www.lucianosilva.com" term="Java" /><category scheme="http://www.lucianosilva.com" term="util" />		<summary type="html"><![CDATA[É comum sobrescrever o método toString() da classe Object, facilita em situações como quando é necessário saber o conteúdo de um Bean, por exemplo. Sobretudo, reescrever este método poderá ser trabalhoso se você tem muitos atributos e cansativo, se você o fizer para todos os seu beans.
Pensando nisso resolvi criar uma classe útil que mostre [...]]]></summary>
		<content type="html" xml:base="http://www.lucianosilva.com/2009/03/06/automatizando-o-tostring-v1/">&lt;p&gt;É comum sobrescrever o método &lt;strong&gt;toString()&lt;/strong&gt; da classe Object, facilita em situações como quando é necessário saber o conteúdo de um Bean, por exemplo. Sobretudo, reescrever este método poderá ser trabalhoso se você tem muitos atributos e cansativo, se você o fizer para todos os seu beans.&lt;/p&gt;
&lt;p&gt;Pensando nisso resolvi criar uma classe útil que mostre todos os atributos Privates da sua classe juntamente com seus respectivos valores. Veja o código abaixo, em um bean eu reescrevi o método toString() fazendo um looping em todos os atributos:&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
public class Equipamento implements Serializable {
private String modelo;
private String marca;
private String descricao;
private Date fabricacao;

/*** getters/setters ocultados **/

public String toString(){
StringBuffer b = new StringBuffer();
// Obtem todos os atributos da classe
Field[] fields = this.getClass().getDeclaredFields();
b.append( this.getClass().getName() );
b.append( &amp;quot; { \n&amp;quot; );
for (int i = 0; i &amp;lt; fields.length; i++) {
try {

Field field = fields[i];
b.append( field.getName() );
b.append( &amp;quot; = &amp;quot; );
b.append( field.get(this) );
b.append(&amp;quot;\n&amp;quot;);

} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
b.append( &amp;quot; } &amp;quot; );
return b.toString();
}
}
&lt;/pre&gt;
&lt;p&gt;A reescrita do método acima resolve parcialmente o nosso problema, além de não atender aos tipos de dados complexos, você terá que fazer o famoso copy-paste para todas as classes que forem implementa-lo.&lt;/p&gt;
&lt;p&gt;Voltamos então para nossa idéia inicial, então criaremos uma classe útil para que a automatização do toString(), sendo assim, qualquer classe poderá utiliza-la. Saiba que não iremos ter acesso aos atributos assinados com o modificador Private da classe que deseja utilizar o toString customizado, para resolver tal problema utilizaremos os Métodos públicos, ignorando os métodos da classe Object e aproveitando apenas os &lt;a href="http://en.wikipedia.org/wiki/Accessor" target="_blank"&gt;métodos acessores&lt;/a&gt;.&lt;/p&gt;
&lt;pre class="brush: java;"&gt;

public final class ToStringUtil{
/*** ocultado ***/

public static String getText(Object object){
StringBuffer buffer = new StringBuffer(&amp;quot;&amp;quot;);
Method[] methods = object.getClass().getMethods();

for( Method method : methods ){
//
// verifica se o método é um Getter de attributo da classe
//
if( isGetterFieldMethod(method, object.getClass()) ){
buffer.append( getResumeNameMethod( method.getName() ) );
buffer.append(&amp;quot;   = &amp;quot;);
buffer.append( getMethodReturnValue(object, method) );
buffer.append( NEW_LINE );
}

}// for each end

return buffer.toString();
}

/*** ocultado ***/
}
&lt;/pre&gt;
&lt;p&gt;Esta versão ainda continua com o problema de tipos complexos, assim que eu for melhorando vou disponibilizar por aqui.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Download&lt;br /&gt;
&lt;/strong&gt;&lt;a href="http://www.lucianosilva.com/download/ToStringUtil_v1.0.1.zip"&gt;Versão completa ToStringUtil 1.0.1&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Referência&lt;br /&gt;
&lt;/strong&gt;&lt;a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/reflect/package-summary.html"&gt;Reflection&lt;/a&gt;&lt;/p&gt;
&lt;!-- boo-widget start --&gt;
					&lt;script type="text/javascript"&gt;
					bb_keywords = "util";
					bb_bid  = "41213";
					bb_lang  = "pt-BR";
					bb_name = "custom";bb_limit = "4";bb_format = "bbm";&lt;/script&gt;
					&lt;script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"&gt;&lt;/script&gt;
					&lt;!-- boo-widget end --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cpmAhCItDNO9XwBuOH7gZS5AI20/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cpmAhCItDNO9XwBuOH7gZS5AI20/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cpmAhCItDNO9XwBuOH7gZS5AI20/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cpmAhCItDNO9XwBuOH7gZS5AI20/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lucianosilva/~4/iSHee4uUscg" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.lucianosilva.com/2009/03/06/automatizando-o-tostring-v1/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.lucianosilva.com/2009/03/06/automatizando-o-tostring-v1/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.lucianosilva.com/2009/03/06/automatizando-o-tostring-v1/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luciano</name>
						<uri>http://www.lucianosilva.com</uri>
					</author>
		<title type="html"><![CDATA[Lendo seus e-mails com Java]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lucianosilva/~3/kAH827WR-z8/" />
		<id>http://www.lucianosilva.com/?p=233</id>
		<updated>2009-02-23T03:38:48Z</updated>
		<published>2009-02-23T03:38:48Z</published>
		<category scheme="http://www.lucianosilva.com" term="Programação" /><category scheme="http://www.lucianosilva.com" term="Java" /><category scheme="http://www.lucianosilva.com" term="javamail" /><category scheme="http://www.lucianosilva.com" term="pop3" /><category scheme="http://www.lucianosilva.com" term="util" />		<summary type="html"><![CDATA[Criando com poucas linhas um leitor de e-mails com Java.]]></summary>
		<content type="html" xml:base="http://www.lucianosilva.com/2009/02/23/lendo-seus-e-mails-com-java/">&lt;p&gt;Lembro de um camarada me dizendo: &amp;#8220;Fiz um browser em Java com menos de 20 linhas de código&amp;#8221; &amp;#8211; Acredite, era verdade! Okay! Okay! Sem recurso nenhum básicamente, apenas a barra de endereços, mas e daí? Assim como esse meu amigo, provavelmente você já tem aquela classe para envio de e-mails guardada na manga, muito útil naqueles dias em que seu chefe pressiona: &amp;#8220;É pra ontem!&amp;#8221;&lt;/p&gt;
&lt;p&gt;Mas&amp;#8230; você já tentou montar seu cliente de email? &amp;#8220;Pra quê, cara? Eu uso o Gmail&amp;#8221; &amp;#8211; você irônicamente me responderia, e na tréplica eu diria: Ué! Pra quê o Gmail, se você pode fazer melhor meu rapaz! (sarcástico, não?) Mãos a obra!&lt;/p&gt;
&lt;p&gt;O pacote &lt;strong&gt;javax.mail.*&lt;/strong&gt; fornece uma série de recursos para protocolos de internet, utilizando-o como uma receita de bolo o sucesso é garantido. Basicamente vamos criar um programa que monitore a caixa de entrada de um determinado endereço POP3.&lt;/p&gt;
&lt;p&gt;Coloque os dados de acesso ao mail em um arquivo config.properties, assim:&lt;/p&gt;
&lt;pre class="brush: java;"&gt;

pop.hst=pop.lucianosilva.com.br
pop.usr=boss@lucianosilva.com.br
pop.pwd=ABC123#XYZ
&lt;/pre&gt;
&lt;p&gt;A classe abaixo se encarregará de obter estes dados de conexão:&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
public class PropertiesMail extends Properties{
private static final String ARQUIVO_CONFIGURACAO = &amp;quot;C:\\config.properties&amp;quot;;

public PropertiesMail(){
try{
FileInputStream file = new FileInputStream( ARQUIVO_CONFIGURACAO);
this.load( file );

}catch(IOException e){
e.printStackTrace();
}
}

public String getHost(){
return this.getProperty(&amp;quot;pop.hst&amp;quot;);
}

public String getAccountUser(){
return this.getProperty(&amp;quot;pop.usr&amp;quot;);
}

public String getAccountPassword(){
return this.getProperty(&amp;quot;pop.pwd&amp;quot;);
}

}
&lt;/pre&gt;
&lt;p&gt;Agora, a caixa de correios. Veja que o processo abaixo básicamente segue um roteiro, mas é óbvio que isto é feito apenas para a leitura.&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
public class Inbox{

public Inbox(){
try {
init();
} catch (MessagingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

private void init() throws MessagingException, IOException{
// Instância das Propriedades de Conexão
PropertiesMail ppm = new PropertiesMail();
// Seta o endereço do host
Properties pp        = System.getProperties();
pp.put(&amp;quot;mail.pop3.host&amp;quot;, ppm.getHost());

// Se o servidor exigir autenticação segura
Authenticator auth = new PopAuthentication();
Session session    = Session.getDefaultInstance(pp, auth);

Store store           = session.getStore(&amp;quot;pop3&amp;quot;);
// Dados básicos de conexão
store.connect(ppm.getHost(), ppm.getAccountUser(), ppm.getAccountPassword());

// Obtem o diretório (INBOX)
Folder folder       = store.getFolder(&amp;quot;INBOX&amp;quot;);
folder.open(Folder.READ_ONLY);

// ler as mensagens do diretório
Message message[] = folder.getMessages();

processMessage(message);

// Close connection
folder.close(false);
store.close();
}

private void processMessage( Message[] message ) throws MessagingException, IOException{
if( message == null || message.length==0 ){
System.out.println(&amp;quot;Nenhuma mensagem encontrada&amp;quot;);
}else{
for (int i=0, n=message.length; i
System.out.println(i + &amp;quot;: &amp;quot; + message[i].getFrom()[0] + &amp;quot;\t&amp;quot; + message[i].getSubject());
String content = message[i].getContent().toString();
System.out.print(content);
}// for end
}
}

public static void main(String[] args){
Inbox inbox = new Inbox();
}
}
&lt;/pre&gt;
&lt;p&gt;Muito fácil não? Mas este é um exemplo simples mesmo, saiba que é possível fazer todo o controle de um cliente de e-mail não só Ler, como Escrever, Apagar, Mover, etc.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.lucianosilva.com/download/JavaMail.zip"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Downloads&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.lucianosilva.com/download/JavaMail.zip"&gt;Projeto utilizado para este post&lt;/a&gt;.&lt;br /&gt;
&lt;a href="http://java.sun.com/products/javamail/downloads/index.html"&gt;JavaMail API&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Veja mais sobre JavaMail&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://java.sun.com/products/javamail/FAQ.html"&gt;JavaMail API&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://java.sun.com/developer/onlineTraining/JavaMail/index.html"&gt;jGuru: Fundamentals of the JavaMail API&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.developer.com/java/other/article.php/618481"&gt;WebMail in Java: Reading E-mail&lt;/a&gt;&lt;br /&gt;
Have a fun!&lt;/p&gt;
&lt;!-- boo-widget start --&gt;
					&lt;script type="text/javascript"&gt;
					bb_keywords = "util";
					bb_bid  = "41213";
					bb_lang  = "pt-BR";
					bb_name = "custom";bb_limit = "4";bb_format = "bbm";&lt;/script&gt;
					&lt;script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"&gt;&lt;/script&gt;
					&lt;!-- boo-widget end --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zJ6r3gr3hENeOLyOuQ43G96yJHY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zJ6r3gr3hENeOLyOuQ43G96yJHY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zJ6r3gr3hENeOLyOuQ43G96yJHY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zJ6r3gr3hENeOLyOuQ43G96yJHY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lucianosilva/~4/kAH827WR-z8" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.lucianosilva.com/2009/02/23/lendo-seus-e-mails-com-java/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.lucianosilva.com/2009/02/23/lendo-seus-e-mails-com-java/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.lucianosilva.com/2009/02/23/lendo-seus-e-mails-com-java/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luciano</name>
						<uri>http://www.lucianosilva.com</uri>
					</author>
		<title type="html"><![CDATA[Apresentando o BPEL com o Adapter File]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lucianosilva/~3/ASjbnnWqX-c/" />
		<id>http://www.lucianosilva.com/?p=163</id>
		<updated>2009-02-13T23:14:00Z</updated>
		<published>2009-02-13T23:14:00Z</published>
		<category scheme="http://www.lucianosilva.com" term="Programação" /><category scheme="http://www.lucianosilva.com" term="SOA" /><category scheme="http://www.lucianosilva.com" term="AdapterFile" /><category scheme="http://www.lucianosilva.com" term="BPEL" /><category scheme="http://www.lucianosilva.com" term="oracle" />		<summary type="html"><![CDATA[O BPEL é uma linguagem que descrita em XML, que básicamente é utilizada para desenhar processo de negócio seguindo como base o BPM, destaca-se pela simplicidade da criação de um processo e pela amigável interface, proporcionando uma sensação agradável no momento do design. O utilizador de BPEL não necessita de conhecimentos em linguagem de programação, porém, o programador poderá obter mais recursos da ferramenta.]]></summary>
		<content type="html" xml:base="http://www.lucianosilva.com/2009/02/13/apresentando-o-bpel-com-o-adapter-file/">&lt;p style="text-align: left;"&gt;A solução da Oracle para o conceito de arquitetura de serviços SOA, conhecida como Oracle SOA Suite, disponibiliza um pacote com diversos recursos para organização, orquestração, segurança e integração. Para este último posso destacar o Business Process Execution Language, BPEL, que integrado ao JDeveloper é uma excelente ferramenta de trabalho, fácil, simples e com alguns recursos (adapters) pré-compilados que auxiliam.&lt;/p&gt;
&lt;p style="text-align: left;"&gt;O BPEL é uma linguagem que descrita em XML, que básicamente é utilizada para desenhar processo de negócio seguindo como base o BPM, destaca-se pela simplicidade da criação de um processo e pela amigável interface, proporcionando uma sensação agradável no momento do design. O utilizador de BPEL não necessita de conhecimentos em linguagem de programação, porém, o programador poderá obter mais recursos da ferramenta.&lt;/p&gt;
&lt;p style="text-align: left;"&gt;Para apresentar o BPEL escolhi algo um pouco mais além do famoso &amp;#8220;Hello Word&amp;#8221;, vamos trabalhar em um cenário de integração de softwares, aonde o legado irá disponibilizar um arquivo TXT no padrão CVS posicional diáriamente, o processo deverá interpretar o conteúdo deste arquivo e gravar no banco.&lt;/p&gt;
&lt;p style="text-align: left;"&gt;&lt;strong&gt;Pré-Requisitos&lt;/strong&gt;&lt;/p&gt;
&lt;p style="text-align: left;"&gt;&lt;a href="http://www.oracle.com/technology/software/products/jdev/htdocs/soft10134.html" target="_blank"&gt;JDeveloper 10.1.3.4&lt;/a&gt; (com suporte a SOA).&lt;/p&gt;
&lt;p style="text-align: left;"&gt;&lt;a href="http://www.oracle.com/technology/software/products/ias/htdocs/101310.html" target="_blank"&gt;SOA Suite 10.1.3.1.0&lt;/a&gt; (Com Windows Vista, talvez vc tenha problemas, baixe o patch).&lt;/p&gt;
&lt;p style="text-align: left;"&gt;MySQL.&lt;/p&gt;
&lt;p style="text-align: left;"&gt;&lt;strong&gt;Parte 1 &amp;#8211; Criando o Projeto&lt;/strong&gt;&lt;/p&gt;
&lt;p style="text-align: left;"&gt;Crie um projeto do tipo BPEL Project em File -&amp;gt; New -&amp;gt; Projects -&amp;gt; BPEL Process Project (certifique-se de que está filtrando por todas as tecnologias). Em seguida, dê um nome ao projeto e na opção template opte por Empty BPEL Process.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;a href="http://www.lucianosilva.com/wp-content/uploads/2009/02/proj02.jpg"&gt;&lt;img class="size-medium wp-image-170 aligncenter" title="proj02 - New Project 2" src="http://www.lucianosilva.com/wp-content/uploads/2009/02/proj02-300x225.jpg" alt="proj02 - New Project 2" width="300" height="225" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align: left;"&gt;&lt;strong&gt;Parte 2 &amp;#8211; Usando o Adapter File&lt;/strong&gt;&lt;/p&gt;
&lt;p style="text-align: left;"&gt;O Adapter File é um recurso do BPEL para manipulação de arquivos, oferece três opções Leitura, Escrita e Sincronização (Read, Writer e Synchronous Read), além dele existe o Adapter FTP (autoexplicativo), porém iremos falar sobre ele depois. Continuando com nosso projeto, vamos utiliza a opção Read para o &lt;a href="http://www.lucianosilva.com/download/EXPORT_PAIS_20090212.txt" target="_blank"&gt;arquivo texto&lt;/a&gt; que estará disponível no diretório c:\interface_dir, haverá um pooling a cada 1 minuto, obviamente que isto é apenas para testes você deve adequar o intervalo de tempo de acordo com sua necessidade, veja a seguir o passo-a-passo do Adapter File.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;a class="wpGallery" href="http://www.lucianosilva.com/windowTutorialAdapterFile.php" target="_blank"&gt;Veja aqui os screenshot do passo-a-passo para configurar o File Adapter&lt;/a&gt;.&lt;/p&gt;
&lt;p style="text-align: left;"&gt;Até este passo fizemos apenas configurações básicas da funcionalidade do Adapter, porém, agora é necessário definir um o mapeamento das colunas posicional (fixo), utililzando um Schema XSD, veja a seguir como é simples:&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;a class="wpGallery" href="http://www.lucianosilva.com/windowTutorialXSD.php" target="_blank"&gt; Screenshots para criar o Schema XSD&lt;/a&gt;.&lt;/p&gt;
&lt;p style="text-align: left;"&gt;&lt;strong&gt;Parte 3 &amp;#8211; Criando o Adapter Database&lt;/strong&gt;&lt;/p&gt;
&lt;p style="text-align: left;"&gt;Crie um banco de dados no MySQL ou em qualquer outro SGDB, em seguida &lt;a href="http://www.lucianosilva.com/download/script_pais.sql" target="_blank"&gt;crie a tabela pais&lt;/a&gt; que irá receber os dados contidos no arquivo texto. Antes de utilizar o Adapter Database certifique-se que sua conexão com o banco está feita pelo JDeveloper, ela será necessária para os passos a seguir, portando vá até a aba Connection, se não existir crie-a.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;a href="http://www.lucianosilva.com/wp-content/uploads/2009/02/connection.jpg"&gt;&lt;img class="aligncenter size-medium wp-image-205" style="border: 1px solid black;" title="Connection" src="http://www.lucianosilva.com/wp-content/uploads/2009/02/connection-300x204.jpg" alt="Connection" width="300" height="204" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align: left;"&gt;
&lt;p style="text-align: left;"&gt;Com a tabela criada e a conexão feita, agora vamos utilizar o componente Database Adapter que será o responsável por executar instruções SQL. Os passos aqui são tão simples quanto a criação da conexão, porém, é importante destacar que no &lt;strong&gt;Passo 4&lt;/strong&gt; escolha a opção &lt;strong&gt;Execute Custom SQL&lt;/strong&gt;, e no quinto e último passo coloque a instrução de inserção da tabela pais, não se preocupe com o XSD ele será criado automáticamente, veja como fica:&lt;/p&gt;
&lt;p style="TEXT-ALIGN: center"&gt;&lt;a href="http://www.lucianosilva.com/wp-content/uploads/2009/02/custom_sql.jpg"&gt;&lt;img class="size-medium wp-image-220 aligncenter" title="Custom SQL" src="http://www.lucianosilva.com/wp-content/uploads/2009/02/custom_sql-300x222.jpg" alt="Custom SQL" width="300" height="222" /&gt;&lt;/a&gt;&lt;a href="http://www.lucianosilva.com/wp-content/uploads/2009/02/custom_sql.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align: left;"&gt;&lt;strong&gt;Passo 4 &amp;#8211; While e Variáveis&lt;/strong&gt;&lt;/p&gt;
&lt;p style="text-align: left;"&gt;Para cada campo do arquivo TXT, mapeado pelo Schema XSD, devemos criar uma variável que irá armazenar o valor dos campos, então vá até a aba Structure e crie as variáveis.&lt;/p&gt;
&lt;p style="TEXT-ALIGN: center"&gt;&lt;a href="http://www.lucianosilva.com/wp-content/uploads/2009/02/variaveis_01.jpg"&gt;&lt;img class="size-medium wp-image-221 aligncenter" title="Variaveis - 01" src="http://www.lucianosilva.com/wp-content/uploads/2009/02/variaveis_01-300x186.jpg" alt="Variaveis - 01" width="300" height="186" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="TEXT-ALIGN: center"&gt;&lt;a href="http://www.lucianosilva.com/wp-content/uploads/2009/02/variaveis_02.jpg"&gt;&lt;img class="aligncenter size-medium wp-image-222" title="Variaveis - 02" src="http://www.lucianosilva.com/wp-content/uploads/2009/02/variaveis_02-300x278.jpg" alt="Variaveis - 02" width="300" height="278" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align: left;"&gt;
&lt;p style="text-align: left;"&gt;Depois de todas as variáveis criadas precisamos associa-las aos campos do XSD e inicializa-las, mas para isto devo esclarecer uma coisa, sabemos que o arquivo texto poderá ter uma ou mais linhas de registro, portanto é necessária uma instrução de repetição. Utilizaremos o componente &lt;strong&gt;WHILE&lt;/strong&gt;, a partir de uma variável contadora (índice).&lt;/p&gt;
&lt;p style="text-align: left;"&gt;&lt;a href="http://www.lucianosilva.com/wp-content/uploads/2009/02/diagram_01.jpg"&gt;&lt;img class="aligncenter size-medium wp-image-226" title="diagram_01" src="http://www.lucianosilva.com/wp-content/uploads/2009/02/diagram_01-114x300.jpg" alt="diagram_01" width="114" height="300" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align: left;"&gt;O While cria um novo escopo aonde devemos arrastar os componentes de assinatura das variáveis e chamada da procedure, ou seja, para cada registro iremos fazer a inicialização da variáveis e a chamada da procedure para gravar no banco de dados, finalizando o nosso processo BPEL.&lt;/p&gt;
&lt;p style="text-align: left;"&gt;&lt;a href="http://www.lucianosilva.com/wp-content/uploads/2009/02/diagram_02.jpg"&gt;&lt;img class="aligncenter size-medium wp-image-228" title="diagram_02" src="http://www.lucianosilva.com/wp-content/uploads/2009/02/diagram_02-281x300.jpg" alt="diagram_02" width="281" height="300" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align: left;"&gt;O processo é simples mas o dominio do ambiente BPEL é excencial, saber criar as variáveis, inicializá-las, passagem de valores, etc. Abaixo está disponível o fonte do projeto criado no JDeveloper.&lt;/p&gt;
&lt;p style="text-align: left;"&gt;Clique &lt;a href="http://www.lucianosilva.com/download/BlogApReadFileToDB.zip"&gt;aqui&lt;/a&gt; para baixar o fonte.&lt;/p&gt;
&lt;p style="text-align: left;"&gt;
&lt;p style="text-align: left;"&gt;
&lt;!-- boo-widget start --&gt;
					&lt;script type="text/javascript"&gt;
					bb_keywords = "oracle";
					bb_bid  = "41213";
					bb_lang  = "pt-BR";
					bb_name = "custom";bb_limit = "4";bb_format = "bbm";&lt;/script&gt;
					&lt;script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"&gt;&lt;/script&gt;
					&lt;!-- boo-widget end --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3I9Gb9RkC_IVb4cj4hWvFAQZakI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3I9Gb9RkC_IVb4cj4hWvFAQZakI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3I9Gb9RkC_IVb4cj4hWvFAQZakI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3I9Gb9RkC_IVb4cj4hWvFAQZakI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lucianosilva/~4/ASjbnnWqX-c" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.lucianosilva.com/2009/02/13/apresentando-o-bpel-com-o-adapter-file/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://www.lucianosilva.com/2009/02/13/apresentando-o-bpel-com-o-adapter-file/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://www.lucianosilva.com/2009/02/13/apresentando-o-bpel-com-o-adapter-file/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luciano</name>
						<uri>http://www.lucianosilva.com</uri>
					</author>
		<title type="html"><![CDATA[Conhecendo a API do Twitter]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lucianosilva/~3/y__oTCPs4CQ/" />
		<id>http://www.lucianosilva.com/?p=122</id>
		<updated>2009-11-18T11:22:52Z</updated>
		<published>2009-01-21T12:32:38Z</published>
		<category scheme="http://www.lucianosilva.com" term="Programação" /><category scheme="http://www.lucianosilva.com" term="Redes Sociais" /><category scheme="http://www.lucianosilva.com" term="api" /><category scheme="http://www.lucianosilva.com" term="twitter" /><category scheme="http://www.lucianosilva.com" term="twitter4j" />		<summary type="html"><![CDATA[Incentivado por este post do Blog do Élcio que demonstrou a utilização da API do Twitter no ubuntu de uma maneira muito fácil e simples, então procurei saber um pouco mais sobre ela.
Existem algumas bibliotecas prontas para diversas linguagens, escolhi pela Twitter4j antes de mexer na API do Twitter mesmo, e não me arrependi com [...]]]></summary>
		<content type="html" xml:base="http://www.lucianosilva.com/2009/01/21/conhecendo-a-api-do-twitter/">&lt;p&gt;Incentivado por este &lt;a href="http://blog.elcio.com.br/brincando-com-a-api-do-twitter/" target="_blank"&gt;post&lt;/a&gt; do &lt;a href="http://blog.elcio.com.br/" target="_blank"&gt;Blog do Élcio&lt;/a&gt; que demonstrou a utilização da &lt;a href="http://apiwiki.twitter.com" target="_blank"&gt;API do Twitter&lt;/a&gt; no ubuntu de uma maneira muito fácil e simples, então procurei saber um pouco mais sobre ela.&lt;/p&gt;
&lt;p&gt;Existem algumas &lt;a href="http://apiwiki.twitter.com/Libraries#TableofContents"&gt;bibliotecas&lt;/a&gt; prontas para diversas linguagens, escolhi pela &lt;a href="http://yusuke.homeip.net/twitter4j/en/index.html"&gt;&lt;strong&gt;Twitter4j&lt;/strong&gt;&lt;/a&gt; antes de mexer na API do Twitter mesmo, e não me arrependi com algumas poucas linhas de código é possível atualizar seu status e até receber as últimas atualizações, veja como é simples.&lt;/p&gt;
&lt;pre class="brush: java;"&gt;

import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;

public class Twittando {

public static void main(String[] args) {
// usuário e senha do twitter
String usr = &amp;quot;lucianosilva&amp;quot;;
String pwd = &amp;quot;ABCDEFGHIJKL&amp;quot;;

try {

Twitter twitter = new Twitter(usr, pwd);
// atualizando o status do twitter
Status status   = twitter.update(&amp;quot;Twitter4J, muuito fácil de usar, recomendo!&amp;quot;);
System.out.println(&amp;quot;Result: &amp;quot; + status.getText() );

} catch (TwitterException e) {
e.printStackTrace();
}
}
}
&lt;/pre&gt;
&lt;p&gt;Não esqueça de fazer o download da biblioteca Twitter4j &lt;a href="http://yusuke.homeip.net/twitter4j/en/index.html" target="_blank"&gt;aqui&lt;/a&gt;. E se você for uma pessoa &amp;#8220;caprichosa&amp;#8221; assim como o Elcio, criaria um UPBox, mas&amp;#8230; no meu caso fiz um exemplo mais simples para demonstrar a lista de updates, veja o scriptlet:&lt;/p&gt;
&lt;pre class="brush: java;"&gt;

&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;
#box{
font-family:tahoma,arial;
font-size:10px;
border:1px #000000 solid;
background-color:#ffffff;
width: 300px;
height: 400px;
overflow: auto;
}
&amp;lt;/style&amp;gt;
...
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;
&amp;lt;%
Twitter twitter = new Twitter();
twitter.setUserId(&amp;quot;lucianosilva&amp;quot;);
twitter.setPassword(&amp;quot;ABCDEFGHIJKL&amp;quot;);

ArrayList&amp;lt;status&amp;gt; listUpdates = (ArrayList&amp;lt;status&amp;gt;) twitter.getFriendsTimeline();
for(Status status : listUpdates){
User user = status.getUser();
%&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;img src=&amp;quot;&amp;lt;%= user.getProfileImageURL() %&amp;gt;&amp;quot; border=2/&amp;gt;
&amp;amp;amp;amp;amp;amp;nbsp;:&amp;amp;amp;amp;amp;amp;nbsp;&amp;lt;%= status.getText() %&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;%
}// for each end
%&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Bacana né? Divirta-se.&lt;/p&gt;
&lt;!-- boo-widget start --&gt;
					&lt;script type="text/javascript"&gt;
					bb_keywords = "twitter4j";
					bb_bid  = "41213";
					bb_lang  = "pt-BR";
					bb_name = "custom";bb_limit = "4";bb_format = "bbm";&lt;/script&gt;
					&lt;script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"&gt;&lt;/script&gt;
					&lt;!-- boo-widget end --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/w49uMcapK3bP1TnfI-rafHyKBVM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/w49uMcapK3bP1TnfI-rafHyKBVM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/w49uMcapK3bP1TnfI-rafHyKBVM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/w49uMcapK3bP1TnfI-rafHyKBVM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lucianosilva/~4/y__oTCPs4CQ" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.lucianosilva.com/2009/01/21/conhecendo-a-api-do-twitter/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://www.lucianosilva.com/2009/01/21/conhecendo-a-api-do-twitter/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://www.lucianosilva.com/2009/01/21/conhecendo-a-api-do-twitter/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luciano</name>
						<uri>http://www.lucianosilva.com</uri>
					</author>
		<title type="html"><![CDATA[Combinando APIs GeoLite City com Google Maps]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lucianosilva/~3/YdxXas9aRMs/" />
		<id>http://www.lucianosilva.com/?p=113</id>
		<updated>2009-01-18T23:35:14Z</updated>
		<published>2009-01-18T23:35:14Z</published>
		<category scheme="http://www.lucianosilva.com" term="Ferramentas" /><category scheme="http://www.lucianosilva.com" term="Programação" /><category scheme="http://www.lucianosilva.com" term="api" /><category scheme="http://www.lucianosilva.com" term="geoip" /><category scheme="http://www.lucianosilva.com" term="google" /><category scheme="http://www.lucianosilva.com" term="maps" />		<summary type="html"><![CDATA[Hello there!
Maravilha, eu só tinha o IP e então conseguiu saber o País daquele endereço de IP, não satisfeito consegui mais dados sobre ele, então surgiu o Estado, Cidade, Latitude e Longitude, e talvez o CEP, o Código de Área internacional, quem sabe?
É mais uma vez eu não estou satisfeito e agora vou fazer com [...]]]></summary>
		<content type="html" xml:base="http://www.lucianosilva.com/2009/01/18/combinando-apis-geolite-city-com-google-maps/">&lt;p&gt;Hello there!&lt;/p&gt;
&lt;p&gt;Maravilha, eu só tinha o IP e então conseguiu saber o País daquele endereço de IP, não satisfeito consegui mais dados sobre ele, então surgiu o Estado, Cidade, Latitude e Longitude, e talvez o CEP, o Código de Área internacional, quem sabe?&lt;/p&gt;
&lt;p&gt;É mais uma vez eu não estou satisfeito e agora vou fazer com que estes dados sejam exibidos no mapa, usando o Google Maps API. =) E provarei que é tão fácil quanto foram os outros exemplos.&lt;/p&gt;
&lt;p&gt;Nós já sabemos o que ter em &amp;#8220;mãos&amp;#8221; para API GeoLite.&lt;/p&gt;
&lt;p&gt;&lt;img class="aligncenter size-full wp-image-100" title="arquivos-geolitecity" src="http://www.lucianosilva.com/wp-content/uploads/2009/01/arquivos-geolitecity.jpg" alt="arquivos-geolitecity" width="509" height="146" /&gt;&lt;/p&gt;
&lt;p&gt;Já para utilizar o Google Maps API você deve obter uma chave que permitirá fazer as consultas, veja mais aqui. O código descrito abaixo exibira uma mapa simples com alguns markets-point, mas é possível demonstrar o mapa de diversas maneiras, &lt;a href="http://code.google.com/intl/pt-BR/apis/maps/documentation/examples/"&gt;sabia mais&lt;/a&gt;.&lt;/p&gt;
&lt;pre class="brush: php;"&gt;

&amp;lt;?php
require(&amp;quot;geoipregionvars.php&amp;quot;);
require(&amp;quot;geoipcity.inc&amp;quot;);

// Obtem o IP
$vIP     = $_SERVER['REMOTE_ADDR'];

// Abre o arquivo dat com o banco de dados
$giCity  = geoip_open(&amp;quot;GeoLiteCity.dat&amp;quot;,GEOIP_STANDARD);

echo $vIP;

// obtem o registro do
$record  = geoip_record_by_addr($giCity, $vIP);
?&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Perceba que no JavaScript abaixo a url do maps solicita através do parâmetro key o código gerado para sua conta, eu substitui o valor por &amp;lt;COLOQUE-SUA-KEY-AQUI&amp;gt;.&lt;/p&gt;
&lt;pre class="brush: php;"&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot;
&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;&amp;gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;meta http-equiv=&amp;quot;content-type&amp;quot; content=&amp;quot;text/html; charset=utf-8&amp;quot;/&amp;gt;
&amp;lt;title&amp;gt;Google Maps JavaScript API Example&amp;lt;/title&amp;gt;
&amp;lt;!---// Mude o Key //--&amp;gt;
&amp;lt;script src=&amp;quot;http://maps.google.com/maps?file=api&amp;amp;amp;amp;amp;amp;amp;amp;v=2&amp;amp;amp;amp;amp;amp;amp;amp;key=&amp;lt;coloque-SUA-KEY-AQUI&amp;gt;&amp;quot;
type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;

function initialize() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById(&amp;quot;mapaGeoIP&amp;quot;));

// ---
// Aqui informamos a Latitude e Longitude do IP
//
map.setCenter(new GLatLng(&amp;lt;?= $record-&amp;gt;latitude ?&amp;gt;, &amp;lt;?= $record-&amp;gt;longitude ?&amp;gt;), 13);

// Adicionado 10 lugares (markets) randômicos próximo a localidade
var bounds = map.getBounds();
var southWest = bounds.getSouthWest();
var northEast = bounds.getNorthEast();
var lngSpan = northEast.lng() - southWest.lng();
var latSpan = northEast.lat() - southWest.lat();
for (var i = 0; i &amp;lt; 15; i++) {
var point = new GLatLng(southWest.lat() + latSpan * Math.random(),
southWest.lng() + lngSpan * Math.random());
map.addOverlay(new GMarker(point));
}
}
}
&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body onload=&amp;quot;initialize()&amp;quot; onunload=&amp;quot;GUnload()&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;mapaGeoIP&amp;quot; style=&amp;quot;width: 600px; height: 400px&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;
&lt;p&gt;&lt;img class="aligncenter size-full wp-image-136" title="google_maps1" src="http://www.lucianosilva.com/wp-content/uploads/2009/01/google_maps1.jpg" alt="google_maps1" width="459" height="590" /&gt;&lt;/p&gt;
&lt;p&gt;Este é um exercício muito interessante, veja que legal alterando o endereço de IP, para isto vá ao prompt de comando no Windows e digite, por exemplo:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;ping bb.com&lt;br /&gt;
ping google.com&lt;br /&gt;
ping cnn.com&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Namastê.&lt;/p&gt;
&lt;!-- boo-widget start --&gt;
					&lt;script type="text/javascript"&gt;
					bb_keywords = "maps";
					bb_bid  = "41213";
					bb_lang  = "pt-BR";
					bb_name = "custom";bb_limit = "4";bb_format = "bbm";&lt;/script&gt;
					&lt;script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"&gt;&lt;/script&gt;
					&lt;!-- boo-widget end --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/b3QAft3sEDEpkrBbx8yWgDZXT2o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/b3QAft3sEDEpkrBbx8yWgDZXT2o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/b3QAft3sEDEpkrBbx8yWgDZXT2o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/b3QAft3sEDEpkrBbx8yWgDZXT2o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lucianosilva/~4/YdxXas9aRMs" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.lucianosilva.com/2009/01/18/combinando-apis-geolite-city-com-google-maps/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.lucianosilva.com/2009/01/18/combinando-apis-geolite-city-com-google-maps/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.lucianosilva.com/2009/01/18/combinando-apis-geolite-city-com-google-maps/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luciano</name>
						<uri>http://www.lucianosilva.com</uri>
					</author>
		<title type="html"><![CDATA[GeoLite City informações completas do seu IP &#8211; Parte II]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lucianosilva/~3/u_RApZ9O314/" />
		<id>http://www.lucianosilva.com/?p=93</id>
		<updated>2009-01-18T21:38:23Z</updated>
		<published>2009-01-18T21:38:23Z</published>
		<category scheme="http://www.lucianosilva.com" term="Programação" /><category scheme="http://www.lucianosilva.com" term="city" /><category scheme="http://www.lucianosilva.com" term="geoip" /><category scheme="http://www.lucianosilva.com" term="php" />		<summary type="html"><![CDATA[Você já viu que utilizando as bibliotecas do GeoLite é possivel localizar o pais de um IP, mas é uma informação limitada, já com o GeoLite City exibe informações mais detalhadas além do Pais como Estado, Cidade, Latitude e Longitude, Código Postal (CEP) e muito mais.
Como esta é uma ferramenta gratuita, algumas informações não estão [...]]]></summary>
		<content type="html" xml:base="http://www.lucianosilva.com/2009/01/18/geolite-city-ip-parte-ii/">&lt;p&gt;Você já viu que utilizando as bibliotecas do GeoLite é possivel localizar o pais de um IP, mas é uma informação limitada, já com o &lt;a href="http://www.maxmind.com/app/geolitecity"&gt;GeoLite City&lt;/a&gt; exibe informações mais detalhadas além do Pais como Estado, Cidade, Latitude e Longitude, Código Postal (CEP) e muito mais.&lt;br /&gt;
Como esta é uma ferramenta gratuita, algumas informações não estão totalmente completas como por exemplo o CEP e  Código de Área (telefônia). Em meus testes consegui identificar que para os EUA, Canadá e Itália estes dados estão disponíveis, mas para o Brasil (pelo menos para o estado de São Paulo) ainda não.&lt;/p&gt;
&lt;p&gt;Este código complementa o mesmo utilizado em &lt;a href="http://www.lucianosilva.com/obtendo-localizacao-ip-parte-i/"&gt;GeoLite Country&lt;/a&gt;, porém, utiliza um objeto com as caracteristicas de localização.&lt;/p&gt;
&lt;p&gt;Faça o download do arquivo &lt;a href="http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz"&gt;dat&lt;/a&gt;, copie o &lt;a href="http://geolite.maxmind.com/download/geoip/api/php/geoipcity.inc"&gt;geoipcity.inc&lt;/a&gt; também, crie o arquivo &amp;#8211; &lt;em&gt;geoipregionvars.php&lt;/em&gt; &amp;#8211; com as variáveis e constantes necessárias como &lt;a href="http://geolite.maxmind.com/download/geoip/api/php/geoipregionvars.php"&gt;este&lt;/a&gt;, certifique-se que o arquivo &lt;a href="http://geolite.maxmind.com/download/geoip/api/php/geoip.inc"&gt;geoip.inc&lt;/a&gt; esteja na sua estrutura de arquivos, que deverá ficar assim:&lt;/p&gt;
&lt;p&gt;&lt;img class="aligncenter size-full wp-image-100" title="arquivos-geolitecity" src="http://www.lucianosilva.com/wp-content/uploads/2009/01/arquivos-geolitecity.jpg" alt="arquivos-geolitecity" width="509" height="146" /&gt;&lt;/p&gt;
&lt;p&gt;Vamos ao código! O seu arquivo index.php deverá centralizar a obtenção do IP e chamar as funções para decodificar e exibir os dados sobre ele, veja:&lt;/p&gt;
&lt;pre class="brush: php;"&gt;

&amp;lt;?php

// Includes da API
require(&amp;quot;geoipregionvars.php&amp;quot;);
require(&amp;quot;geoipcity.inc&amp;quot;);

// Obtem o IP
$vIP     = $_SERVER['REMOTE_ADDR'];

// Abre o arquivo dat com o banco de dados
$giCity  = geoip_open(&amp;quot;GeoLiteCity.dat&amp;quot;,GEOIP_STANDARD);

// obtem o registro do
$record  = geoip_record_by_addr($giCity, $vIP);
?&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Até aqui conseguimos identificar o IP e obter as informações sobre de localização que está na variável &lt;em&gt;$record&lt;/em&gt;, a seguir esta a camada de visualização dos dados.&lt;/p&gt;
&lt;pre class="brush: php;"&gt;

&amp;lt;?
// obtem o registro do
$record  = geoip_record_by_addr($giCity, $vIP);
if( !empty($record) ){?&amp;gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;1&amp;quot;&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th colspan=&amp;quot;2&amp;quot;&amp;gt;Informações sobre o IP
&amp;lt;em&amp;gt;&amp;quot;&amp;lt;?= $vIP ?&amp;gt;&amp;quot;&amp;lt;/em&amp;gt;&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td width=&amp;quot;35%&amp;quot;&amp;gt;País&amp;lt;/td&amp;gt;
&amp;lt;td width=&amp;quot;65%&amp;quot;&amp;gt;&amp;lt;?= $record-&amp;gt;country_name ?&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td&amp;gt;Estado&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;
&amp;lt;?=$GEOIP_REGION_NAME[$record-&amp;gt;country_code][$record-&amp;gt;region] ?&amp;gt;

&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td&amp;gt;Cidade&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;&amp;lt;?= $record-&amp;gt;city ?&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;?    if(!empty($record-&amp;gt;postal_code)){ ?&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td&amp;gt;CEP&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;&amp;lt;?= $record-&amp;gt;postal_code ?&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;? } ?&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td&amp;gt;Latitude&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;&amp;lt;?= $record-&amp;gt;latitude ?&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td&amp;gt;Longitude&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;&amp;lt;?= $record-&amp;gt;longitude ?&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;?
}
?&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Have a fun.&lt;/p&gt;
&lt;!-- boo-widget start --&gt;
					&lt;script type="text/javascript"&gt;
					bb_keywords = "php";
					bb_bid  = "41213";
					bb_lang  = "pt-BR";
					bb_name = "custom";bb_limit = "4";bb_format = "bbm";&lt;/script&gt;
					&lt;script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"&gt;&lt;/script&gt;
					&lt;!-- boo-widget end --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/tKCXlUz-wT23rF5q6FFcFDk8BAs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tKCXlUz-wT23rF5q6FFcFDk8BAs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/tKCXlUz-wT23rF5q6FFcFDk8BAs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tKCXlUz-wT23rF5q6FFcFDk8BAs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lucianosilva/~4/u_RApZ9O314" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.lucianosilva.com/2009/01/18/geolite-city-ip-parte-ii/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.lucianosilva.com/2009/01/18/geolite-city-ip-parte-ii/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.lucianosilva.com/2009/01/18/geolite-city-ip-parte-ii/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luciano</name>
						<uri>http://www.lucianosilva.com</uri>
					</author>
		<title type="html"><![CDATA[GeoLite Country Obtendo a localização por IP &#8211; Parte I]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lucianosilva/~3/I9n5z9o_AAs/" />
		<id>http://www.lucianosilva.com/?p=86</id>
		<updated>2009-01-18T18:36:51Z</updated>
		<published>2009-01-18T18:36:51Z</published>
		<category scheme="http://www.lucianosilva.com" term="Programação" /><category scheme="http://www.lucianosilva.com" term="country" /><category scheme="http://www.lucianosilva.com" term="geoip" /><category scheme="http://www.lucianosilva.com" term="php" />		<summary type="html"><![CDATA[Certa vez fiz um curso de um determinado produto cujo sua função basicamente era medir a audiência dos sites da empresa em que trabalhava, na mesma época onde pagava-se absurdos por este tipo de informação, irônia ou não, hoje o Google Analytics faz gratuitamente. O que me mais me fascinou foi quando a instrutora explicou [...]]]></summary>
		<content type="html" xml:base="http://www.lucianosilva.com/2009/01/18/obtendo-localizacao-ip-parte-i/">&lt;p&gt;Certa vez fiz um curso de um determinado produto cujo sua função basicamente era medir a audiência dos sites da empresa em que trabalhava, na mesma época onde pagava-se absurdos por este tipo de informação, irônia ou não, hoje o Google Analytics faz gratuitamente. O que me mais me fascinou foi quando a instrutora explicou a importância do IP, como é distribuído, o que é possível fazer através de seu rastreamento, assuntos de deixar qualquer geek boquiaberto.&lt;/p&gt;
&lt;p&gt;Portanto, resolvi fazer este post para demonstrar uma facilidade muito interessante e pouco utilizado em sites nacionais, como os de operadora de telefônia, que preferem perguntar qual a sua cidade ao invés de identificar seu IP e redirecioná-lo aos serviços prestados em sua região e, fornecer uma opção para mudar de região quando quiser.&lt;/p&gt;
&lt;p&gt;Talvez você encontre diversos outros bancos de dados de IPs na internet, porém, o mais popular é da &lt;a href="http://www.maxmind.com/app/country"&gt;Maxmind&lt;/a&gt;, que disponibiliza um bom serviço e gratuíto e também um serviço mais amplo por alguns dólares. A versão free é chamada de GeoLite e fornece além dos dados em CSV e DAT, incluí uma série de APIs para as linguagens de programação mais populares e alguns tutoriais de como utilizá-las, aqui utilizaremos PHP.&lt;/p&gt;
&lt;p&gt;Vamos lá, faça o download do &lt;a href="http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz"&gt;arquivo dat do GeoLite Country&lt;/a&gt;, e depois &lt;a href="http://geolite.maxmind.com/download/geoip/api/php/geoip.inc"&gt;baixe&lt;/a&gt; as funções para manipulação do arquivo dat. Não será necessária nenhuma configuração no servidor tão menos no PHP, veja como é simples a identificação de pais utilizando os recursos do GeoLite Country.&lt;/p&gt;
&lt;pre class="brush: php;"&gt;

&amp;lt;?php

// Inclui as funções do GeoIP Country
require(&amp;quot;geoip.inc&amp;quot;);

// Abre o arquivo .dat (banco de dados)
// especificando o caminho fisico do mesmo.
$gi = geoip_open(&amp;quot;GeoIP.dat&amp;quot;, GEOIP_STANDARD);
// recebendo o IP
$vIP = $_SERVER['REMOTE_ADDR'];
echo &amp;quot;Endereço de IP identificado: &amp;quot; . $vIP . &amp;quot;&amp;lt;br/&amp;gt;&amp;quot;;
// Exibe a sigla e o nome do País
echo geoip_country_code_by_addr($gi, $vIP);
echo geoip_country_name_by_addr($gi, $vIP);

// fecha a conexão com o banco de dados
geoip_close($gi);
?&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Uma informação básica como esta, permite aos sites de serviços fornecerem funcionalidades, customizações, atrações no geral para que seu visitante sinta-se mais confortável se isto é possível.&lt;/p&gt;
&lt;p&gt;Vou dar sequência a esta sessão de post, aprofundando as funcionalidades do GeoLite.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Namastê.&lt;/strong&gt;&lt;/p&gt;
&lt;!-- boo-widget start --&gt;
					&lt;script type="text/javascript"&gt;
					bb_keywords = "php";
					bb_bid  = "41213";
					bb_lang  = "pt-BR";
					bb_name = "custom";bb_limit = "4";bb_format = "bbm";&lt;/script&gt;
					&lt;script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"&gt;&lt;/script&gt;
					&lt;!-- boo-widget end --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/w_T23qd0yJcATaJ7FBEg43MRrAY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/w_T23qd0yJcATaJ7FBEg43MRrAY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/w_T23qd0yJcATaJ7FBEg43MRrAY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/w_T23qd0yJcATaJ7FBEg43MRrAY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lucianosilva/~4/I9n5z9o_AAs" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.lucianosilva.com/2009/01/18/obtendo-localizacao-ip-parte-i/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://www.lucianosilva.com/2009/01/18/obtendo-localizacao-ip-parte-i/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://www.lucianosilva.com/2009/01/18/obtendo-localizacao-ip-parte-i/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luciano</name>
						<uri>http://www.lucianosilva.com</uri>
					</author>
		<title type="html"><![CDATA[A minha Search Engine]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lucianosilva/~3/ZRbKtoXh8hE/" />
		<id>http://www.lucianosilva.com/?p=73</id>
		<updated>2009-01-16T13:02:50Z</updated>
		<published>2009-01-16T13:02:50Z</published>
		<category scheme="http://www.lucianosilva.com" term="Plugins" /><category scheme="http://www.lucianosilva.com" term="extension" /><category scheme="http://www.lucianosilva.com" term="firefox" /><category scheme="http://www.lucianosilva.com" term="ie7" /><category scheme="http://www.lucianosilva.com" term="opensearch" /><category scheme="http://www.lucianosilva.com" term="plugin" />		<summary type="html"><![CDATA[Complementando o post anterior, aqui está o extension para adicionar ao seu Firefox 2+ ou IE 7+.
Você poderá fazer um OpenSearch para seu navegador como já foi explicado, e para divulga-lo facilmente, basta que em seu site exista o metadado seguindo o exemplo abaixo:


&#60;link rel=&#34;search&#34;
type=&#34;application/opensearchdescription+xml&#34;
title=&#34;Luciano Silva&#34;
href=&#34;http://www.lucianosilva.com/lucianosilva-opensearch.xml&#34;&#62;

Assim o navegador faz um autodiscovery, e habilitará a opção [...]]]></summary>
		<content type="html" xml:base="http://www.lucianosilva.com/2009/01/16/a-minha-search-engine/">&lt;p&gt;Complementando o post anterior, &lt;a href="http://mycroft.mozdev.org/search-engines.html?name=lucianosilva.com" target="_blank"&gt;aqui está o extension para adicionar ao seu Firefox 2+ ou IE 7+&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Você poderá fazer um OpenSearch para seu navegador como já foi explicado, e para divulga-lo facilmente, basta que em seu site exista o metadado seguindo o exemplo abaixo:&lt;/p&gt;
&lt;pre class="brush: xml;"&gt;

&amp;lt;link rel=&amp;quot;search&amp;quot;
type=&amp;quot;application/opensearchdescription+xml&amp;quot;
title=&amp;quot;Luciano Silva&amp;quot;
href=&amp;quot;http://www.lucianosilva.com/lucianosilva-opensearch.xml&amp;quot;&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Assim o navegador faz um autodiscovery, e habilitará a opção &amp;#8220;Adicionar Mecanismo de Busca&amp;#8221; na barra de pesquisa, desta maneira qualquer pessoa sem conhecimento técnico poderá mais facilmente fazer pesquisas em seu site.&lt;/p&gt;
&lt;p&gt;&lt;img class="aligncenter size-full wp-image-82" title="search bar" src="http://www.lucianosilva.com/wp-content/uploads/2009/01/search_bar1.jpg" alt="search bar" width="461" height="230" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nasmatê&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Veja mais:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://developer.mozilla.org/en/Creating_OpenSearch_plugins_for_Firefox" target="_blank"&gt;https://developer.mozilla.org/en/Creating_OpenSearch_plugins_for_Firefox&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://developer.mozilla.org/en/Adding_search_engines_from_web_pages" target="_blank"&gt;https://developer.mozilla.org/en/Adding_search_engines_from_web_pages&lt;/a&gt;&lt;/p&gt;
&lt;!-- boo-widget start --&gt;
					&lt;script type="text/javascript"&gt;
					bb_keywords = "plugin";
					bb_bid  = "41213";
					bb_lang  = "pt-BR";
					bb_name = "custom";bb_limit = "4";bb_format = "bbm";&lt;/script&gt;
					&lt;script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"&gt;&lt;/script&gt;
					&lt;!-- boo-widget end --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/QUTHLigZZVCkVocsuYPuNCQ-Z8U/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QUTHLigZZVCkVocsuYPuNCQ-Z8U/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/QUTHLigZZVCkVocsuYPuNCQ-Z8U/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QUTHLigZZVCkVocsuYPuNCQ-Z8U/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lucianosilva/~4/ZRbKtoXh8hE" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.lucianosilva.com/2009/01/16/a-minha-search-engine/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.lucianosilva.com/2009/01/16/a-minha-search-engine/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.lucianosilva.com/2009/01/16/a-minha-search-engine/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luciano</name>
						<uri>http://www.lucianosilva.com</uri>
					</author>
		<title type="html"><![CDATA[Criando Search Engines para seu navegador]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lucianosilva/~3/DwNJ26vakBM/" />
		<id>http://www.lucianosilva.com/?p=66</id>
		<updated>2009-01-13T18:15:08Z</updated>
		<published>2009-01-13T18:15:08Z</published>
		<category scheme="http://www.lucianosilva.com" term="Plugins" /><category scheme="http://www.lucianosilva.com" term="extension" /><category scheme="http://www.lucianosilva.com" term="firefox" /><category scheme="http://www.lucianosilva.com" term="ie7" /><category scheme="http://www.lucianosilva.com" term="opensearch" /><category scheme="http://www.lucianosilva.com" term="plugin" />		<summary type="html"><![CDATA[Depois que o inovador Firefox 2, seguido pelo IE 7, acrescentarem um box para site pesquisa ao lado da barra de endereços do próprio navegador, você já se perguntou quantas vezes foi direto a página do Google, Ask ou Yahoo? Bem (tom sarcastico) se você ainda faz isto está perdendo tempo meu amigo.
O Search Engine [...]]]></summary>
		<content type="html" xml:base="http://www.lucianosilva.com/2009/01/13/criando-search-engines/">&lt;p&gt;Depois que o inovador Firefox 2, seguido pelo IE 7, acrescentarem um box para site pesquisa ao lado da barra de endereços do próprio navegador, você já se perguntou quantas vezes foi direto a página do Google, Ask ou Yahoo? Bem (tom sarcastico) se você ainda faz isto está perdendo tempo meu amigo.&lt;br /&gt;
O Search Engine Box disponibiliza milhares opções diferentes de sites para pesquisa de conteúdo, portanto se você costuma utilizar muito algum site economize tempo e adicione-o em seu navegador, mas se por um acaso não existir? Crie, ué! =)&lt;/p&gt;
&lt;p&gt;Utilize o OpenSearch Description, como o próprio site deles diz é uma coleção de simples formatos para compartilhamento de resultados das pesquisas! =)&lt;br /&gt;
Criando um simples XML, você poderá descrever o seu engenho de pesquisa de um determinado site, na descrição abaixo utilizarei este blog como exemplo, e você poderá adicioná-lo ao seu navegador.&lt;/p&gt;
&lt;pre class="brush: xml;"&gt;

&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
&amp;lt;openSearchDescription xmlns=&amp;quot;http://a9.com/-/spec/opensearch/1.1/&amp;quot;
xmlns:moz=&amp;quot;http://www.mozilla.org/2006/browser/search/&amp;quot;&amp;gt;
&amp;lt;shortName&amp;gt;Luciano Silva&amp;lt;/shortName&amp;gt;
&amp;lt;description&amp;gt;Luciano Silva, o mesmo bla bla bla de sempre&amp;lt;/description&amp;gt;
&amp;lt;url type=&amp;quot;text/html&amp;quot; method=&amp;quot;get&amp;quot; template=&amp;quot;://lucianosilva.com/?s={searchTerms}&amp;quot;/&amp;gt;
&amp;lt;image width=&amp;quot;16&amp;quot; height=&amp;quot;16&amp;quot;&amp;gt;http://www.lucianosilva.com/favicon.ico&amp;lt;/image&amp;gt;
&amp;lt;developer&amp;gt;Luciano Silva&amp;lt;/developer&amp;gt;
&amp;lt;moz:UpdateInterval&amp;gt;7&amp;lt;/moz:UpdateInterval&amp;gt;
&amp;lt;/openSearchDescription&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Salve o arquivo como lucianosila.xml, pronto simples assim, agora você poderá adicionar ao seu navegador. Se você quiser entender melhor cada tag do XML acima veja a especificação &lt;a href="http://www.opensearch.org/Specifications/OpenSearch/1.1" target="_blank"&gt;aqui&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Agora você poderá adicionar o seu novo Search Engine em seu navegador, e não apenas isto, poderá também compartilhar com todos que queiram utilizá-lo. Vá até o site do &lt;a href="http://mycroft.mozdev.org" target="_blank"&gt;Mycroft Project&lt;/a&gt; e envie o seu plugin, após 24 horas eles irão avaliar se o que foi feito é compativel com os navegadores e se esta funcionando corretamente e, somente depois disponibilizá-lo na página do projeto.&lt;/p&gt;
&lt;p&gt;Você também pode construir o seu Search Engine mais fácilmente (ignorando o código acima), basta seguir o passo-a-passo do próprio site dos caras, &lt;a href="http://mycroft.mozdev.org/submitos.html" target="_blank"&gt;veja&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Bem, eu falei bastante do suporte ao firefox, por que é o meu navegador favorito, porém, se você utiliza o Internet Explorer 7+ seguindo o tutorial acima terá suporte também. Uma outra curiosidade é que na página de Search Engines da Microsoft, está disponível um &lt;a href="http://www.microsoft.com/windows/ie/searchguide/pt-br/default.mspx?dcsref=http://runonce.msn.com/runonce2.aspx" target="_blank"&gt;serviço para adicionar instântaneamente&lt;/a&gt; um novo provedor ao browser, de maneira simples.&lt;/p&gt;
&lt;p&gt;Have a fun.&lt;/p&gt;
&lt;p&gt;Referências:&lt;br /&gt;
&lt;a href="http://www.opensearch.org/" target="_blank"&gt; http://www.opensearch.org/&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://developer.mozilla.org/en/Adding_search_engines_from_web_pages" target="_blank"&gt; https://developer.mozilla.org/en/Adding_search_engines_from_web_pages&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://developer.mozilla.org/en/Creating_OpenSearch_plugins_for_Firefox" target="_blank"&gt; https://developer.mozilla.org/en/Creating_OpenSearch_plugins_for_Firefox&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.wikihow.com/Add-a-Custom-Search-Engine-to-Firefox%27s-Search-Bar-(Windows-Version)" target="_blank"&gt; http://www.wikihow.com/Add-a-Custom-Search-Engine-to-Firefox%27s-Search-Bar-(Windows-Version)&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.microsoft.com/windows/ie/searchguide/pt-br/default.mspx" target="_blank"&gt; http://www.microsoft.com/windows/ie/searchguide/pt-br/default.mspx&lt;/a&gt;&lt;/p&gt;
&lt;!-- boo-widget start --&gt;
					&lt;script type="text/javascript"&gt;
					bb_keywords = "plugin";
					bb_bid  = "41213";
					bb_lang  = "pt-BR";
					bb_name = "custom";bb_limit = "4";bb_format = "bbm";&lt;/script&gt;
					&lt;script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"&gt;&lt;/script&gt;
					&lt;!-- boo-widget end --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/A8Uu_gzpJJ1cU6LgyV8nFMTiVkY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A8Uu_gzpJJ1cU6LgyV8nFMTiVkY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/A8Uu_gzpJJ1cU6LgyV8nFMTiVkY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A8Uu_gzpJJ1cU6LgyV8nFMTiVkY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lucianosilva/~4/DwNJ26vakBM" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.lucianosilva.com/2009/01/13/criando-search-engines/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.lucianosilva.com/2009/01/13/criando-search-engines/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.lucianosilva.com/2009/01/13/criando-search-engines/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luciano</name>
						<uri>http://www.lucianosilva.com</uri>
					</author>
		<title type="html"><![CDATA[Sun Certified Java Programmer &#8211; Requisitos]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lucianosilva/~3/nUSI0InUfrk/" />
		<id>http://www.lucianosilva.com/?p=57</id>
		<updated>2008-12-08T16:35:47Z</updated>
		<published>2008-12-08T16:35:47Z</published>
		<category scheme="http://www.lucianosilva.com" term="Programação" /><category scheme="http://www.lucianosilva.com" term="Java" /><category scheme="http://www.lucianosilva.com" term="scjp" />		<summary type="html"><![CDATA[O exame CX-310-055 da Sun é para a Certificação Java versão 1.5 da linguagem, uma das metas mais cobiçadas entre os programadores da plataforma e também uma das mais temidas.
Básicamente são testados conhecimentos primordiais da linguagem como declarações, controle de escopo, condições,  APIs específicas até conceitos de orientação a objetos.
Atualmente a versão da SCJP é [...]]]></summary>
		<content type="html" xml:base="http://www.lucianosilva.com/2008/12/08/sun-certified-java-programmer-requisitos/">&lt;p&gt;O exame CX-310-055 da Sun é para a Certificação Java versão 1.5 da linguagem, uma das metas mais cobiçadas entre os programadores da plataforma e também uma das mais temidas.&lt;br /&gt;
Básicamente são testados conhecimentos primordiais da linguagem como declarações, controle de escopo, condições,  APIs específicas até conceitos de orientação a objetos.&lt;/p&gt;
&lt;p&gt;Atualmente a versão da SCJP é a 6, porém ainda é possível fazer a 5, existem cursos específico preparatórios para a certificação, mas eu ainda prefiro seguir o bom e velho livro da Kathy Sierra, e os mocks que são diversas opções pela internet.&lt;/p&gt;
&lt;p&gt;Abaixo vou listar alguns links úteis para auxiliar nos estudos.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mocks&lt;/strong&gt;&lt;br /&gt;
&lt;a href="http://www.javabeat.net/javabeat/scjp5/index.php" target="_blank"&gt; http://www.javabeat.net/javabeat/scjp5/index.php&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.wickedlysmart.com/SCJPStudyGuide/Java_5_SCJPquestions.html" target="_blank"&gt; http://www.wickedlysmart.com/SCJPStudyGuide/Java_5_SCJPquestions.html&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.javabeat.net/javabeat/scjp5/mocks/index.php" target="_blank"&gt; http://www.javabeat.net/javabeat/scjp5/mocks/index.php&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Perguntas Frequêntes no JavaRanch&lt;/strong&gt;&lt;br /&gt;
&lt;a href="http://faq.javaranch.com/java/ScjpFaq" target="_blank"&gt; http://faq.javaranch.com/java/ScjpFaq&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Guia de Estudos e Dicas&lt;/strong&gt;&lt;br /&gt;
&lt;a href="http://java.boot.by/scjp-tiger/" target="_blank"&gt; http://java.boot.by/scjp-tiger/&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://camilolopes.wordpress.com/2008/03/31/falando-um-pouco-sobre-o-exame-310-055-scjp/" target="_blank"&gt; http://camilolopes.wordpress.com/2008/03/31/falando-um-pouco-sobre-o-exame-310-055-scjp/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Livro da Kathy Sierra&lt;/strong&gt;&lt;br /&gt;
&lt;a href="http://www.submarino.com.br/produto/1/1808932/scjp:+certificacao+sun+para+programador+java+5+-+guia+de+estudo" target="_blank"&gt; Submarino&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://astore.amazon.com/javabeat-20/detail/0072253606/002-4766180-9401631" target="_blank"&gt;Amazon&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Twitter da Kathy &lt;/strong&gt;&lt;br /&gt;
&lt;a href="http://twitter.com/KathySierra" target="_blank"&gt; http://twitter.com/KathySierra&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Detalhes da Certificação&lt;/strong&gt;&lt;br /&gt;
&lt;a href="http://www.sun.com/training/catalog/courses/CX-310-055.xml" target="_blank"&gt; http://www.sun.com/training/catalog/courses/CX-310-055.xml&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Boa Sorte!&lt;/p&gt;
&lt;!-- boo-widget start --&gt;
					&lt;script type="text/javascript"&gt;
					bb_keywords = "scjp";
					bb_bid  = "41213";
					bb_lang  = "pt-BR";
					bb_name = "custom";bb_limit = "4";bb_format = "bbm";&lt;/script&gt;
					&lt;script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"&gt;&lt;/script&gt;
					&lt;!-- boo-widget end --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Z24EWr7qDo0Z5PLj5844eiAFJ-Q/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Z24EWr7qDo0Z5PLj5844eiAFJ-Q/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Z24EWr7qDo0Z5PLj5844eiAFJ-Q/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Z24EWr7qDo0Z5PLj5844eiAFJ-Q/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lucianosilva/~4/nUSI0InUfrk" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.lucianosilva.com/2008/12/08/sun-certified-java-programmer-requisitos/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://www.lucianosilva.com/2008/12/08/sun-certified-java-programmer-requisitos/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://www.lucianosilva.com/2008/12/08/sun-certified-java-programmer-requisitos/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luciano</name>
						<uri>http://www.lucianosilva.com</uri>
					</author>
		<title type="html"><![CDATA[Recuperando tablespace sem backup e sem mágica!]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lucianosilva/~3/_MoA8ACyLpk/" />
		<id>http://www.lucianosilva.com/?p=56</id>
		<updated>2008-10-31T18:05:13Z</updated>
		<published>2008-10-31T18:05:13Z</published>
		<category scheme="http://www.lucianosilva.com" term="Banco de Dados" /><category scheme="http://www.lucianosilva.com" term="oracle" /><category scheme="http://www.lucianosilva.com" term="recover" /><category scheme="http://www.lucianosilva.com" term="tablespace" />		<summary type="html"><![CDATA[Well, faz um tempo que não passo por aqui mas, o motivo é justo, final da graduação, muita correira com o trabalho de conclusão de curso e alguns novos desafios.
E&#8230; por falar em desafio, eu encarei um recentemente, não é uma coisa tão complexa, porém exigiu muita pesquisa e testes, a proposta era a seguinte [...]]]></summary>
		<content type="html" xml:base="http://www.lucianosilva.com/2008/10/31/recuperando-tablespace-sem-backup-e-sem-magica/">&lt;p&gt;Well, faz um tempo que não passo por aqui mas, o motivo é justo, final da graduação, muita correira com o trabalho de conclusão de curso e alguns novos desafios.&lt;br /&gt;
E&amp;#8230; por falar em desafio, eu encarei um recentemente, não é uma coisa tão complexa, porém exigiu muita pesquisa e testes, a proposta era a seguinte &amp;#8220;recuperar uma tablespace sem backup&amp;#8221;. Auto-explicativo, não?&lt;/p&gt;
&lt;p&gt;Vamos ao que interessa, primeiramente vou criar o cenário, ativando o archive log, em seguida será criada uma tablespace qualquer, forçaremos uma alternância de logs para que o redo log receba o objeto.&lt;/p&gt;
&lt;p&gt;Passo 1 &amp;#8211; Inicie o banco de dados normalmente e verifique se está no modo de arquivamento automático&lt;/p&gt;
&lt;pre class="brush: sql;"&gt;
archive log list;
&lt;/pre&gt;
&lt;p&gt;Se o banco não estiver no modo de arquivamento faça isto&lt;/p&gt;
&lt;pre class="brush: sql;"&gt;
alter database archivelog
alter system set log_archive_start=true scope=spfile;

alter database open;
&lt;/pre&gt;
&lt;p&gt;É necessário reiniciar o banco pq o escopo da alteração foi o spfile&lt;/p&gt;
&lt;pre class="brush: sql;"&gt;
shutdown immediate;
startup
&lt;/pre&gt;
&lt;p&gt;Passo 2 &amp;#8211; Como SYS crie uma simples tablespace TB_CURSO&lt;/p&gt;
&lt;pre class="brush: sql;"&gt;
create tablespace tb_curso datafile 'c:\oracle\oradata\DBWORK2\tb_curso.dbf'
size 2m
autoextend on;
&lt;/pre&gt;
&lt;p&gt;Com o usuário scott crie uma tabela qualquer, apenas para que a tablepace tenha um conteúdo.&lt;/p&gt;
&lt;pre class="brush: sql;"&gt;
conn scott/tiger@dbwork2

-- criando tabela OPS
create table ops (id number) tablespace tb_curso;

-- populando a tabela
insert into ops values(1);
insert into ops values(1);
insert into ops values(1);
insert into ops values(1);
insert into ops values(1);
insert into ops values(1);
insert into ops values(1);
insert into ops values(1);
insert into ops values(1);
insert into ops values(1);
commit;

select count(*) from ops;
&lt;/pre&gt;
&lt;p&gt;Reconecte como SYS e force a alternância de logs&lt;/p&gt;
&lt;pre class="brush: sql;"&gt;
conn sys/oracle@dbwork2 as sysdba

-- alternância de log
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
&lt;/pre&gt;
&lt;p&gt;Passo 4 &amp;#8211; Apagando a tablespace, neste momento será proposital mas talvez um dia você passe por uma situação desesperadora e acidental, ou não. Enfim, apague o arquivo físico da tablespace, antes feche o banco de dados.&lt;/p&gt;
&lt;p&gt;&amp;#8211; fechando o banco&lt;/p&gt;
&lt;pre class="brush: sql;"&gt;
shutdown immediate;
&lt;/pre&gt;
&lt;p&gt;&amp;#8211; Apague o datafile &amp;#8216;c:\oracle\oradata\DBWORK2\tb_curso.dbf&amp;#8217;&lt;/p&gt;
&lt;p&gt;Passo 5 &amp;#8211; Recuperando a tablespace.&lt;/p&gt;
&lt;p&gt;&amp;#8211; Inicie o banco de dados como SYS&lt;/p&gt;
&lt;pre class="brush: sql;"&gt;
startup
&lt;/pre&gt;
&lt;p&gt;Neste momento você irá receber uma mensagem de erro, que indicará o problema no datafile, não se desespere!&lt;br /&gt;
Aqui está o segredo, basta você criar um novo datafile como se você o apagado, desta maneira.&lt;/p&gt;
&lt;pre class="brush: sql;"&gt;
alter database create datafile
'C:\ORACLE\ORADATA\DBWORK2\tb_curso.DBF' as
'C:\ORACLE\ORADATA\DBWORK2\tb_curso01.DBF';
&lt;/pre&gt;
&lt;p&gt;Bem, ainda não está tudo resolvido, você deverá aplicar o recover dos dados da tablespace que estão no redo log.&lt;br /&gt;
recover tablespace tb_curso;&lt;/p&gt;
&lt;p&gt;Após aparecer a mensagem &amp;#8220;Recuperação de mídia concluída&amp;#8221;, abra o banco de dados e verifique a tabela OPS do usuário scott.&lt;/p&gt;
&lt;pre class="brush: sql;"&gt;
-- abra o banco novamente
alter database open;

-- consultando os registros
select * from scott.ops;
&lt;/pre&gt;
&lt;p&gt;That&amp;#8217;s all!&lt;/p&gt;
&lt;!-- boo-widget start --&gt;
					&lt;script type="text/javascript"&gt;
					bb_keywords = "tablespace";
					bb_bid  = "41213";
					bb_lang  = "pt-BR";
					bb_name = "custom";bb_limit = "4";bb_format = "bbm";&lt;/script&gt;
					&lt;script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"&gt;&lt;/script&gt;
					&lt;!-- boo-widget end --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IuGoVErP--gSv_wROAxzXAWE_8Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IuGoVErP--gSv_wROAxzXAWE_8Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IuGoVErP--gSv_wROAxzXAWE_8Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IuGoVErP--gSv_wROAxzXAWE_8Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lucianosilva/~4/_MoA8ACyLpk" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.lucianosilva.com/2008/10/31/recuperando-tablespace-sem-backup-e-sem-magica/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.lucianosilva.com/2008/10/31/recuperando-tablespace-sem-backup-e-sem-magica/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.lucianosilva.com/2008/10/31/recuperando-tablespace-sem-backup-e-sem-magica/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luciano</name>
						<uri>http://www.lucianosilva.com</uri>
					</author>
		<title type="html"><![CDATA[Annotations e XFire um jeito simples de criar Web Services]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lucianosilva/~3/Zrs9ex832Hk/" />
		<id>http://www.lucianosilva.com/?p=55</id>
		<updated>2008-08-16T23:11:37Z</updated>
		<published>2008-08-16T23:11:37Z</published>
		<category scheme="http://www.lucianosilva.com" term="Programação" /><category scheme="http://www.lucianosilva.com" term="annotations" /><category scheme="http://www.lucianosilva.com" term="jsr-181" /><category scheme="http://www.lucianosilva.com" term="jsr-224" /><category scheme="http://www.lucianosilva.com" term="webservices" /><category scheme="http://www.lucianosilva.com" term="xfire" />		<summary type="html"><![CDATA[Eu já falei um pouco de Web Services por aqui, mas ainda tem muita coisa a ser discutida e experimentada sobre este assunto.
Existem diversas formas de distribuir serviços na internet e a o número de ferramentas para tornar isto cada vez mais fácil aumentam constantemente. Pesquisando sobre conceitos e maneiras práticas para desenvolvimento encontrei no [...]]]></summary>
		<content type="html" xml:base="http://www.lucianosilva.com/2008/08/16/annotations-e-xfire-um-jeito-simples-de-criar-web-services/">&lt;p&gt;Eu já falei um pouco de Web Services por &lt;a href="http://www.lucianosilva.com/tag/webservices/" target="_blank"&gt;aqui&lt;/a&gt;, mas ainda tem muita coisa a ser discutida e experimentada sobre este assunto.&lt;/p&gt;
&lt;p&gt;Existem diversas formas de distribuir serviços na internet e a o número de ferramentas para tornar isto cada vez mais fácil aumentam constantemente. Pesquisando sobre conceitos e maneiras práticas para desenvolvimento encontrei no &lt;a href="http://blog.caelum.com.br/2006/08/17/criando-um-webservice-com-a-jsr-181/" target="_blank"&gt;Blog dos Desenvolvedores da Caelum&lt;/a&gt; um jeito simples para criação de Web Services utilizando a especificação JSR-181 e JSR-224, achei interessantíssimo e não perdi tempo em fazer os testes.&lt;/p&gt;
&lt;p&gt;A especificação permite que você crie serviços utilizando apenas Annotations.&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
import javax.jws.WebMethod;
import javax.jws.WebService;
import tucano.bean.Pessoa;

@WebService
public class PessoaWS {
private Pessoa[] list = new Pessoa[5];

public PessoaWS() {
list[0] = new Pessoa(&amp;quot;M&amp;quot;, &amp;quot;Luciano&amp;quot;, &amp;quot;Silva&amp;quot;);
list[1] = new Pessoa(&amp;quot;F&amp;quot;, &amp;quot;Priscila&amp;quot;, &amp;quot;Carmo&amp;quot;);
list[2] = new Pessoa(&amp;quot;F&amp;quot;, &amp;quot;Maria&amp;quot;, &amp;quot;Conceição&amp;quot;);
list[3] = new Pessoa(&amp;quot;F&amp;quot;, &amp;quot;Lucia&amp;quot;, &amp;quot;Felix&amp;quot;);
list[4] = new Pessoa(&amp;quot;M&amp;quot;, &amp;quot;Cristino&amp;quot;, &amp;quot;José&amp;quot;);
}

@WebMethod
public Pessoa[] listAll(){
return list;
}
}
&lt;/pre&gt;
&lt;p&gt;Perceba que este Web Service foi criado de maneira extremamente simples apenas para demonstração, porém, o método retorna um tipo de dado complexo, isto para sair da monotonia.&lt;/p&gt;
&lt;p&gt;Ainda o que os caras da Caelum, vamos fazer a publicação/ativação do serviço utilizando o XFire projeto relacionado ao &lt;a href="http://cxf.apache.org/" target="_blank"&gt;Apache CXF&lt;/a&gt;&lt;/p&gt;
&lt;pre class="brush: xml;"&gt;
&amp;lt;!-- // X-Fire //---&amp;gt;
&amp;lt;servlet&amp;gt;
&amp;lt;servlet-name&amp;gt;XFireServlet&amp;lt;/servlet-name&amp;gt;
&amp;lt;display-name&amp;gt;XFire Servlet&amp;lt;/display-name&amp;gt;
&amp;lt;servlet-class&amp;gt;org.codehaus.xfire.transport.http.XFireConfigurableServlet&amp;lt;/servlet-class&amp;gt;
&amp;lt;init-param&amp;gt;
&amp;lt;param-name&amp;gt;config&amp;lt;/param-name&amp;gt;
&amp;lt;param-value&amp;gt;services.xml&amp;lt;/param-value&amp;gt;
&amp;lt;/init-param&amp;gt;
&amp;lt;/servlet&amp;gt;

&amp;lt;servlet-mapping&amp;gt;
&amp;lt;servlet-name&amp;gt;XFireServlet&amp;lt;/servlet-name&amp;gt;
&amp;lt;url-pattern&amp;gt;/servlet/XFireServlet/*&amp;lt;/url-pattern&amp;gt;
&amp;lt;/servlet-mapping&amp;gt;

&amp;lt;servlet-mapping&amp;gt;
&amp;lt;servlet-name&amp;gt;XFireServlet&amp;lt;/servlet-name&amp;gt;
&amp;lt;url-pattern&amp;gt;/services/*&amp;lt;/url-pattern&amp;gt;
&amp;lt;/servlet-mapping&amp;gt;
&amp;lt;!-- // //---&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Se você for seguir o site do projeto X-Fire, irá perceber que é sugerido a criação do arquivo no caminho META-INF/xfire/services.xml, isto não deu muito certo comigo, tentei diversas configurações e até percebi que é um bug em aberto para o projeto.&lt;/p&gt;
&lt;p&gt;Para resolver o problema opite por colocar o arquivo de configuração services.xml na raíz do source [src/services.xml].&lt;/p&gt;
&lt;pre class="brush: xml;"&gt;
&amp;lt;beans xmlns=&amp;quot;http://xfire.codehaus.org/config/1.0&amp;quot;&amp;gt;
&amp;lt;service&amp;gt;
&amp;lt;name&amp;gt;PessoaService&amp;lt;/name&amp;gt;
&amp;lt;namespace&amp;gt;http://xfire.codehaus.org/PessoaService&amp;lt;/namespace&amp;gt;
&amp;lt;serviceClass&amp;gt;tucano.ws.PessoaWS&amp;lt;/serviceClass&amp;gt;
&amp;lt;/service&amp;gt;
&amp;lt;/beans&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Básicamente a configuração se resume em um nome para o Serviço e a Classe que implementa-o. Após fazer deploy do projeto no seu container JEE você poderá acessar o serviço da seguinte maneira http://localhost/&amp;lt;CONTEXTO&amp;gt;/services/&amp;lt;SERVICE_NAME&amp;gt;?wsdl, então, http://localhost/Tucano/services/PessoaService?wsdl.&lt;/p&gt;
&lt;p&gt;Você pode fazer o download dos fontes &lt;a href="http://www.lucianosilva.com/download/Tucano.zip"&gt;aqui&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;É prático, fácil e rápido, vale ser estudado e em alguns casos sugerido como solução, mesmo assim eu estou cansado de ver configurações em arquivo XMLs fora do contexto, não sou muito adepto a esta solução, de qualquer maneira tá dado o recado. =)&lt;/p&gt;
&lt;!-- boo-widget start --&gt;
					&lt;script type="text/javascript"&gt;
					bb_keywords = "xfire";
					bb_bid  = "41213";
					bb_lang  = "pt-BR";
					bb_name = "custom";bb_limit = "4";bb_format = "bbm";&lt;/script&gt;
					&lt;script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"&gt;&lt;/script&gt;
					&lt;!-- boo-widget end --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7BW0X1qOJ3GM_csKxJilGC7emFw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7BW0X1qOJ3GM_csKxJilGC7emFw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7BW0X1qOJ3GM_csKxJilGC7emFw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7BW0X1qOJ3GM_csKxJilGC7emFw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lucianosilva/~4/Zrs9ex832Hk" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.lucianosilva.com/2008/08/16/annotations-e-xfire-um-jeito-simples-de-criar-web-services/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.lucianosilva.com/2008/08/16/annotations-e-xfire-um-jeito-simples-de-criar-web-services/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.lucianosilva.com/2008/08/16/annotations-e-xfire-um-jeito-simples-de-criar-web-services/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luciano</name>
						<uri>http://www.lucianosilva.com</uri>
					</author>
		<title type="html"><![CDATA[JSF, RichFaces, AJAX e combobox alinhados]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lucianosilva/~3/6VVBwl2wMA0/" />
		<id>http://www.lucianosilva.com/?p=52</id>
		<updated>2008-08-11T22:23:31Z</updated>
		<published>2008-08-11T22:23:31Z</published>
		<category scheme="http://www.lucianosilva.com" term="Programação" /><category scheme="http://www.lucianosilva.com" term="ajax" /><category scheme="http://www.lucianosilva.com" term="jsf" /><category scheme="http://www.lucianosilva.com" term="richfaces" />		<summary type="html"><![CDATA[Em meus estudos sobre JSF e AJAX, gostei muito do pacote disponibilizado pela JBoss, o RichFaces. A intensão é usar o mais puro do JSF porém, aproveitando o que cada componente oferece de melhor.
O RichFaces é interessante e muito completo, oferece diversos recursos para web que até então o HTML estava limitado, como o combobox [...]]]></summary>
		<content type="html" xml:base="http://www.lucianosilva.com/2008/08/11/jsf-richfaces-ajax-e-combobox-alinhados/">&lt;p&gt;Em meus estudos sobre JSF e AJAX, gostei muito do pacote disponibilizado pela JBoss, o RichFaces. A intensão é usar o mais puro do JSF porém, aproveitando o que cada componente oferece de melhor.&lt;/p&gt;
&lt;p&gt;O RichFaces é interessante e muito completo, oferece diversos recursos para web que até então o HTML estava limitado, como o combobox (leia-se também dropdown) com área aberta para localização de textos &amp;#8211; &amp;lt;rich:comboBox/&amp;gt;. Ao contrário deste alguns outros componentes apresentam problemas sérios de incompatibilidade com o Apache MyFaces (Tomahawk), por exemplo, o &amp;lt;rich:fileUpload/&amp;gt;.&lt;/p&gt;
&lt;p&gt;Estudando esses componentes observei suas vantagens e falhas, decidi então criar este exemplo de um recurso tão comum em formulários e simples com JSF, que são os combobox dependentes ou alinhados.&lt;br /&gt;
Vamos continuar com o esquema de Países e Estados, um combobox para cada, sendo que ao modificar o Pais através do AJAX os estados relacionados serão carregados.&lt;/p&gt;
&lt;p&gt;A configuração básica do Faces e RichFaces no web.xml será ocultada, porém você poderá fazer o download do projeto no fim deste post.&lt;br /&gt;
O projeto está estruturado da seguinte maneira:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.lucianosilva.com/wp-content/uploads/2008/08/estrutura.jpg"&gt;&lt;img class="alignnone size-medium wp-image-53" title="estrutura" src="http://www.lucianosilva.com/wp-content/uploads/2008/08/estrutura-197x300.jpg" alt="" width="197" height="300" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;No Manager Bean destacam-se os métodos getPaises() e actionCarregarEstados(), o primeiro retorna um array de itens &amp;#8211; SelectItem[] &amp;#8211; tipo de dado complexo que será tratado pelo componente JSF, já o actionCarregarEstados() é responsável por carregar os estados relacionados ao pais.&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
public class UirapuruManagerBean {
private Pessoa pessoa = new Pessoa();
private SelectItem[] estados;

/* getters e setters ocultados */

/* carrega os paises */
public SelectItem[] getPaises(){
List&amp;lt;pais&amp;gt; lp = regiaoDao.getAllPais();
List&amp;lt;selectItem&amp;gt; itens = new ArrayList&amp;lt;selectItem&amp;gt;(lp.size());

for( Pais p : lp ){
itens.add( new SelectItem(p.getId_pais(), p.getNm_pais()) );
}// for end
return itens.toArray( new SelectItem[itens.size()] );
}

/* carrega os estados */
public SelectItem[] getEstadosByPais(int id_pais){
List&amp;lt;estado&amp;gt; estados   = regiaoDao.getEstadosDoPais(id_pais);
List&amp;lt;selectItem&amp;gt; itens = new ArrayList&amp;lt;selectItem&amp;gt;(estados.size());

for( Estado e : estados ){
itens.add( new SelectItem(e.getId_estado(), e.getNm_estado()) );
}// for end
return itens.toArray( new SelectItem[itens.size()] );
}

/*  */
public String actionCarregarEstados(){
this.estados = getEstadosByPais(getPessoa().getPais().getId_pais());
return &amp;quot;SUCCESS&amp;quot;;
}

}
&lt;/pre&gt;
&lt;p&gt;Uma observação importante antes de seguirmos: os beans Pessoa, Pais e Estado são simples e foram criados apenas para uma interpretação melhor, é importante e somente assim este exemplo irá funcionar perfeitamente se no bean Pessoa, os atributos pais e estado sejam inicializados. Já que não estamos trabalhando com Spring o Faces não irá fazer este entendimento e uma exceção NullPointerException será lançada, para evitar tal faça isto:&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
public class Pessoa implements Serializable {
private int id;
private String nome;

// criando os objetos
private Pais pais = new Pais();
private Estado estado = new Estado();

/* getters e setters ocultados */
}
&lt;/pre&gt;
&lt;p&gt;Okay. Feita a observação vamos para a parte final, a montagem do JSP.&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
&amp;lt;%@ taglib prefix=&amp;quot;f&amp;quot;  uri=&amp;quot;http://java.sun.com/jsf/core&amp;quot;%&amp;gt;
&amp;lt;%@ taglib prefix=&amp;quot;h&amp;quot;  uri=&amp;quot;http://java.sun.com/jsf/html&amp;quot;%&amp;gt;
&amp;lt;%@ taglib prefix=&amp;quot;a4j&amp;quot; uri=&amp;quot;http://richfaces.org/a4j&amp;quot;%&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Não esqueça que qualquer página JSF deve ser elaborada dentro da tag &amp;lt;f:view/&amp;gt; e, que sem a definição do formulário &amp;lt;h:form/&amp;gt; o AJAX não irá funcionar.&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
&amp;lt;f:view&amp;gt;
&amp;lt;h:form&amp;gt;
&amp;lt;h:panelGrid border=&amp;quot;0&amp;quot; columns=&amp;quot;2&amp;quot; width=&amp;quot;500&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;2&amp;quot;&amp;gt;

&amp;lt;h:outputLabel value=&amp;quot;Pais&amp;quot; for=&amp;quot;pais&amp;quot;/&amp;gt;
&amp;lt;h:selectOneMenu id=&amp;quot;pais&amp;quot;
value=&amp;quot;#{umb.pessoa.pais.id_pais}&amp;quot;
rendered=&amp;quot;true&amp;quot;&amp;gt;
&amp;lt;f:selectItems value=&amp;quot;#{umb.paises}&amp;quot;/&amp;gt;
&amp;lt;a4j:support event=&amp;quot;onchange&amp;quot;
ajaxSingle=&amp;quot;true&amp;quot;
action=&amp;quot;#{umb.actionCarregarEstados}&amp;quot;
reRender=&amp;quot;pais,estado&amp;quot;/&amp;gt;
&amp;lt;/h:selectOneMenu&amp;gt;

&amp;lt;h:outputLabel value=&amp;quot;Estado&amp;quot; for=&amp;quot;estado&amp;quot;/&amp;gt;
&amp;lt;h:selectOneMenu id=&amp;quot;estado&amp;quot;
value=&amp;quot;#{umb.pessoa.estado.id_estado}&amp;quot;
rendered=&amp;quot;true&amp;quot;&amp;gt;
&amp;lt;f:selectItems value=&amp;quot;#{umb.estados}&amp;quot;/&amp;gt;
&amp;lt;/h:selectOneMenu&amp;gt;

&amp;lt;/h:panelGrid&amp;gt;
&amp;lt;/h:form&amp;gt;
&amp;lt;/f:view&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Na tag &amp;lt;h:selectOneMenu/&amp;gt; deve-se colocar na propriedade VALUE o atributo que irá receber o valor selecionado no combobox, outras propriedades excenciais são o ID que identifica o componente e RENDERED que indica a renderização. A tag &amp;lt;f:selectItems/&amp;gt; invoca o método &amp;#8211; umb.getPaises() &amp;#8211; que contém os itens do combobox.&lt;/p&gt;
&lt;p&gt;Até o momento utilizamos apenas JSF puro, o RichFaces é representado na tag &amp;lt;a4j:support/&amp;gt; responsável por identificar quando um evento do tipo OnChange é feito e fazer a ação definida no método umb.actionCarregarEstados, e por fim na propriedade reRender estão separados por vírgulas os componentes que serão renderizados.&lt;/p&gt;
&lt;p&gt;Seguindo esta linha de raciocínio você conseguirá fazer vários níveis de dependência facilmente, o componente &amp;lt;rich:combobox/&amp;gt; também permite este tipo de interação, com alguns recursos a mais.&lt;/p&gt;
&lt;p&gt;Faça &lt;a href="http://www.lucianosilva.com/download/Uirapuru.zip"&gt;aqui &lt;/a&gt;o download do projeto.&lt;/p&gt;
&lt;!-- boo-widget start --&gt;
					&lt;script type="text/javascript"&gt;
					bb_keywords = "richfaces";
					bb_bid  = "41213";
					bb_lang  = "pt-BR";
					bb_name = "custom";bb_limit = "4";bb_format = "bbm";&lt;/script&gt;
					&lt;script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"&gt;&lt;/script&gt;
					&lt;!-- boo-widget end --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/q9mS0L9JVjscJ_2DZ6vtP__SgdA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/q9mS0L9JVjscJ_2DZ6vtP__SgdA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/q9mS0L9JVjscJ_2DZ6vtP__SgdA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/q9mS0L9JVjscJ_2DZ6vtP__SgdA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lucianosilva/~4/6VVBwl2wMA0" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.lucianosilva.com/2008/08/11/jsf-richfaces-ajax-e-combobox-alinhados/#comments" thr:count="16" />
		<link rel="replies" type="application/atom+xml" href="http://www.lucianosilva.com/2008/08/11/jsf-richfaces-ajax-e-combobox-alinhados/feed/atom/" thr:count="16" />
		<thr:total>16</thr:total>
	<feedburner:origLink>http://www.lucianosilva.com/2008/08/11/jsf-richfaces-ajax-e-combobox-alinhados/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luciano</name>
						<uri>http://www.lucianosilva.com</uri>
					</author>
		<title type="html"><![CDATA[Web Services com Apache Axis e Tipos Complexos &#8211; Part III]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lucianosilva/~3/-1ckxz2TCeo/" />
		<id>http://www.lucianosilva.com/?p=41</id>
		<updated>2008-08-05T23:12:52Z</updated>
		<published>2008-08-05T23:12:52Z</published>
		<category scheme="http://www.lucianosilva.com" term="Programação" /><category scheme="http://www.lucianosilva.com" term="apache" /><category scheme="http://www.lucianosilva.com" term="axis" /><category scheme="http://www.lucianosilva.com" term="Java" /><category scheme="http://www.lucianosilva.com" term="php" /><category scheme="http://www.lucianosilva.com" term="webservices" />		<summary type="html"><![CDATA[Criar WebServices já foi um trabalho árduo, mas há alguns anos isto deixou de ser um problema com a ajuda das IDEs. Então vou mostrar como utilizar os recursos do Eclipse que facilitam o desenvolvimento de serviços.
Você já sabe o que é um WebServices e também como é simples publicá-lo utilizando Axis, mas nem todos [...]]]></summary>
		<content type="html" xml:base="http://www.lucianosilva.com/2008/08/05/webservices-part-iii-com-apache-axis-e-tipos-complexos/">&lt;p style="text-align: left;"&gt;Criar WebServices já foi um trabalho árduo, mas há alguns anos isto deixou de ser um problema com a ajuda das IDEs. Então vou mostrar como utilizar os recursos do Eclipse que facilitam o desenvolvimento de serviços.&lt;/p&gt;
&lt;p&gt;Você já sabe o que é um WebServices e também como é simples publicá-lo utilizando Axis, mas nem todos seus serviços irão trabalhar apenas com tipos de dados primitivos, provavelmente será necessário retornar uma lista de Pessoas, Enderecos, ou qualquer outro tipo de dado complexo.&lt;/p&gt;
&lt;p&gt;Nosso cenário é um projeto cujo o objetivo é fornecer consultas de Países e seus respectivos Estados, acessados através de serviços, a definição de Beans, DAOs e qualquer outras classes serão ocultadas, porém, no final deste post você poderá baixar a versão completa do projeto.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.lucianosilva.com/wp-content/uploads/2008/08/imagem1.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="TEXT-ALIGN: center"&gt;&lt;img class="alignnone size-medium wp-image-42 aligncenter" title="imagem1" src="http://www.lucianosilva.com/wp-content/uploads/2008/08/imagem1.jpg" alt="" width="240" height="122" /&gt;&lt;/p&gt;
&lt;p&gt;Bem como já foi demonstrado aqui precisamos de uma classe para que seja a base do serviço, neste caso será a harpia.region.services.Region, veja:&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
package harpia.region.services;

/* imports ocultados */

public class Region {
private RegionDAO rdao = new RegionDAO();

/**
*
* @param Nome do Pais
* @return Todos os países encontrados
*/
public Pais[] find(String nmPais){
ArrayList&amp;lt;pais&amp;gt; list = rdao.getAllPais( nmPais );
Pais[] paises    = new Pais[list.size()];
list.toArray(paises);

return paises;
}
}
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Criando o WSDL&lt;br /&gt;
&lt;/strong&gt;Crie um novo objeto chamado Web Service (File &amp;gt; New &amp;gt; Others &amp;gt; Web Service). Após selecionar Web Service clique em Next.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.lucianosilva.com/wp-content/uploads/2008/08/imagem2.jpg"&gt;&lt;img class="alignnone size-medium wp-image-43" title="imagem2" src="http://www.lucianosilva.com/wp-content/uploads/2008/08/imagem2-300x298.jpg" alt="" width="300" height="298" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Clique em Browse e selecione a classe responsável por implementar o serviço, ou seja, harpia.region.services.Region. Veja que o tipo deve ser &lt;strong&gt;Bottom up Java Web Service&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.lucianosilva.com/wp-content/uploads/2008/08/imagem3.jpg"&gt;&lt;img class="alignnone size-medium wp-image-44" title="imagem3" src="http://www.lucianosilva.com/wp-content/uploads/2008/08/imagem3-254x300.jpg" alt="" width="254" height="300" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.lucianosilva.com/wp-content/uploads/2008/08/imagem4.jpg"&gt;&lt;img class="alignnone size-medium wp-image-45" title="imagem4" src="http://www.lucianosilva.com/wp-content/uploads/2008/08/imagem4-300x250.jpg" alt="" width="300" height="250" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Na sequência serão exibidos os métodos disponibilizados pelo serviço, caso você não queira publicar basta desmarcar.&lt;/p&gt;
&lt;p&gt;&lt;img class="alignnone size-medium wp-image-46" title="imagem5" src="http://www.lucianosilva.com/wp-content/uploads/2008/08/imagem5-254x300.jpg" alt="" width="254" height="300" /&gt;&lt;/p&gt;
&lt;p&gt;E por fim a caixa de dialogo informa que o servidor Apache está down é que será necessário fazer o startup para concluir a criação e publicação do WSDL, utilize esta mesma tela para iniciar o servidor e concluir o passo-a-passo.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.lucianosilva.com/wp-content/uploads/2008/08/imagem6.jpg"&gt;&lt;img class="alignnone size-medium wp-image-47" title="imagem6" src="http://www.lucianosilva.com/wp-content/uploads/2008/08/imagem6-255x300.jpg" alt="" width="255" height="300" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Veja que um novo arquivo foi criado em projeto, agora existe o wsdl/Region.wsdl.&lt;/p&gt;
&lt;p&gt;O WSDL (Web Service Description Language) nada mais é do que um Schema XML cujo está descrito o serviço de internet. Você poderá acessar este serviço em &lt;a href="http://localhost/Harpia/wsdl/Region.wsdl"&gt;http://localhost/Harpia/wsdl/Region.wsdl&lt;/a&gt; ou também &lt;a href="http://localhost/Harpia/services/Region?wsdl"&gt;http://localhost/Harpia/services/Region?wsdl&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Criando o Client&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Nosso serviço foi criado em Java 1.5, porem, neste momento poderiamos fazer uma solicitação a partir de qualquer linguagem que saiba interpretar o WSDL. Vamos continuar no Java por enquanto e fazer a chamada do nosso Web Service.&lt;br /&gt;
Já que a intensão é mostrar como a IDE facilita a criação de Web Services, aqui vai mais um wizard de como fazer o Web Service Client no eclipse.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.lucianosilva.com/wp-content/uploads/2008/08/client1.jpg"&gt;&lt;img class="alignnone size-medium wp-image-49" title="client1" src="http://www.lucianosilva.com/wp-content/uploads/2008/08/client1-300x298.jpg" alt="" width="300" height="298" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.lucianosilva.com/wp-content/uploads/2008/08/client2.jpg"&gt;&lt;img class="alignnone size-medium wp-image-50" title="client2" src="http://www.lucianosilva.com/wp-content/uploads/2008/08/client2-298x300.jpg" alt="" width="298" height="300" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.lucianosilva.com/wp-content/uploads/2008/08/client3.jpg"&gt;&lt;img class="alignnone size-medium wp-image-51" title="client3" src="http://www.lucianosilva.com/wp-content/uploads/2008/08/client3-298x300.jpg" alt="" width="298" height="300" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hey Client! Chamaí o serviço pow!&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import harpia.region.bean.Pais;
import harpia.region.services.RegionServiceLocator;

public class HarpiaClient {

public static void main(String[] args) throws RemoteException, ServiceException {
// obter o nome do pais para pesquisa
String nome = JOptionPane.showInputDialog(null, &amp;quot;Qual é o pais?&amp;quot;, &amp;quot;Unido&amp;quot;);

RegionServiceLocator locator = new RegionServiceLocator(); // localizando ...
Pais[] paises = locator.getRegion().find(nome); // procurando ...
for (int i = 0; i &amp;lt; paises.length; i++) { // exibindo
Pais pais = paises[i];

System.out.println(&amp;quot;[&amp;quot;+i+&amp;quot;] &amp;quot; + pais.getNome() + &amp;quot; | ID: &amp;quot; + pais.getId_pais());
}
// Simples assim
}

}
&lt;/pre&gt;
&lt;p&gt;E para aqueles que ainda dizem por aí que tudo isso aqui é conversa fiada, se é que existe algum maluco pra dizer isto, tomaí! PHP consumindo o Web Service feito em Java.&lt;/p&gt;
&lt;pre class="brush: php;"&gt;
&amp;lt;?
$client = new SoapClient(null, array('location' =&amp;gt; 'http://localhost/Harpia/services/Region?wsdl',
'uri' =&amp;gt; 'http://localhost/Harpia/services/Region?wsdl',
'trace' =&amp;gt; '1'));

$result = $client-&amp;gt;find('ale');

if(  is_soap_fault($result) ){
echo &amp;quot;Ocorreu algum erro.&amp;lt;br/&amp;gt;&amp;quot;;
}else{

print_r($result);
}

unset($client);
?&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Faça download dos fontes &lt;a href="http://www.lucianosilva.com/download/harpia1.0.zip"&gt;aqui&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;That&amp;#8217;s all.&lt;/p&gt;
&lt;!-- boo-widget start --&gt;
					&lt;script type="text/javascript"&gt;
					bb_keywords = "webservices";
					bb_bid  = "41213";
					bb_lang  = "pt-BR";
					bb_name = "custom";bb_limit = "4";bb_format = "bbm";&lt;/script&gt;
					&lt;script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"&gt;&lt;/script&gt;
					&lt;!-- boo-widget end --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/at3oTJ4qjRjB4RRfw581UTqfBrc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/at3oTJ4qjRjB4RRfw581UTqfBrc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/at3oTJ4qjRjB4RRfw581UTqfBrc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/at3oTJ4qjRjB4RRfw581UTqfBrc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lucianosilva/~4/-1ckxz2TCeo" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.lucianosilva.com/2008/08/05/webservices-part-iii-com-apache-axis-e-tipos-complexos/#comments" thr:count="9" />
		<link rel="replies" type="application/atom+xml" href="http://www.lucianosilva.com/2008/08/05/webservices-part-iii-com-apache-axis-e-tipos-complexos/feed/atom/" thr:count="9" />
		<thr:total>9</thr:total>
	<feedburner:origLink>http://www.lucianosilva.com/2008/08/05/webservices-part-iii-com-apache-axis-e-tipos-complexos/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luciano</name>
						<uri>http://www.lucianosilva.com</uri>
					</author>
		<title type="html"><![CDATA[Web Services com Apache Axis &#8211; Part II]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lucianosilva/~3/E261KYsnhUg/" />
		<id>http://www.lucianosilva.com/?p=37</id>
		<updated>2008-08-05T22:11:54Z</updated>
		<published>2008-08-05T22:11:54Z</published>
		<category scheme="http://www.lucianosilva.com" term="Programação" /><category scheme="http://www.lucianosilva.com" term="apache" /><category scheme="http://www.lucianosilva.com" term="axis" /><category scheme="http://www.lucianosilva.com" term="Java" /><category scheme="http://www.lucianosilva.com" term="webservices" />		<summary type="html"><![CDATA[Dando sequência a WebServices agora vou demonstrar um exemplo prático de como criar um serviço utilizando os recursos do framework Apache Axis.
A instalação do Axis funciona como qualquer outra API na plataforma JEE, portanto não será detalhado este procedimento.
A criação de webservices com Apache Axis é muito simples, veja a classe abaixo:

public class Calculo {
/**
*
* [...]]]></summary>
		<content type="html" xml:base="http://www.lucianosilva.com/2008/08/05/webservices-com-apache-axis-part-ii/">&lt;p&gt;Dando sequência a WebServices agora vou demonstrar um exemplo prático de como criar um serviço utilizando os recursos do framework Apache Axis.&lt;br /&gt;
A instalação do Axis funciona como qualquer outra API na plataforma JEE, portanto não será detalhado este procedimento.&lt;/p&gt;
&lt;p&gt;A criação de webservices com Apache Axis é muito simples, veja a classe abaixo:&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
public class Calculo {
/**
*
* @param n1
* @param n2
* @return Resultado da Soma
*/
public double soma(double n1, double n2){
return (n1 + n2);
}
}
&lt;/pre&gt;
&lt;p&gt;Após criar essa simples classe composta pelo método soma, cujo retorna um tipo primitivo, para que esta classe seja publicada como um serviço basta copiá-la para a aplicação do Axis ($TOMCAT_HOME\webapps\axis) em seguida renomeá-la para Calculo.jws. Acesse o serviço como &lt;a href="http://localhost:8080/axis/Calculo.jws?wsdl"&gt;http://localhost:8080/axis/Calculo.jws?wsdl&lt;/a&gt;, isto é tudo.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;a href="http://www.lucianosilva.com/wp-content/uploads/2008/08/tomcat_axis.jpg"&gt;&lt;img class="alignnone size-medium wp-image-40 aligncenter" title="tomcat_axis" src="http://www.lucianosilva.com/wp-content/uploads/2008/08/tomcat_axis-300x189.jpg" alt="" width="300" height="189" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Simples assim, criar o Client que irá utilizar o serviço é tão simples quanto.&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

public class CalculoClient {

/**
* @param args
*/
public static void main(String[] args) throws Exception{
String url = &amp;quot;&amp;lt;a href=&amp;quot;http://localhost/axis/Calculo.jws?wsdl&amp;quot;&amp;gt;http://localhost/axis/Calculo.jws?wsdl&amp;lt;/a&amp;gt;&amp;quot;;
Service service = new Service();
Call call       = (Call) service.createCall();
call.setTargetEndpointAddress( url );
call.setOperationName(&amp;quot;soma&amp;quot;); // método do webservices

Double[] param  = {15.0, 15.0}; // parâmetros
Double result   = (Double) call.invoke( param ); // chamada
System.out.println(&amp;quot;Resultado : &amp;quot; + result );
}
}
&lt;/pre&gt;
&lt;p&gt;Exemplos iguais a este devem existir centenas de milhares na internet, simples utilizando tipos primitivos, básico mesmo. Mas cansado de saber disto vou demonstrar um exemplo mais completo utilizando tipo de dados complexos!&lt;/p&gt;
&lt;p&gt;Veja mais esses artigos excelentes:&lt;br /&gt;
&lt;a href="http://www.javafree.org/content/view.jf?idContent=4"&gt;http://www.javafree.org/content/view.jf?idContent=4&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.guj.com.br/java.tutorial.artigo.180.1.guj"&gt;http://www.guj.com.br/java.tutorial.artigo.180.1.guj&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.guj.com.br/java.tutorial.artigo.132.1.guj"&gt;http://www.guj.com.br/java.tutorial.artigo.132.1.guj&lt;/a&gt;&lt;/p&gt;
&lt;!-- boo-widget start --&gt;
					&lt;script type="text/javascript"&gt;
					bb_keywords = "webservices";
					bb_bid  = "41213";
					bb_lang  = "pt-BR";
					bb_name = "custom";bb_limit = "4";bb_format = "bbm";&lt;/script&gt;
					&lt;script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"&gt;&lt;/script&gt;
					&lt;!-- boo-widget end --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/DRnOzbRFEK3jVw5yf2IrGFdfoHk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DRnOzbRFEK3jVw5yf2IrGFdfoHk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/DRnOzbRFEK3jVw5yf2IrGFdfoHk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DRnOzbRFEK3jVw5yf2IrGFdfoHk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lucianosilva/~4/E261KYsnhUg" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.lucianosilva.com/2008/08/05/webservices-com-apache-axis-part-ii/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.lucianosilva.com/2008/08/05/webservices-com-apache-axis-part-ii/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.lucianosilva.com/2008/08/05/webservices-com-apache-axis-part-ii/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luciano</name>
						<uri>http://www.lucianosilva.com</uri>
					</author>
		<title type="html"><![CDATA[Web Services &#8211; Part I]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lucianosilva/~3/rarwxShSouk/" />
		<id>http://www.lucianosilva.com/?p=36</id>
		<updated>2008-08-04T01:30:24Z</updated>
		<published>2008-08-04T01:30:24Z</published>
		<category scheme="http://www.lucianosilva.com" term="Programação" /><category scheme="http://www.lucianosilva.com" term="apache" /><category scheme="http://www.lucianosilva.com" term="axis" /><category scheme="http://www.lucianosilva.com" term="Java" /><category scheme="http://www.lucianosilva.com" term="webservices" />		<summary type="html"><![CDATA[Provavelmente você já ouviu falar sobre serviços na web, mas cê sabe mesmo o que é isto?
Web Services nada mais é do que um serviço remoto descrito utilizando a WSDL &#8211; Web Service Description Language &#8211; e acessado utilizando um protocolo (SOAP) totalmente abstrato.
As grandes do mercado Microsoft, Oracle, IBM, Sun, HP entre outos, estão [...]]]></summary>
		<content type="html" xml:base="http://www.lucianosilva.com/2008/08/03/webservices-part-i/">&lt;p&gt;Provavelmente você já ouviu falar sobre serviços na web, mas cê sabe mesmo o que é isto?&lt;/p&gt;
&lt;p&gt;Web Services nada mais é do que um serviço remoto descrito utilizando a WSDL &amp;#8211; Web Service Description Language &amp;#8211; e acessado utilizando um protocolo (SOAP) totalmente abstrato.&lt;/p&gt;
&lt;p&gt;As grandes do mercado Microsoft, Oracle, IBM, Sun, HP entre outos, estão a frente do WS-I, orgão responsável por manter e garantir o funcionamento dos webservices em qualquer plataforma.&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;a href="http://www.lucianosilva.com/wp-content/uploads/2008/08/web_services.jpg"&gt;&lt;img class="alignnone size-medium wp-image-38 aligncenter" title="Web Services" src="http://www.lucianosilva.com/wp-content/uploads/2008/08/web_services.jpg" alt="" width="240" height="218" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Simples assim&amp;#8230;&lt;/p&gt;
&lt;p&gt;O popular SOAP nada mais é do que um schema descrito em XML, definindo o serviço e sua localização, para que o cliente faça a conexão.&lt;/p&gt;
&lt;!-- boo-widget start --&gt;
					&lt;script type="text/javascript"&gt;
					bb_keywords = "webservices";
					bb_bid  = "41213";
					bb_lang  = "pt-BR";
					bb_name = "custom";bb_limit = "4";bb_format = "bbm";&lt;/script&gt;
					&lt;script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"&gt;&lt;/script&gt;
					&lt;!-- boo-widget end --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Lc929IHXlbFIzihqj7oE-KWQBtU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Lc929IHXlbFIzihqj7oE-KWQBtU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Lc929IHXlbFIzihqj7oE-KWQBtU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Lc929IHXlbFIzihqj7oE-KWQBtU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lucianosilva/~4/rarwxShSouk" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.lucianosilva.com/2008/08/03/webservices-part-i/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.lucianosilva.com/2008/08/03/webservices-part-i/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.lucianosilva.com/2008/08/03/webservices-part-i/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luciano</name>
						<uri>http://www.lucianosilva.com</uri>
					</author>
		<title type="html"><![CDATA[o del.icio.us mudou]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lucianosilva/~3/MAYRgbJrJBE/" />
		<id>http://www.lucianosilva.com/?p=34</id>
		<updated>2008-08-01T01:38:19Z</updated>
		<published>2008-08-01T01:38:19Z</published>
		<category scheme="http://www.lucianosilva.com" term="Ferramentas" /><category scheme="http://www.lucianosilva.com" term="del.icio.us" /><category scheme="http://www.lucianosilva.com" term="tools" /><category scheme="http://www.lucianosilva.com" term="web" />		<summary type="html"><![CDATA[mudou&#8230; e ficou feio!
Eu sou totalmente a favor de mudanças, não que elas sejam faceis de aceitar, porém, saber compreende-las é muito importante, mas perá lá! porra quem mudou a url do del.icio.us?  Quem mudou o layout? Sacanagem&#8230;

Pô se não bastasse a url quadrada, isto mesmo quadrada porque moderninha era o del.icio.us, agora os caras [...]]]></summary>
		<content type="html" xml:base="http://www.lucianosilva.com/2008/07/31/o-delicious-mudou/">&lt;p&gt;mudou&amp;#8230; e ficou feio!&lt;/p&gt;
&lt;p&gt;Eu sou totalmente a favor de mudanças, não que elas sejam faceis de aceitar, porém, saber compreende-las é muito importante, mas perá lá! porra quem mudou a url do del.icio.us?  Quem mudou o layout? Sacanagem&amp;#8230;&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;a href="http://www.lucianosilva.com/wp-content/uploads/2008/07/delicious.jpg"&gt;&lt;img class="alignnone size-full wp-image-35 aligncenter" title="del.icio.us" src="http://www.lucianosilva.com/wp-content/uploads/2008/07/delicious.jpg" alt="Novo layout do delicious" width="500" height="288" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Pô se não bastasse a url quadrada, isto mesmo quadrada porque moderninha era o &lt;a href="http://del.icio.us" target="_blank"&gt;del.icio.us&lt;/a&gt;, agora os caras retrocedem para &lt;a href="http://delicious.com" target="_blank"&gt;delicious.com&lt;/a&gt;, estou indignado! deu pra perceber né! :p&lt;/p&gt;
&lt;p&gt;Linhas retas, deu uma cara mau-humorada para o site tão sauve, rápido e funcional como sempre foi o del.icio.us.&lt;/p&gt;
&lt;p&gt;Ah! tah! concordo que a nova organização de tags melhorou muito, a ordenação dos posts e a leitura do site no geral ficou muito mais clara e funcional, utilizaram um layout maior,, enfim&amp;#8230; se você já conhece entre e tire suas conclusões, se não, aproveite para conhecer é uma ferramenta muito útil.&lt;/p&gt;
&lt;p&gt;Veja aqui quem faz o &lt;a href="http://delicious.com/about#team" target="_blank"&gt;del.icio.us&lt;/a&gt;.&lt;/p&gt;
&lt;!-- boo-widget start --&gt;
					&lt;script type="text/javascript"&gt;
					bb_keywords = "web";
					bb_bid  = "41213";
					bb_lang  = "pt-BR";
					bb_name = "custom";bb_limit = "4";bb_format = "bbm";&lt;/script&gt;
					&lt;script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"&gt;&lt;/script&gt;
					&lt;!-- boo-widget end --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/QqPg2GhfCV04o3Cx_OEC4DkBsb0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QqPg2GhfCV04o3Cx_OEC4DkBsb0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/QqPg2GhfCV04o3Cx_OEC4DkBsb0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QqPg2GhfCV04o3Cx_OEC4DkBsb0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lucianosilva/~4/MAYRgbJrJBE" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.lucianosilva.com/2008/07/31/o-delicious-mudou/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.lucianosilva.com/2008/07/31/o-delicious-mudou/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.lucianosilva.com/2008/07/31/o-delicious-mudou/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luciano</name>
						<uri>http://www.lucianosilva.com</uri>
					</author>
		<title type="html"><![CDATA[Função InitCap para MySql]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lucianosilva/~3/c5ZGcADuriE/" />
		<id>http://www.lucianosilva.com/?p=33</id>
		<updated>2008-07-26T00:52:56Z</updated>
		<published>2008-07-26T00:52:56Z</published>
		<category scheme="http://www.lucianosilva.com" term="Programação" /><category scheme="http://www.lucianosilva.com" term="initcap" /><category scheme="http://www.lucianosilva.com" term="Java" /><category scheme="http://www.lucianosilva.com" term="mysql" /><category scheme="http://www.lucianosilva.com" term="util" />		<summary type="html"><![CDATA[Conhecida em várias linguagens e ambientes o InitCap tem a função de transformar o primeiro caracter de cada palavra em maíusculo e o restante em minúsculo. Infelizmente o MySql não disponibiliza essa funcionalidade nativa, portanto, você terá que criá-la.
Essa é a minha versão do InitCap em Java.

private static final String SEPARADOR[] = {&#34;do&#34;,&#34;da&#34;,&#34;de&#34;,&#34;e&#34;,&#34;dos&#34;,&#34;das&#34;};

/**
* @author lsilva
* [...]]]></summary>
		<content type="html" xml:base="http://www.lucianosilva.com/2008/07/25/funcao-initcap-para-mysql/">&lt;p&gt;Conhecida em várias linguagens e ambientes o InitCap tem a função de transformar o primeiro caracter de cada palavra em maíusculo e o restante em minúsculo. Infelizmente o MySql não disponibiliza essa funcionalidade nativa, portanto, você terá que criá-la.&lt;/p&gt;
&lt;p&gt;Essa é a minha versão do InitCap em Java.&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
private static final String SEPARADOR[] = {&amp;quot;do&amp;quot;,&amp;quot;da&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;e&amp;quot;,&amp;quot;dos&amp;quot;,&amp;quot;das&amp;quot;};

/**
* @author lsilva
* @param in
* @return
*/
public static String initCap( String in ){
String out    = null;
String[] part = in.split(&amp;quot; &amp;quot;);
StringBuffer temp = new StringBuffer();

for (int i = 0; i&amp;lt;part.length; i++){

if( i&amp;gt;0 ) temp.append(&amp;quot; &amp;quot;);
if( ehSeparador( part[i] ) ){
temp.append( part[i].toLowerCase() );
}else{
temp.append( part[i].substring(0, 1).toUpperCase() );
temp.append( part[i].toLowerCase().substring(1, part[i].length()) );
}
}// for end

out = temp.toString();
return out;
}

/**
* @author lsilva
* @param sep
* @return
*/
private static boolean ehSeparador(String sep){
boolean r = false;
for (int i = 0; i &amp;lt; SEPARADOR.length; i++){

if( sep.equalsIgnoreCase( SEPARADOR[i] ) ){
r = true;
break;
}else{
r = false;
}
}
return r;
}
&lt;/pre&gt;
&lt;p&gt;Depois de algumas discussões e muita zuação, meu amigo Orlando disse: &amp;#8220;Muita firula pra pouca coisa, faz assim cara:&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
/**
* @author oneto
* @param n
* @return
*/
public static String initCap( String n ){
String[] x                      = n.split(&amp;quot; &amp;quot;);
StringBuffer r  = new StringBuffer();
String e                        = &amp;quot; de , da , des , da &amp;quot;;

for (int i = 0;i&amp;lt;x.length;i++){
if(e.indexOf(x[i].trim().toLowerCase())&amp;lt; 0){
r.append(x[i].substring(0,1).toUpperCase() + x[i].substring(1,x[i].length()).toLowerCase() + &amp;quot; &amp;quot; );
}else{
r.append(x[i].toLowerCase() + &amp;quot; &amp;quot;);
}
}
return r.toString().trim();
}
&lt;/pre&gt;
&lt;p&gt;Essa função pode ser feita de diversas outras maneiras, aqui foram apenas sugeridas algumas. Muitas vezes você não precisará criar basta pesquisar sobre a linguagem utilizada, por exemplo, em PHP a função nativa para isto é o &lt;strong&gt;ucwords&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;That&amp;#8217;s all.&lt;/p&gt;
&lt;!-- boo-widget start --&gt;
					&lt;script type="text/javascript"&gt;
					bb_keywords = "util";
					bb_bid  = "41213";
					bb_lang  = "pt-BR";
					bb_name = "custom";bb_limit = "4";bb_format = "bbm";&lt;/script&gt;
					&lt;script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"&gt;&lt;/script&gt;
					&lt;!-- boo-widget end --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1-WpgCA4ZD5WzrfHY8sCjfNOMIE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1-WpgCA4ZD5WzrfHY8sCjfNOMIE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1-WpgCA4ZD5WzrfHY8sCjfNOMIE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1-WpgCA4ZD5WzrfHY8sCjfNOMIE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lucianosilva/~4/c5ZGcADuriE" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.lucianosilva.com/2008/07/25/funcao-initcap-para-mysql/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.lucianosilva.com/2008/07/25/funcao-initcap-para-mysql/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.lucianosilva.com/2008/07/25/funcao-initcap-para-mysql/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luciano</name>
						<uri>http://www.lucianosilva.com</uri>
					</author>
		<title type="html"><![CDATA[AJAX II: Java Server Faces com Jboss RichFaces]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lucianosilva/~3/0PdTSe-bZ5c/" />
		<id>http://www.lucianosilva.com/?p=29</id>
		<updated>2008-07-06T23:19:52Z</updated>
		<published>2008-07-06T23:19:52Z</published>
		<category scheme="http://www.lucianosilva.com" term="Programação" /><category scheme="http://www.lucianosilva.com" term="ajax" /><category scheme="http://www.lucianosilva.com" term="Java" /><category scheme="http://www.lucianosilva.com" term="jsf" /><category scheme="http://www.lucianosilva.com" term="richfaces" />		<summary type="html"><![CDATA[Continuando com a série de posts sobre AJAX, agora vou mostrar como é mais simples desenvolver aplicativos utilizando um framework e o escolhido foi JavaServer Faces.
A utilização de frameworks é uma mão-na-roda, tanto no sentido de diminuir muito a reconstrução de funcionalidades básicas, tão quanto para padronizar componentes. O JavaServer Faces há tempos é uma [...]]]></summary>
		<content type="html" xml:base="http://www.lucianosilva.com/2008/07/06/ajax-java-server-faces-com-jboss-richfaces/">&lt;p&gt;Continuando com a série de posts sobre AJAX, agora vou mostrar como é mais simples desenvolver aplicativos utilizando um framework e o escolhido foi JavaServer Faces.&lt;/p&gt;
&lt;p&gt;A utilização de &lt;em&gt;frameworks&lt;/em&gt; é uma mão-na-roda, tanto no sentido de diminuir muito a reconstrução de funcionalidades básicas, tão quanto para padronizar componentes. O JavaServer Faces há tempos é uma base de desenvolvimento segura, padronizada e rica em componentes web 2.0, seguindo este padrão o pessoal do &lt;a href="http://jboss.org" target="_blank"&gt;JBoss&lt;/a&gt; criou o &lt;em&gt;RichFaces&lt;/em&gt;, que futuramente foi chamado de &lt;em&gt;Ajax4Jsf&lt;/em&gt;, nada mais é que um pacote de componentes pré-definidos para construção de aplicativos utilizando AJAX. No &lt;a href="http://pt.wikipedia.org" target="_blank"&gt;wikipedia &lt;/a&gt;você encontra uma descrição mais detalhada sobre &lt;a href="http://en.wikipedia.org/wiki/JavaServer_Faces" target="_blank"&gt;JSF&lt;/a&gt; e &lt;a href="http://en.wikipedia.org/wiki/Richfaces" target="_blank"&gt;RichFaces&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Em seguida vou demonstrar um desafio feito por mim mesmo, veja &lt;a href="http://www.lucianosilva.com/ajax-nada-novo-mas-que-muda-tudo/"&gt;aqui&lt;/a&gt;, construindo um auto-completar utilizando JSF com Richfaces.&lt;/p&gt;
&lt;p&gt;Os conceitos de JSF e RichFaces não serão discutidos, ou seja, apenas vou demonstrar como criar a aplicação sem detalhar a configuração feita no &lt;strong&gt;web.xml&lt;/strong&gt; e no &lt;strong&gt;faces-config.xml&lt;/strong&gt;, futuramente dedicarei um post sobre essas configurações.&lt;/p&gt;
&lt;p&gt;Em seguida será demonstrado como construit um auto-completar cujo conteúdo será o nome de países, portanto, a estrutura básica das classes é esta:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.lucianosilva.com/wp-content/uploads/2008/07/rich-faces.jpg"&gt;&lt;img class="aligncenter size-full wp-image-30" title="Estrutura de Classes" src="http://www.lucianosilva.com/wp-content/uploads/2008/07/rich-faces.jpg" alt="" width="278" height="324" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;O arquivo web.xml está configurado básicamente para trabalhar com os framewroks JSF e RichFaces.&lt;/p&gt;
&lt;pre class="brush: xml;"&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
&amp;lt;web-app xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;
xmlns=&amp;quot;http://java.sun.com/xml/ns/javaee&amp;quot;
xmlns:web=&amp;quot;http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&amp;quot;
xsi:schemaLocation=&amp;quot;http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&amp;quot;
id=&amp;quot;WebApp_ID&amp;quot; version=&amp;quot;2.5&amp;quot;&amp;gt;
&amp;lt;display-name&amp;gt;ClubesRich&amp;lt;/display-name&amp;gt;
&amp;lt;!-- RichFaces Config --&amp;gt;
&amp;lt;context-param&amp;gt;
&amp;lt;param-name&amp;gt;org.richfaces.SKIN&amp;lt;/param-name&amp;gt;
&amp;lt;param-value&amp;gt;blueSky&amp;lt;/param-value&amp;gt;
&amp;lt;/context-param&amp;gt;
&amp;lt;context-param&amp;gt;
&amp;lt;param-name&amp;gt;javax.faces.STATE_SAVING_METHOD&amp;lt;/param-name&amp;gt;
&amp;lt;param-value&amp;gt;server&amp;lt;/param-value&amp;gt;
&amp;lt;/context-param&amp;gt;
&amp;lt;filter&amp;gt;
&amp;lt;display-name&amp;gt;RichFaces Filter&amp;lt;/display-name&amp;gt;
&amp;lt;filter-name&amp;gt;richfaces&amp;lt;/filter-name&amp;gt;
&amp;lt;filter-class&amp;gt;org.ajax4jsf.Filter&amp;lt;/filter-class&amp;gt;
&amp;lt;/filter&amp;gt;
&amp;lt;filter-mapping&amp;gt;
&amp;lt;filter-name&amp;gt;richfaces&amp;lt;/filter-name&amp;gt;
&amp;lt;servlet-name&amp;gt;Faces Servlet&amp;lt;/servlet-name&amp;gt;
&amp;lt;dispatcher&amp;gt;REQUEST&amp;lt;/dispatcher&amp;gt;
&amp;lt;dispatcher&amp;gt;FORWARD&amp;lt;/dispatcher&amp;gt;
&amp;lt;dispatcher&amp;gt;INCLUDE&amp;lt;/dispatcher&amp;gt;
&amp;lt;/filter-mapping&amp;gt;

&amp;lt;!-- Faces Config --&amp;gt;
&amp;lt;servlet&amp;gt;
&amp;lt;servlet-name&amp;gt;Faces Servlet&amp;lt;/servlet-name&amp;gt;
&amp;lt;servlet-class&amp;gt;javax.faces.webapp.FacesServlet&amp;lt;/servlet-class&amp;gt;
&amp;lt;load-on-startup&amp;gt;1&amp;lt;/load-on-startup&amp;gt;
&amp;lt;/servlet&amp;gt;

&amp;lt;!-- Faces Mapping --&amp;gt;
&amp;lt;servlet-mapping&amp;gt;
&amp;lt;servlet-name&amp;gt;Faces Servlet&amp;lt;/servlet-name&amp;gt;
&amp;lt;url-pattern&amp;gt;*.jsf&amp;lt;/url-pattern&amp;gt;
&amp;lt;/servlet-mapping&amp;gt;

&amp;lt;!-- Database Config --&amp;gt;
&amp;lt;resource-ref&amp;gt;
&amp;lt;description&amp;gt;DB Connection&amp;lt;/description&amp;gt;
&amp;lt;res-ref-name&amp;gt;jdbc/Clubes&amp;lt;/res-ref-name&amp;gt;
&amp;lt;res-type&amp;gt;javax.sql.DataSource&amp;lt;/res-type&amp;gt;
&amp;lt;res-auth&amp;gt;Container&amp;lt;/res-auth&amp;gt;
&amp;lt;/resource-ref&amp;gt;
&amp;lt;!--  --&amp;gt;
&amp;lt;welcome-file-list&amp;gt;
&amp;lt;welcome-file&amp;gt;index.html&amp;lt;/welcome-file&amp;gt;
&amp;lt;welcome-file&amp;gt;index.htm&amp;lt;/welcome-file&amp;gt;
&amp;lt;welcome-file&amp;gt;index.jsf&amp;lt;/welcome-file&amp;gt;
&amp;lt;/welcome-file-list&amp;gt;
&amp;lt;/web-app&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Já o ManagerBean está assim configurado no faces-config.xml:&lt;/p&gt;
&lt;pre class="brush: xml;"&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
&amp;lt;faces-config version=&amp;quot;1.2&amp;quot; xmlns=&amp;quot;http://java.sun.com/xml/ns/javaee&amp;quot;
xmlns:xi=&amp;quot;http://www.w3.org/2001/XInclude&amp;quot;
xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xsi:schemaLocation=&amp;quot;http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd&amp;quot;&amp;gt;
&amp;lt;managed-bean&amp;gt;
&amp;lt;managed-bean-name&amp;gt;regiaoControl&amp;lt;/managed-bean-name&amp;gt;
&amp;lt;managed-bean-class&amp;gt;com.clubs.control.RegiaoControl&amp;lt;/managed-bean-class&amp;gt;
&amp;lt;managed-bean-scope&amp;gt;request&amp;lt;/managed-bean-scope&amp;gt;
&amp;lt;/managed-bean&amp;gt;
&amp;lt;navigation-rule&amp;gt;
&amp;lt;display-name&amp;gt;autocomplete&amp;lt;/display-name&amp;gt;
&amp;lt;from-view-id&amp;gt;/autocomplete.jsp&amp;lt;/from-view-id&amp;gt;

&amp;lt;/navigation-rule&amp;gt;&amp;lt;/faces-config&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Veja abaixo o manager bean terá um método chamado autoCompletePais que receberá um parametro do tipo Object e retorna um ArrayList do tipo Pais.&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
public ArrayList&amp;lt;pais&amp;gt; autoCompletePais(Object o){
return rdao.getAllPais( o.toString() );
}
&lt;/pre&gt;
&lt;p&gt;E por fim, o arquivo &lt;strong&gt;autocomplete.jsp&lt;/strong&gt;, que foi mapeado no faces-config, mostrará como é simples utilizar o recurso &lt;strong&gt;SuggestionBox &lt;/strong&gt;do pacote RichFaces e fazer um auto-completar com diversos recursos, acima de tudo bonito e eficaz no dia-a-dia, veja:&lt;/p&gt;
&lt;pre class="brush: java;"&gt;
&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jsf/html&amp;quot; prefix=&amp;quot;h&amp;quot;%&amp;gt;
&amp;lt;%@ taglib uri=&amp;quot;http://java.sun.com/jsf/core&amp;quot; prefix=&amp;quot;f&amp;quot;%&amp;gt;
&amp;lt;%@ taglib uri=&amp;quot;http://richfaces.org/a4j&amp;quot; prefix=&amp;quot;a4j&amp;quot;%&amp;gt;
&amp;lt;%@ taglib uri=&amp;quot;http://richfaces.org/rich&amp;quot; prefix=&amp;quot;rich&amp;quot;%&amp;gt;

&amp;lt;f:view&amp;gt;
&amp;lt;h:form&amp;gt;
&amp;lt;rich:panel&amp;gt;
&amp;lt;f:facet name=&amp;quot;header&amp;quot;&amp;gt;&amp;lt;h:outputText value=&amp;quot;Digite o Pais:&amp;quot;/&amp;gt;&amp;lt;/f:facet&amp;gt;
&amp;lt;h:inputText value=&amp;quot;#{regiaoControl.pais.nome}&amp;quot; id=&amp;quot;campo&amp;quot; /&amp;gt;
&amp;lt;rich:suggestionbox height=&amp;quot;150&amp;quot;
width=&amp;quot;150&amp;quot;
for=&amp;quot;campo&amp;quot;
fetchValue=&amp;quot;#{campo.nome}&amp;quot;
suggestionAction=&amp;quot;#{regiaoControl.autoCompletePais}&amp;quot;
var=&amp;quot;campo&amp;quot;&amp;gt;
&amp;lt;h:column&amp;gt;
&amp;lt;h:outputText value=&amp;quot;#{campo.id_pais}&amp;quot;/&amp;gt;
&amp;lt;/h:column&amp;gt;
&amp;lt;h:column&amp;gt;
&amp;lt;h:outputText value=&amp;quot;#{campo.nome}&amp;quot;/&amp;gt;
&amp;lt;/h:column&amp;gt;
&amp;lt;/rich:suggestionbox&amp;gt;
&amp;lt;/rich:panel&amp;gt;
&amp;lt;/h:form&amp;gt;
&amp;lt;/f:view&amp;gt;
&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://www.youtube.com/v/pDkcJJgL29s" target="_self"&gt;Veja o resultado final&lt;/a&gt;, tornando a utilização do software mais agradável.&lt;/p&gt;
&lt;!-- boo-widget start --&gt;
					&lt;script type="text/javascript"&gt;
					bb_keywords = "richfaces";
					bb_bid  = "41213";
					bb_lang  = "pt-BR";
					bb_name = "custom";bb_limit = "4";bb_format = "bbm";&lt;/script&gt;
					&lt;script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"&gt;&lt;/script&gt;
					&lt;!-- boo-widget end --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4vVg892gO3rfIRtK6sQypHdVSqU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4vVg892gO3rfIRtK6sQypHdVSqU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4vVg892gO3rfIRtK6sQypHdVSqU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4vVg892gO3rfIRtK6sQypHdVSqU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lucianosilva/~4/0PdTSe-bZ5c" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.lucianosilva.com/2008/07/06/ajax-java-server-faces-com-jboss-richfaces/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://www.lucianosilva.com/2008/07/06/ajax-java-server-faces-com-jboss-richfaces/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://www.lucianosilva.com/2008/07/06/ajax-java-server-faces-com-jboss-richfaces/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luciano</name>
						<uri>http://www.lucianosilva.com</uri>
					</author>
		<title type="html"><![CDATA[Criando um Banco de Dados Oracle Manualmente no Windows]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lucianosilva/~3/XVRnhO68Ibw/" />
		<id>http://lucianosilva.wordpress.com/?p=15</id>
		<updated>2008-06-15T14:59:56Z</updated>
		<published>2008-06-15T14:59:56Z</published>
		<category scheme="http://www.lucianosilva.com" term="Banco de Dados" /><category scheme="http://www.lucianosilva.com" term="oracle" />		<summary type="html"><![CDATA[Acredite! É fácil e vc é capaz de fazê-lo!
Porém, fácil não siginifica que não seja trabalhoso!
Para a criação deste tutorial foi utilizado a versão do Banco de Dados Oracle 9i distribuição gratuita e Windows XP SP2.
Faça download do Oracle 9i aqui, em seguida faça a instalação. Não vamos detalhar o processo de instalação do Oracle, [...]]]></summary>
		<content type="html" xml:base="http://www.lucianosilva.com/2008/06/15/criando-um-banco-de-dados-oracle-manualmente-no-windows/">&lt;p&gt;Acredite! É fácil e vc é capaz de fazê-lo!&lt;br /&gt;
Porém, fácil não siginifica que não seja trabalhoso!&lt;/p&gt;
&lt;p&gt;Para a criação deste tutorial foi utilizado a versão do Banco de Dados Oracle 9i distribuição gratuita e Windows XP SP2.&lt;br /&gt;
Faça download do Oracle 9i &lt;a href="http://www.oracle.com/technology/software/products/oracle9i/index.html" target="_blank"&gt;aqui&lt;/a&gt;, em seguida faça a instalação. Não vamos detalhar o processo de instalação do Oracle, mas no Windows é simples seguindo as instruções do wizard é possível concluir em alguns minutos.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Premissas&lt;/strong&gt;&lt;br /&gt;
ORACLE_HOME é o caminho de instalação do Oracle, normalmente no Windows é &lt;strong&gt;C:\oracle\ora92\&lt;/strong&gt;.&lt;br /&gt;
ORA_SID ou ORACLE_SID é a mesma coisa, faz referência a instância que será utilizada.&lt;br /&gt;
Leia-se &lt;em&gt;DB1WORK&lt;/em&gt; no lugar de &amp;lt;sid&amp;gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1º Passo &amp;#8211; Criando o pfile&lt;/strong&gt;&lt;br /&gt;
A partir de uma instância ativa crie um novo pfile copie e renomeie o arquivo para %ORACLE_HOME%\database\init&amp;lt;sid&amp;gt;.ora&lt;br /&gt;
No novo arquivo substitua todas as referências da outra instância para o seu novo SID, ou seja, db_name, instance_name, control_files, etc. Veja &lt;a title="BD Arquivo Ini" href="http://www.lucianosilva.com/download/initDB1WORK.ORA" target="_blank"&gt;aqui&lt;/a&gt; um exemplo como o arquivo ficará.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2º Passo &amp;#8211; criando Estruturas de Diretórios&lt;/strong&gt;&lt;br /&gt;
É necessário criar os diretórios básicos para os processos de background. Crie-os com o nome do SID nos seguintes caminhos:&lt;/p&gt;
&lt;p&gt;%ORACLE_HOME%\oradata\&amp;lt;sid&amp;gt;&lt;br /&gt;
%ORACLE_HOME%\admin\&amp;lt;sid&amp;gt;&lt;br /&gt;
%ORACLE_HOME%\admin\&amp;lt;sid&amp;gt;\bdump&lt;br /&gt;
%ORACLE_HOME%\admin\&amp;lt;sid&amp;gt;\cdump&lt;br /&gt;
%ORACLE_HOME%\admin\&amp;lt;sid&amp;gt;\udump&lt;/p&gt;
&lt;p&gt;Certifique-se que o usuário do Sistema Operacional que irá criar o banco de dados tenha permissão de escrita nesses diretórios.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3º Passo &amp;#8211; Criando Serviço&lt;/strong&gt;&lt;br /&gt;
Crie um serviço para o novo banco de dados, no Windows este passo é fundamental. Vá até o prompt de comando do windows e, faça-o da seguinte maneira:&lt;/p&gt;
&lt;p&gt;set oracle_sid=&amp;lt;sid&amp;gt;&lt;br /&gt;
oradim -new -sid &amp;lt;sid&amp;gt; -intpwd nive&lt;/p&gt;
&lt;p&gt;Muitos tutoriais omitem este procedimento mas, no Windows sem o Serviço Oracle relacionado a nova instância não é possível conectar a instância inativa, ou seja, impossibilitando a criação do banco.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4º Passo &amp;#8211; Conectando Instância Inativa&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span style="color: #0000ff;"&gt;set oracle_sid=&amp;lt;sid&amp;gt;&lt;br /&gt;
sqlplus &amp;#8220;/ as sysdba&amp;#8221;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Já no SQLPlus, após conectar na instância faça o STARTUP no modo NOMOUNT.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span style="color: #0000ff;"&gt;startup nomount pfile=&amp;#8221;%ORACLE_HOME%\database\init&amp;lt;sid&amp;gt;.ora&amp;#8221;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;É possível iniciar uma instância nos modos NOMOUNT, MOUNT, OPEN, RESTRICT, RECOVER e FORCE.&lt;br /&gt;
&lt;em&gt;NOMOUNT &lt;/em&gt;- Inicia a instância mas não monta o banco de dados.&lt;br /&gt;
&lt;em&gt;MOUNT&lt;/em&gt; &amp;#8211; Inicia a instância e monta o banco de dados mas não abre.&lt;br /&gt;
&lt;em&gt;OPEN&lt;/em&gt; &amp;#8211; Inicia a instãncia, monta e abre o banco de dados.&lt;br /&gt;
&lt;em&gt;RESTRICT&lt;/em&gt; &amp;#8211; Inicia a instância, monta e abre o banco de dados, permitindo conexão de usuários apenas que tenham o previlégio de session restrict.&lt;br /&gt;
&lt;em&gt;RECOVER&lt;/em&gt; &amp;#8211; Inicia a instância, deixa o banco de dados fechado para inicio de recuperação de falhas.&lt;br /&gt;
&lt;em&gt;FORCE&lt;/em&gt; &amp;#8211; Em caso de problemas para iniciar e parar o banco de dados, esse modo força o SHUTDOWN ABORT e em seguida STARTUP OPEN.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5º Passo &amp;#8211; Criando o Banco de Dados&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span style="color: #0000ff;"&gt;CREATE DATABASE DB1WORK CONTROLFILE REUSE&lt;br /&gt;
Logfile&lt;br /&gt;
Group 1 (&amp;#8216;c:/oracle/admin/DB1WORK/bdump/log01a.log&amp;#8217;,&lt;br /&gt;
&amp;#8216;c:/oracle/admin/DB1WORK/bdump/log01b.log&amp;#8217;) size 50M,&lt;br /&gt;
Group 2 (&amp;#8216;c:/oracle/admin/DB1WORK/bdump/log02a.log&amp;#8217;,&lt;br /&gt;
&amp;#8216;c:/oracle/admin/DB1WORK/bdump/log02b.log&amp;#8217;) size 50M&lt;br /&gt;
DATAFILE &amp;#8216;c:/oracle/oradata/DB1WORK/system1.dbf&amp;#8217; size 250M&lt;br /&gt;
AUTOEXTEND ON MAXSIZE 50M&lt;br /&gt;
UNDO TABLESPACE &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;UNDOTBS2&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #0000ff;"&gt;DATAFILE &amp;#8216;c:/oracle/oradata/DB1WORK/undo1.dbf&amp;#8217; size 50M&lt;br /&gt;
DEFAULT TEMPORARY TABLESPACE DB1WORK1TEMP TEMPFILE &amp;#8216;c:/oracle/oradata/DB1WORK/mydb1temp1.dbf&amp;#8217; size 75M&lt;br /&gt;
MAXLOGFILES 32&lt;br /&gt;
MAXLOGHISTORY 1&lt;br /&gt;
MAXDATAFILES 500;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;6º Passo &amp;#8211; Finalizando&lt;/strong&gt;&lt;br /&gt;
Após criar o banco de dados basta executar os scripts abaixo:&lt;/p&gt;
&lt;p&gt;Criação do dicionário de dados, views e sinonimos de sistema.&lt;br /&gt;
@%ORACLE_HOME%/rdbms/admin/catalog.sql&lt;/p&gt;
&lt;p&gt;Executa todos os scripts usados em Pl/Sql&lt;br /&gt;
@%ORACLE_HOME%/rdbms/admin/catproc.sql&lt;/p&gt;
&lt;p&gt;@%ORACLE_HOME%/sqlplus/admin/pupbld.sql&lt;/p&gt;
&lt;p&gt;Eu tentei demonstrar neste post que criar o banco de dados Oracle manualmente em ambiente Windows não é nenhum bicho-de-sete-cabeças e, que com base em um passo-a-passo é possível fazê-lo. Os conceitos de tamanho de arquivos físicos e nomeclaturas não foram discutidos, visto que foi uma decisão pessoal que o autor baseou-se no seu pouco conhecimento.&lt;/p&gt;
&lt;!-- boo-widget start --&gt;
					&lt;script type="text/javascript"&gt;
					bb_keywords = "oracle";
					bb_bid  = "41213";
					bb_lang  = "pt-BR";
					bb_name = "custom";bb_limit = "4";bb_format = "bbm";&lt;/script&gt;
					&lt;script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"&gt;&lt;/script&gt;
					&lt;!-- boo-widget end --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/U1v4GxHTxtc8GyOwfq4ipdaKg0Q/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/U1v4GxHTxtc8GyOwfq4ipdaKg0Q/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/U1v4GxHTxtc8GyOwfq4ipdaKg0Q/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/U1v4GxHTxtc8GyOwfq4ipdaKg0Q/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lucianosilva/~4/XVRnhO68Ibw" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.lucianosilva.com/2008/06/15/criando-um-banco-de-dados-oracle-manualmente-no-windows/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.lucianosilva.com/2008/06/15/criando-um-banco-de-dados-oracle-manualmente-no-windows/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.lucianosilva.com/2008/06/15/criando-um-banco-de-dados-oracle-manualmente-no-windows/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luciano</name>
						<uri>http://www.lucianosilva.com</uri>
					</author>
		<title type="html"><![CDATA[AJAX: Nada novo, mas que muda tudo!]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lucianosilva/~3/CXz5p3vLiTw/" />
		<id>http://lucianosilva.wordpress.com/?p=17</id>
		<updated>2008-06-14T01:51:22Z</updated>
		<published>2008-06-14T01:51:22Z</published>
		<category scheme="http://www.lucianosilva.com" term="Programação" /><category scheme="http://www.lucianosilva.com" term="ajax" /><category scheme="http://www.lucianosilva.com" term="javascript" /><category scheme="http://www.lucianosilva.com" term="php" /><category scheme="http://www.lucianosilva.com" term="web2.0" />		<summary type="html"><![CDATA[Resolvi escrever sobre AJAX porque vejo muita confusão ainda sobre o assunto, tem uma galera que não sabe exatamente o que é e, como se aplica e o que se ganha utilizando a técnica. Vou apenas demonstrar o mecanismo básico para funcionamento, não é um segredo, esse mesmo tutorial pode ser encontrado em milhares de [...]]]></summary>
		<content type="html" xml:base="http://www.lucianosilva.com/2008/06/13/ajax-nada-novo-mas-que-muda-tudo/">&lt;p&gt;Resolvi escrever sobre AJAX porque vejo muita confusão ainda sobre o assunto, tem uma galera que não sabe exatamente o que é e, como se aplica e o que se ganha utilizando a técnica. Vou apenas demonstrar o mecanismo básico para funcionamento, não é um segredo, esse mesmo tutorial pode ser encontrado em milhares de sites na internet.&lt;/p&gt;
&lt;p&gt;AJAX (Asynchronous JavaScript and XML) é uma técnica simples aplicada em ambiente de internet que utiliza apenas JavaScript e XML, possibilitando ao desenvolvedor criar funcionalidades mais ricas, daí o famoso RIA (Rich Internet Application). É possível usar AJAX em qualquer linguagem dinâmica de internet que suporte XML, como PHP, ASP, J2EE, .NET, etc.  A diferença realmente está nos navegadores de internet, que utilizam o componente chave XMLHttpRequest cada um a sua maneira.&lt;/p&gt;
&lt;p&gt;O processo é feito de maneira simples, o XMLHttpRequest  faz uma chamada assíncrona por XML a uma outra página oculta aos olhos do usuário. Esta página oculta por sua vez devolve as informações processadas ao XMLHttpRequest, também via XML, e utilizando JavaScript é feito o parse do XML e exibido o resultado na página principal, que originou a chamada.&lt;/p&gt;
&lt;p&gt;Para obter o XMLHttpRequest, eh comum a utilização deste bloco JavaScript&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span style="color: #0000ff;"&gt;if( window.XMLHttpRequest ){ // Firefox, Safári, etc.&lt;br /&gt;
xmlReq= new XMLHttpRequest();&lt;br /&gt;
}else  if( window.ActiveXObject ){ // Se for IE &amp;#8211; ActiveX version&lt;br /&gt;
xmlReq = new ActiveXObject(&amp;#8220;Microsoft.XMLHTTP&amp;#8221;);&lt;br /&gt;
}&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Existem outras maneiras para obter o componente, cada programador decide pelo mais conveniente, veja este outro exemplo:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span style="color: #0000ff;"&gt;try{&lt;br /&gt;
xmlReq = new ActiveXObject(&amp;#8220;Microsoft.XMLHTTP&amp;#8221;); // IE&lt;br /&gt;
}catch(e){   // Falhou, para os normais&lt;br /&gt;
xmlReq = new XMLHttpRequest();&lt;br /&gt;
}&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Após obter o XMLHttpRequest, vamos fazer a comunicação com um XML e exibir seu conteúdo, e tudo isso usando apenas JavaScript.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: #808080;"&gt;// faz a chamada no servidor da página dinâmica, responsavel por devolver o XML response&lt;br /&gt;
// o primeiro parametro indica se a chamada será via GET ou POST&lt;br /&gt;
// o segundo informa qual é a página, e por último se será uma chamada assíncrona&lt;/span&gt;&lt;br /&gt;
xmlReq.open(&amp;#8220;GET&amp;#8221;, &amp;#8220;http://localhost/ajax/response.php&amp;#8221;, true);&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #0000ff;"&gt;&lt;br /&gt;
xmlReq.onreadystatechange=function(){&lt;br /&gt;
if( xmlReq.readyState &amp;lt; 4 ){&lt;br /&gt;
&lt;span style="color: #808080;"&gt;// Enquanto é aguardado o retorno, pode-se exibir uma mensagem&lt;/span&gt;&lt;br /&gt;
}else{&lt;br /&gt;
if( xmlReq.readyState == 4 ){&lt;br /&gt;
&lt;span style="color: #808080;"&gt;// Aqui é colocado o processo de parser do XMLResponse.&lt;/span&gt;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
}// end OnReadyStateChange&lt;br /&gt;
xmlReq.send(null); &lt;span style="color: #808080;"&gt;// transporte&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Vejam que a primeira ação é chamar a página &amp;#8220;oculta&amp;#8221;, responsável por retornar o XML com os dados necessário.&lt;/p&gt;
&lt;p&gt;O &lt;strong&gt;readyState &lt;/strong&gt;indica qual o nível do processamento, esses são os estados: 1 &amp;#8211; Sendo enviado; 2 &amp;#8211; Processando; 3 &amp;#8211; Armazenando e 4 &amp;#8211; Pronto. É possível utilizar a propriedade &lt;strong&gt;status &lt;/strong&gt;do XMLHttpResponse, esta por sua vez indica o status da página que foi chamada, ou seja, se ocorreu algum erro ou não.&lt;/p&gt;
&lt;p&gt;That`s all! Simples não? É assim que funciona o famoso AJAX, nada mais além disso, os recursos de JavaScript são utilizados ao extremo. Atualmente existem recursos extremamente avançados e mais seguros que este exemplo, mesmo assim é válido o entendimento do mecanismo utilizado nesses frameworks e esclarecer o funcionamento do AJAX.&lt;/p&gt;
&lt;p&gt;Você pode fazer &lt;a title="Ajax Arquivos" href="http://www.lucianosilva.com/download/ajax.rar" target="_blank"&gt;aqui&lt;/a&gt; o download de um exemplo simples, porém muito útil em formulários de cadastro, onde três dropdowns (País, Estado e Cidade) interdependentes, que ao fazer o reload da página para carregá-los é muito cansativo. Vale ressaltar que utilizei PHP para a construção deste pequeno tutorial, acabando como mito de que AJAX está vinculado a Java/.Net.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ambiente&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;PHP 5 e MySQL 5, rodando em Windows XP, IE 6 e 7 e Firefox 2.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Desafio&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Talvez você tenha idéia melhores para aplicar o AJAX depois de entendê-lo e, eu não me surpreenderia com isto, então faço aqui um desafio para estimular o aprendizado: crie um Auto-Completar! Você é capaz?!&lt;/p&gt;
&lt;!-- boo-widget start --&gt;
					&lt;script type="text/javascript"&gt;
					bb_keywords = "web2.0";
					bb_bid  = "41213";
					bb_lang  = "pt-BR";
					bb_name = "custom";bb_limit = "4";bb_format = "bbm";&lt;/script&gt;
					&lt;script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"&gt;&lt;/script&gt;
					&lt;!-- boo-widget end --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/onyCNhN3kGoqRg2umrBjwraArNI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/onyCNhN3kGoqRg2umrBjwraArNI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/onyCNhN3kGoqRg2umrBjwraArNI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/onyCNhN3kGoqRg2umrBjwraArNI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lucianosilva/~4/CXz5p3vLiTw" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.lucianosilva.com/2008/06/13/ajax-nada-novo-mas-que-muda-tudo/#comments" thr:count="2" />
		<link rel="replies" type="application/atom+xml" href="http://www.lucianosilva.com/2008/06/13/ajax-nada-novo-mas-que-muda-tudo/feed/atom/" thr:count="2" />
		<thr:total>2</thr:total>
	<feedburner:origLink>http://www.lucianosilva.com/2008/06/13/ajax-nada-novo-mas-que-muda-tudo/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luciano</name>
						<uri>http://www.lucianosilva.com</uri>
					</author>
		<title type="html"><![CDATA[View Materializada]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lucianosilva/~3/MUwhIyBXPtY/" />
		<id>http://lucianosilva.wordpress.com/?p=14</id>
		<updated>2008-04-18T02:08:37Z</updated>
		<published>2008-04-18T02:08:37Z</published>
		<category scheme="http://www.lucianosilva.com" term="Banco de Dados" /><category scheme="http://www.lucianosilva.com" term="oracle" />		<summary type="html"><![CDATA[As View Materialized assim conhecidas desde a versão 9i, são nada mais que objetos do banco de dados Oracle que contém dados locais de tabelas remotas ou são usadas pra criar uma agregação de tabelas em um determinado intervalo de tempo.
Uma curiosidade nas versões precedentes à 9i as Views Materializadas eram conhecidas como Snapshots.
Como meu [...]]]></summary>
		<content type="html" xml:base="http://www.lucianosilva.com/2008/04/17/materialized-view/">&lt;p&gt;As View Materialized assim conhecidas desde a versão 9i, são nada mais que objetos do banco de dados Oracle que contém dados locais de tabelas remotas ou são usadas pra criar uma agregação de tabelas em um determinado intervalo de tempo.&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:line-through;"&gt;Uma curiosidade nas versões precedentes à 9i as Views Materializadas eram conhecidas como Snapshots.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Como meu professor Milton Goya já comentou, Snapshot é o nome utilizado na versão 7 do Oracle.&lt;br /&gt;
O comando abaixo demonstra como podemos criar uma View Materializada:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;CREATE MATERIALIZED VIEW vm_employees&lt;br /&gt;
REFRESH FAST&lt;br /&gt;
START WITH SYSDATE + 1&lt;br /&gt;
NEXT SYSDATE + 1/24&lt;br /&gt;
WIDTH PRIMARY KEY&lt;br /&gt;
AS&lt;br /&gt;
SELECT empno, ename, job, salary&lt;br /&gt;
FROM emp;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Na sequência será detalhada cada linha do comando demonstrado acima.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;CREATE MATERIALIZED VIEW vm_employees&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Inicio da sintaxe para criar a visão chamada de vm_employees.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;REFRESH FAST&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;O REFRESH indica o tipo de atualização que sofrerão os dados contidos na visão.&lt;br /&gt;
Existem três estados ou métodos sendo FAST, COMPLETE e FORCE.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;FAST:&lt;/strong&gt; Atualiza somente as linhas da tabela original que sofreram atualizações.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;COMPLETE&lt;/strong&gt;: Recria toda a estrutura da view materializada mesmo que não seja necessário.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;FORCE&lt;/strong&gt;: Se não for específicado o método de atualização, o padrão é FORCE, que tentará fazer uma atualização FAST se não for possível irá fazer a COMPLETE.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;START WITH SYSDATE + 1&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Indica que quando o banco irá fazer a primeira replicação.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;NEXT SYSDATE + 1/24&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Determina o intervalo entre a próxima replicação.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;WIDTH PRIMARY KEY&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;É utilizado para criar a Chave-Primária, que é baseada na chave-primária da tabela master.&lt;/p&gt;
&lt;p&gt;Concluí-se com esses post-tutorial que view materializadas são extremamente uteís no dia-a-dia de uma companhia que trabalha com centenas de milhares de tuplas e, o acesso à elas acaba ficando custoso. Este tipo de objeto ajuda a diminuir acesso as tabelas master de uma maneira segura e íntegra.&lt;/p&gt;
&lt;!-- boo-widget start --&gt;
					&lt;script type="text/javascript"&gt;
					bb_keywords = "oracle";
					bb_bid  = "41213";
					bb_lang  = "pt-BR";
					bb_name = "custom";bb_limit = "4";bb_format = "bbm";&lt;/script&gt;
					&lt;script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"&gt;&lt;/script&gt;
					&lt;!-- boo-widget end --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nOY1o-WIQtTYgM8e56sxxtfoQnc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nOY1o-WIQtTYgM8e56sxxtfoQnc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nOY1o-WIQtTYgM8e56sxxtfoQnc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nOY1o-WIQtTYgM8e56sxxtfoQnc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lucianosilva/~4/MUwhIyBXPtY" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.lucianosilva.com/2008/04/17/materialized-view/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://www.lucianosilva.com/2008/04/17/materialized-view/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://www.lucianosilva.com/2008/04/17/materialized-view/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luciano</name>
						<uri>http://www.lucianosilva.com</uri>
					</author>
		<title type="html"><![CDATA[Java, Os iniciantes e a Sopa de Letrinhas]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lucianosilva/~3/M4ZlQArRahg/" />
		<id>http://lucianosilva.wordpress.com/?p=13</id>
		<updated>2008-04-15T02:36:31Z</updated>
		<published>2008-04-15T02:36:31Z</published>
		<category scheme="http://www.lucianosilva.com" term="Programação" /><category scheme="http://www.lucianosilva.com" term="Java" />		<summary type="html"><![CDATA[Uma breve histórinha: &#8220;recentemente um amigo iniciou seu estágio em uma grande companhia em Soluções de TI, ele fez treinamentos específicos durante algum tempo, porém, para sua surpresa o tal treinamento foi ignorado e disseram agora você irá estagiar em Java (JEE) e PlSql (Oracle), hã? O que é isso? Meu amigo não gostou da [...]]]></summary>
		<content type="html" xml:base="http://www.lucianosilva.com/2008/04/15/java-os-iniciantes-e-a-sopa-de-letrinhas/">&lt;p&gt;Uma breve histórinha: &amp;#8220;recentemente um amigo iniciou seu estágio em uma grande companhia em Soluções de TI, ele fez treinamentos específicos durante algum tempo, porém, para sua surpresa o tal treinamento foi ignorado e disseram agora você irá estagiar em Java (JEE) e PlSql (Oracle), hã? O que é isso? Meu amigo não gostou da idéia inicialmente mas depois de algumas conversas ele mudou de idéia, hoje está feliz tentando entender e programar em Java&amp;#8221;.&lt;/p&gt;
&lt;p&gt;Eu aprendi um pouco com esta história, aprendi que as empresas muitas vezes não estão preocupadas quão bom será o seu código, ou ainda qual o seu nível de conhecimento sobre a plataforma de desenvolvimento utilizada. Conhecer o ambiente, quais as possibilidades de evolução dele, a aceitação de mercado, e vou mais afundo a portabildiade, segurança e velocidade consideradas por especialistas são de extrema importância para um desenvolvedor, e não apenas &amp;#8220;Leia e Faça&amp;#8221;.&lt;/p&gt;
&lt;p&gt;Calma lá, ou muita calma nessa hora! :)&lt;br /&gt;
Não quero ser polêmico e chato neste primeiro post, portanto deixaremos minhas opiniões a parte e vamos ao que interessa.&lt;/p&gt;
&lt;p&gt;Muitas pessoas quando iniciam seus estudos no mundo Java ficam espantados com a quantidade de siglas, e realmente é uma sopa de letrinhas quase que inesgotável, mas como estamos aqui para esclarecer e não complicar ainda mais, vamos lá. Abaixo listei algumas siglas junto a um breve resumo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;JVM &amp;#8211; Java Virtual Machine&lt;/strong&gt;&lt;br /&gt;
Máquina Virtual Java, responsável por carregar os programas e fazer a conversão do bytecodes em Linguagem de Máquina, definida para cada estrutura de Sistema Operacional. Aqui está um dos grandes diferenciais do Java comparado a outros linguagens, o programa não se limita ao SO já que a JVM faz a conversão.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;JRE &amp;#8211; Java Runtime Environment&lt;/strong&gt;&lt;br /&gt;
Composto pela JVM e Bibliotecas Java para execução de programas em tempo real.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;JSE &amp;#8211; Java Standard Edition&lt;/strong&gt;&lt;br /&gt;
Ambiente com a estrutura básica necessária para criação de programas Java, contém a JVM, o compilador e as bibliotecas Java necessárias.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;JEE &amp;#8211; Java Enterprise Edition&lt;/strong&gt;&lt;br /&gt;
Assim como JSE, o JEE é uma edição do ambiente Java para desenvolvimento de programas, porém, com número de recursos superior, permitindo o desenvolvimento em multicamadas, componentes distribuídos, ambientes de internet, etc.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;JME &amp;#8211; Java Micro Edition&lt;/strong&gt;&lt;br /&gt;
Edição do Java voltado para dispositivos capacidade de memória compacta, tais como: Celulares, PDAs, e muitos outros dispositivos.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;JSDK &amp;#8211; Java Standard Development Kit&lt;/strong&gt;&lt;br /&gt;
Contém o JRE, JSE, os fontes das classes Java e o JavaDoc, com isto, fornecendo o ambiente para desenvolvimento e execução de programas Java.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;JAVA_HOME&lt;/strong&gt;&lt;br /&gt;
É o nome da variável de sistema operacional que contém o caminho de instalação do JSDK. Uma boa prática que deve ser seguidas por todos bons programadores.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CLASSPATH&lt;/strong&gt;&lt;br /&gt;
É o nome da variável de sistema operacional que contém o caminho das bibliotecas nativas do Java ou de terceiros para a compilação e execução de programas Java.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;EJB&lt;/strong&gt;&lt;br /&gt;
Enterprise JavaBeans, componente JEE que fica no container do Servidor de Aplicação, auxilia no desenvolvimento de aplicações distribuídas, transacionais de forma segura e ágil.&lt;/p&gt;
&lt;p&gt;Obviamente que foram listados pouquissimos termos aqui talvez você tenha ouvido falar em Design Pattern, JSF, JFX, Tomcat, JBoss, e nem saiba que raios isto significa!Fique tranquilo ao longo do tempo iremos discutir mais sobre eles.&lt;/p&gt;
&lt;!-- boo-widget start --&gt;
					&lt;script type="text/javascript"&gt;
					bb_keywords = "Java";
					bb_bid  = "41213";
					bb_lang  = "pt-BR";
					bb_name = "custom";bb_limit = "4";bb_format = "bbm";&lt;/script&gt;
					&lt;script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"&gt;&lt;/script&gt;
					&lt;!-- boo-widget end --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/VjoNPv-C27jna0db-RncfagZWdw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VjoNPv-C27jna0db-RncfagZWdw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/VjoNPv-C27jna0db-RncfagZWdw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VjoNPv-C27jna0db-RncfagZWdw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lucianosilva/~4/M4ZlQArRahg" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.lucianosilva.com/2008/04/15/java-os-iniciantes-e-a-sopa-de-letrinhas/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://www.lucianosilva.com/2008/04/15/java-os-iniciantes-e-a-sopa-de-letrinhas/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://www.lucianosilva.com/2008/04/15/java-os-iniciantes-e-a-sopa-de-letrinhas/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luciano</name>
						<uri>http://www.lucianosilva.com</uri>
					</author>
		<title type="html"><![CDATA[A Tribute to Jack Johnson]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lucianosilva/~3/04C6tM1uztY/" />
		<id>http://lucianosilva.wordpress.com/2007/11/27/a-tribute-to-jack-johnson/</id>
		<updated>2007-11-27T16:46:51Z</updated>
		<published>2007-11-27T16:46:51Z</published>
		<category scheme="http://www.lucianosilva.com" term="Música" /><category scheme="http://www.lucianosilva.com" term="jazz" /><category scheme="http://www.lucianosilva.com" term="mile davis" /><category scheme="http://www.lucianosilva.com" term="music" />		<summary type="html"><![CDATA[Esse é o nome atribuído ao album gravado por Mile Davis na década de 70. E também trilha sonora do documentário de mesmo nome feito por Bill Cayton, em homenagem ao pugilista campeão mundial, Jack Johnson.
Este foi um íncrivel sucesso antes do lançamento do album Eletric, vale ouvir suas duas faixas lindissimas (&#8220;Right Off&#8221; – [...]]]></summary>
		<content type="html" xml:base="http://www.lucianosilva.com/2007/11/27/a-tribute-to-jack-johnson/">&lt;p&gt;Esse é o nome atribuído ao album gravado por Mile Davis na década de 70. E também trilha sonora do documentário de mesmo nome feito por Bill Cayton, em homenagem ao pugilista campeão mundial, Jack Johnson.&lt;/p&gt;
&lt;p&gt;Este foi um íncrivel sucesso antes do lançamento do album Eletric, vale ouvir suas duas faixas lindissimas (&amp;#8220;Right Off&amp;#8221; – 26:53 e &amp;#8220;Yesternow&amp;#8221; – 25:34), que trânsmitem uma energia vibrante e contagiante.&lt;/p&gt;
&lt;p&gt;Sexta-feira passada, passei em um posto de gasolina na Rua Domingos de Morais, e fui tão bem atendido pelos frentistas que resolvi entrar na loja de conveniências. Não era a primeira vez que eu iria adquirir um cd desta loja, mas fiquei impressionado com a qualidade das bandas que estavam ali a venda, nesse acaso todo, conheci este maginifico album que estou a semana inteira ouvindo. Em paralelo estou ouvindo o show gravado na Argentina, de Vinicius de Moraes e Toquinho mas isso é assunto pra outro dia&amp;#8230;&lt;/p&gt;
&lt;p&gt;&lt;a title="A Tribute to Jack Johnson" href="http://blog.lucianosilva.com/wp-content/uploads/2007/11/tribute_to_jack_johnson.jpg"&gt;&lt;img class="aligncenter size-full wp-image-143" title="Tribute Jack Johnson" src="http://www.lucianosilva.com/wp-content/uploads/2007/11/tribute_jackjohnson.jpg" alt="Tribute Jack Johnson" width="328" height="329" /&gt;&lt;br /&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Leia mais sobre isso no &lt;a href="http://en.wikipedia.org/wiki/A_Tribute_to_Jack_Johnson" target="_blank"&gt;Wikipedia&lt;/a&gt;.&lt;/p&gt;
&lt;!-- boo-widget start --&gt;
					&lt;script type="text/javascript"&gt;
					bb_keywords = "music";
					bb_bid  = "41213";
					bb_lang  = "pt-BR";
					bb_name = "custom";bb_limit = "4";bb_format = "bbm";&lt;/script&gt;
					&lt;script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"&gt;&lt;/script&gt;
					&lt;!-- boo-widget end --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/lYZGsN-jWuhcTYxclIl2WlOypjw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lYZGsN-jWuhcTYxclIl2WlOypjw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/lYZGsN-jWuhcTYxclIl2WlOypjw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lYZGsN-jWuhcTYxclIl2WlOypjw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lucianosilva/~4/04C6tM1uztY" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.lucianosilva.com/2007/11/27/a-tribute-to-jack-johnson/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.lucianosilva.com/2007/11/27/a-tribute-to-jack-johnson/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.lucianosilva.com/2007/11/27/a-tribute-to-jack-johnson/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Luciano</name>
						<uri>http://www.lucianosilva.com</uri>
					</author>
		<title type="html"><![CDATA[Data Access Object (DAO)]]></title>
		<link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/lucianosilva/~3/V-0UHPNUxa4/" />
		<id>http://blog.lucianosilva.com/?p=11</id>
		<updated>2007-09-28T11:49:27Z</updated>
		<published>2007-09-28T11:49:27Z</published>
		<category scheme="http://www.lucianosilva.com" term="Programação" /><category scheme="http://www.lucianosilva.com" term="DAO" /><category scheme="http://www.lucianosilva.com" term="design pattern" />		<summary type="html"><![CDATA[Recentemente revivi a experiência de lidar com a construção de DAOs, especificamente com Factory, fiz algumas pesquisas na internet e não encontrei nenhum material bacana em português, então pensei em criar um exemplo simples porém eficaz.
Data Access Object é um padrão da camada de integração para recuperação de dados, independente da fonte, ou seja, podem [...]]]></summary>
		<content type="html" xml:base="http://www.lucianosilva.com/2007/09/28/hello-world/">&lt;p&gt;Recentemente revivi a experiência de lidar com a construção de DAOs, especificamente com Factory, fiz algumas pesquisas na internet e não encontrei nenhum material bacana em português, então pensei em criar um exemplo simples porém eficaz.&lt;/p&gt;
&lt;p&gt;Data Access Object é um padrão da camada de integração para recuperação de dados, independente da fonte, ou seja, podem ser utilizadas vários data sources da mesma forma deixando totalmente transparente para a aplicação.&lt;/p&gt;
&lt;p&gt;Abstração é ponto importante do pattern, algumas pessoas acabam complicando, fazendo com que sejam criadas muitas classes sem necessidade, o próprio site da &lt;a href="http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html" target="_blank"&gt;Sun&lt;/a&gt; não é muito didático.&lt;/p&gt;
&lt;p&gt;Enfim, o embasamento deste post refere-se ao Blog do &lt;a href="http://beyondclick.wordpress.com/2007/06/07/dao-factory-dinamica/" target="_blank"&gt;Beyond &lt;/a&gt;e no artigo do &lt;a href="http://www.javafree.org/content/view.jf?idContent=183" target="_blank"&gt;Davi Lucas&lt;/a&gt; no JavaFree.&lt;/p&gt;
&lt;p&gt;&lt;a title="Diagram Class DAO" href="http://blog.lucianosilva.com/wp-content/uploads/2007/11/dao_v21.jpg"&gt;&lt;/a&gt;&lt;a title="Diagram Class DAO" href="http://blog.lucianosilva.com/wp-content/uploads/2007/11/dao_v21.jpg"&gt;&lt;/a&gt;&lt;a title="Diagram Class DAO" href="http://blog.lucianosilva.com/wp-content/uploads/2007/11/dao_v21.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;a title="Diagram Class DAO" href="http://blog.lucianosilva.com/wp-content/uploads/2007/11/dao_v21.jpg"&gt;&lt;img style="width:375px;height:403px;" src="http://blog.lucianosilva.com/wp-content/uploads/2007/11/dao_v21.jpg" alt="Diagram Class DAO" width="540" height="552" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a title="Diagram Class DAO" rel="attachment wp-att-4" href="http://lucianosilva.wordpress.com/2007/09/28/hello-world/diagram-class-dao/"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;!-- boo-widget start --&gt;
					&lt;script type="text/javascript"&gt;
					bb_keywords = "design pattern";
					bb_bid  = "41213";
					bb_lang  = "pt-BR";
					bb_name = "custom";bb_limit = "4";bb_format = "bbm";&lt;/script&gt;
					&lt;script type="text/javascript" src="http://widgets.boo-box.com/javascripts/embed.js"&gt;&lt;/script&gt;
					&lt;!-- boo-widget end --&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9wrw9Qkj7U8GtdnGm2TZKfm1zuw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9wrw9Qkj7U8GtdnGm2TZKfm1zuw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9wrw9Qkj7U8GtdnGm2TZKfm1zuw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9wrw9Qkj7U8GtdnGm2TZKfm1zuw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/lucianosilva/~4/V-0UHPNUxa4" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://www.lucianosilva.com/2007/09/28/hello-world/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://www.lucianosilva.com/2007/09/28/hello-world/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://www.lucianosilva.com/2007/09/28/hello-world/</feedburner:origLink></entry>
	</feed>
