<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4910060404641588003</id><updated>2011-11-27T15:47:04.656-08:00</updated><category term='EVENTOS'/><category term='CERTIFICAÇÃO'/><category term='PERFORMANCE'/><category term='ANÁLISE UML'/><category term='DESENVOLVIMENTO WEB'/><category term='PROVA DE SELEÇÃO'/><category term='PLATAFORMA GOOGLE JME'/><category term='DESENVOLVIMENTO JAVA'/><category term='ARQUITETURA DE SISTEMAS'/><category term='SOA'/><category term='ENQUETES'/><category term='USABILIDADE'/><category term='PADRÕES DE PROJETO'/><category term='FERRAMENTAS DE TESTE'/><title type='text'>Portal do arquiteto</title><subtitle type='html'>Espaço utilizado para falarmos sobre arquitetura de software e outros assuntos relacionados.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>74</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-6572267744639114748</id><published>2011-10-25T16:28:00.000-07:00</published><updated>2011-10-25T16:28:45.239-07:00</updated><title type='text'>Festa para Crianças Carentes</title><content type='html'>&lt;span class="Apple-style-span" style="background-color: #fdfaf1; font-size: 16px; line-height: 16px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #525252; font-size: 15px; font: normal normal normal 15px/normal georgia; line-height: 25px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 20px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Garantir a alegria de dezenas de crianças carentes no mês especialmente dedicado à garotada. Esse é o objetivo da campanha “Solidariedade não se economiza”, que promete agitar o mês de outubro dos moradores da área de abrangência do Centro de Saúde Jardim Filadélfia, na região noroeste da capital mineira.&lt;/div&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #525252; font-size: 15px; font: normal normal normal 15px/normal georgia; line-height: 25px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 20px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;A campanha arrecada brinquedos (e também roupas, livros e alimentos não perecíveis) para celebrar o Dia das Crianças com moradores dos bairros Jardim Filadélfia, Filadélfia, Álvaro Camargo, Frei Eustáquio, Glória e Novo Glória. A festa será realizada no sábado, dia 29 de outubro, a partir das 9h, no próprio Centro de Saúde do Bairro Jardim Filadélfia, localizado na Rua Régida, 319.&lt;/div&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #525252; font-size: 15px; font: normal normal normal 15px/normal georgia; line-height: 25px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 20px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;A campanha “Solidariedade não se economiza” é uma iniciativa do&amp;nbsp;&lt;a href="http://www.webdescontos.com.br/" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #ad1821; font-size: 15px; font-style: italic; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;" target="_blank"&gt;WebDescontos&lt;/a&gt;, que doa brinquedos novos e está em busca de parcerias para alegrar a manhã do dia 29 dessa criançada! Até agora, já está confirmada a presença de uma máquina de algodão doce, além de oficina de balões, desenho de rostos, fantasias, cama elástica e gincanas.&lt;/div&gt;&lt;div style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #525252; font-size: 15px; font: normal normal normal 15px/normal georgia; line-height: 25px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 20px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"&gt;Os interessados em contribuir para a campanha devem entrar em contato através do email&amp;nbsp;&lt;a href="mailto: contato@webdescontos.com.br" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #ad1821; font-size: 15px; font-style: italic; font-weight: bold; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;"&gt;contato@webdescontos.com.br&lt;/a&gt;&amp;nbsp;ou pelo telefone (31) 3037-4029. O posto de arrecadação fica localizado na Av. Afonso Pena, 4000 (3º andar, sala 7) – bairro Cruzeiro.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-6572267744639114748?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/6572267744639114748/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=6572267744639114748' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/6572267744639114748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/6572267744639114748'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2011/10/festa-para-criancas-carentes.html' title='Festa para Crianças Carentes'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-8868561543368379668</id><published>2010-04-28T17:43:00.000-07:00</published><updated>2010-04-28T17:48:47.438-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EVENTOS'/><title type='text'>Evento JBossInBossa2010</title><content type='html'>&lt;div style="text-align: justify;" class="entry"&gt;        &lt;div id="HOTWordsTxt" name="HOTWordsTxt"&gt;&lt;p&gt;&lt;span style="font-size:100%;"&gt;Pessoal,&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;Venho convidá-los para um evento da Comunidade JBoss Brasil. O evento irá acontecer em SP e conta com a participação de vários líderes de projetos Open Source. Segue mais detalhes do evento:&lt;/span&gt;&lt;/p&gt; &lt;div class="wp-caption alignnone" style="width: 183px;"&gt;&lt;span style="font-size:100%;"&gt;&lt;img title="Evento" src="http://api.ning.com/files/NNzLV55Kl2*GmrQKZxfT0dXdpcTfSiYIABRJdKhZZkR-FH56zVEKmxCd05iR0Xa3Iur-M9SiUOakoWdW9m9tlv9oefydaady/245143904.png?size=173&amp;amp;crop=1%3A1" alt="Evento" height="173" width="173" /&gt;&lt;br /&gt;&lt;/span&gt; &lt;p class="wp-caption-text"&gt;&lt;span style="font-size:100%;"&gt;Evento&lt;/span&gt;&lt;/p&gt;&lt;/div&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;&lt;strong&gt;Horário:&lt;/strong&gt; 7 maio 2010 às 14:00 a 8 maio 2010 às 20:00&lt;br /&gt;&lt;strong&gt;Local:&lt;/strong&gt; Anhembi Morumbi – Casa do Ator, Campos Vila Olimpia&lt;br /&gt;&lt;strong&gt;Organizado por:&lt;/strong&gt; Land do Brasil&lt;/span&gt;  &lt;/p&gt; &lt;span style="font-size:100%;"&gt;&lt;strong&gt;Descrição do evento:&lt;/strong&gt;&lt;br /&gt;internacionais que são líderes de projetos opensource, bem como palestras da comunidade brasileira que desenvolve e fomenta tecnologias relaciodas além do time brasileiro JBoss que atua em diversos projetos de missão crítica que usam tecnologias de ponta em projetos em todos os lugares do Brasil.&lt;br /&gt;Presenças Internacionais da Red Hat/JBoss, eXo Platform e PlugTree/Drools &lt;/span&gt;&lt;p&gt;&lt;span style="font-size:100%;"&gt;Pete Muir é o primeiro palestrante internacional a confirmar presença no JBoss In Bossa 2010, você não vai perder a oportunidade de saber tudo da JSR299 – CDI e sobre as novidades do JBoss Seam.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;Pete Muir é o Líder do projeto Seam e do Weld(Implementação de referência da JSR 299 – Contexts and Dependency Injection for Java EE), além de desenvolvedor líder do Aquillian, um conjunto de utilitários para testes de Servidores de Aplicação. Pete é um funcionário da Red Hat Inc, como Core Developer trabalhando em vários projetos de código aberto JBoss.&lt;br /&gt;Pete tem palestrado em várias conferências como Devoxx, Jax, JBossWorld, JSFDays e JavaBlend, além de várias palestras em JUGs sobre Seam. Ele escreve sobre Seam, Weld e Java em seu blog: &lt;a href="http://in.relation.to/Bloggers/Pete" target="_blank"&gt;http://in.relation.to/Bloggers/Pete&lt;/a&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;Benjamin Mestrallet é o CEO da eXo Platform, uma empresa francesa que ele fundou logo após a universidade para atender seu primeiro cliente: Departamento de Defesa Americano. Com a recente expansão da Exo para os EUA, Benjamin supervisiona de São Francisco-EUA o crescimento da companhia , marketing e estratégia de vendas. Ele criou o projeto eXo enquanto ainda estudante em Dezembro de 2002, entregando o primeito Java Portlet Container da indústria. Em reconhecimento a sua liderança, Benjamin recebeu o prêmio de “Estraordinário Jovem Líder de Tecnologia de 2008″, o IVY Award na França. Ele possui Mestrado em Ciência de Grenciamento pela Universidade de Paris IX Dauphine. Site da eXo Platform: &lt;a href="http://www.exoplatform.com/" target="_blank"&gt;http://www.exoplatform.com&lt;/a&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;Mauricio Salatino é CTO na PlugTree (&lt;a href="http://www.plugtree.com/" target="_blank"&gt;http://www.plugtree.com&lt;/a&gt;), uma empresa especializada no fornecimento de soluções usando a plataforma Drools com escritórios em Miami, EUA e Buenos Aires, Argentina. Maurício é committer no projeto Drools, e vem desenvolvendo inúmeros projetos com os conceitos de Motor de Regras, CEP(Complex Event Process) BPM e portais com Alfresco, autor do livro: jBPM Developer Guide pela PacktBuk, é o fundador do grupo de usuários JBoss da Argentina(&lt;a href="http://www.jbug.ar/" target="_blank"&gt;http://www.jbug.ar&lt;/a&gt;), é formado em Engenharia de Sistemas pela Universidade de Mendonza – Argentina, escreve regularmente em seu blog: &lt;a href="http://salaboy.wordpress.com/" target="_blank"&gt;http://salaboy.wordpress.com&lt;/a&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;Confira a Agenda completa aqui: &lt;a href="http://www.jbossinbossa.com.br/2010/agenda.html" target="_blank"&gt;http://www.jbossinbossa.com.br/2010/agenda.html&lt;/a&gt;&lt;/span&gt;&lt;/p&gt; &lt;div  style="font-weight: bold;font-size:12px;"&gt;&lt;span style="font-size:100%;"&gt;Ver mais detalhes e RSVP em JBoss Brasil:&lt;/span&gt;&lt;/div&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://jbossbrasil.ning.com/events/event/show?id=2234825%3AEvent%3A19199&amp;amp;xgi=48yfZiTpQVlyHY&amp;amp;xg_source=msg_invite_event" target="_blank"&gt;http://jbossbrasil.ning.com/events/event/show?id=2234825%3AEvent%3A19199&amp;amp;xgi=48yfZiTpQVlyHY&amp;amp;xg_source=msg_invite_event&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://wanimoto.clearspring.com/o/46928cc51133af17/4b6a1215bfe20646/46928cc51133af17/731a36ad/-cpid/38cabf42c4e0bff6/-EMH/240/-EMW/432/widget.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:100%;"&gt;É um evento bem interessante e com certeza contribuirá bastante para arquitetos e desenvolvedores.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;[]s,&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;Samuel&lt;/span&gt;&lt;/p&gt; &lt;/div&gt;           &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-8868561543368379668?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/8868561543368379668/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=8868561543368379668' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/8868561543368379668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/8868561543368379668'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2010/04/evento-jbossinbossa2010.html' title='Evento JBossInBossa2010'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-235332042527947329</id><published>2010-03-23T06:37:00.000-07:00</published><updated>2010-03-23T06:46:12.954-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PERFORMANCE'/><title type='text'>Performance de aplicações WEB</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3AFYZsJfotY/S6jF5b1OxhI/AAAAAAAAFVI/BAIDTUYdAl4/s1600-h/ferrari_enzo-251-300x225.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 300px; height: 225px;" src="http://2.bp.blogspot.com/_3AFYZsJfotY/S6jF5b1OxhI/AAAAAAAAFVI/BAIDTUYdAl4/s320/ferrari_enzo-251-300x225.jpg" alt="" id="BLOGGER_PHOTO_ID_5451824939446224402" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:100%;"&gt;Olá pessoal,&lt;/span&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;Tenho encontrado constantemente sites com problemas sérios de  performance. Algumas das vezes temos problemas estruturais sérios, mas  algumas vezes os problemas podem ser simples de resolver e pequenos  ajustes representam grande melhoria na experiência do usuário.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;Quando dizemos performance de aplicações, logo os desenvolvedores  pensam em grandes mudanças estruturas como cluster, melhorias na JVM,  máquinas novas, cache de banco de dados e outras. Isto também são  melhoras importantes, mas quando se trata de aplicações web, a percepção  da performance pelo usuário, pode ser melhorada por otimizações mais  simples como mudanças no front-end da aplicação.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;Podemos encontrar as melhores práticas sobre performance de  aplicações web em &lt;a href="http://developer.yahoo.com/performance/rules.html"&gt;http://developer.yahoo.com/performance/rules.html&lt;/a&gt;.  Entre as dicas descritas no documento acima temos:&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;* Fazer menos requisições HTTP&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;* Adicionar um cabeçalho “Expires” na resposta HTTP&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;* Utilizar Gzip para compactar os componentes da página&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;* Colocar os Stylesheets no topo da página&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;* Colocar os Scripts no fim da página&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;* Evitar CSS Expressions&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;* Colocar os códigos JavaScript e CSS em arquivos externos&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;* Reduzir DNS Lookups&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;* Compactar os códigos JavaScript&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;* Remover Scripts duplicados&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;* Evitar Redirects&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;* Configurar as ETags&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;* Make Ajax Cacheable&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;Uma ferramenta que auxilia bastante é um addon do mozilla que chama  YSlow que é um addon desenvolvido pela Yahoo. Este addon analisa com  base nas melhores práticas documentadas no artigo acima quais regras  estão sendo usadas.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;Uma dica que me ajudou bastante em algumas aplicações que trabalhei  foi a de habilitar a compressão de páginas. Existem páginas que são  grandes, o que faz com que o acesso seja lento em conexões de rede  ruins.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;Esta compressão de página basicamente troca o requisito banda por  CPU. Os passos realizados para a compressão são os seguintes:&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;1 – O browser do cliente faz uma requisição e envia para o servidor  no cabeçalho que o browser aceita arquivos comprimidos.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;2 – O servidor verifica que o browser que fez a requisição aceita  arquivos comprimidos.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;3 – O servidor comprime a página e envia para o cliente.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;4 – O cliente descompacta a página recebida e exibe para o usuário.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;Podemos utilizar para a compressão de página o apache com o módulo  mod_deflate. Para explicações mais detalhadas sobre como funciona o  mod_deflate verifiquem a documentação em &lt;a href="http://httpd.apache.org/docs/2.0/mod/mod_deflate.html"&gt;http://httpd.apache.org/docs/2.0/mod/mod_deflate.html&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;É isto ai pessoal. Espero que vocês sigam as orientações, para o bem  de suas aplicações e de seus usuários.&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-235332042527947329?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/235332042527947329/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=235332042527947329' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/235332042527947329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/235332042527947329'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2010/03/performance-de-aplicacoes-web.html' title='Performance de aplicações WEB'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3AFYZsJfotY/S6jF5b1OxhI/AAAAAAAAFVI/BAIDTUYdAl4/s72-c/ferrari_enzo-251-300x225.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-1141457564537076733</id><published>2010-02-02T10:03:00.000-08:00</published><updated>2010-02-02T10:08:16.745-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PERFORMANCE'/><title type='text'>Cache de páginas com o framework EhCache</title><content type='html'>Olá pessoal,&lt;br /&gt;&lt;br /&gt;Há bastante tempo não escrevo nada. Resolvi falar agora sobre melhorias de performance que ajudam bastante a aplicação. Em sites, constantemente temos páginas que acessam várias consultas pesadas além de regras de negócio. Estas páginas quando muito acessadas causam freqüentemente problemas de desempenho na aplicação e páginas lentas.&lt;br /&gt;&lt;br /&gt;Um dado importante para se tomar a decisão de utilizar ou não cache em páginas é a relação entre corretude e performance. Imagine o seguinte caso: Você tem uma página que possui as últimas notícias da sua empresa. Se uma nova notícia nova acaba de sair, qual o impacto da notícia demorar um pouco a mais para entrar no ar? O ganho de performance vale a pena o atraso na notícia. Se sim é interessante utilizar neste caso o cache para esta página.&lt;br /&gt;&lt;br /&gt;Quando temos cenários parecidos com este podemos verificar se é possível realizar cache de páginas. O Ehcache que é um framework java possui além do cache de objetos e cache para acesso a dados com JPA, possui também cache de páginas. Este cache às vezes é mais interessante, porque uma mesma página pode possuir várias consultas e regras de negócio, o que faz com que o cache de página geralmente gere mais ganho de performance do que o cache de acesso a dados.&lt;br /&gt;&lt;br /&gt;Para definir o cache de páginas é necessário primeiramente baixar os jars do ehcache disponíveis em http://ehcache.org. Entre os jars necessários é necessário baixar o módulo ehcache-web, que possui a Servlet responsável por gerenciar e guardar o cache das páginas.&lt;br /&gt;&lt;br /&gt;Depois disto, no classPath (pode ser na pasta src por exemplo) deve ser adicionado o aquivo ehcache.xml com um conteúdo parecido com o abaixo:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;ehcache&amp;gt;&lt;br /&gt;    &amp;lt;diskStore path="java.io.tmpdir" /&amp;gt;&lt;br /&gt;    &amp;lt;cache name="SimplePageCachingFilter" maxElementsInMemory="10"&lt;br /&gt;        eternal="false" timeToIdleSeconds="600" &lt;br /&gt;        timeToLiveSeconds="600" overflowToDisk="true" /&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;defaultCache maxElementsInMemory="10" eternal="false"&lt;br /&gt;        overflowToDisk="false" timeToIdleSeconds="120" &lt;br /&gt;        timeToLiveSeconds="120" diskPersistent="false" &lt;br /&gt;        diskExpiryThreadIntervalSeconds="120" /&amp;gt;&lt;br /&gt;&amp;lt;/ehcache&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Para o arquivo acima é necessário verificar o tempo de expiração do cache que é definido pela propriedade timeToLiveSeconds que representa o número de segundos do cache da página apresentada.&lt;br /&gt;&lt;br /&gt;Depois, no arquivo web.xml devemos adicionar o filtro de cache para as páginas necessárias, assim como mostrado abaixo:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;!-- Filtros para cache de páginas adicionado para páginas --&amp;gt;&lt;br /&gt;&amp;lt;filter&amp;gt;&lt;br /&gt;    &amp;lt;filter-name&amp;gt;SimplePageCachingFilter&amp;lt;/filter-name&amp;gt;&lt;br /&gt;    &amp;lt;filter-class&amp;gt;&lt;br /&gt;        net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter&lt;br /&gt;    &amp;lt;/filter-class&amp;gt;&lt;br /&gt;&amp;lt;/filter&amp;gt;&lt;br /&gt;&amp;lt;filter-mapping&amp;gt;&lt;br /&gt;    &amp;lt;filter-name&amp;gt;SimplePageCachingFilter&amp;lt;/filter-name&amp;gt;&lt;br /&gt;    &amp;lt;url-pattern&amp;gt;/index.jsf&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;&amp;lt;/filter-mapping&amp;gt;&lt;br /&gt;&amp;lt;filter-mapping&amp;gt;&lt;br /&gt;    &amp;lt;filter-name&amp;gt;SimplePageCachingFilter&amp;lt;/filter-name&amp;gt;&lt;br /&gt;    &amp;lt;url-pattern&amp;gt;/noticias.jsf&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;&amp;lt;/filter-mapping&amp;gt;&lt;br /&gt;&amp;lt;filter-mapping&amp;gt;&lt;br /&gt;    &amp;lt;filter-name&amp;gt;SimplePageCachingFilter&amp;lt;/filter-name&amp;gt;&lt;br /&gt;    &amp;lt;url-pattern&amp;gt;/rss.jsf&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;&amp;lt;/filter-mapping&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;A melhoria de performance é bastante significante. Além do cache de páginas comum é possivel também compactar as páginas, adicionar cabeçalhos, entre outros. Para mais informações visitem http://ehcache.org/documentation/web_caching.html.&lt;br /&gt;&lt;br /&gt;É isto aí pessoal. Qualquer problema avisem...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-1141457564537076733?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/1141457564537076733/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=1141457564537076733' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/1141457564537076733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/1141457564537076733'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2010/02/cache-de-paginas-com-o-framework.html' title='Cache de páginas com o framework EhCache'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-8593359183290583669</id><published>2009-09-09T05:05:00.000-07:00</published><updated>2009-09-09T05:07:39.126-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ENQUETES'/><title type='text'>Resultado da enquete sobre certificações Sun</title><content type='html'>Olá pessoal,&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;Chegamos ao resultado de mais uma enquete. Desta vez sobre certificações Sun. Segue abaixo o resultado:&lt;/p&gt; &lt;p style="text-align: center;"&gt;&lt;img class="aligncenter size-full wp-image-345" title="resultado enquete" src="http://www.portalarquiteto.com.br/wp-content/uploads/2009/09/resultado-enquete.png" mce_src="http://www.portalarquiteto.com.br/wp-content/uploads/2009/09/resultado-enquete.png" alt="resultado enquete" width="229" height="291" /&gt;&lt;/p&gt; &lt;p style="text-align: justify;"&gt;Pelas respostas dos visitantes do site vimos que a grande maioria (57%) ja possuem a certificação de Programador (SCJP). Logo atrás em segundo lugar, com 38% das respostas estão os visitantes que responderam que não possuem nenhuma certificação.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;Em terceiro lugar com 32% estão os certificados em Desenvolvimento Web (SCWCD). Muito próximo, logo abaixo estão os visitanes com certificação Associate (SCJA) e em Componentes de Negócios (SJBCD) com respectivamente 18% e 16% das respostas.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;12% dos visitantes que responderam a enquete possuem a certificação de arquiteto (SCEA) e 7% a de Web Services (SCDJWS). Por último ficaram as certificações de desenvolvedor (SCJD) e de desenvolvedor para aplicações móveis (SCMAD) empatados com aproximadamente 6% das respostas.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;Nesta última votação tivemos uma participação ainda mais ativa dos visitantes. Em breve teremos novas enquetes e continuem votando.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;É isto aí pessoal.&lt;/p&gt;&lt;p style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3AFYZsJfotY/SpwTO66q_wI/AAAAAAAAFSA/ji0paaoZ714/s320/Tchau.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 40px; height: 40px;" src="http://4.bp.blogspot.com/_3AFYZsJfotY/SpwTO66q_wI/AAAAAAAAFSA/ji0paaoZ714/s320/Tchau.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-8593359183290583669?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/8593359183290583669/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=8593359183290583669' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/8593359183290583669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/8593359183290583669'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2009/09/resultado-da-enquete-sobre.html' title='Resultado da enquete sobre certificações Sun'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3AFYZsJfotY/SpwTO66q_wI/AAAAAAAAFSA/ji0paaoZ714/s72-c/Tchau.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-5175100903599499143</id><published>2009-08-31T11:07:00.000-07:00</published><updated>2009-08-31T11:23:07.938-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PERFORMANCE'/><title type='text'>Apache Native Library no Tomcat ou Jboss</title><content type='html'>&lt;div style="text-align: justify;"&gt;Olá pessoal,&lt;br /&gt;&lt;br /&gt;Trabalhando com melhoria de performance de aplicações a algum tempo verificamos algumas mudanças que podem ser aplicadas no servidor de aplicação e que surtem efeito na aplicação como um todo. Entre estas melhorias uma que é uma opção para aplicações que utilizam servidores como o Tomcat e o JBoss é a utilização do Apache Tomcat Native Library (APR).&lt;br /&gt;&lt;br /&gt;O Apache Tomcat Native Library é um JNI (Java Native Interface) que provê grande parte das funcionalidades do Tomcat em código nativo ao invés de utilizar Bytecode Java. Isto na prática significa maior velocidade da aplicação, uma melhor escalabilidade e melhor integração com os serviços nativos da máquina. Por default o Tomcat não vem com o APR já compilado e aplicado a distribuição, pois isto tornaria o servidor dependente de plataforma, mas sua utilização é bastante recomendável em ambientes de produção.&lt;br /&gt;&lt;br /&gt;Entre as vantagens de sua utilização temos acesso a funcionalidades avançadas de IO (SendFile, Epoll e OpenSSL), funcionalidades do sistema operacional  (Geração aleatória de números, status do sistema, etc.) e acesso a processos nativos (Memória compartilhada, NT pipes e Sockets).&lt;br /&gt;&lt;br /&gt;Quando o APR não está instalado vemos o seguinte log no servidor de aplicação:&lt;br /&gt;The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path&lt;br /&gt;&lt;br /&gt;Para instalá-lo utilize os passos descritos em &lt;a href="http://tomcat.apache.org/tomcat-6.0-doc/apr.html"&gt;http://tomcat.apache.org/tomcat-6.0-doc/apr.html &lt;/a&gt;ou em &lt;a href="http://www.liferay.com/web/guest/community/wiki/-/wiki/Main/Tomcat+Native+Library"&gt;http://www.liferay.com/web/guest/community/wiki/-/wiki/Main/Tomcat+Native+Library&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Assim que ele estiver instalado vemos o seguinte trecho no log do Tomcat:&lt;br /&gt;INFO: Loaded APR based Apache Tomcat Native library 1.1.16.&lt;br /&gt;&lt;br /&gt;Realizar os testes para verificar o quanto melhorou no desempenho da aplicação é um processo um pouco complicado, pois algumas operações podem ser mais beneficiada que outras. Em algumas referências vimos um ganho de até 10% na performance da aplicação em geral, mas realmente é um teste difícil de ser realizado.&lt;br /&gt;&lt;br /&gt;Em um teste bem curto que fiz verificamos as seguintes medições apenas do tempo de startup do servidor sem e com a API nativa tive os seguintes resultados:&lt;br /&gt;&lt;br /&gt;Tempos sem lib native:&lt;br /&gt;2125 ms&lt;br /&gt;2155 ms&lt;br /&gt;2113 ms&lt;br /&gt;&lt;br /&gt;Tempos com lib native:&lt;br /&gt;1913 ms&lt;br /&gt;1984 ms&lt;br /&gt;1985 ms&lt;br /&gt;&lt;br /&gt;Vimos então um ganho que se aproxima de 10% apenas para o startup do servidor.&lt;br /&gt;&lt;br /&gt;É isto aí pessoal. Espero que isto ajude quem necessita otimizar a performance das aplicações.&lt;br /&gt;&lt;br /&gt;Quaisquer problemas avisem...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3AFYZsJfotY/SpwTO66q_wI/AAAAAAAAFSA/ji0paaoZ714/s1600-h/Tchau.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 40px; height: 40px;" src="http://4.bp.blogspot.com/_3AFYZsJfotY/SpwTO66q_wI/AAAAAAAAFSA/ji0paaoZ714/s320/Tchau.png" alt="" id="BLOGGER_PHOTO_ID_5376193202227969794" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-5175100903599499143?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/5175100903599499143/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=5175100903599499143' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/5175100903599499143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/5175100903599499143'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2009/08/apache-native-library-no-tomcat-ou.html' title='Apache Native Library no Tomcat ou Jboss'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3AFYZsJfotY/SpwTO66q_wI/AAAAAAAAFSA/ji0paaoZ714/s72-c/Tchau.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-3652606022970995474</id><published>2009-08-26T07:23:00.000-07:00</published><updated>2009-08-26T07:33:10.775-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DESENVOLVIMENTO WEB'/><title type='text'>Implementando página de erro com JSF</title><content type='html'>Algumas pessoas estão tendo dúvidas sobre como implementar uma página de erro com JSF, e resolvi então criar este post para explicar uma maneira de implementar.&lt;br /&gt;&lt;br /&gt;Para se realizar o redirecionamento pode se utilizar o ActionListener do JSF. Segue abaixo um exemplo de implementação da classe deste ActionListener:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/**&lt;br /&gt; * Classe responsável por tratar erros inesperados do sistema.&lt;br /&gt; *&lt;br /&gt; * @author Samuel Delfim&lt;br /&gt; *&lt;br /&gt; */&lt;br /&gt;public class ExceptionHandler extends ActionListenerImpl {&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public void processAction(ActionEvent event) {&lt;br /&gt;        // Obtem o contexto JSF&lt;br /&gt;        FacesContext context = FacesContext.getCurrentInstance();&lt;br /&gt;&lt;br /&gt;        try {&lt;br /&gt;            // Executa o método da classe Pai&lt;br /&gt;            super.processAction(event);&lt;br /&gt;&lt;br /&gt;        } catch (Exception e) {&lt;br /&gt;&lt;br /&gt;            // Se ocorrer um erro inesperado, exibe a mensagem abaixo&lt;br /&gt;            context.addMessage(null, new FacesMessage(&lt;br /&gt;                FacesMessage.SEVERITY_FATAL, e.getMessage(), null));&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;            // Redireciona para a pagina com o mapeamento 'erro'&lt;br /&gt;            // no faces-config.&lt;br /&gt;            context.getApplication().getNavigationHandler().&lt;br /&gt;                    handleNavigation(context, null, "erro");&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Pode-se, por exemplo, na classe acima realizar tratamentos diferentes para cada tipo de exceção.&lt;br /&gt;&lt;br /&gt;Para aplicar o Listener em uma aplicação jsf deve ser colocado o seguinte trecho dentro do arquivo faces-config.xml:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;application&amp;gt;&lt;br /&gt;    &amp;lt;!-- Aplicação do Listener --&amp;gt;&lt;br /&gt;    &amp;lt;action-listener&amp;gt;com.thinkworks.handler.exception.ExceptionHandler&lt;br /&gt;    &amp;lt;/action-listener&amp;gt;&lt;br /&gt;    &amp;lt;view-handler&amp;gt;com.sun.facelets.FaceletViewHandler&amp;lt;/view-handler&amp;gt;&lt;br /&gt;    &amp;lt;locale-config&amp;gt;&lt;br /&gt;        &amp;lt;default-locale&amp;gt;pt_BR&amp;lt;/default-locale&amp;gt;&lt;br /&gt;        &amp;lt;supported-locale&amp;gt;pt_BR&amp;lt;/supported-locale&amp;gt;&lt;br /&gt;        &amp;lt;supported-locale&amp;gt;es_AR&amp;lt;/supported-locale&amp;gt;&lt;br /&gt;    &amp;lt;/locale-config&amp;gt;&lt;br /&gt;    &amp;lt;message-bundle&amp;gt;com.bionexo.mensagens.Mensagens&amp;lt;/message-bundle&amp;gt;&lt;br /&gt;&amp;lt;/application&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;O trecho a ser copiado se refere à tag &lt;action-listener&gt; e deve ser aplicado ao view-handler específico. Neste caso, o ViewHandler utilizado é o do projeto facelets que está sendo utilizado no projeto em questão.&lt;br /&gt;&lt;br /&gt;Também no arquivo faces-config.xml deve ser realizado o mapeamento da página de erro.&lt;br /&gt;Segue abaixo um exemplo de mapeamento de página de erro:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;navigation-rule&amp;gt;&lt;br /&gt;    &amp;lt;navigation-case&amp;gt;&lt;br /&gt;        &amp;lt;from-outcome&amp;gt;erro&amp;lt;/from-outcome&amp;gt;&lt;br /&gt;        &amp;lt;to-view-id&amp;gt;/pages/erro/paginaErro.xhtml&amp;lt;/to-view-id&amp;gt;&lt;br /&gt;    &amp;lt;/navigation-case&amp;gt;&lt;br /&gt;&amp;lt;/navigation-rule&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;É isto aí pessoal. Espero ter ajudado...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-3652606022970995474?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/3652606022970995474/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=3652606022970995474' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/3652606022970995474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/3652606022970995474'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2009/08/implementando-pagina-de-erro-com-jsf.html' title='Implementando página de erro com JSF'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-2342575222086328661</id><published>2009-06-25T19:25:00.000-07:00</published><updated>2009-06-25T19:53:09.611-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DESENVOLVIMENTO JAVA'/><title type='text'>Configurando o EhCache como cache provider JPA</title><content type='html'>Olá pessoal,&lt;br /&gt;&lt;br /&gt;Hoje vou falar um pouco sobre o EhCache e em seguida mostrarei como configurar o ehcache como provider de cache para o JPA.&lt;br /&gt;&lt;br /&gt;Algumas vezes precisamos criar caches para linhas de banco de dados mais acessadas. Entre os problemas para a criação de um sistema de cache temos o sincronismo, o gasto excessivo de memória, o tamanho máximo do cache, entre outros. Devido à grande quantidade de possíveis problemas, escrever um sistema de cache eficiente, seguro e com suporte a sistemas distribuídos é um grande trabalho.&lt;br /&gt;&lt;br /&gt;Este é o trabalho do cache de segundo nível do Hibernate (Second level Cache). É possível utilizar este cache com vários providers e um dos mais utilizados é o EhCache. O EhCache é um mecanismo de cache distribuído em Java vastamente utilizado. Ente seus principais recursos temos cache de entidades, de queries, de páginas web, entre outros.&lt;br /&gt;&lt;br /&gt;Sua ultima versão está disponível em http://ehcache.sourceforge.net/.&lt;br /&gt;&lt;br /&gt;Para configurá-lo como provider de persistência devemos primeiramente adicionar o seguinte trecho ao arquivo persistence.xml:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;property name="cache.use_second_level_cache" value="true" /&amp;gt;&lt;br /&gt;&amp;lt;property name="hibernate.cache.provider_class"  &lt;br /&gt;value="net.sf.ehcache.hibernate.EhCacheProvider" /&amp;gt;&lt;br /&gt;&amp;lt;property name="net.sf.ehcache.configurationResourceName"&lt;br /&gt; value="/META-INF/ehcache.xml" /&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Depois devemos criar o arquivo ehcache.xml dentro do diretório META-INF da sua aplicação e adicionar nele o seguinte conteúdo:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt; xsi:noNamespaceSchemaLocation="ehcache.xsd"&amp;gt;&lt;br /&gt; &amp;lt;diskStore path="java.io.tmpdir" /&amp;gt;&lt;br /&gt; &amp;lt;defaultCache maxElementsInMemory="10000"&lt;br /&gt;       eternal="false"&lt;br /&gt;       timeToIdleSeconds="120" timeToLiveSeconds="180"&lt;br /&gt;       overflowToDisk="true" diskPersistent="false"&lt;br /&gt;       diskExpiryThreadIntervalSeconds="120"&lt;br /&gt;       memoryStoreEvictionPolicy="LRU" /&amp;gt;&lt;br /&gt;&amp;lt;/ehcache&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Um exemplo mais completo de arquivo de configuração do ehcache pode ser encontrado em http://ehcache.sourceforge.net/ehcache.xml.&lt;br /&gt;&lt;br /&gt;Lembrem-se de adicionar o arquivo ehcache.jar dentro das bibliotecas de sua aplicação.&lt;br /&gt;&lt;br /&gt;Depois de configurado então deverá aparecer no log do servidor algo como:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;23:16:50,437 INFO  [SettingsFactory] Second-level cache:&lt;br /&gt;enabled&lt;br /&gt;23:16:50,437 INFO  [SettingsFactory] Query cache: disabled&lt;br /&gt;23:16:50,437 INFO  [SettingsFactory] Cache provider:&lt;br /&gt;net.sf.ehcache.hibernate.EhCacheProvider&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Depois disto é só começar a utilizar as anotações e o cachê de queries.&lt;br /&gt;&lt;br /&gt;Em um próximo post falarei sobre como utilizar o cache de segundo nível com o Hibernate.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-2342575222086328661?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/2342575222086328661/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=2342575222086328661' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/2342575222086328661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/2342575222086328661'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2009/06/configurando-o-ehcache-como-cache.html' title='Configurando o EhCache como cache provider JPA'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-2620607353272470471</id><published>2009-06-16T04:00:00.000-07:00</published><updated>2009-06-16T04:00:02.051-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ENQUETES'/><title type='text'>Resultado da enquete sobre Servidores de Aplicação</title><content type='html'>&lt;p align="justify"&gt;Pela resposta dos visitantes vimos que o JBoss, com 16 votos, é o servidor de aplicação mais utilizado para a linguagem Java. Em segundo lugar, logo atrás na pesquisa com 8 votos vem o servidor da Sun, o Glassfish. O WebLogic da BEA e o Oracle IAS vem com respectivamente 4 e 3 votos&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://lh5.ggpht.com/_3AFYZsJfotY/Sjb7gT7BU0I/AAAAAAAAExc/N0LoVbB9ECI/s1600-h/image%5B6%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_3AFYZsJfotY/Sjb7lBCTigI/AAAAAAAAExg/e1VJ5nXUFkY/image_thumb%5B2%5D.png?imgmax=800" width="193" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Queria agradecer todos que votaram na enquete. E continuem votando para que possamos saber a opnião de vocês sobre assuntos relacionados a desenvolvimento e arquitetura.&lt;/p&gt;  &lt;p align="justify"&gt;É isto aí pessoal. Em breve teremos mais enquetes.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-2620607353272470471?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/2620607353272470471/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=2620607353272470471' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/2620607353272470471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/2620607353272470471'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2009/06/resultado-da-enquete-sobre-servidores.html' title='Resultado da enquete sobre Servidores de Aplicação'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_3AFYZsJfotY/Sjb7lBCTigI/AAAAAAAAExg/e1VJ5nXUFkY/s72-c/image_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-7460492237905196025</id><published>2009-06-09T04:00:00.001-07:00</published><updated>2009-06-09T04:00:00.896-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='USABILIDADE'/><title type='text'>Dicas de usabilidade para sistemas de busca</title><content type='html'>Como regra geral segundo Jakob provavelmente você não precisará de um sistema de pesquisas se seu site tiver até 100 páginas. Se seu sistema tem de 100 a 1000 páginas, você precisará apenas de um sistema de busca simples. Acima de 1000 páginas é necessário realmente se investir em um bom sistema de pesquisa.&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Na navegação de páginas se perceberam que embora alguns usuários tenham optado por utilizar os sistemas de busca, outros preferiram utilizar os links navegacionais. É importante então seu site prover suporte aos dois tipos de acesso, para que seu site possa ter uma grande quantidade de usuários.&lt;br /&gt;&lt;br /&gt;Existe uma lista de razões que fazem com que o usuário tenha a expectativa de que o seu sistema de busca acerte mais do que sites como o Google ou Yahoo. Entre estas razões podemos citar:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Quantidade de informações em seu site é menor que a quantidade de informações de toda a web.&lt;/li&gt;&lt;li&gt;O contexto é bem conhecido. Se seu site é de carros seu sistema deve saber que um Jaguar é um carro e não um animal.&lt;/li&gt;&lt;li&gt;Você sabe quais documentos são mais antigos e os que são de maior relevância para os usuários.&lt;/li&gt;&lt;li&gt;Você tem controle sobre o vocabulário do sistema.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Segundo Jakob metade das buscas possuía menos de 14 caracteres. E 95% utilizam menos de 30 caracteres. Tamanho de 30 caracteres então é recomendado para que os usuários consigam realizar buscas eficazes em seu site.&lt;br /&gt;&lt;br /&gt;Com relação a buscas avançadas, estas, só são recomendadas se seu nível de usuário for muito avançado, o que na maior parte das vezes não é verdade. Então a sugestão é evitá-las.&lt;br /&gt;&lt;br /&gt;Sobre a página de resultados é importante seguir as diretrizes dos grandes sistemas de busca. Entre elas podemos citar:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Não há necessidade de numerar os resultados, pois todos os usuários começam a ler do alto.&lt;/li&gt;&lt;li&gt;Forme uma lista linear de uma busca com o mais recomendado na parte superior.&lt;/li&gt;&lt;li&gt;Cada resultado de uma pesquisa deve iniciar com um título clicável, seguido por resumo de 2 ou 3 linhas.&lt;/li&gt;&lt;li&gt;Se nenhum resultado for encontrado avise claramente isto ao usuário.&lt;/li&gt;&lt;li&gt;Se apenas um resultado for encontrado, não redirecione diretamente para o conteúdo, uma vez que a expectativa do usuário é ter um resultado.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;É isto aí pessoal. Quaisquer problemas avisem...&lt;span style="text-decoration: underline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3AFYZsJfotY/Si3SweovXRI/AAAAAAAAEwk/Bs5wO3IpP9A/s1600-h/image_thumb%5B6%5D.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 40px; height: 40px;" src="http://4.bp.blogspot.com/_3AFYZsJfotY/Si3SweovXRI/AAAAAAAAEwk/Bs5wO3IpP9A/s320/image_thumb%5B6%5D.png" alt="" id="BLOGGER_PHOTO_ID_5345160063058140434" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-7460492237905196025?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/7460492237905196025/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=7460492237905196025' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/7460492237905196025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/7460492237905196025'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2009/06/dicas-de-usabilidade-para-sistemas-de.html' title='Dicas de usabilidade para sistemas de busca'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3AFYZsJfotY/Si3SweovXRI/AAAAAAAAEwk/Bs5wO3IpP9A/s72-c/image_thumb%5B6%5D.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-7112768498345026366</id><published>2009-06-02T03:30:00.000-07:00</published><updated>2009-06-02T03:30:00.832-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='USABILIDADE'/><title type='text'>Lista de problemas de usabilidade – Parte 5</title><content type='html'>&lt;p&gt;Continuando a lista de problemas potenciais de usabilidade iniciada no último post temos então:&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;b&gt;8. Palavras inventadas – &lt;/b&gt;Há mais tempo na bolha da Internet vários sites criavam o seu próprio dialeto e inventavam palavras. Isto era feito com o intuito de instigar os usuários a explorar o site, mas criavam o efeito inverso que era de confundir, além de prejudicar os sistemas de busca.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font color="#000000"&gt;&lt;b&gt;9. &lt;/b&gt;&lt;/font&gt;&lt;b&gt;Conteúdo ultrapassado – &lt;/b&gt;Informações ultrapassadas sendo dadas como atuais são problemas sérios de usabilidade e prejudicam a confiança dos usuários no site visitado.&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;10. Inconsistência dentro de um WebSite –&lt;/b&gt; Páginas na web devem ser consistentes. Áreas de sites que não se encaixam no padrão visual do restante dão uma má impressão ao usuário, além de gerar certa confusão.&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;11. Solicitações prematuras de informações pessoais – &lt;/b&gt;Se um estranho te abordasse e perguntasse a você seu nome, telefone, cpf, data de nascimento e identidade provavelmente você fugiria. Esta é a impressão que se passa quando um site pede seus dados prematuramente. A maioria dos sites agora deixa você realizar suas ações como pesquisar produtos, preços, entre outros para depois pedir suas informações pessoais, o que garante uma quantidade maior de clientes. Pedir então os dados prematuramente é um problema grave de usabilidade e deve ser evitado.&lt;/p&gt;  &lt;p&gt;12. &lt;b&gt;Vários sites – &lt;/b&gt;As empresas criavam vários sites para diferentes produtos e para cada um criava endereços diferentes. Isto é um problema de usabilidade, uma vez que não existia integração e a navegação não ficava unificada. Sites unificados auxiliam os usuários a realizar a navegação.&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;13. Páginas órfãs – &lt;/b&gt;Páginas órfãs são páginas que não levam a nada. Se acessar uma você não conseguirá ir a mais lugar algum. Este é um problema quase extinto, mas merece um comentário, pois quando acontece é uma falha muito séria.&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;É isto aí pessoal. Em breve postarei mais sobre o assunto.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt; &lt;a href="http://lh3.ggpht.com/_3AFYZsJfotY/ShtCua3egRI/AAAAAAAAEwU/VrIrXYkXxhw/s1600-h/image%5B8%5D.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="40" alt="image" src="http://lh4.ggpht.com/_3AFYZsJfotY/ShtCxCT8JuI/AAAAAAAAEwY/pyhE6rRTPqw/image_thumb%5B6%5D.png?imgmax=800" width="40" border="0" /&gt;&lt;/a&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-7112768498345026366?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/7112768498345026366/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=7112768498345026366' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/7112768498345026366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/7112768498345026366'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2009/06/lista-de-problemas-de-usabilidade-parte.html' title='Lista de problemas de usabilidade – Parte 5'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_3AFYZsJfotY/ShtCxCT8JuI/AAAAAAAAEwY/pyhE6rRTPqw/s72-c/image_thumb%5B6%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-2091606713214594030</id><published>2009-05-28T03:30:00.000-07:00</published><updated>2009-05-28T03:30:00.061-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='USABILIDADE'/><title type='text'>Lista de problemas de usabilidade – Parte 4</title><content type='html'>&lt;p&gt;Olá pessoal. Acabamos de passar os 10.000 acessos ao site desde que comecei a monitorar os acessos e queria agradecer a todos que acompanham o site. Hoje vamos continuar com a série de problemas de usabilidade começada há algum tempo.&lt;/p&gt;  &lt;p&gt;Segundo Jackob Nielsen, treze problemas de design iniciais são menos problemáticos hoje, pois os designers aprenderam a projetar para a Web. Estes continuam a ser problemas potenciais de usabilidade, mas a maioria dos Web Designers aprendeu a utilizá-lo. &lt;/p&gt;  &lt;p&gt;Segue abaixo a lista:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;b&gt;Plugins de tecnologias de ponta – &lt;/b&gt;Os usuários tem medo de executarem algum download na Internet por medo de vírus e tem medo da instalação de novos plugins nos navegadores. Os designers tiveram o bom senso e reconheceram que não podiam forçar os usuários a utilizarem novas tecnologias e começaram a utilizar tecnologias testadas há alguns anos. Uma recomendação então é esperar pelo menos dois anos para utilizar alguma tecnologia nova no site e não forçar o usuário a atualizar qualquer coisa ao acessar seu site.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Interfaces 3D com o usuário – &lt;/b&gt;Interfaces tridimensionais normalmente são excessivamente difíceis de se utilizar e raramente valem o esforço. O problema básico é que imagens em 3D são exibidas em uma superfície bidimensional (tela) e controladas por um dispositivo bidimensional (mouse). Os usuários passam a maior parte do tempo lutando com a interface em vez de visualizar o produto. Interfaces 3D devem então ser evitadas.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Design poluído – &lt;/b&gt;Páginas que sobrecarregam os usuários com um conjunto grande de elementos normalmente é pouco utilizado pelos usuários. Elementos em movimento, luzes intermitentes, links pobremente estruturados e textos em excesso devem ser evitados, pois tornam a página muito carregada.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Páginas Splash – &lt;/b&gt;Páginas Splash são &lt;em&gt;páginas&lt;/em&gt; de abertura aparecem em alguns sites antes da verdadeira &lt;em&gt;página&lt;/em&gt; Principal. Segundo palavras do próprio Jackob elas devem morrer, pois dão a impressão de que o site se preocupa mais com a sua própria imagem do que com a solução do problema deles.&lt;p align="center"&gt;&lt;b&gt;&lt;a href="http://lh4.ggpht.com/_3AFYZsJfotY/ShtCluH6ZwI/AAAAAAAAEwM/hMsKGbMi54Q/s1600-h/clip_image002%5B3%5D.jpg"&gt;&lt;img title="clip_image002" style="border: 0px none ; display: inline;" alt="clip_image002" src="http://lh3.ggpht.com/_3AFYZsJfotY/ShtCq07MY5I/AAAAAAAAEwQ/x8vwfNpqbro/clip_image002_thumb.jpg?imgmax=800" border="0" height="134" width="186" /&gt;&lt;/a&gt;&lt;/b&gt;&lt;a href="http://lh4.ggpht.com/_3AFYZsJfotY/ShtCluH6ZwI/AAAAAAAAEwM/hMsKGbMi54Q/s1600-h/clip_image002%5B3%5D.jpg"&gt;Exemplo de página Splash&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Imagens gráficas em movimento e texto rolável – &lt;/b&gt;Os usuários tem cegueira a banners como dito em um post anterior e na web imagens gráficas em movimento e texto rolável são ignorados pelos usuários. Lembrem-se que na Internet se você grita mais alto dá a impressão que não tem nada de importante a dizer.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Componentes de interface gráfica personalizados – &lt;/b&gt;Botões que não se parecem botões, barras de rolagem personalizadas que não se parecem com barras de rolagem são problemas que tornam o site mais difícil de utilizar. Evitem alterar os padrões já aprendidos pelos usuários da Web.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Não expor quem está por trás das informações – &lt;/b&gt;O usuário deve confiar no responsável pelo site para que este possa passar a ter uma relação de confiança com o mesmo. Dados como o quem somos presente em alguns sites devem ser colocados e devem responder questões como o principal executivo, a informação correta de contato, a filosofia da empresa e o histórico e marcos.&lt;/li&gt;&lt;/ol&gt;    &lt;ol start="start"&gt; &lt;/ol&gt;    &lt;ol start="start"&gt; &lt;/ol&gt;    &lt;ol start="start"&gt; &lt;/ol&gt;          &lt;ol start="start"&gt; &lt;/ol&gt;    &lt;ol start="start"&gt; &lt;/ol&gt;      &lt;ol start="start"&gt; &lt;/ol&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;No próximo post terminaremos a lista de problemas...&lt;/p&gt;  &lt;p&gt;&lt;/p&gt; &lt;a href="http://lh3.ggpht.com/_3AFYZsJfotY/ShtCua3egRI/AAAAAAAAEwU/VrIrXYkXxhw/s1600-h/image%5B8%5D.png"&gt;&lt;img title="image" style="border: 0px none ; display: inline;" alt="image" src="http://lh4.ggpht.com/_3AFYZsJfotY/ShtCxCT8JuI/AAAAAAAAEwY/pyhE6rRTPqw/image_thumb%5B6%5D.png?imgmax=800" border="0" height="40" width="40" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-2091606713214594030?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/2091606713214594030/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=2091606713214594030' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/2091606713214594030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/2091606713214594030'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2009/05/lista-de-problemas-de-usabilidade-parte_28.html' title='Lista de problemas de usabilidade – Parte 4'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_3AFYZsJfotY/ShtCq07MY5I/AAAAAAAAEwQ/x8vwfNpqbro/s72-c/clip_image002_thumb.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-5424641250679145727</id><published>2009-05-26T07:00:00.000-07:00</published><updated>2009-06-02T19:29:20.063-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='USABILIDADE'/><title type='text'>Lista de problemas de usabilidade – Parte 3</title><content type='html'>Continuando a lista de problemas comuns de usabilidade e que tendem a ser menos problemático temos:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Listagens de pesquisa de baixa relevância –&lt;/span&gt; Depois da navegação a busca é a maneira mais utilizada para acessar o conteúdo. Busca ineficaz é extremamente problemática para os usuários.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Multimídia e vídeos longos –&lt;/span&gt; A maioria dos videoclipes devem ter duração de menos de 1 minuto para que os usuários prestem atenção neles.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Layouts Congelados –&lt;/span&gt; Sabemos que os usuários odeiam rolagens horizontais e nós sabemos disto. Então é uma boa idéia colocar os tamanhos de sua página em porcentagem, para que seu layout se adapte a diferentes resoluções.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Incompatibilidade entre diferentes plataformas –&lt;/span&gt; Uma recomendação geral é esperar entre cinco e seis anos depois da distribuição de uma nova versão do navegador para que você não se preocupe mais com ela. O IE7 foi introduzido em 2006, então provavelmente você terá que suportá-lo até 2012. Verifique a quantidade de usuários que utilizam sua plataforma em diferentes navegadores e verifique quais são os que valem a pena suportar.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Abaixo agora iremos mostrar uma lista de problemas que grande parte dos usuários se acostumaram a usar e perderam um pouco da sua importância segue abaixo:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Clicabilidade incerta –&lt;/span&gt; Alguns sites costumavam oferecer figuras com links escondidos o que não indica claramente ao usuário que aquele é um link. Sempre que você tem que informar ao usuário aonde clicar você tem um problema de usabilidade.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Registro –&lt;/span&gt; Pedir aos usuários que se registrem antes de realizar qualquer ação no site é uma falha de usabilidade. Isto é causa de negócios perdidos, uma vez que vários usuários não gostam de se registrar.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;URLs Complexos –&lt;/span&gt; URLs complexos prejudicam tanto a usabilidade quanto a otimização de ferramentas de busca. A maioria dos sites tem menos de 1 milhão de páginas e portanto funcionam bem com até 50 caracteres.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Menus suspensos em cascata –&lt;/span&gt; No passado qualquer elemento dinâmico, já confundia o usuário, mas parece que os usuários se acostumaram com alguns elementos. Evitem menus com mais de um nível, pois alguns usuários ainda tem problemas com menus de vários níveis.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;É isto aí pessoal. Qualquer problema avisem...&lt;p&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://lh6.ggpht.com/_3AFYZsJfotY/ShoVOARjjvI/AAAAAAAAEwE/mRjB-LnRAgE/s1600-h/image%5B3%5D.png"&gt;&lt;img title="image" style="border-width: 0px; display: inline;" alt="image" src="http://lh3.ggpht.com/_3AFYZsJfotY/ShoVWW3blRI/AAAAAAAAEwI/KjJ34vd5u78/image_thumb%5B1%5D.png?imgmax=800" width="40" border="0" height="40" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-5424641250679145727?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/5424641250679145727/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=5424641250679145727' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/5424641250679145727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/5424641250679145727'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2009/05/lista-de-problemas-de-usabilidade-parte_26.html' title='Lista de problemas de usabilidade – Parte 3'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_3AFYZsJfotY/ShoVWW3blRI/AAAAAAAAEwI/KjJ34vd5u78/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-1833191824349233965</id><published>2009-05-14T04:00:00.000-07:00</published><updated>2009-05-24T20:16:06.922-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='USABILIDADE'/><title type='text'>Lista de problemas de usabilidade – Parte 2</title><content type='html'>&lt;p align="justify"&gt;Continuando com a lista de problemas descrita por Jakob Nielsen temos então:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;b&gt;Conteúdo vago ou inútil – &lt;/b&gt;Quanto pior as mensagens enviadas por um site, mais os usuários tendem a negligenciar suas mensagens. Conteúdo inútil não apenas irrita as pessoas, como também é a principal causa de vendas perdidas.&lt;b&gt;&lt;/b&gt;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;b&gt;Muito conteúdo e texto não escaneável –&lt;/b&gt; Blocos densos de texto causam repulsão por parte dos usuários e sugerem que o trabalho para achar o que se quer é muito árduo.&lt;b&gt;&lt;/b&gt;&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;Como uma lista de problemas que tendem a ser menos problemáticos nos próximos anos, mas que ainda preocupam são:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;b&gt;Tempo de download lento - &lt;/b&gt;Tempo de download lento tende a ser cada vez menos preocupante pelo aumento do número de internets com banda larga, mas ainda preocupa, pois sites lentos continuam como sempre a incomodar.&lt;b&gt;&lt;/b&gt;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;b&gt;Frames – &lt;/b&gt;Frames quebram várias diretrizes de usabilidade como a quebra do botão voltar e diferenças entre browsers, o que ainda o torna um problema. O que diminui sua severidade é o fato de cada vez menos sites o utilizarem.&lt;b&gt;&lt;/b&gt;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;b&gt;Flash – &lt;/b&gt;Páginas flash também quebram várias diretrizes de usabilidade como o botão voltar, textos escaneáveis, quebra do botão voltar e tempos de downloads lentos. Então o flash deve ser usado com bastante parcimônia.&lt;b&gt;&lt;/b&gt;&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;É isto aí pessoal. Quaisquer problemas avisem...&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://lh4.ggpht.com/_3AFYZsJfotY/SgdRNkl6-LI/AAAAAAAAEv8/g9nfoDqvDcs/s1600-h/image%5B3%5D.png"&gt;&lt;img title="image" style="border: 0px none ; display: inline;" alt="image" src="http://lh5.ggpht.com/_3AFYZsJfotY/SgdRP-JyxpI/AAAAAAAAEwA/EJgfHogV70w/image_thumb%5B1%5D.png?imgmax=800" border="0" height="40" width="40" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-1833191824349233965?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/1833191824349233965/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=1833191824349233965' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/1833191824349233965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/1833191824349233965'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2009/05/lista-de-problemas-de-usabilidade-parte_14.html' title='Lista de problemas de usabilidade – Parte 2'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_3AFYZsJfotY/SgdRP-JyxpI/AAAAAAAAEwA/EJgfHogV70w/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-7238330339156895445</id><published>2009-05-12T04:00:00.001-07:00</published><updated>2009-05-12T04:00:00.196-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='USABILIDADE'/><title type='text'>Lista de problemas de usabilidade – Parte 1</title><content type='html'>&lt;p align="justify"&gt;Olá Pessoal,&lt;/p&gt;  &lt;p align="justify"&gt;Problemas de usabilidade ainda são muito comuns em sites. O que Jakob Nielsen verificou é que uma série de problemas antigos continua a acontecer constantemente em novos sites e merecem constantemente atenção.&lt;/p&gt;  &lt;p align="justify"&gt;Entre a lista de problemas sérios de usabilidade temos:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;b&gt;Lista de links que não mudam de cor quando clicados&lt;/b&gt; - Entre os erros mais graves listados estão os links que não mudam de cor quando são clicados. Uma boa diretriz de usabilidade é ajudar aos usuários a descobrir onde os usuários estavam, onde eles estão e aonde eles podem ir. A mudança da cor dos links facilita a entender a localização. Esta diretriz só não precisa ser seguida em sites que a mesma ação deve ser executada várias vezes, como por exemplo, em sites que são sistemas de empresas. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;b&gt;Quebrar o botão voltar &lt;/b&gt;– O botão voltar é o segundo recurso mais utilizado na Web e naturalmente os usuários esperam que eles funcionem como deveria. Quebrar o link voltar atrapalha a navegação e diminui a velocidade dos usuários. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;b&gt;Abrir novas janelas do navegador&lt;/b&gt; – Ao clicar em um link os usuários esperam que novas páginas sejam abertas na página atual. Desapontá-los é um erro de design e não impede que os usuários saiam de seu site. Tentar não perder os visitantes é uma causa perdida se os usuários realmente quiserem sair. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;b&gt;Janelas pop-up – &lt;/b&gt;Hoje janelas pop-up são um mal pior do que era no passado. Os usuários estão cada vez mais irritados com janelas pop-up. O simples fato de existir janelas pop-up já é uma razão para os usuários evitarem o site que as possui. A grande maioria dos usuários fecha a janela pop-up antes mesmo de a janela ter sido completamente carregada. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;b&gt;Elementos de design que parecem anúncios – &lt;/b&gt;Usuários normalmente têm cegueira a anúncios, o que faz com que trechos que se parecem com anúncios nem ao menos sejam vistos. Evite então cores fortes e trechos que se parecem anúncios. Normalmente os usuários não o verão.&lt;b&gt;&lt;/b&gt; &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Em breve teremos mais posts sobre o assunto. &lt;/p&gt;  &lt;p align="justify"&gt;Aguardem...&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://lh6.ggpht.com/_3AFYZsJfotY/SgXvUy3Nn2I/AAAAAAAAEv0/cakMHNrYVQM/s1600-h/image%5B3%5D.png"&gt;&lt;img title="image" style="border-width: 0px; display: inline;" alt="image" src="http://lh5.ggpht.com/_3AFYZsJfotY/SgXvXtZBpXI/AAAAAAAAEv4/_zBo2MG9cD4/image_thumb%5B1%5D.png?imgmax=800" width="40" border="0" height="40" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-7238330339156895445?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/7238330339156895445/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=7238330339156895445' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/7238330339156895445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/7238330339156895445'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2009/05/lista-de-problemas-de-usabilidade-parte.html' title='Lista de problemas de usabilidade – Parte 1'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_3AFYZsJfotY/SgXvXtZBpXI/AAAAAAAAEv4/_zBo2MG9cD4/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-5473522327961991551</id><published>2009-05-04T06:00:00.000-07:00</published><updated>2009-05-04T06:00:01.199-07:00</updated><title type='text'>Diretriz de usabilidade de rolagem de página</title><content type='html'>&lt;p align="justify"&gt;Em um estudo mostrado por Jakob em seu livro de usabilidade, foi mostrado que mais de metade dos usuários de seu experimento não rolou pela página. Somente 42% dos usuários do teste viu algum conteúdo da segunda página. Apenas 14% dos usuários visualizaram&amp;#160; mais de duas páginas. &lt;/p&gt;  &lt;p align="justify"&gt;Segundo o autor uma conclusão que se pode tirar sobre isto é que normalmente os usuários são preguiçosos e ignorantes. Outra conclusão diferente segundo ele é que os usuários estão ocupados e há tantas informações na web que não vale a pena se aprofundar em uma página a menos que ela mostre claramente seu valor.&lt;/p&gt;  &lt;p align="justify"&gt;No estudo, 35% das páginas eram tão curtas que não era necessário rolar por elas. A recomendação então não é que as páginas precisem ser tão curtas, mesmo isto resolvendo o problema da rolagem. &lt;/p&gt;  &lt;p align="justify"&gt;Segue então algumas dicas:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;Tente projetar páginas com menos rolagem e tente mostrar no início da página sua importância para o usuário. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Mostre informações suficientes na primeira parte da página para que os usuários tenham interesse em ver o que está na parte de baixo.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Qualquer página mais longa que 2,3 telas corre o risco de ser menosprezada, mesmo por aqueles usuários que tem interesse de rolar a página. &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;É isto aí pessoal. Em breve enviarei mais dicas.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://lh5.ggpht.com/_3AFYZsJfotY/Sfe-WfXwohI/AAAAAAAAEu8/KJwhkRptz4g/s1600-h/image%5B3%5D.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="40" alt="image" src="http://lh6.ggpht.com/_3AFYZsJfotY/Sfe-ZYQ5B7I/AAAAAAAAEvA/A_mafFIMdgc/image_thumb%5B1%5D.png?imgmax=800" width="40" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-5473522327961991551?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/5473522327961991551/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=5473522327961991551' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/5473522327961991551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/5473522327961991551'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2009/05/diretriz-de-usabilidade-de-rolagem-de.html' title='Diretriz de usabilidade de rolagem de página'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_3AFYZsJfotY/Sfe-ZYQ5B7I/AAAAAAAAEvA/A_mafFIMdgc/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-7544443633561642308</id><published>2009-04-29T06:00:00.000-07:00</published><updated>2009-04-29T06:00:00.902-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='USABILIDADE'/><title type='text'>Como os usuários utilizam a Web</title><content type='html'>&lt;p&gt;Um detalhe interessante sobre como os usuários usam a Web é como as pessoas utilizam os sites. Em média segundo estudos de Jakob Nielsen os usuários gastam 1 minuto e 49 segundos antes de decidir abandoná-lo e partir para outro. Outro detalhe se refere ao fato dos mesmos usuários, ao decidirem realizar uma tarefa em um site específico, gastarem em média 3 minutos e 49 segundos. &lt;/p&gt;  &lt;p&gt;Para escolher o site que usarão para realizar a tarefa específica eles vêem 3,2 sites além do site de busca e ao saírem de um site eles apenas em 12% dos casos voltaram ao mesmo site para realizar a tarefa. Isto mostra como cada vez mais a usabilidade é importante e que a disputa é cada vez maior.&lt;/p&gt;  &lt;p&gt;Um dado muito interessante é o fato de a Homepage do site ter sido acessada primeiramente em 40% dos casos enquanto nos outros 60% os usuários acessaram os links profundos.&lt;/p&gt;  &lt;p&gt;Com relação à página principal, os usuários gastaram em média 30 segundos para visualizá-la. Nesta página é necessário dizer muita coisa em muito pouco tempo. Entre os objetivos desta página deve-se responder as seguintes perguntas básicas:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;O site em que eles chegaram.&lt;/li&gt;    &lt;li&gt;Os benefícios que a empresa oferece.&lt;/li&gt;    &lt;li&gt;Algo sobre a empresa e seus produtos mais recentes.&lt;/li&gt;    &lt;li&gt;As opções para os usuários chegarem às seções mais relevantes pra eles.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Nas páginas internas, o estudo mostrou que os usuários gastam em média 55 segundos, o que mostra a vantagem de utilização de links profundos já que o usuário lê substancialmente mais informações. 3 diretrizes foram dadas por Jakob no livro para links profundos.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Informe os usuários onde eles estão e como podem prosseguir para outras partes do site. Neste caso é importante o nome ou logotipo da empresa no canto superior esquerdo, um link de um único clique para a homepage e um sistema de busca no site preferivelmente no canto superior direito.&lt;/li&gt;    &lt;li&gt;Oriente o usuário quanto ao restante do site. Se o site possuir uma estrutura hierárquica utilize um “breadcrumb trail” ou “trilha de migalhas de pão” que são links que permitem que os usuários subam e desçam na hierarquia do site.&lt;/li&gt;    &lt;li&gt;Não pressuponham que o usuário seguiu um único caminho para chegar a página atual. Talvez os usuários perderam algumas informações na hierarquia.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;É isto aí pessoal. Em breve postarei mais diretrizes de usabilidade mostradas no livro Usabilidade na Web.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_3AFYZsJfotY/SfUan44RO6I/AAAAAAAAEu0/QuOuULnXZAE/s1600-h/image%5B3%5D.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="40" alt="image" src="http://lh4.ggpht.com/_3AFYZsJfotY/SfUaqjygEhI/AAAAAAAAEu4/0Jbyy2lVPVU/image_thumb%5B1%5D.png?imgmax=800" width="40" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-7544443633561642308?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/7544443633561642308/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=7544443633561642308' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/7544443633561642308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/7544443633561642308'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2009/04/como-os-usuarios-utilizam-web.html' title='Como os usuários utilizam a Web'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_3AFYZsJfotY/SfUaqjygEhI/AAAAAAAAEu4/0Jbyy2lVPVU/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-8369852807108980387</id><published>2009-04-27T06:00:00.000-07:00</published><updated>2009-04-27T06:00:00.482-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='USABILIDADE'/><title type='text'>Livro sobre usabilidade na web</title><content type='html'>&lt;p align="justify"&gt;Acabei de ler um livro sobre usabilidade na web escrito por um dos maiores papas da usabilidade atual. Jakob Nielsen e Hoa Loranger conseguiram reunir em um ótimo livro, grandes pecados da usabilidade em sites hoje. Com certeza um ótimo livro e extremamente importante para quem que montar um site ou sistema hoje em dia.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/_3AFYZsJfotY/SfUGvSBaIBI/AAAAAAAAEus/1o4wwa3-bSA/s1600-h/clip_image002%5B4%5D.jpg"&gt;&lt;img title="clip_image002" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="190" alt="clip_image002" src="http://lh5.ggpht.com/_3AFYZsJfotY/SfUGyTc-OnI/AAAAAAAAEuw/Syhu-BbOQKo/clip_image002_thumb%5B1%5D.jpg?imgmax=800" width="190" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;Usabilidade na Web - Projetando Websites com Qualidade&lt;/p&gt;  &lt;p align="justify"&gt;A tradução do livro é ótima e a grande quantidade de exemplos facilita a identificação das falhas nos sites. Terei de montar uma apresentação sobre o livro e postarei ao longo das próximas semanas, alguns tópicos, abordados no livro.&lt;/p&gt;  &lt;p align="justify"&gt;É isto aí pessoal...&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-8369852807108980387?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/8369852807108980387/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=8369852807108980387' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/8369852807108980387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/8369852807108980387'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2009/04/livro-sobre-usabilidade-na-web.html' title='Livro sobre usabilidade na web'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_3AFYZsJfotY/SfUGyTc-OnI/AAAAAAAAEuw/Syhu-BbOQKo/s72-c/clip_image002_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-2345914721611153824</id><published>2009-04-15T05:00:00.000-07:00</published><updated>2009-04-26T18:19:50.477-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ENQUETES'/><title type='text'>Resultado da enquete sobre IDEs Java</title><content type='html'>&lt;p align="justify"&gt; Pela resposta dos visitantes vimos que a IDE Eclipse continua sendo a mais utilizada para o desenvolvimento Java. Em segundo lugar na pesquisa vemos que a utilização do Netbeans. Em terceiro lugar vieram empatados o WSAD e o MyEclipseIDE.&lt;/p&gt;  &lt;p style="text-align: center;"&gt;&lt;a href="http://lh3.ggpht.com/_3AFYZsJfotY/SeVKhCG5zxI/AAAAAAAAEuc/8WmCXQG9X4c/s1600-h/image%5B2%5D.png"&gt;&lt;img title="image" style="border: 0px none ; display: inline;" alt="image" src="http://lh5.ggpht.com/_3AFYZsJfotY/SeVKkRaGBVI/AAAAAAAAEug/WtTHGrUzf3w/image_thumb.png?imgmax=800" width="159" border="0" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Nesta última votação tivemos uma participação mais ativa dos visitantes. Em breve teremos novas enquetes e continuem votando. &lt;/p&gt;  &lt;p&gt;É isto aí pessoal. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_3AFYZsJfotY/SeVKnHN8miI/AAAAAAAAEuk/wcocsByUrWw/s1600-h/image%5B6%5D.png"&gt;&lt;img title="image" style="border: 0px none ; display: inline;" alt="image" src="http://lh6.ggpht.com/_3AFYZsJfotY/SeVKpQOX9tI/AAAAAAAAEuo/xzNMJSJ5aFU/image_thumb%5B2%5D.png?imgmax=800" width="40" border="0" height="40" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-2345914721611153824?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/2345914721611153824/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=2345914721611153824' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/2345914721611153824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/2345914721611153824'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2009/04/resultado-da-enquete-sobre-ides-java.html' title='Resultado da enquete sobre IDEs Java'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_3AFYZsJfotY/SeVKkRaGBVI/AAAAAAAAEug/WtTHGrUzf3w/s72-c/image_thumb.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-2328848660386677019</id><published>2009-04-05T21:00:00.000-07:00</published><updated>2009-04-06T06:42:05.403-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DESENVOLVIMENTO JAVA'/><title type='text'>Interceptadores em EJB3</title><content type='html'>&lt;p align="justify"&gt;Acabamos de passar dos 6.000 acessos ao site desde que começamos a monitorar os acessos com o analytics e não poderia deixar de agradecer enviando um post que talvez ajude a quem quer monitorar e realizar log das operações realizadas pelas chamadas ao EJB. Neste post de hoje vamos falar sobre interceptadores em EJB3. &lt;/p&gt;  &lt;p align="justify"&gt;A especificação de EJB3 define o que seriam interceptadores que adicionam a abilidade de interceptar métodos de negócio de Session Beans e de Message Drive Beans.&lt;br /&gt;Segue abaixo um exemplo de um interceptador que foi implementado com o intuito de realizar um log dos métodos de negócio chamados:&lt;/p&gt;&lt;p align="justify"&gt;&lt;/p&gt;&lt;pre&gt;&lt;p&gt;&lt;/p&gt;&lt;p align="justify"&gt;/**&lt;br /&gt;* Classe interceptadora que imprime os métodos de negócio&lt;br /&gt;* que estão sendo chamandos durante a execução do programa.&lt;br /&gt;*&lt;br /&gt;* @author samuelmd&lt;br /&gt;*&lt;br /&gt;*/&lt;br /&gt;public class LogJPAInterceptor {&lt;br /&gt;&lt;br /&gt; @AroundInvoke&lt;br /&gt; public Object logInterceptor(InvocationContext invocation)&lt;br /&gt;&lt;/p&gt;&lt;p align="justify"&gt;      throws Exception {&lt;br /&gt;     Logger logger = Logger.getLogger(LogJPAInterceptor.class);&lt;br /&gt; &lt;br /&gt;     logger.debug(" ---------------------------- ");&lt;br /&gt;     logger.debug("Chamando método " + invocation.getMethod()&lt;br /&gt;             + " da classe " + invocation.getTarget());&lt;br /&gt;&lt;br /&gt;     Object[] objetos = invocation.getParameters();&lt;br /&gt;&lt;br /&gt;     if (objetos != null) {&lt;br /&gt;         logger.debug("Métodos com os parâmetros :");&lt;br /&gt;         for (Object objeto : objetos) {&lt;br /&gt;             if (objeto != null) {&lt;br /&gt;                 logger.debug(objeto.getClass().getName() + " : "&lt;br /&gt;                         + objeto.toString());&lt;br /&gt;             }&lt;br /&gt;         }&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;     logger.debug(" ---------------------------- ");&lt;br /&gt;     return invocation.proceed();&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/p&gt;&lt;/pre&gt;A anotação @AroundInvoke indica para o sistema qual o método realizará a interceptação dos métodos de negócio.  &lt;p align="justify"&gt;Interceptadores podem ser adicionados de 3 maneiras diferentes assim como mostrados abaixo:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;Default. Só podem ser adicionados através do descritor de implantação assim como definido abaixo:&lt;/div&gt;      &lt;div align="justify"&gt;       &lt;pre&gt;&amp;lt;assembly-descriptor&amp;gt;&lt;br /&gt;&amp;lt;!—Interceptadores default --&amp;gt;&lt;br /&gt;&amp;lt;interceptor-binding&amp;gt;&lt;br /&gt;  &amp;lt;ejb-name&amp;gt;*&amp;lt;/ejb-name&amp;gt;&lt;br /&gt;  &amp;lt;interceptor-class&amp;gt;&lt;br /&gt;com.thinkworks.interceptor.LogJPAInterceptor&lt;br /&gt;  &amp;lt;/interceptor-class&amp;gt;&lt;br /&gt;&amp;lt;/interceptor-binding&amp;gt;&lt;br /&gt;&amp;lt;/assembly-descriptor&amp;amp;gt&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Classe. Podem ser adicionados tando pelo descritor de implantação quanto pela anotação @Interceptors ({LogJPAInterceptor.class}) em cima da classe.&lt;br /&gt;&lt;/li&gt;  &lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Método. Definido pela anotação @Interceptors ({LogJPAInterceptor.class}) em cima da classe.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;É isto aí pessoal. Mais informações podem ser encontradas em &lt;a href="http://docs.jboss.org/ejb3/app-server/tutorial/interceptor/interceptor.html"&gt;http://docs.jboss.org/ejb3/app-server/tutorial/interceptor/interceptor.html&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;Qualquer problema avisem…&lt;/p&gt;&lt;p&gt;&lt;img title="image" style="border-width: 0px; display: inline;" alt="image" src="http://lh4.ggpht.com/_3AFYZsJfotY/Sdj_nThSBQI/AAAAAAAAEuY/vnySKrG-pAE/image_thumb%5B3%5D.png?imgmax=800" width="40" border="0" height="40" /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-2328848660386677019?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/2328848660386677019/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=2328848660386677019' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/2328848660386677019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/2328848660386677019'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2009/04/interceptadores-em-ejb3.html' title='Interceptadores em EJB3'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_3AFYZsJfotY/Sdj_nThSBQI/AAAAAAAAEuY/vnySKrG-pAE/s72-c/image_thumb%5B3%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-4480292781148569192</id><published>2009-03-19T10:26:00.000-07:00</published><updated>2009-03-31T08:07:04.815-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DESENVOLVIMENTO WEB'/><title type='text'>Implementando conversor de moeda com JSF</title><content type='html'>&lt;div style="text-align: justify;"&gt;Algumas pessoas já devem ter passado pelo problema de criar um conversor de moedas em JSF que funcione bem para diferentes países. Segue abaixo uma sugestão de como implementar um conversor legal.&lt;br /&gt;&lt;br /&gt;O primeiro passo é implementar a classe de conversor. Segue abaixo a classe:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public class MoedaConverter implements Converter {&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public Object getAsObject(FacesContext facesContext,&lt;br /&gt;         UIComponent uiComponent, String value) {&lt;br /&gt;&lt;br /&gt;     FacesContext fc = FacesContext.getCurrentInstance();&lt;br /&gt;     Locale l = fc.getViewRoot().getLocale();&lt;br /&gt;&lt;br /&gt;     if (value != null) {&lt;br /&gt;         value = value.trim();&lt;br /&gt;         if (value.length() &gt; 0) {&lt;br /&gt;             try {&lt;br /&gt;                 return new BigDecimal(NumberFormat.&lt;br /&gt;                         getNumberInstance(l).parse(&lt;br /&gt;                         value).doubleValue());&lt;br /&gt;             } catch (ParseException e) {&lt;br /&gt;                 e.printStackTrace();&lt;br /&gt;             }&lt;br /&gt;         }&lt;br /&gt;     }&lt;br /&gt;     return null;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public String getAsString(FacesContext facesContext,&lt;br /&gt;         UIComponent uiComponent, Object value) {&lt;br /&gt;&lt;br /&gt;     if (value == null) {&lt;br /&gt;         return "";&lt;br /&gt;     }&lt;br /&gt;     if (value instanceof String) {&lt;br /&gt;         return (String) value;&lt;br /&gt;     }&lt;br /&gt;     try {&lt;br /&gt;         FacesContext fc = FacesContext.getCurrentInstance();&lt;br /&gt;         Locale l = fc.getViewRoot().getLocale();&lt;br /&gt;         NumberFormat formatador = NumberFormat.getNumberInstance(l);&lt;br /&gt;         formatador.setGroupingUsed(true);&lt;br /&gt;         return formatador.format(value);&lt;br /&gt;&lt;br /&gt;     } catch (Exception e) {&lt;br /&gt;         throw new ConverterException("Formato não é número.");&lt;br /&gt;     }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Depois deve-se adicionar o seguinte trecho no arquivo faces-config.xml:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; &amp;lt;converter&amp;gt;&lt;br /&gt;     &amp;lt;converter-id&amp;gt;MoedaConverter&amp;lt;/converter-id&amp;gt;&lt;br /&gt;     &amp;lt;converter-class&amp;gt;&lt;br /&gt;         com.converter.DoubleConverter&lt;br /&gt;     &amp;lt;/converter-class&amp;gt;&lt;br /&gt; &amp;lt;/converter&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Para utilizá-lo agora basta utilizar da seguinte maneira:&lt;br /&gt;&lt;pre&gt;   &amp;lt;h:inputText id="moeda"&lt;br /&gt;     label="#{msgs.campo_geral_volume_compra}"&lt;br /&gt;     value="#{enderecoBean.valor}"&amp;gt;&lt;br /&gt;     &amp;lt;f:converter converterId="MoedaConverter" /&amp;gt;&lt;br /&gt; &amp;lt;/h:inputText&amp;gt;&lt;br /&gt;&lt;/pre&gt;Não se esqueça que este conversor não é também máscara de javascript. Então é importante criar a máscara e adicionar no componente para facilitar a vida do usuário.&lt;br /&gt;&lt;br /&gt;É isto aí pessoal. Qualquer problema avisem.&lt;br /&gt;&lt;br /&gt;[]s,&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-4480292781148569192?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/4480292781148569192/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=4480292781148569192' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/4480292781148569192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/4480292781148569192'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2009/03/implementando-conversor-de-moeda-com.html' title='Implementando conversor de moeda com JSF'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-2611049004443550408</id><published>2009-03-11T19:32:00.001-07:00</published><updated>2009-03-11T19:32:25.145-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><title type='text'>Artigos sobre gerênciamento de Processos de Negócio</title><content type='html'>&lt;p align="justify"&gt;Dois artigos que são bem interessantes sobre processos de negócio são “As empresas são grandes coleções de processos”&amp;#160; que se encontra disponível em &lt;a title="http://www.fgvsp.br/rae/artigos/006-019.pdf" href="http://www.fgvsp.br/rae/artigos/006-019.pdf"&gt;http://www.fgvsp.br/rae/artigos/006-019.pdf&lt;/a&gt; e outro é “Processo, que processo?” que se encontra disponível em &lt;a title="http://www.fgvsp.br/rae/artigos/008-019.pdf" href="http://www.fgvsp.br/rae/artigos/008-019.pdf"&gt;http://www.fgvsp.br/rae/artigos/008-019.pdf&lt;/a&gt;. Ambos os artigos são escritos pelo Professor do Departamento de Administração Geral e Recursos Humanos da EAESP/FGV, José Ernesto Lima Gonçalves.&lt;/p&gt;  &lt;p align="justify"&gt;O primeiro artigo (“As empresas são grandes coleções de processos”) é um texto que mostra como a idéia de processos está enraizada nas empresas e organizações atuais. O artigo tem como objetivo facilitar a compreensão do assunto e aplicações para o conceito de processos empresariais.&lt;/p&gt;  &lt;p align="justify"&gt;O artigo se mostra bem útil, pois representa uma introdução bem prática sobre alguns dos principais processos nas empresas, além de ressaltar a importância de se organizar também os processos não fabris nas empresas e descreve além disto as características dos processos empresariais e também mostra a importância dos processos na organização e como a tecnologia se liga a eles de forma a facilitar seu mapeamento e gerenciamento.&lt;/p&gt;  &lt;p align="justify"&gt;Em sua conclusão o autor cita que as empresas tem sido cada vez mais centradas em processos, apesar de várias das empresas brasileiras ainda não conhecerem e nem mapearem seus processos.&lt;/p&gt;  &lt;p align="justify"&gt;O texto é muito bem ilustrado com quadros que mostram exemplos de processos, classificações, processos característicos e categorias. O artigo é bem abrangente nos conceitos de processos, mas peca um pouco em não enfatizar nenhum dos pontos de maneira mais profunda.&lt;/p&gt;  &lt;p align="justify"&gt;O segundo artigo (“Processo, que processo?”) é uma continuação do artigo citado anteriormente e resume as diferenças entre as organizações tradicionais e as empresas estruturadas por processos. &lt;/p&gt;  &lt;p align="justify"&gt;O artigo começa enfatizando o fato das empresas em geral não saberem como se organizarem por processos e identifica algumas empresas que já possuem esforços nesta direção como a IBM, HP, entre outras e então fala sobre como a empresa pode verificar e desenhar seus processos e como em alguns casos isto pode ser bem difícil em áreas não fabris da empresa, além de mostrar que para que a empresa se organize em processos o foco da empresa deixa de ser a estrutura da empresa e passa a ser o cliente.&lt;/p&gt;  &lt;p align="justify"&gt;É mostrado então algumas comparações entre organogramas e processos, estrutura organizacional versus estrutura organizacional por processos e estruturação por processos e também uma maneira de realizar a classificação de empresas com relação à organização por processos.&lt;/p&gt;  &lt;p align="justify"&gt;Uma parte mais prática do artigo se refere a como materializar os princípios de organização por processos que passa uma visão ampla, mas bem simplista dos passos a serem seguidos para que uma empresa mude sua estrutura para se aproximar de uma organização por processos.&lt;/p&gt;  &lt;p align="justify"&gt;Numa parte final o texto mostra em um quadro muito bem feito o quanto é recomendado para a empresa se orientar a processos de acordo com alguns fatores definidos pelo autor, tais como necessidade de flexibilidade e agilidade.&lt;/p&gt;  &lt;p align="justify"&gt;O autor então conclui que o futuro vai pertencer às empresas que consigam explorar seus processos tanto fabris quanto não fabris e que consigam centrar seus esforços em seus clientes, o que para mim faz muito sentido. O texto é muito bem escrito e possui exemplos claros e quadros e ilustrações que facilitam a leitura.&lt;/p&gt;  &lt;p align="justify"&gt;Ambos os textos cumprem muito bem os objetivos propostos e passam uma visão bem abrangente dos processos atuais nas empresas e de como orientar as empresas a processos. &lt;/p&gt;  &lt;p align="justify"&gt;É isto aí pessoal. Espero que ajude e que incentive vocês a ler os artigos que são bem interessantes. Qualquer problema me avisem…&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://lh5.ggpht.com/_3AFYZsJfotY/Sbh0KpoKyDI/AAAAAAAAEuQ/tIoIY8tIFuc/s1600-h/image%5B2%5D.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="44" alt="image" src="http://lh5.ggpht.com/_3AFYZsJfotY/Sbh0N2T5JQI/AAAAAAAAEuU/jIqmMR5jtkI/image_thumb.png?imgmax=800" width="44" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-2611049004443550408?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/2611049004443550408/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=2611049004443550408' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/2611049004443550408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/2611049004443550408'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2009/03/artigos-sobre-gerenciamento-de.html' title='Artigos sobre gerênciamento de Processos de Negócio'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_3AFYZsJfotY/Sbh0N2T5JQI/AAAAAAAAEuU/jIqmMR5jtkI/s72-c/image_thumb.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-7507646777213474920</id><published>2009-03-08T18:56:00.001-07:00</published><updated>2009-03-08T18:56:59.786-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><title type='text'>Papel do ESB dentro de uma arqutetura SOA</title><content type='html'>&lt;p align="justify"&gt;SOA é uma arquitetura onde é possível criar, padronizar, documentar funções genéricas únicas, utilizadas por diferentes aplicações em componentes reutilizáveis e com total interoperabilidade, de modo que possam ser compartilhados e acessados por diferentes dispositivos sob a forma de serviço, sem precisarem ser reescritos.&lt;/p&gt;  &lt;p align="justify"&gt;O papel do ESB dentro de uma arquitetura SOA é atuar como infra-estrutura para suportar os princípios de projeto SOA, virtualizando os serviços providos e tornando toda TI transparente para o negócio. Numa arquitetura SOA, o ESB fundamentalmente atua no papel de prover independência de linguagem, transparência de protocolo e localização, independência de formato de dados, independência de plataforma e um modelo de comunicação transparente para que seja possível atingir um baixo acoplamento entre os serviços componentes da arquitetura. &lt;/p&gt;  &lt;p align="justify"&gt;Segue abaixo um exemplo de um ESB:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://lh3.ggpht.com/_3AFYZsJfotY/SbR3P_iTlpI/AAAAAAAAEuA/6GmF0-NXWQ8/s1600-h/image%5B15%5D.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="322" alt="image" src="http://lh5.ggpht.com/_3AFYZsJfotY/SbR3UjdCzQI/AAAAAAAAEuE/I5nVFajFKjg/image_thumb%5B9%5D.png?imgmax=800" width="407" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;O ESB também tem o papel de prover infra-estrutura para gerenciamento adequado da arquitetura em grande escala. Um ESB serve então como&amp;#160; infra-estrutura de uma arquitetura SOA, lidando com o roteamento, transformação e mediação entre produtores e fornecedores de serviços, sejam eles internos ou externos à organização.&lt;/p&gt;  &lt;p align="justify"&gt;É isto aí pessoal. Qualquer problema avisem.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://lh4.ggpht.com/_3AFYZsJfotY/SbR3Xr5dKpI/AAAAAAAAEuI/fVg5TeE4X6E/s1600-h/image%5B5%5D.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="44" alt="image" src="http://lh4.ggpht.com/_3AFYZsJfotY/SbR3aCJ38NI/AAAAAAAAEuM/rbGNZYCP4zk/image_thumb%5B1%5D.png?imgmax=800" width="44" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-7507646777213474920?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/7507646777213474920/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=7507646777213474920' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/7507646777213474920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/7507646777213474920'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2009/03/papel-do-esb-dentro-de-uma-arqutetura.html' title='Papel do ESB dentro de uma arqutetura SOA'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_3AFYZsJfotY/SbR3UjdCzQI/AAAAAAAAEuE/I5nVFajFKjg/s72-c/image_thumb%5B9%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-7267760734522583501</id><published>2009-03-03T18:18:00.001-08:00</published><updated>2009-03-03T18:18:22.591-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><title type='text'>Funcionalidades de um ESB</title><content type='html'>&lt;p align="justify"&gt;Um dos objetivos deste post é dar uma breve explicação sobre as principais funcionalidades de um ESB que são o roteamento a transformação e a mediação. &lt;/p&gt;  &lt;p align="justify"&gt;Os envolvidos numa comunicação através do ESB não precisam compartilhar o mesmo protocolo de comunicação ou formato de mensagem, pois fica a cargo do ESB realizar as transformações necessárias nas mensagens trocadas. Isto acontece através do serviço de transformação do ESB. Por exemplo, uma mensagem com 10 campos enviada através de SOAP pode ser recebida pela outra ponta como uma mensagem JMS com 4 campos removidos. &lt;/p&gt;  &lt;p align="justify"&gt;O serviço de mediação no ESB compreende todo o workflow de mensagens envolvido para realizar uma determinada &amp;quot;interação&amp;quot; entre os participantes. Os participantes não entram em contato um com o outro, e sim, toda comunicação é mediada pelo ESB. Mediações complexas podem também ser formada a partir do encadeamento de outras mediações. Por exemplo, qualquer mensagem enviada de um componente para outro requer a mediação do ESB. &lt;/p&gt;  &lt;p align="justify"&gt;O serviço de roteamento de um ESB oferece uma infra-estrutura de comunicação e localização comum que pode ser utilizada para conectar serviços sem que os desenvolvedores precisem realizar uma lógica de conectividade complexa. Por exemplo, uma requisição a um serviço é realizada ao ESB por um componente sem que este conheça a localização física do serviço desejado, nem mesmo por qual caminho a solicitação será trafegada até chegar ao seu destino.&lt;/p&gt;  &lt;p align="justify"&gt;Um produto de mercado ESB se chama Websphere Message Broker. Esta é uma solução IBM para implementar um EAI robusto baseado em mensagens e serve para conectividade entre aplicações, mediações entre fornecedores e clientes e criação de um barramento de serviços.&lt;/p&gt;  &lt;p align="justify"&gt;Entre as principais funcionalidades temos o roteamento, transporte e mediação, suporte a pilha WebServices, integração com transportes do WebSphere MQ e repositório de mensagens persistentes.&lt;/p&gt;  &lt;p align="justify"&gt;Entre os mecanismos e protocolos suportados temos JCA, WebServices, Mensagens MQ, TCP/IP, Hats. Pode através de algum destes protocolos comunicar com Mainframe CICs entre outros.&lt;/p&gt;  &lt;p align="justify"&gt;O produto também permite virtualizar o acesso aos serviços e os disponibilizar de forma simples o acesso a aplicações heterogêneas. Suporta também como transporte http e SOAP, suporte a aplicações de tempo real, envio de mensagens, entre outros,&lt;/p&gt;  &lt;p align="justify"&gt;A arquitetura de referência se baseia em 4 elementos centrais:&lt;/p&gt;  &lt;p align="justify"&gt;· A modelagem e a simulação de novos processos de negócio. A ferramenta chave é o Websphere Businnes Modeler. Este produto permite que se modele o processo de negócio e utilize os serviços disponibilizados nas camadas inferiores.&lt;/p&gt;  &lt;p align="justify"&gt;· Desenvolvimento de novos serviços e processos – As ferramentas chave são o Rational RAD e o Websphere Integration Developer.&lt;/p&gt;  &lt;p align="justify"&gt;· A execução de processos - A ferramenta chave é o WPS (Process Server). O WPS requer um ESB para operar (WESB ou ESMB).&lt;/p&gt;  &lt;p align="justify"&gt;· A monitoração de processos com o WebSphere Business Monitor.&lt;/p&gt;  &lt;p align="justify"&gt;É isto aí pessoal. Espero que esta introdução sobre ESB ajude quem está começando.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://lh6.ggpht.com/_3AFYZsJfotY/Sa3k3w-FllI/AAAAAAAAEtg/b_G_kikt1SE/s1600-h/image%5B5%5D.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="44" alt="image" src="http://lh3.ggpht.com/_3AFYZsJfotY/Sa3k7PCB1fI/AAAAAAAAEtk/f3z3vUQSEXI/image_thumb%5B1%5D.png?imgmax=800" width="44" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-7267760734522583501?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/7267760734522583501/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=7267760734522583501' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/7267760734522583501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/7267760734522583501'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2009/03/funcionalidades-de-um-esb.html' title='Funcionalidades de um ESB'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_3AFYZsJfotY/Sa3k7PCB1fI/AAAAAAAAEtk/f3z3vUQSEXI/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-7179283305271738408</id><published>2009-03-01T18:59:00.001-08:00</published><updated>2009-03-01T18:59:16.459-08:00</updated><title type='text'>Considerações do texto: The Web Services Debate e .Net vs. J2EE</title><content type='html'>&lt;p align="justify"&gt;A utilização de Web Services permite a comunicação e a interoperabilidade entre várias diferentes linguagens de programação. Sua utilização requer a cooperação entre as facções JEE e .NET. A tecnologia ainda não é madura o suficiente, mas basicamente é um servidor que escuta e responde SOAP, geralmente utilizando http. Na prática Web Services suporta WSDL para descrever suas interfaces, e podem também ser ouvidas em um registro UDDI.&lt;/p&gt;  &lt;p align="justify"&gt;A utilização de Web Services permite uma comunicação fácil entre várias plataformas de desenvolvimento, o que coloca fogo na discussão sobre qual plataforma de desenvolvimento é melhor. Particularmente nos artigos a comparação se concentra nas plataformas .NET e J2EE.&lt;/p&gt;  &lt;p align="justify"&gt;Uma vez que Web Services não é uma tecnologia que depende nem de J2EE e nem de .NET, é somente baseado em SOAP, XML e outros tecnologias independentes, a decisão de utilizar uma das duas tecnologias é somente uma questão de em que ambiente de desenvolvimento será realizado o deploy dos Web Services.&lt;/p&gt;  &lt;p align="justify"&gt;Segundo os defensores do J2EE a plataforma é mais madura, mais robusta, mais flexível e mais testada. Cerca de 55 a 70% dos deploys dos Web Services foram feitos utilizando a plataforma J2EE. Além disto, possui suporte de uma vasta quantidade de vendedores tais como SAP, IBM, BEA, Oracle, entre outros. Também segundo os defensores da tecnologia J2EE a plataforma é portável ou seja, possui a facilidade de ser escrita em algum lugar e poder rodar em qualquer lugar.&lt;/p&gt;  &lt;p align="justify"&gt;Segundo os defensores do .NET, esta plataforma é mais simples, mais barato para executar o deploy, mais barato de executar manutenção, possui melhor performance e custo de solução menor. Segundo também os defensores da tecnologia são necessárias menos linhas de código, o que aumenta a rapidez de desenvolvimento.&lt;/p&gt;  &lt;p align="justify"&gt;Web Services é realmente uma tecnologia que tende a ser muito importante para o desenvolvimento de aplicações no futuro e há espaço no mercado para o convívio tanto de aplicações J2EE quanto de aplicações .NET. Cabe a empresa a escolha da tecnologia que mais se aplica ao projeto a ser desenvolvido. &lt;/p&gt;  &lt;p align="justify"&gt;É isto aí pessoal. Qualquer problema me avisem.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://lh5.ggpht.com/_3AFYZsJfotY/SatLeMF1tmI/AAAAAAAAEtQ/T2CIEyAh0zk/s1600-h/image%5B2%5D.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="44" alt="image" src="http://lh5.ggpht.com/_3AFYZsJfotY/SatLgxh-lkI/AAAAAAAAEtU/qqvEOzq7Fhg/image_thumb.png?imgmax=800" width="44" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-7179283305271738408?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/7179283305271738408/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=7179283305271738408' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/7179283305271738408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/7179283305271738408'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2009/03/consideracoes-do-texto-web-services.html' title='Considerações do texto: The Web Services Debate e .Net vs. J2EE'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_3AFYZsJfotY/SatLgxh-lkI/AAAAAAAAEtU/qqvEOzq7Fhg/s72-c/image_thumb.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-1774414371841886719</id><published>2009-03-01T06:12:00.000-08:00</published><updated>2009-03-12T05:59:31.137-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><title type='text'>Modelagem de processo de negócios com BizAgi</title><content type='html'>Olá pessoal,&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Uma ferramenta que achei bem interessante para a modelagem de processo de negócios é a BizAgi Process Modeler. A ferramenta é bem simples de usar e possui bastante funcionalidades. Um exemplo de utilização se encontra em &lt;a href="http://www.bizagi.com/eng/downloads/BPMNbyExample.pdf?token=1.4.1.0"&gt;http://www.bizagi.com/eng/downloads/BPMNbyExample.pdf?token=1.4.1.0&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Para exemplificar a utilização da ferramenta resolvi modelar o processo de aprovação de posts do portal do arquiteto. Segue abaixo o modelo:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3AFYZsJfotY/Sa3byVlx3EI/AAAAAAAAEtY/37FsyaEzz4I/s1600-h/Processo+de+publicacao+de+posts.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 380px; height: 170px;" src="http://2.bp.blogspot.com/_3AFYZsJfotY/Sa3byVlx3EI/AAAAAAAAEtY/37FsyaEzz4I/s320/Processo+de+publicacao+de+posts.jpg" alt="" id="BLOGGER_PHOTO_ID_5309141193575226434" border="0" /&gt;&lt;/a&gt;Com a ferramenta é possível modelar processos, subprocessos e é bem simples de se realizar a modelagem. Uma breve explicação sobre a ferramenta pode ser encontrado em &lt;a href="http://www.baixaki.com.br/download/bizagi-process-modeler.htm"&gt;http://www.baixaki.com.br/download/bizagi-process-modeler.htm&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;É isto aí pessoal. Espero que ajude quem quer modelar os processos de negócio.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-1774414371841886719?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/1774414371841886719/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=1774414371841886719' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/1774414371841886719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/1774414371841886719'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2009/03/modelagem-de-processo-de-negocios-com.html' title='Modelagem de processo de negócios com BizAgi'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3AFYZsJfotY/Sa3byVlx3EI/AAAAAAAAEtY/37FsyaEzz4I/s72-c/Processo+de+publicacao+de+posts.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-7557576402069281043</id><published>2009-02-14T13:14:00.000-08:00</published><updated>2009-02-16T14:01:12.563-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DESENVOLVIMENTO WEB'/><title type='text'>Considerações sobre o desenvolvimento com JSF</title><content type='html'>Olá pessoal,&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Neste post de hoje quis falar um pouco sobre o que estou achando do desenvolvimento com JSF. Para o desenvolvimento com JSF estamos utilizando a distribuição RichFaces com Facelets. A meu ver o desenvolvimento ficou bem produtivo e bem orientado mesmo a componentes.&lt;br /&gt;&lt;br /&gt;Criamos componentes para quase tudo com Facelets o que tornou a implementação ainda mais simples. Um exemplo de componente criado com Facelets  é mostrado &lt;a href="http://portalarquiteto.blogspot.com/2009/02/criando-componentes-com-jsf-e-facelets.html"&gt;aqui&lt;/a&gt;. A utilização de ajax com o a4j (componente do RichFaces) é simples, elegante e torna a usabilidade das páginas muito legal.&lt;br /&gt;&lt;br /&gt;Uma grande reclamação é sobre a curva de aprendizagem, mas particularmente não achei o fim do mundo. O que mais achei difícil no começo é decidir sobre quais componentes utilizar em dadas situações, uma vez que existem vários componentes, mas uma vez utilizado é bem tranquilo.&lt;br /&gt;&lt;br /&gt;O modelo orientado a eventos tem facilitado muito a minha vida e abre um leque maior de opções sobre como desenvolver novas funcionalidades. A quantidade de componentes prontos  do RichFaces também me facinou e um exemplo de utilização pode ser visto &lt;a href="http://livedemo.exadel.com/richfaces-demo/richfaces/modalPanel.jsf?c=modalPanel&amp;amp;tab=usage#"&gt;aqui&lt;/a&gt;. Na minha opnião  JSF tornou realmente o desenvolvimento mais simples e tende a se tornar mesmo um padrão da industria.&lt;br /&gt;&lt;br /&gt;É isto aí pessoal. Qualquer problema me avisem...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3AFYZsJfotY/SZng-ikx5EI/AAAAAAAAEsA/fn2CY5NZAvc/s1600-h/tchau.jpeg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 40px; height: 40px;" src="http://3.bp.blogspot.com/_3AFYZsJfotY/SZng-ikx5EI/AAAAAAAAEsA/fn2CY5NZAvc/s320/tchau.jpeg" alt="" id="BLOGGER_PHOTO_ID_5303517401243051074" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-7557576402069281043?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/7557576402069281043/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=7557576402069281043' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/7557576402069281043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/7557576402069281043'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2009/02/consideracoes-sobre-o-desenvolvimento.html' title='Considerações sobre o desenvolvimento com JSF'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3AFYZsJfotY/SZng-ikx5EI/AAAAAAAAEsA/fn2CY5NZAvc/s72-c/tchau.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-1812235638034297891</id><published>2009-02-05T12:51:00.000-08:00</published><updated>2009-02-05T13:26:42.586-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DESENVOLVIMENTO JAVA'/><title type='text'>Criando componentes com JSF e Facelets</title><content type='html'>Olá pessoal,&lt;br /&gt;&lt;br /&gt;Muita gente tem falado sobre a dificuldade de implementar componentes usando JSF. Resolvi então montar um pequeno tutorial sobre como criar componentes utilizando Facelets e JSF. Para o exemplo utilizei JSF com RichFaces e Facelets.&lt;br /&gt;&lt;br /&gt;Para este exemplo estou considerando que seu projeto JSF já está configurado utilizando as tecnologias descritas acima.&lt;br /&gt;&lt;br /&gt;A primeira coisa a ser feita é adicionar o seguinte trecho no arquivo web.xml.&lt;br /&gt;&lt;pre&gt;&amp;lt;context-param&amp;gt;&lt;br /&gt;&amp;lt;param-name&amp;gt;facelets.LIBRARIES&amp;lt;/param-name&amp;gt;&lt;br /&gt;&amp;lt;param-value&amp;gt;/WEB-INF/facelets/facelets.taglib.xml&amp;lt;/param-value&amp;gt;&lt;br /&gt;&amp;lt;/context-param&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Depois de definido no arquivo web.xml deve-se então criar o arquivo "facelets.taglib" assim como mostrado abaixo.&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE facelet-taglib PUBLIC&lt;br /&gt;"-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"&lt;br /&gt;"http://java.sun.com/dtd/web-facesconfig_1_0.dtd"&amp;gt;&lt;br /&gt;&amp;lt;facelet-taglib&amp;gt;&lt;br /&gt;&amp;lt;namespace&amp;gt;http://facelets.bionexo.com&amp;lt;/namespace&amp;gt;&lt;br /&gt;&amp;lt;tag&amp;gt;&lt;br /&gt;&amp;lt;tag-name&amp;gt;inputText&amp;lt;/tag-name&amp;gt;&lt;br /&gt;&amp;lt;source&amp;gt;../../taglibs/inputText.xhtml&amp;lt;/source&amp;gt;&lt;br /&gt;&amp;lt;/tag&amp;gt;&lt;br /&gt;&amp;lt;/facelet-taglib&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Criamos então o arquivo inputText.xhtml assim como descrito abaixo:&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0&lt;br /&gt;Transitional//EN"&lt;br /&gt;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;&lt;br /&gt;&amp;lt;html xmlns="http://www.w3.org/1999/xhtml"&lt;br /&gt;xmlns:h="http://java.sun.com/jsf/html"&lt;br /&gt;xmlns:ui="http://java.sun.com/jsf/facelets"&lt;br /&gt;xmlns:c="http://java.sun.com/jstl/core"&lt;br /&gt;xmlns:a4j="https://ajax4jsf.dev.java.net/ajax"&lt;br /&gt;xmlns:rich="http://richfaces.org/rich"&amp;gt;&lt;br /&gt;&amp;lt;ui:composition&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;c:if test="${empty required}"&amp;gt;&lt;br /&gt;&amp;lt;c:set var="required" value="false" /&amp;gt;&lt;br /&gt;&amp;lt;/c:if&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;c:if test="${empty rendered}"&amp;gt;&lt;br /&gt;&amp;lt;c:set var="rendered" value="true" /&amp;gt;&lt;br /&gt;&amp;lt;/c:if&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;c:if test="${not empty label}"&amp;gt;&lt;br /&gt;&amp;lt;c:choose&amp;gt;&lt;br /&gt; &amp;lt;c:when test="${required}"&amp;gt;&lt;br /&gt;  &amp;lt;h:outputLabel value="${label} *:" for="${id}"&lt;br /&gt;   rendered="${rendered}" /&amp;gt;&lt;br /&gt; &amp;lt;/c:when&amp;gt;&lt;br /&gt; &amp;lt;c:otherwise&amp;gt;&lt;br /&gt;  &amp;lt;h:outputLabel value="${label}:" for="${id}"&lt;br /&gt;rendered="${rendered}" /&amp;gt;&lt;br /&gt; &amp;lt;/c:otherwise&amp;gt;&lt;br /&gt;&amp;lt;/c:choose&amp;gt;&lt;br /&gt;&amp;lt;/c:if&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;h:panelGroup&amp;gt;&lt;br /&gt;&amp;lt;h:inputText id="${id}" value="${value}" onkeypress="${onkeypress}"&lt;br /&gt; onkeyup="${onkeyup}" onblur="${onblur}" required="${required}"&lt;br /&gt; maxlength="${maxlength}" rendered="${rendered}"&lt;br /&gt; readonly="${readonly}" disabled="${disabled}" /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;rich:message id="mensagem${id}" for="${id}" style="color:darkred;"&lt;br /&gt; rendered="${(required or message) and rendered}" /&amp;gt;&lt;br /&gt;&amp;lt;/h:panelGroup&amp;gt;&lt;br /&gt;&amp;lt;/ui:composition&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Note que utilizamos acima a taglib c para setar os valores default para as propriedades utilizadas no componente.&lt;br /&gt;&lt;br /&gt;Para utilizar o componente então é simples. Basta primeiro importar a taglib que acabamos de criar com adicionando o seguinte trecho no início do nosso arquivo xhtml&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt;xmlns:comp="http://facelets.bionexo.com"&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;E aonde queremos utilizar simplesmente chamamos o componente, assim como mostrado abaixo:&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;comp:inputText id="razaoSocial"&lt;br /&gt;label="#{msgs.campo_geral_razao_social}"&lt;br /&gt;value="#{empresaBean.objetoPesquisa.dadosEmpresa.razaoSocial}"&lt;br /&gt;maxlength="100" /&amp;gt;&lt;br /&gt;&lt;/pre&gt;É isto aí pessoal. Boa sorte com os novos componentes e qualquer dúvida perguntem.&lt;br /&gt;&lt;pre&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3AFYZsJfotY/SYtZFLsAVrI/AAAAAAAAErg/jvnMyAby7mU/s1600-h/tchau.jpeg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 40px; height: 40px;" src="http://2.bp.blogspot.com/_3AFYZsJfotY/SYtZFLsAVrI/AAAAAAAAErg/jvnMyAby7mU/s320/tchau.jpeg" alt="" id="BLOGGER_PHOTO_ID_5299427332103100082" border="0" /&gt;&lt;/a&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-1812235638034297891?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/1812235638034297891/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=1812235638034297891' title='9 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/1812235638034297891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/1812235638034297891'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2009/02/criando-componentes-com-jsf-e-facelets.html' title='Criando componentes com JSF e Facelets'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3AFYZsJfotY/SYtZFLsAVrI/AAAAAAAAErg/jvnMyAby7mU/s72-c/tchau.jpeg' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-3789438001758176677</id><published>2009-01-29T14:28:00.000-08:00</published><updated>2009-01-29T14:52:10.625-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CERTIFICAÇÃO'/><title type='text'>Dicas para a prova SCBCD 5.0 (CX-310-091)</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-size:100%;"&gt;Olá pessoal,&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Ontem fiz a prova SCBCD para EJB 3 e felizmente fui aprovado. Segue abaixo algumas percepções sobre a prova e um guia de estudo para quem tem interesse na prova.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;A prova realmente não é fácil e como todas as provas da Sun tem bastante pegadinhas. &lt;/span&gt;Como livro lí o Enterprise JavaBeans 3.0 (Editora O'Reilly) que realmente é muito bom, apesar de não ser focado na prova em si. O livro é bom inclusive para quem não tem interesse na prova.&lt;br /&gt;&lt;br /&gt;Um outro otimo livro para estudo é o Mastering Enterprise JavaBeans 3.0 que se encontra &lt;a href="http://www.theserverside.com/tt/books/wiley/masteringEJB3/index.tss"&gt;neste link&lt;/a&gt; no site ServerSide.com.&lt;br /&gt;&lt;br /&gt;Encontrei boas dicas no site &lt;a href="http://faq.javaranch.com/java/ScbcdLinks#scbcd50"&gt;http://faq.javaranch.com/java/ScbcdLinks#scbcd50&lt;/a&gt; que acho que também devem ser lidas.  Outro bom site que possui um resumo da prova é  &lt;a href="http://java.boot.by/scbcd5-guide/"&gt;http://java.boot.by/scbcd5-guide/&lt;/a&gt; e também é leitura obrigatória.&lt;br /&gt;&lt;br /&gt;No mais é estudar muito e fazer alguns simulados. Segue abaixo uma lista de simulados que utilizei:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;    &lt;a href="http://enthuware.com/ejbplus/"&gt;Enthuware's EJBPlus V5 for SCBCD 5.0&lt;/a&gt;&lt;/li&gt;&lt;li&gt;    &lt;a href="http://www.whizlabs.com/scbcd/scbcd5.0.html"&gt;Whizlabs' SCBCD 5.0 Preparation Kit&lt;/a&gt;&lt;/li&gt;&lt;li&gt;    &lt;a href="http://www.ucertify.com/exams/SUN/CX310-091.html"&gt;uCertify SCBCD 5.0 PrepKit&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.javabeat.net/javabeat/scbcd5/mocks/"&gt;http://www.javabeat.net/javabeat/scbcd5/mocks&lt;/a&gt;&lt;a href="http://www.javabeat.net/javabeat/scbcd5/mocks/"&gt;/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Utilizei apenas as versões demo, mas os mocks são ótimas opções para quem está estudando para as provas.&lt;br /&gt;&lt;br /&gt;É isto aí pessoal. Espero que ajude.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3AFYZsJfotY/SYIysSHLDMI/AAAAAAAAErY/_7Bdc5feQok/s1600-h/tchau.jpeg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 40px; height: 40px;" src="http://1.bp.blogspot.com/_3AFYZsJfotY/SYIysSHLDMI/AAAAAAAAErY/_7Bdc5feQok/s320/tchau.jpeg" alt="" id="BLOGGER_PHOTO_ID_5296851848098680002" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-3789438001758176677?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/3789438001758176677/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=3789438001758176677' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/3789438001758176677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/3789438001758176677'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2009/01/dicas-para-prova-scbcd-50-cx-310-091.html' title='Dicas para a prova SCBCD 5.0 (CX-310-091)'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3AFYZsJfotY/SYIysSHLDMI/AAAAAAAAErY/_7Bdc5feQok/s72-c/tchau.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-4124416766164412728</id><published>2009-01-28T07:33:00.000-08:00</published><updated>2009-01-28T08:38:30.302-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ENQUETES'/><title type='text'>Resultado da pesquisa sobre JSF</title><content type='html'>&lt;div style="text-align: justify;"&gt;Olá pessoal,&lt;br /&gt;&lt;br /&gt;Para não perdermos os resiltados das pesquisas realizadas resolvi criar um marcador para este tópico e colocar a imagem do resultado. Sobre a pesquisa sobre qual distribuição jsf é mais utilizada segue o resultado abaixo:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3AFYZsJfotY/SYB9kHSDalI/AAAAAAAAErQ/DY5KW8ly3po/s1600-h/Votacao.PNG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 226px; height: 223px;" src="http://2.bp.blogspot.com/_3AFYZsJfotY/SYB9kHSDalI/AAAAAAAAErQ/DY5KW8ly3po/s320/Votacao.PNG" alt="" id="BLOGGER_PHOTO_ID_5296371221171235410" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;É isto aí pessoal. Em breve entrarão mais pesquisas.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;[]s,&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-4124416766164412728?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/4124416766164412728/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=4124416766164412728' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/4124416766164412728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/4124416766164412728'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2009/01/resultado-da-pesquisa-sobre-jsf.html' title='Resultado da pesquisa sobre JSF'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3AFYZsJfotY/SYB9kHSDalI/AAAAAAAAErQ/DY5KW8ly3po/s72-c/Votacao.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-4284542651482950765</id><published>2008-12-19T07:14:00.000-08:00</published><updated>2008-12-19T09:07:43.599-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DESENVOLVIMENTO WEB'/><title type='text'>Máscara javascript para qualquer formato</title><content type='html'>&lt;div style="text-align: justify;"&gt;Fazer máscaras em javascript é sempre chato e trabalhoso. Para cada máscara do sistema deve-se criar uma função javascript e utilizá-la no sistema. A algum tempo criei uma função javascript que funciona para a grande maioria das mascaras que são utilizadas no sistema. A função é mostrada abaixo:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;/**&lt;br /&gt;* Funcao de mascara. Esta funcao recebe como parametro o campo (this) no qual a&lt;br /&gt;* mascara sera aplicada, o formato da mascara (99/99/9999), o conteúdo (1&lt;br /&gt;* numeros, 2 letras e 3 letras e numeros) e o evento passa-se o this.&lt;br /&gt;*/&lt;br /&gt;function mask(campo, formato, conteudo, event) {&lt;br /&gt;&lt;br /&gt; valor = campo.value;&lt;br /&gt;&lt;br /&gt; var i, j;&lt;br /&gt; var caracs = [ '.', '/', '-', ':', '(', ')', ',' ];&lt;br /&gt; var auxPonto = formato;&lt;br /&gt; var auxBarra = formato;&lt;br /&gt; var auxHifen = formato;&lt;br /&gt; var auxDblPonto = formato;&lt;br /&gt; var auxAbrePar = formato;&lt;br /&gt; var auxFechaPar = formato;&lt;br /&gt; var auxVirgula = formato;&lt;br /&gt; var tamanho = formato.length;&lt;br /&gt; var posPonto = new Array(tamanho);&lt;br /&gt; var posBarra = new Array(tamanho);&lt;br /&gt; var posHifen = new Array(tamanho);&lt;br /&gt; var posDblPonto = new Array(tamanho);&lt;br /&gt; var posAbrePar = new Array(tamanho);&lt;br /&gt; var posFechaPar = new Array(tamanho);&lt;br /&gt; var posVirgula = new Array(tamanho);&lt;br /&gt; var keyPress = event;&lt;br /&gt;&lt;br /&gt; campo.maxLength = tamanho;&lt;br /&gt;&lt;br /&gt; if (event.keyCode != 17) {&lt;br /&gt;  switch (conteudo) {&lt;br /&gt;  case 1: // Verifica se soh podem ser entrados valores numericos&lt;br /&gt;   if (!(event.keyCode &gt;= 48 &amp;amp;&amp;amp; (event.keyCode &lt;= 57)))&lt;br /&gt;    event.keyCode = 0;&lt;br /&gt;   break;&lt;br /&gt;  case 2: // Somente Letras&lt;br /&gt;   if (!((event.keyCode &gt;= 97 &amp;amp;&amp;amp; event.keyCode &lt;= 122)&lt;br /&gt;     || event.keyCode &gt;= 65&lt;br /&gt;     &amp;amp;&amp;amp; event.keyCode &lt;= 90))&lt;br /&gt;    event.keyCode = 0;&lt;br /&gt;   break;&lt;br /&gt;  case 3: // Letras e numeros&lt;br /&gt;   if (!((event.keyCode &gt;= 48 &amp;amp;&amp;amp; event.keyCode &lt;= 57)&lt;br /&gt;     || (event.keyCode &gt;= 97 &amp;amp;&amp;amp; event.keyCode &lt;= 122)&lt;br /&gt;     || (event.keyCode &gt;= 65 &amp;amp;&amp;amp; event.keyCode &lt;= 90)))&lt;br /&gt;    event.keyCode = 0;&lt;br /&gt;   break;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; // ----------------------------- PEGA A FORMATACAO DA MASCARA&lt;br /&gt; // ------------------&lt;br /&gt; for (i = 0; i &lt; tamanho; i++) {&lt;br /&gt;&lt;br /&gt;  posPonto[i] = auxPonto.indexOf('.');&lt;br /&gt;  posBarra[i] = auxBarra.indexOf('/');&lt;br /&gt;  posHifen[i] = auxHifen.indexOf('-');&lt;br /&gt;  posDblPonto[i] = auxDblPonto.indexOf(':');&lt;br /&gt;  posAbrePar[i] = auxAbrePar.indexOf('(');&lt;br /&gt;  posFechaPar[i] = auxFechaPar.indexOf(')');&lt;br /&gt;  posVirgula[i] = auxVirgula.indexOf(',');&lt;br /&gt;&lt;br /&gt;  auxPonto = auxPonto.substring(posPonto[i] + 1, tamanho);&lt;br /&gt;  auxBarra = auxBarra.substring(posBarra[i] + 1, tamanho);&lt;br /&gt;  auxHifen = auxHifen.substring(posHifen[i] + 1, tamanho);&lt;br /&gt;  auxDblPonto = auxDblPonto.substring(posDblPonto[i] + 1, tamanho);&lt;br /&gt;  auxAbrePar = auxAbrePar.substring(posAbrePar[i] + 1, tamanho);&lt;br /&gt;  auxFechaPar = auxFechaPar.substring(posFechaPar[i] + 1, tamanho);&lt;br /&gt;  auxVirgula = auxVirgula.substring(posVirgula[i] + 1, tamanho);&lt;br /&gt;&lt;br /&gt;  if (i &gt; 0) {&lt;br /&gt;   posPonto[i] = posPonto[i] + posPonto[i - 1];&lt;br /&gt;   posBarra[i] = posBarra[i] + posBarra[i - 1];&lt;br /&gt;   posHifen[i] = posHifen[i] + posHifen[i - 1];&lt;br /&gt;   posDblPonto[i] = posDblPonto[i] + posDblPonto[i - 1];&lt;br /&gt;   posAbrePar[i] = posAbrePar[i] + posAbrePar[i - 1];&lt;br /&gt;   posFechaPar[i] = posFechaPar[i] + posFechaPar[i - 1];&lt;br /&gt;   posVirgula[i] = posVirgula[i] + posVirgula[i - 1];&lt;br /&gt;   posPonto[i] = posPonto[i] + 1;&lt;br /&gt;   posBarra[i] = posBarra[i] + 1;&lt;br /&gt;   posHifen[i] = posHifen[i] + 1;&lt;br /&gt;   posDblPonto[i] = posDblPonto[i] + 1;&lt;br /&gt;   posAbrePar[i] = posAbrePar[i] + 1;&lt;br /&gt;   posFechaPar[i] = posFechaPar[i] + 1;&lt;br /&gt;   posVirgula[i] = posVirgula[i] + 1;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; // Retirando a máscara&lt;br /&gt; for (i = 0; i &lt; campo.value.length; i++) {&lt;br /&gt;  valor = valor.replace('-', '');&lt;br /&gt;  valor = valor.replace('(', '');&lt;br /&gt;  valor = valor.replace(')', '');&lt;br /&gt;  valor = valor.replace(':', '');&lt;br /&gt;  valor = valor.replace('/', '');&lt;br /&gt;  valor = valor.replace('.', '');&lt;br /&gt;  valor = valor.replace(',', '');&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; // Faz a validação se for apenas número&lt;br /&gt; // utilizado para fazer a validação de Ctrl+V&lt;br /&gt; if (conteudo == 1) {&lt;br /&gt;  if (isNaN(valor)) {&lt;br /&gt;   if (isNaN(valor.charAt(valor.length - 2)))&lt;br /&gt;    valor = "";&lt;br /&gt;   else&lt;br /&gt;    valor = valor.substring(0, valor.length - 1);&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; indicePonto = 0;&lt;br /&gt; indiceBarra = 0;&lt;br /&gt; indiceHifen = 0;&lt;br /&gt; indiceDblPonto = 0;&lt;br /&gt; indiceVirgula = 0;&lt;br /&gt; indiceAbrePar = 0;&lt;br /&gt; indiceFechaPar = 0;&lt;br /&gt;&lt;br /&gt; // Varre o campo aplicando a máscara&lt;br /&gt; for (i = 0; i &lt; valor.length; i++) {&lt;br /&gt;  if (i == posPonto[indicePonto]) {&lt;br /&gt;   if (valor.charAt(i) != '.') {&lt;br /&gt;    if (i == 0) {&lt;br /&gt;     valor = '.' + valor;&lt;br /&gt;    } else if (i == valor.length) {&lt;br /&gt;     valor = valor + '.';&lt;br /&gt;    } else {&lt;br /&gt;     valor = valor.substring(0, i) + '.' + valor.substring(i);&lt;br /&gt;    }&lt;br /&gt;    indicePonto++;&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;  if (i == posBarra[indiceBarra]) {&lt;br /&gt;   if (valor.charAt(i) != '/') {&lt;br /&gt;    if (i == 0) {&lt;br /&gt;     valor = '/' + valor;&lt;br /&gt;    } else if (i == valor.length) {&lt;br /&gt;     valor = valor + '/';&lt;br /&gt;    } else {&lt;br /&gt;     valor = valor.substring(0, i) + '/' + valor.substring(i);&lt;br /&gt;    }&lt;br /&gt;    indiceBarra++;&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  if (i == posHifen[indiceHifen]) {&lt;br /&gt;   if (valor.charAt(i) != '-') {&lt;br /&gt;    if (i == 0) {&lt;br /&gt;     valor = '-' + valor;&lt;br /&gt;    } else if (i == valor.length) {&lt;br /&gt;     valor = valor + '-';&lt;br /&gt;    } else {&lt;br /&gt;     valor = valor.substring(0, i) + '-' + valor.substring(i);&lt;br /&gt;    }&lt;br /&gt;    indiceHifen++;&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  if (i == posDblPonto[indiceDblPonto]) {&lt;br /&gt;   if (valor.charAt(i) != ':') {&lt;br /&gt;    if (i == 0) {&lt;br /&gt;     valor = ':' + valor;&lt;br /&gt;    } else if (i == valor.length) {&lt;br /&gt;     valor = valor + ':';&lt;br /&gt;    } else {&lt;br /&gt;     valor = valor.substring(0, i) + ':' + valor.substring(i);&lt;br /&gt;    }&lt;br /&gt;    indiceDblPonto++;&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  if (i == posAbrePar[indiceAbrePar]) {&lt;br /&gt;   if (valor.charAt(i) != '(') {&lt;br /&gt;    if (i == 0) {&lt;br /&gt;     valor = '(' + valor;&lt;br /&gt;    } else if (i == valor.length) {&lt;br /&gt;     valor = valor + '(';&lt;br /&gt;    } else {&lt;br /&gt;     valor = valor.substring(0, i) + '(' + valor.substring(i);&lt;br /&gt;    }&lt;br /&gt;    indiceAbrePar++;&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  if (i == posFechaPar[indiceFechaPar]) {&lt;br /&gt;   if (valor.charAt(i) != ')') {&lt;br /&gt;    if (i == 0) {&lt;br /&gt;     valor = ')' + valor;&lt;br /&gt;    } else if (i == valor.length) {&lt;br /&gt;     valor = valor + ')';&lt;br /&gt;    } else {&lt;br /&gt;     valor = valor.substring(0, i) + ')' + valor.substring(i);&lt;br /&gt;    }&lt;br /&gt;    indiceFechaPar++;&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  if (i == posVirgula[indiceVirgula]) {&lt;br /&gt;   if (valor.charAt(i) != ',') {&lt;br /&gt;    if (i == 0) {&lt;br /&gt;     valor = ',' + valor;&lt;br /&gt;    } else if (i == valor.length) {&lt;br /&gt;     valor = valor + ',';&lt;br /&gt;    } else {&lt;br /&gt;     valor = valor.substring(0, i) + ',' + valor.substring(i);&lt;br /&gt;    }&lt;br /&gt;    indiceVirgula++;&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; if (campo.value.length &gt; tamanho) {&lt;br /&gt;  campo.value = campo.value.substring(0, tamanho);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; campo.value = valor;&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;Segue abaixo um exemplo de como utilizar a função:&lt;br /&gt;&lt;pre&gt;&lt;pre&gt;&lt;pre&gt;&lt;pre&gt;&lt;pre&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3AFYZsJfotY/SUvT29qW-dI/AAAAAAAAEpo/To6ZkaEw_Cg/s1600-h/codigo.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 370px; height: 74px;" src="http://3.bp.blogspot.com/_3AFYZsJfotY/SUvT29qW-dI/AAAAAAAAEpo/To6ZkaEw_Cg/s320/codigo.gif" alt="" id="BLOGGER_PHOTO_ID_5281547929240664530" border="0" /&gt;&lt;/a&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style=""&gt;&lt;span style="font-size:100%;"&gt;Para a máscara pode se passar qualquer mascara que possua &lt;/span&gt;&lt;span style="font-size:100%;"&gt;os caracteres (ponto, barra, menos, dois pontos, virgula, e abre e fecha parenteses. Os valores que são passados entre os caracteres acima serão desconsiderados, então tanto faz colocar 999.999.999-99 quanto 111.111.111-11. Espero que esta máscara ajude vcs assim como vem me ajudando durante este longo período de desenvolvimento.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;É isto aí pessoal. Qualquer problema mandem mensagem.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-4284542651482950765?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/4284542651482950765/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=4284542651482950765' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/4284542651482950765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/4284542651482950765'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/12/mscara-javascript-para-qualquer-formato.html' title='Máscara javascript para qualquer formato'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3AFYZsJfotY/SUvT29qW-dI/AAAAAAAAEpo/To6ZkaEw_Cg/s72-c/codigo.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-8899903981195581777</id><published>2008-12-15T07:53:00.000-08:00</published><updated>2008-12-15T12:26:38.206-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DESENVOLVIMENTO JAVA'/><title type='text'>Palestra interessante no evento Maratona JBoss</title><content type='html'>Olá pessoal,&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Fui em um evento a algum tempo aqui em SP e queria comentar sobre uma palestra que particularmente me chamou bastante atenção. Esta palestra foi sobre o JBoss Performance e foi ministrada pelo Bill Coutinho, funcionário da empresa Dextra.&lt;br /&gt;&lt;br /&gt;Entre as principais lições da palestra posso listar as seguintes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Por não saber aonde está os gargalos, nunca otimize cedo demais (Só a medição mostrará os gargalos).&lt;/li&gt;&lt;li&gt;Deve-se sempre fazer um paralelo entre a corretude versus a performance. (A corretude depende da aplicação. Para uma aplicação, ficar com dados antigos, pode ser um erro enquanto para outras pode ser tolerável desde que a aplicação fique mais rápida)&lt;/li&gt;&lt;li&gt;Escolhas sempre devem ser feitas. (Objetivos na sua grande maioria das vezes serão conflitantes como por exemplo, performance e segurança)&lt;/li&gt;&lt;/ul&gt;Foi falado também sobre as principais técnicas para o aumento da performance que podem ser:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Pool de recursos, como no exemplo do pool de conexões com o BD.&lt;/li&gt;&lt;li&gt;Caching, como no exemplo do cache de segundo nível do Hibernate (Neste caso deve-se analisar a corretude versus a performance)&lt;/li&gt;&lt;li&gt;Clustering como o exemplo do cluster do Jboss.&lt;/li&gt;&lt;li&gt;Melhorias nas configurações da JVM. (Evolução do Java 5 com o Ergonomics)&lt;/li&gt;&lt;/ul&gt;O evento em sí foi muito bom, mas gostaria de parabenizar o palestrante pela excelente apresentação. É isto aí pessoal.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3AFYZsJfotY/SUa8rf13GAI/AAAAAAAAEpg/fImBsAnx5iM/s1600-h/tchau.jpeg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 40px; height: 40px;" src="http://1.bp.blogspot.com/_3AFYZsJfotY/SUa8rf13GAI/AAAAAAAAEpg/fImBsAnx5iM/s320/tchau.jpeg" alt="" id="BLOGGER_PHOTO_ID_5280115068606289922" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-8899903981195581777?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/8899903981195581777/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=8899903981195581777' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/8899903981195581777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/8899903981195581777'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/12/palestra-interessante-no-evento.html' title='Palestra interessante no evento Maratona JBoss'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3AFYZsJfotY/SUa8rf13GAI/AAAAAAAAEpg/fImBsAnx5iM/s72-c/tchau.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-3354938618344925190</id><published>2008-11-14T06:12:00.000-08:00</published><updated>2008-11-14T07:51:04.143-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DESENVOLVIMENTO JAVA'/><title type='text'>Mapeamento de objetos com JPA e Hibernate</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-family: arial;font-size:100%;" &gt;Para auxiliar quem está começando com algum projeto resolvi explicar algumas poucas anotações para realizar o mapeamento de entidades utilizando JPA e Hibernate. Para se realizar a modelagem de classes persistentes e da base de dados pode se utilizar as anotações do JPA e do Hibernate.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify; font-family: arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;span style="font-size:100%;"&gt;Uma das anotações mais utilizadas é a anotação @Entity que define que aquela classe anotada deve ser uma entidade persistida na base de dados. Uma vez utilizada esta anotação, todos os métodos gets e sets e campos (dependendo do seu tipo de acesso) são descobertos e são gerados mapeamento para estas propriedades no banco de dados. Cada uma destas propriedades então gera uma coluna na tabela com o nome da entidade. Para que uma propriedade não seja persistida deve se utilizar a anotação @Transient.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Para se mapear objetos complexos devem ser usadas as anotações @OneToOne, @OneToMany, @ManyToOne e @ManyToMany. Quando mapeamos objetos com o tipo @ManyToMany o próprio JPA é responsável por gerar a tabela entre os dois objetos.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;span style="font-size:100%;"&gt;Quando se mapeia objetos deve se definir a política de quando estes objetos devem ser buscados. Normalmente quando se busca um objeto os outros objetos nem sempre precisam ser exibidos e buscá-los no banco causaria uma perda de desempenho indesejável. Um exemplo seria uma busca de pessoas que somente queremos mostrar seus dados e não seu endereço. Para este problema podemos mapear a propriedade como LAZY que indica que o objeto mapeado não é buscado inicialmente e sim somente depois dela ser necessária. Para isto definimos na anotação de mapeamento o trecho fetch = FetchType.LAZY. Para colocar propriedades simples LAZY deve se utilizar a seguinte anotação @Basic(fetch=FetchType.LAZY).&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;span style="font-size:100%;"&gt;Para constantes únicas como, por exemplo, CPF de uma pessoa é interessante se utilizar a seguinte anotação @Table (uniqueConstraints = @UniqueConstraint ( columnNames = { "cpf" })). &lt;/span&gt;&lt;span style="font-size:100%;"&gt;Para determinar que uma propriedade não deva ser nula deve-se utilizar a anotação @NotNull. Outra anotação importante é a anotação @NotEmpty que verifica se alguma propriedade do tipo String não é vazia. Para se determinar o tamanho máximo e mínimo de um campo do tipo String pode se utilizar a anotação @Length(min=3, Max=100) e para se determinar qual o intervalo válido de valores de campos inteiros pode se utilizar a anotação @Range(min=12, max=12).&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;span style="font-size:100%;"&gt;Para propriedades que podem ser validadas com expressões regulares deve se utilizar a seguinte anotação @Pattern(regex="expressão regular") e para validação de email pode se utilizar a anotação @Email. Para outras validações mais complexas podem-se utilizar as anotações @AssertTrue, @AssertFalse, @Valid.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;As validações devem ser utilizadas sempre que possível, para que o modelo esteja sempre coerente e correto.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;É isto aí pessoal. Existem várias outras anotações de mapeamento que não foram citadas, mas em um outro momento iremos falar delas. Quaisquer problemas enviem mensagem.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3AFYZsJfotY/SR2b7v0bMkI/AAAAAAAADTw/6cT8IREkmkQ/s1600-h/tchau.jpeg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 40px; height: 40px;" src="http://1.bp.blogspot.com/_3AFYZsJfotY/SR2b7v0bMkI/AAAAAAAADTw/6cT8IREkmkQ/s320/tchau.jpeg" alt="" id="BLOGGER_PHOTO_ID_5268538589844288066" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-3354938618344925190?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/3354938618344925190/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=3354938618344925190' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/3354938618344925190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/3354938618344925190'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/11/mapeamento-de-objetos-com-jpa-e.html' title='Mapeamento de objetos com JPA e Hibernate'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3AFYZsJfotY/SR2b7v0bMkI/AAAAAAAADTw/6cT8IREkmkQ/s72-c/tchau.jpeg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-6092820646240991645</id><published>2008-11-12T06:45:00.001-08:00</published><updated>2008-11-12T06:48:10.540-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DESENVOLVIMENTO JAVA'/><title type='text'>Gerenciamento de Transações com JTA</title><content type='html'>Segue abaixo algumas considerações acerca da API JTA e de como EJB3 suporta transações declarativamente.&lt;br /&gt;&lt;br /&gt;Normalmente as transações em aplicações são controladas em nível de métodos de negócio. Para se declarar que se está sendo utilizada alguma transação deve se utilizar a anotação @TransactionAttribute.&lt;br /&gt;&lt;br /&gt;Por padrão a transação utiliza a estratégia REQUIRED, que significa que se o método do serviço não possuir alguma transação, uma será criada, e se já possuir uma transação esta será aproveitada. Esta é a estratégia que deve ser utilizada na maior parte dos casos uma vez que é bem lógica.&lt;br /&gt;&lt;br /&gt;O que esta estratégia quer dizer resumidamente? Quando você estiver em um contexto de transação e caso ocorra alguma exceção do tipo Runtime ou exceção com a anotação @ApplicationException(rollback=true), deve ser dado o rollback na base de dados. Com esta estratégia padrão sempre será dado o rollback da transação mais externa, o que na maioria dos casos faz todo sentido.&lt;br /&gt;&lt;br /&gt;Outras estratégias são:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;SUPPORTS - Não cria nenhuma transação, mas se já existir alguma ela será utilizada.&lt;/li&gt;&lt;li&gt;MANDATORY - Requer que quem chamou o método tenha criado uma transação.&lt;/li&gt;&lt;li&gt;NEVER - Proíbe que quem chamou o método tenha iniciado uma transação.&lt;/li&gt;&lt;li&gt;REQUIRESNEW - Sempre começa uma nova transação, suspendendo a antiga existente.&lt;/li&gt;&lt;li&gt;NOTSUPPORTED - Suspende qualquer transação ativa.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Como padrão, pode-se anotar toda a classe com a anotação @TransactionAttribute, o que determina que todos os métodos da classe utilizam transação e com a estratégia REQUIRED. Caso exista algum método que deva usar outra estratégia basta sobrescrever a estratégia usando acima do método alguma das anotações abaixo:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;    @TransactionAttribute(TransactionAttributeType.NEVER)&lt;/li&gt;&lt;li&gt;@TransactionAttribute(TransactionAttributeType.MANDATORY)&lt;/li&gt;&lt;li&gt;@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)&lt;/li&gt;&lt;li&gt;@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)&lt;/li&gt;&lt;li&gt;@TransactionAttribute(TransactionAttributeType.SUPPORTS)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Agora é definir para os métodos qual o melhor tipo de estratégia de transação e sobreescrever.É isto aí pessoal. Qualquer problema me avisem.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3AFYZsJfotY/SRrsKb3MRqI/AAAAAAAADTQ/QqYprpBRTxw/s1600-h/tchau.jpeg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 40px; height: 40px;" src="http://2.bp.blogspot.com/_3AFYZsJfotY/SRrsKb3MRqI/AAAAAAAADTQ/QqYprpBRTxw/s320/tchau.jpeg" alt="" id="BLOGGER_PHOTO_ID_5267782378185311906" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-6092820646240991645?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/6092820646240991645/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=6092820646240991645' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/6092820646240991645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/6092820646240991645'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/11/gerenciamento-de-transaes-com-jta.html' title='Gerenciamento de Transações com JTA'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3AFYZsJfotY/SRrsKb3MRqI/AAAAAAAADTQ/QqYprpBRTxw/s72-c/tchau.jpeg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-6873960681364008906</id><published>2008-11-07T04:15:00.000-08:00</published><updated>2008-11-07T04:29:59.193-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DESENVOLVIMENTO JAVA'/><title type='text'>DAO Factory Genérico EJB3</title><content type='html'>Pessoal,&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Como dito pelo excelente post do meu amigo Ricardo Ferreira em &lt;a href="http://architecture-journal.blogspot.com/2007/07/enterprise-java-beans-30-anti-patterns.html"&gt;http://architecture-journal.blogspot.com/2007/07/enterprise-java-beans-30-anti-patterns.html&lt;/a&gt; não é uma boa prática termos todos os DAOs controlados pelo EJB apenas para podermos injetar o EntityManager.&lt;br /&gt;&lt;br /&gt;Então fiz um DAOFactory bem genérico que serve muito bem aos meus propósitos, mas que pode ajudar quem quer criar uma factory para EJB3. Para se buscar o DAO, deve-se então injetar o DaoFactory e utilizar o método getDAO passando como argumento a classe persistente a ser utilizada.&lt;br /&gt;&lt;br /&gt;Segue abaixo a classe: &lt;/div&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;@Stateless&lt;br /&gt;@SuppressWarnings("unchecked")&lt;br /&gt;public class DAOFactory implements DaoFactoryLocal {&lt;br /&gt;&lt;br /&gt;   @PersistenceContext(unitName = "BioModel")&lt;br /&gt;   private EntityManager em;&lt;br /&gt;&lt;br /&gt;   private final static String POS_FIXO_DAO = "DAO";&lt;br /&gt;   private final static String PACOTE_ENTIDADE = ".entidade.";&lt;br /&gt;   private final static String PACOTE_DAO = ".dao.";&lt;br /&gt;&lt;br /&gt;   private static String getDAOName(Class classeEntidade) {&lt;br /&gt;       String resultado = classeEntidade.getName().replace(PACOTE_ENTIDADE,&lt;br /&gt;               PACOTE_DAO);&lt;br /&gt;       resultado = resultado.concat(POS_FIXO_DAO);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;       return resultado;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   @Override&lt;br /&gt;   public GenericDAOImpl getDAO(Class classeEntidade) {&lt;br /&gt;&lt;br /&gt;       GenericDAOImpl&lt;entidade&gt; result = null;&lt;br /&gt;&lt;br /&gt;       try {&lt;br /&gt;           result = (GenericDAOImpl) Class.forName(getDAOName(classeEntidade))&lt;br /&gt;                   .newInstance();&lt;br /&gt;           result.setEntityManager(em);&lt;br /&gt;       } catch (InstantiationException e) {&lt;br /&gt;           e.printStackTrace();&lt;br /&gt;       } catch (IllegalAccessException e) {&lt;br /&gt;           e.printStackTrace();&lt;br /&gt;       } catch (ClassNotFoundException e) {&lt;br /&gt;           e.printStackTrace();&lt;br /&gt;       }&lt;/entidade&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;entidade&gt;&lt;br /&gt;       return result;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;}&lt;/entidade&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Segue abaixo um exemplo de sua utilização:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;    @EJB&lt;br /&gt;   private DaoFactoryLocal daoFactory;&lt;br /&gt; &lt;br /&gt;   @SuppressWarnings("unchecked")&lt;br /&gt;   protected GenericDAOImpl&lt;t&gt; getDAO() {&lt;br /&gt;       return daoFactory.getDAO(classePersistente);&lt;/t&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;t&gt;    }&lt;/t&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Qualquer problema me avisem.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3AFYZsJfotY/SRQ0oCLYlxI/AAAAAAAADI8/3lHz8RulhSc/s1600-h/tchau.jpeg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 40px; height: 40px;" src="http://3.bp.blogspot.com/_3AFYZsJfotY/SRQ0oCLYlxI/AAAAAAAADI8/3lHz8RulhSc/s320/tchau.jpeg" alt="" id="BLOGGER_PHOTO_ID_5265891726686983954" border="0" /&gt;&lt;/a&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-6873960681364008906?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/6873960681364008906/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=6873960681364008906' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/6873960681364008906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/6873960681364008906'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/11/dao-factory-genrico-ejb3.html' title='DAO Factory Genérico EJB3'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3AFYZsJfotY/SRQ0oCLYlxI/AAAAAAAADI8/3lHz8RulhSc/s72-c/tchau.jpeg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-7078016564083850829</id><published>2008-11-04T03:37:00.000-08:00</published><updated>2008-11-05T07:17:27.843-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DESENVOLVIMENTO JAVA'/><title type='text'>DAO Genérico com JPA e Hibernate</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Olá pessoal,&lt;br /&gt;&lt;br /&gt;Criei uma estrutura inicial de um DAO Genérico que gostaria de compartilhar com vcs. Ainda não existe todos os métodos que vou precisar, mas vou atualizando aqui a cada mudança no código. Para esta implementação utilizei JPA + Hibernate e para meu caso vem me atendendo bem por enquanto. Segue abaixo a implementação:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;-----------------------------------------------&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Esta classe é responsável por conter as operações genéricas para realização&lt;br /&gt;* do acesso aos dados do sistema.&lt;br /&gt;*&lt;br /&gt;* @author Samuel&lt;br /&gt;*&lt;br /&gt;* @param &lt;t&gt;&lt;br /&gt;*/&lt;br /&gt;@SuppressWarnings("unchecked")&lt;br /&gt;public abstract class GenericDAOImpl&lt;t&gt; {&lt;br /&gt; &lt;br /&gt; private EntityManager entityManager;&lt;br /&gt;&lt;br /&gt; private Class&lt;t&gt; classePersistente;&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * Contrutor que guarda o tipo atual da classe T.&lt;br /&gt;  */&lt;br /&gt; public GenericDAOImpl() {&lt;br /&gt;  this.classePersistente = (Class&lt;t&gt;) ((ParameterizedType) getClass()&lt;br /&gt;    .getGenericSuperclass()).getActualTypeArguments()[0];&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; /**&lt;br /&gt;  * Atualiza o objeto que se encontra em memória.&lt;br /&gt;  *&lt;br /&gt;  * @param object&lt;br /&gt;  *            objeto a ser atualizado&lt;br /&gt;  */&lt;br /&gt; public final void refresh(T object) {&lt;br /&gt;  getEntityManager().refresh(object);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * Executa o flush no entity manager.&lt;br /&gt;  *&lt;br /&gt;  */&lt;br /&gt; public final void flush() {&lt;br /&gt;  getEntityManager().flush();&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; /**&lt;br /&gt;  * Executa o flush no entity manager.&lt;br /&gt;  *&lt;br /&gt;  */&lt;br /&gt; public final void clear() {&lt;br /&gt;  flush();&lt;br /&gt;  getEntityManager().clear();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * Executa o merge do objeto que se encontra em memória.&lt;br /&gt;  *&lt;br /&gt;  * @param objeto&lt;br /&gt;  *            a ser realizado o merge&lt;br /&gt;  * @return objeto que foi executado o merge&lt;br /&gt;  */&lt;br /&gt; public final T merge(T objeto) {&lt;br /&gt;  objeto = getEntityManager().merge(objeto);&lt;br /&gt;  return objeto;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; /**&lt;br /&gt;  * Salva o objeto atual na base de dados.&lt;br /&gt;  *&lt;br /&gt;  * @param objeto&lt;br /&gt;  *            a ser salvo&lt;br /&gt;  */&lt;br /&gt; public final void salvar(T objeto) {&lt;br /&gt;  getEntityManager().persist(objeto);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * Remove o objeto da base de dados.&lt;br /&gt;  *&lt;br /&gt;  * @param objeto&lt;br /&gt;  *            a ser removido&lt;br /&gt;  */&lt;br /&gt; public final void remover(T objeto) {&lt;br /&gt;  getEntityManager().remove(objeto);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * Remove o objeto uma vez passado sua chave como parâmetro.&lt;br /&gt;  *&lt;br /&gt;  * @param chave&lt;br /&gt;  *            identificadora do objeto&lt;br /&gt;  */&lt;br /&gt; public final void removerPorChave(Integer chave) {&lt;br /&gt;  getEntityManager().createQuery(&lt;br /&gt;    "delete from " + getClassePersistente().getName()&lt;br /&gt;      + " where id = " + chave).executeUpdate();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * Busca o objeto uma vez passado sua chave como parâmetro.&lt;br /&gt;  *&lt;br /&gt;  * @param chave&lt;br /&gt;  *            identificador&lt;br /&gt;  * @return Objeto do tipo T&lt;br /&gt;  */&lt;br /&gt; public final T buscarPorChave(Integer chave) {&lt;br /&gt;  T instance = null;&lt;br /&gt;  try {&lt;br /&gt;   instance = getEntityManager().find(getClassePersistente(), chave);&lt;br /&gt;  } catch (RuntimeException re) {&lt;br /&gt;   re.printStackTrace();&lt;br /&gt;  }&lt;br /&gt;  return instance;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * Busca o objeto de acordo com o objeto preenchido com os valores passado&lt;br /&gt;  * como exemplo.&lt;br /&gt;  *&lt;br /&gt;  * @param objeto&lt;br /&gt;  *            utilizado para realizar a busca&lt;br /&gt;  * @param ordenacoes&lt;br /&gt;  *            lista de critérios de ordenação&lt;br /&gt;  * @return Lista de objetos retornada&lt;br /&gt;  */&lt;br /&gt; public final List&lt;t&gt; buscarPorExemplo(T objeto, Order... ordenacoes) {&lt;br /&gt;  Session session = (Session) getEntityManager().getDelegate();&lt;br /&gt;  Example example = criaExemplo(objeto);&lt;br /&gt;  Criteria criteria = session.createCriteria(objeto.getClass()).add(&lt;br /&gt;    example);&lt;br /&gt;  for (int i = 0; i &lt; ordenacoes.length; i++) {&lt;br /&gt;   criteria.addOrder(ordenacoes[i]);&lt;br /&gt;  }&lt;br /&gt;  return (List&lt;t&gt;) criteria.list();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * Busca o objeto de acordo com o objeto preenchido com os valores passado&lt;br /&gt;  * como exemplo.&lt;br /&gt;  *&lt;br /&gt;  * @param objeto&lt;br /&gt;  * @param indiceInicial&lt;br /&gt;  * @param indiceFinal&lt;br /&gt;  * @param ordenacoes&lt;br /&gt;  *            lista de critérios de ordenação.&lt;br /&gt;  * @return Lista de orden&lt;br /&gt;  */&lt;br /&gt; public final List&lt;t&gt; buscarPorExemplo(T objeto, Integer indiceInicial,&lt;br /&gt;   Integer indiceFinal, Order... ordenacoes) {&lt;br /&gt;  Example example = criaExemplo(objeto);&lt;br /&gt;  Criteria criteria = criaCriteria().add(example);&lt;br /&gt;  criteria.setFirstResult(indiceInicial);&lt;br /&gt;  criteria.setMaxResults(indiceFinal);&lt;br /&gt;&lt;br /&gt;  for (int i = 0; i &lt; ordenacoes.length; i++) {&lt;br /&gt;   criteria.addOrder(ordenacoes[i]);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  return (List&lt;t&gt;) criteria.list();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * Retorna a quantidade total de objetos para aquela entidade específica.&lt;br /&gt;  *&lt;br /&gt;  * @return quantidade total de objetos&lt;br /&gt;  */&lt;br /&gt; public final int buscaQuantidadeTotal() {&lt;br /&gt;  Criteria criteria = criaCriteria();&lt;br /&gt;  criteria.setProjection(Projections.rowCount());&lt;br /&gt;  return (Integer) criteria.uniqueResult();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * Busca todos os objetos para aquela entidade específica.&lt;br /&gt;  *&lt;br /&gt;  * @param ordenacoes&lt;br /&gt;  *            lista de ordenações para pesquisa&lt;br /&gt;  * @return lista de todos os objetos da entidade&lt;br /&gt;  */&lt;br /&gt; public List&lt;t&gt; buscarTodos(Order... ordenacoes) {&lt;br /&gt;  List&lt;t&gt; results = null;&lt;br /&gt;  try {&lt;br /&gt;   Query query = getEntityManager().createQuery(&lt;br /&gt;     "from " + getClassePersistente().getName()&lt;br /&gt;       + adicionaOrderByHql(ordenacoes));&lt;br /&gt;   results = query.getResultList();&lt;br /&gt;  } catch (RuntimeException re) {&lt;br /&gt;   re.printStackTrace();&lt;br /&gt;  }&lt;br /&gt;  return results;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  *&lt;br /&gt;  * Busca todos os objetos de uma entidade específica de um índice inicial&lt;br /&gt;  * até um índice final.&lt;br /&gt;  *&lt;br /&gt;  * @param indiceInicial&lt;br /&gt;  *            indice inicial da busca&lt;br /&gt;  * @param indiceFinal&lt;br /&gt;  *            indice final da pesquisa.&lt;br /&gt;  * @param ordenacoes&lt;br /&gt;  *            lista de ordenação a ser criado&lt;br /&gt;  * @return uma lista de objetos do tipo T&lt;br /&gt;  */&lt;br /&gt; public List&lt;t&gt; buscarTodos(Integer indiceInicial,&lt;br /&gt;   Integer indiceFinal, Order... ordenacoes) {&lt;br /&gt;  List&lt;t&gt; results = null;&lt;br /&gt;  try {&lt;br /&gt;   Query query = getEntityManager().createQuery(&lt;br /&gt;     "from " + getClassePersistente().getName()&lt;br /&gt;       + adicionaOrderByHql(ordenacoes));&lt;br /&gt;   query.setFirstResult(indiceInicial);&lt;br /&gt;   query.setMaxResults(indiceFinal);&lt;br /&gt;&lt;br /&gt;   results = (List&lt;t&gt;) query.getResultList();&lt;br /&gt;  } catch (RuntimeException re) {&lt;br /&gt;   re.printStackTrace();&lt;br /&gt;  }&lt;br /&gt;  return results;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * Utilizado para se injetar o Entity manager no DAO.&lt;br /&gt;  *&lt;br /&gt;  * @param entityManager&lt;br /&gt;  *            entity manager&lt;br /&gt;  */&lt;br /&gt; public void setEntityManager(EntityManager entityManager) {&lt;br /&gt;  this.entityManager = entityManager;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * Utilizado para se utilizar o entity manager nos DAOS que herdam do DAO&lt;br /&gt;  * genérico.&lt;br /&gt;  *&lt;br /&gt;  * @return Entity manager.&lt;br /&gt;  */&lt;br /&gt; protected EntityManager getEntityManager() {&lt;br /&gt;  return entityManager;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * Adiciona o orderBy no final da query a ser utilizada.&lt;br /&gt;  *&lt;br /&gt;  * @param ordenacoes&lt;br /&gt;  *            a serem utilizadas para a busca&lt;br /&gt;  * @return string com o orderBy&lt;br /&gt;  */&lt;br /&gt; protected final static String adicionaOrderByHql(Order... ordenacoes) {&lt;br /&gt;  String result = "";&lt;br /&gt;  if (ordenacoes.length &gt; 0) {&lt;br /&gt;   StringBuilder builder = new StringBuilder(" order by ");&lt;br /&gt;   for (int i = 0; i &lt; ordenacoes.length - 1; i++) {&lt;br /&gt;    builder.append(ordenacoes[i].toString());&lt;br /&gt;    builder.append(", ");&lt;br /&gt;   }&lt;br /&gt;   builder.append(ordenacoes[ordenacoes.length - 1]);&lt;br /&gt;   result = builder.toString();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  return result;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * Busca a classe persistente do objeto utilizado na classe.&lt;br /&gt;  *&lt;br /&gt;  * @return classe persistente&lt;br /&gt;  */&lt;br /&gt; protected final Class&lt;t&gt; getClassePersistente() {&lt;br /&gt;  return classePersistente;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * Retorna o objeto da clases Criteria.&lt;br /&gt;  *&lt;br /&gt;  * @return um objeto do tipo Criteria do Hibernate&lt;br /&gt;  */&lt;br /&gt; protected final Criteria criaCriteria() {&lt;br /&gt;  Session session = (Session) getEntityManager().getDelegate();&lt;br /&gt;  return session.createCriteria(getClassePersistente());&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * Método utilizado para criar o objeto Example. Este objeto é utilizado&lt;br /&gt;  * para realizar a busca por exemplo.&lt;br /&gt;  *&lt;br /&gt;  * @param objeto&lt;br /&gt;  *            sobre o qual o Example será criado&lt;br /&gt;  * @return em objeto do tipo Example&lt;br /&gt;  */&lt;br /&gt; protected final Example criaExemplo(T objeto) {&lt;br /&gt;&lt;br /&gt;  Example example = Example.create(objeto);&lt;br /&gt;  example.enableLike(MatchMode.ANYWHERE);&lt;br /&gt;  example.excludeZeroes();&lt;br /&gt;  example.ignoreCase();&lt;br /&gt;&lt;br /&gt;  return example;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;-----------------------------------------------&lt;br /&gt;&lt;br /&gt;Para ilustrar como esta classe é utilizada mostrarei abaixo como extender este DAO genérico:&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;-----------------------------------------------&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;public class PessoaDAO extends GenericDAOImpl&lt;pessoa&gt; {&lt;br /&gt;&lt;br /&gt;    public List&lt;pessoa&gt; buscarTodosTelefoneEndereco(Integer indiceInicial, Integer indiceFinal,&lt;br /&gt;            Order... ordenacoes) {&lt;br /&gt;        List&lt;pessoa&gt; pessoas = super.buscarTodos(indiceInicial, indiceFinal,&lt;br /&gt;                ordenacoes);&lt;br /&gt;&lt;br /&gt;        for (Pessoa pessoa : pessoas) {&lt;br /&gt;            // Carrega os relazionamentos que são LAZY. Este método chama o&lt;br /&gt;            // método initialize do Hibernate.&lt;br /&gt;            pessoa.getTelefones().size();&lt;br /&gt;            pessoa.getEnderecos().size();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        return pessoas;&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    @SuppressWarnings("unchecked")&lt;br /&gt;    public List&lt;pessoa&gt; buscarTodosHQL() {&lt;br /&gt;        Query query = getEntityManager().createNamedQuery("selectAllHQL");&lt;br /&gt;        List &lt;pessoa&gt;pessoas = query.getResultList();&lt;br /&gt;&lt;br /&gt;        return pessoas;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @SuppressWarnings("unchecked")&lt;br /&gt;    public List&lt;pessoa&gt; buscarTodosSQL() {&lt;br /&gt;       &lt;br /&gt;        Query query = getEntityManager().createNamedQuery("selectAllNativo");&lt;br /&gt;        List &lt;pessoa&gt;pessoas = query.getResultList();&lt;br /&gt;&lt;br /&gt;        return pessoas;&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    @SuppressWarnings("unchecked")&lt;br /&gt;    public List&lt;pessoa&gt; buscarTodosComTelefone() {&lt;br /&gt;       &lt;br /&gt;        List&lt;pessoa&gt; resultado = new ArrayList&lt;pessoa&gt;();&lt;br /&gt;        Query query = getEntityManager().createNamedQuery("selectAllNativoTelefone");&lt;br /&gt;&lt;br /&gt;        List resultados = query.getResultList();&lt;br /&gt;        for (Object object : resultados) {&lt;br /&gt;            Object[] arranjo = (Object[]) object;&lt;br /&gt;            Pessoa pessoa = (Pessoa) arranjo[0];&lt;br /&gt;            Telefone telefone = (Telefone) arranjo[1];&lt;br /&gt;            Collection&lt;telefone&gt; telefones = new ArrayList&lt;telefone&gt;();&lt;br /&gt;            telefones.add(telefone);&lt;br /&gt;            pessoa.setTelefones(telefones);&lt;br /&gt;           &lt;br /&gt;            resultado.add(pessoa);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        return resultado;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;-----------------------------------------------&lt;br /&gt;&lt;br /&gt;Em breve postarei como realizo a injeção do Entity Manager utilizando a classe DAOFactory. Qualquer dúvida ou coisa que precisarem me mandem mensagem.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3AFYZsJfotY/SRA64Y0LPpI/AAAAAAAADI0/2v_jqk1fbbs/s1600-h/tchau.jpeg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 31px; height: 31px;" src="http://3.bp.blogspot.com/_3AFYZsJfotY/SRA64Y0LPpI/AAAAAAAADI0/2v_jqk1fbbs/s320/tchau.jpeg" alt="" id="BLOGGER_PHOTO_ID_5264772704804486802" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-7078016564083850829?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/7078016564083850829/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=7078016564083850829' title='5 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/7078016564083850829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/7078016564083850829'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/11/dao-genrico-com-jpa-e-hibernate.html' title='DAO Genérico com JPA e Hibernate'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3AFYZsJfotY/SRA64Y0LPpI/AAAAAAAADI0/2v_jqk1fbbs/s72-c/tchau.jpeg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-5898182647883736242</id><published>2008-11-04T03:19:00.000-08:00</published><updated>2008-11-04T03:37:17.312-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ARQUITETURA DE SISTEMAS'/><title type='text'>Livro de EJB3 interessante</title><content type='html'>&lt;div style="text-align: justify;"&gt;Estou começando um novo projeto e estou na parte das definições de tecnologias a serem utilizadas. Por falta de tempo para poder esperar algum livro em inglês resolvi comprar um livro em português mesmo sobre EJB3. O livro se encontra abaixo:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3AFYZsJfotY/SRAwz97p9cI/AAAAAAAADIk/TnXpDWJdIzU/s1600-h/LIVRO_EJB.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 190px; height: 190px;" src="http://3.bp.blogspot.com/_3AFYZsJfotY/SRAwz97p9cI/AAAAAAAADIk/TnXpDWJdIzU/s320/LIVRO_EJB.jpg" alt="" id="BLOGGER_PHOTO_ID_5264761633752348098" border="0" /&gt;&lt;/a&gt; Enterprise JavaBeans 3.0 (Editora O'Reilly)&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Pra minha surpresa a tradução do livro é muito boa e o livro é excelente. Possui exemplos bem explicados e cobre todos os tópicos de EJB3. As explicações são muito bem escritas e explicam desde o básico ao avançado. O livro em Inglês é muito bem avaliado na amazon e pelo que ví a versão traduzida não deixou muito a desejar.&lt;br /&gt;&lt;br /&gt;Vai aí uma dica para quem quer aprender EJB3 e também não tem tempo para comprar um livro em inglês.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-5898182647883736242?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/5898182647883736242/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=5898182647883736242' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/5898182647883736242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/5898182647883736242'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/11/livro-de-ejb3-interessante.html' title='Livro de EJB3 interessante'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3AFYZsJfotY/SRAwz97p9cI/AAAAAAAADIk/TnXpDWJdIzU/s72-c/LIVRO_EJB.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-5192202693569838297</id><published>2008-10-10T08:00:00.000-07:00</published><updated>2008-10-16T06:54:32.620-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ARQUITETURA DE SISTEMAS'/><title type='text'>Livro de arquitetura interessante</title><content type='html'>&lt;div style="text-align: justify;"&gt;O papel de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;arquiteto&lt;/span&gt; é bem interessante e desafiador e para isto devemos estar munidos de um bom arsenal de livros e sites que nos auxiliem. Queria através deste &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;post&lt;/span&gt; comentar sobre um livro que estou lendo que estou achando bastante interessante.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3AFYZsJfotY/SO9wQy2zWCI/AAAAAAAADHs/b3hnELUFA3Y/s1600-h/LIVRO.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 139px; height: 139px;" src="http://4.bp.blogspot.com/_3AFYZsJfotY/SO9wQy2zWCI/AAAAAAAADHs/b3hnELUFA3Y/s320/LIVRO.jpg" alt="" id="BLOGGER_PHOTO_ID_5255542723996506146" border="0" /&gt;&lt;/a&gt;Software &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Systems&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Architecture&lt;/span&gt;: &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Working&lt;/span&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;With&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;Stakeholders&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;Using&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;Viewpoints&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;and&lt;/span&gt; Perspectives&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;O livro como o próprio nome diz fala a respeito de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;arquitetura&lt;/span&gt; de software e alguns dos tópicos são bem interessantes. Entre eles cito os seguintes:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Como &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;projetar&lt;/span&gt; uma &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;arquitetura&lt;/span&gt; que &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;reflita&lt;/span&gt; os interesses dos &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;stakeholders&lt;/span&gt; (partes interessadas).&lt;/li&gt;&lt;li&gt;Como comunicar que sua &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;arquitetura&lt;/span&gt; atende os requisitos dos diferentes interessados.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Focar em aspectos arquiteturais importantes.&lt;/li&gt;&lt;li&gt;Uso de perspectivas para verificar que sua arquitetura endereça importantes qualidades como escalabilidade, performance e segurança.&lt;/li&gt;&lt;li&gt;Documentar a arquitetura como um conjunto de visões.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Ainda não terminei de ler o livro, mas até o momento ele se mostrou bem interessante. É bem esclarecedor tentar ver a arquitetura com diferentes visões de partes interessadas diferentes. Ele também mostra também alguns exemplos práticos o que torna a leitura mais fácil.&lt;br /&gt;&lt;br /&gt;É isto aí pessoal. Para quem tem interesse no assunto vai aí uma boa dica de livro.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-5192202693569838297?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/5192202693569838297/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=5192202693569838297' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/5192202693569838297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/5192202693569838297'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/10/livro-de-arquitetura-interessante.html' title='Livro de arquitetura interessante'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3AFYZsJfotY/SO9wQy2zWCI/AAAAAAAADHs/b3hnELUFA3Y/s72-c/LIVRO.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-5392296603527975388</id><published>2008-10-06T07:18:00.000-07:00</published><updated>2008-10-16T06:55:40.033-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DESENVOLVIMENTO JAVA'/><title type='text'>JSF versus Struts</title><content type='html'>&lt;p style="text-align: justify;"&gt;O objetivo de ambos os frameworks é facilitar a implementação da lógica da parte de visão e implementar a divisão da lógica de visão e da lógica de negócios. Para comparar as duas tecnologias vamos comparar alguns quesitos importantes. &lt;/p&gt;&lt;p style="text-align: justify;"&gt;Um fator muito importante para arquitetos de software é o risco que se tem em um projeto. E podemos dizer que com relação ao numero de desenvolvedores Struts ganha e muito de JSF. Para tomar a decisão entre usar ou não esta tecnologia é bom conhecer a equipe de desenvolvimento do projeto em questão.&lt;/p&gt;&lt;p style="text-align: justify;"&gt;Outro fator importante é a maturidade do framework. Temos hoje vários sistemas em produção utilizando a tecnologia Struts enquanto temos uma quantidade bem menor de sistemas em produção utilizando JSF. Apesar de JSF ter evoluído bastante nestes últimos anos, temos que Struts ainda possui uma maturidade maior.&lt;/p&gt;&lt;p style="text-align: justify;"&gt;Com relação à evolução do framework JSF ganha de lavada, por se tratar de uma especificação. O Struts original parou na versão 1.3.9 e mudou totalmente de conceito na versão 2.0 em que foi substituído pelo framework WebWork apenas por questões de marketing.&lt;/p&gt;&lt;p style="text-align: justify;"&gt;Outro ponto que JSF ganha de lavada é com relação à maior flexibilidade do controle e o tratamento de eventos. Utilizando JSF não é necessária a extensão das classes Action e nem a utilização de formulários o que simplifica o desenvolvimento por tirar camadas desnecessárias.&lt;br /&gt;Com relação à navegação tanto Struts quanto JSF são bem flexíveis, mas JSF supera devido ao fato das regras de navegação estar desacopladas das ações. Além disto, com JSF é mais fácil ter uma página com várias regras de navegação uma vez que não é necessária a utilização de ifs e elses.&lt;/p&gt;&lt;p style="text-align: justify;"&gt;Com relação à integração e extensibilidade mais pontos para JSF. Struts é neutro neste ponto, possuindo integração com apenas poucos frameworks, enquanto JSF possui integração com vários frameworks.&lt;/p&gt;&lt;p style="text-align: justify;"&gt;Com relação ao desenvolvimento de páginas temos mais ferramentas RAD para o desenvolvimento JSF, uma vez que o framework foi feito se pensando neste ponto. Outro fator a ser considerado é o apoio de grandes empresas. JSF tem tido o apoio de grandes empresas como IBM, Oracle e Red Hat o que torna a adoção ao framework maior, uma vez que dá o aval que o framework irá crescer e evoluir.&lt;/p&gt;&lt;p style="text-align: justify;"&gt;Uma desvantagem de JSF é o fato de ser menos transparente do que Struts. Com JSF existem muito mais coisas acontecendo por trás das cenas do que aplicações feitas em Struts, o que faz com que JSF seja mais difícil de entender e mais difícil de verificar a performance e otimizar.&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;E agora? O que vamos usar para decidir entre as duas tecnologias? Se vamos começar um projeto hoje, devemos considerar vários fatores. Se você não tem muito tempo para realizar a avaliação de frameworks e não tem uma equipe qualificada para a utilização de JSF decida por utilizar o framework Struts. Mas por uma visão estratégica, por ser uma tecnologia que irá evoluir, ter apoio das grandes empresas de mercado e por existirem ferramentas de desenvolvimento rápido eu encorajo a utilização de JSF. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-5392296603527975388?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/5392296603527975388/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=5392296603527975388' title='11 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/5392296603527975388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/5392296603527975388'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/10/jsf-versus-struts.html' title='JSF versus Struts'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-4702540726880231168</id><published>2008-10-05T18:19:00.000-07:00</published><updated>2008-10-16T06:55:24.823-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PROVA DE SELEÇÃO'/><title type='text'>Questões de UML</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight: bold;"&gt;O que é UML?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;UML ou Unified Modeling Language é uma linguagem gráfica para visualizar, especificar e construir e documentar os artefatos de um sistema.Ela permite criar boas práticas para todos os aspectos do sistema antes de efetivamente implementar o sistema.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;O que é modelagem? Quais as vantagens de criar um modelo?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Modelos são simplificações da realidade. Modelagem é uma técnica de engenharia de software que permite a criação de modelos. A vantagem maior de se criar um modelo é poder se especificar a estrutura e os comportamentos do sistema.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;O que são diagramas?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Diagramas são representações gráficas de um conjunto de elementos normalmente composto de objetos e associações.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Quais são os diagramas mais comumente utilizados?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Os diagramas mais comumente utilizados são: Diagramas de Caso de Uso, Diagrama de classes, Diagrama de Objetos, Diagrama de seqüência, Diagrama de estados, Diagrama de Colaboração, Diagrama de Atividades, Diagrama de componentes, Diagrama de Deploy.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;O que são relacionamentos?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Relacionamentos são como ocorre a comunicação entre os diferentes elementos da UML.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Como os diagramas são divididos?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Os diagramas são divididos em diagramas estáticos e dinâmicos.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;O que são mensagens?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Uma mensagem é uma especificação de uma comunicação entre dois elementos da UML. A message is the specification of a communication, when a message is passed that results in action that is in turn an executable statement.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;O que é um caso de uso?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Um caso de uso especifica o comportamento de um sistema ou parte dele. Eles são utilizados para capturar o comportamento que precisa ser desenvolvido. Eles envolvem interação de atores e do sistema.&lt;br /&gt;&lt;br /&gt;É isto aí pessoal. Espero que ajude...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-4702540726880231168?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/4702540726880231168/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=4702540726880231168' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/4702540726880231168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/4702540726880231168'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/10/questes-de-uml.html' title='Questões de UML'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-4399115849279808686</id><published>2008-10-05T17:16:00.000-07:00</published><updated>2008-10-16T06:56:05.245-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PROVA DE SELEÇÃO'/><title type='text'>Questões de Hibernate</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight: bold;"&gt;Como configurar o Hibernate?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Você deve configurar o arquivo hibernate.cfg.xml ou hibernate.properties e os arquivos de mapeamento (*.hbm.xml) que são usados pelo SessionFactory. Utilizando o Hibernate com JPA os arquivos de mapeamento podem ser substituídos por anotações.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;O que é o SessionFactory? Ele é um objeto thread-safe?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;É um objeto responsável por gerenciar a criação de sessions para uma fonte de dados específica. SessionFactory é thread-safe de forma que várias threads podem o acessar simultaneamente requisitando objetos session.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;O que são objetos transientes?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Um objeto é dito transiente quando não tem representação no banco de dados e nem o EntityManager o conhece. Isto significa que alguma alteração no objeto não é refletida na base de dados.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;O que são detached Objects?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Objetos detached são objetos que são persistidos, mas não estão associados a uma sessão do Hibernate. Ou seja, o Entity Manager não o reconhece apesar de ser um objeto que possivelmente possui representação na base de dados.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Como o Hibernate distingue entre objetos transientes e objetos detached?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para distinguir entre objetos transientes e detached o hibernate utiliza a propriedade version do objeto.&lt;br /&gt;&lt;br /&gt;É isto aí pessoal. Se precisarem de outras questões podem mandar email. Espero que ajude...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-4399115849279808686?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/4399115849279808686/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=4399115849279808686' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/4399115849279808686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/4399115849279808686'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/10/questes-de-hibernate.html' title='Questões de Hibernate'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-1434545940372937716</id><published>2008-10-03T13:25:00.000-07:00</published><updated>2008-10-05T16:44:31.051-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DESENVOLVIMENTO JAVA'/><title type='text'>EJB 3 versus Spring</title><content type='html'>&lt;div align="justify"&gt;O objetivo dos frameworks é esconder a complexidade dos desenvolvedores (como, por exemplo, controle de transações, segurança e persistência), facilitar o reúso de código, melhorar a produtividade e conseqüentemente melhorar a qualidade do software. E neste ponto podemos dizer que tanto Spring quanto o EJB 3 cumprem muito bem este objetivo.&lt;br /&gt;&lt;br /&gt;O que podemos dizer então sobre os dois frameworks:&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;div align="justify"&gt;O framework Spring é um framework popular, Open Source e é desenvolvido inicialmente pela empresa Interface21 Inc. Sua arquitetura é baseada principalmente em arquivos de configuração XML. O framework Spring não é um padrão de mercado e não possui apoio de grandes empresas como IBM, Oracle e Sun.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;O framework EJB 3 é um padrão de mercado definido pela JCP e é suportado pelas maiores empresas que utilizam J2EE. Possuem implementações disponíveis pelas empresas Jboss e Oracle. EJB 3 faz forte uso de anotações disponíveis a partir de Java 5. As versões anteriores de EJB se mostraram pouco produtivas e complicadas, o que foi modificado na versão 3 do framework.&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p align="justify"&gt;Uma vantagem que vejo é o fato de EJB 3 ser independente de empresas. Como exemplo disto, temos o fato do Oracle usar o TopLink como implementação da especificação JPA e o JBoss ter como implementação o Hibernate.&lt;/p&gt;&lt;p align="justify"&gt;Por outro lado temos que podemos rodar o Spring em qualquer servidor de aplicação, mas pelo fato do Spring não ser um padrão da indústria estamos travados ao Spring e os serviços fornecidos por ele.&lt;/p&gt;&lt;p align="justify"&gt;Outra vantagem do EJB 3 é o fato de como o framework está fortemente acoplado com o servidor, estes servidores podem melhorar suas performance atuando em conjunto com o framework. A integração entre JTA e JPA com os servidores é bem alta o que faz com que os servidores sejam extremamente otimizados para este tipo de operação com EJB3.&lt;br /&gt;Uma vantagem do Spring seria a facilidade de utilizar a injeção de quaisquer componentes. Com EJB 3 só se possui controle dos componentes que são Beans do EJB e também do contexto de persistência.&lt;/p&gt;&lt;p align="justify"&gt;Com relação a XML ou anotação, temos EJB 3 utilizando preferencialmente anotações e Spring utilizando preferencialmente XML. Isto, podemos dizer que é a gosto do freguês. Particularmente prefira a anotações por ser menos verboso, mais robusto, além de possuir verificação de consistência em tempo de compilação.&lt;/p&gt;&lt;p align="justify"&gt;Como conclusão, temos que ambos, são ótimos frameworks, sendo que cada um deles possui suas vantagens. Particularmente em um projeto novo decidiria pelo EJB 3 devido ao maior suporte das grandes empresas e por ser um padrão.&lt;/p&gt;&lt;p align="justify"&gt;É isto aí pessoal. Espero que isto ajude alguém...&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-1434545940372937716?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/1434545940372937716/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=1434545940372937716' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/1434545940372937716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/1434545940372937716'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/10/ejb-3-versus-spring.html' title='EJB 3 versus Spring'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-6768247804759838455</id><published>2008-09-03T07:23:00.000-07:00</published><updated>2008-09-04T12:34:08.857-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PROVA DE SELEÇÃO'/><title type='text'>Questões de Struts para prova de seleção</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Questões de Struts:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Como configurar o web.xml para utilizar o framework Struts?&lt;/span&gt;&lt;br /&gt;Deve primeiramente configurar a ActionServlet que receberá todas as requisições e depois mapear alguma extensão como .do para o nome mapeado da servlet acima.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Quais são as classes principais do framework Struts?&lt;/span&gt;&lt;br /&gt;As classes principais são:&lt;br /&gt;ActionServlet, ActionForm, Action, ActionMapping, ActionForward e ActionErrors.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;O que são classes Action?&lt;/span&gt;&lt;br /&gt;Classes Action são responsáveis por realizar a adaptação entre a requisição http e a lógica de negócio correspondente. O controle selecionará a cada requisição a Action especifica, criará uma instância se necessário e chamará o método execute.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Uma Action é ou não Thread Safe?&lt;/span&gt;&lt;br /&gt;Não. Apenas uma instancia da Action será utilizada para todas as requisições e por isto ela deve ser feita de uma maneira Thread Safe.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Qual arquivo deve ser alterado para prover suporte ao tiles?&lt;/span&gt;&lt;br /&gt;Para prover suporte ao tiles deve ser alterado o arquivo struts-config para prover suporte a ele e deve ser definido um arquivo chamado tiles-def.xml.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Struts provê suporte ao Validator por default?&lt;/span&gt;&lt;br /&gt;Não. Plugins adicionais devem ser utilizados para prover suporte ao Validate.&lt;br /&gt;&lt;br /&gt;Estas são apenas algumas questões e possíveis respostas. Espero que estas perguntas ajudem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-6768247804759838455?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/6768247804759838455/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=6768247804759838455' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/6768247804759838455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/6768247804759838455'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/09/questes-de-struts-para-prova-de-seleo.html' title='Questões de Struts para prova de seleção'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-5566005820420979406</id><published>2008-09-03T07:13:00.000-07:00</published><updated>2008-09-04T12:33:42.636-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PROVA DE SELEÇÃO'/><title type='text'>Questões de EJB para prova de seleção</title><content type='html'>&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;Questões de EJB:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Quais são os diferentes tipos de Enterprise Beans?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Os tipos de Enterprise Beans são Stateless Session Bean, Stateful Session Beans, Entity Beans e Message Driven Beans.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;O que são Entity Beans?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Entity Beans são utilizados para representar os dados que serão persistidos no banco de dados. Eles provêem uma interface para dados que deveriam normalmente ser acessados utilizando JDBC ou outra API.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Qual a diferença entre Container-Managed Persistent (CMP) Bean e Bean-Managed Persistent (BMP)?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;CMP é mais simples para desenvolver e mais difícil para o servidor EJB suportar, pois toda lógica de sincronização com a base de dados é realizada automaticamente pelo Container. Com CMP o Container é responsável por controlar a persistência de um Entity Bean.&lt;br /&gt;&lt;br /&gt;Com BMP o Enterprise Bean é responsável por controlar o sincronismo do estado do objeto com o banco de dados. BMP permite ao desenvolvedor a flexibilidade de realizar operações que são muito complicadas para o Container ou utilizar um SGBD que não é suportado pelo Container.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;O que é Bean Managed Transaction?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Se o desenvolvedor não deseja que o Container gerencie as transações pode-se programar todas as operações manualmente escrevendo o código JDBC apropriado. Para se utilizar o Bean Managed Transaction todo controle de transação deve ser feito pelo desenvolvedor. Utilizar BMT pode tornar sua implementação incompatível com algumas bases de dados e pode aumentar a quantidade de código a ser escrita.&lt;br /&gt;&lt;br /&gt;É isto pessoal. Se quiserem mais perguntas e respostas sobre EJB me avisem. Em breve posto algumas perguntas e respostas sobre outras tecnologias.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-5566005820420979406?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/5566005820420979406/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=5566005820420979406' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/5566005820420979406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/5566005820420979406'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/09/questes-de-ejb-quais-so-os-diferentes.html' title='Questões de EJB para prova de seleção'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-6728743271614112289</id><published>2008-09-01T11:02:00.000-07:00</published><updated>2009-02-27T12:37:43.972-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CERTIFICAÇÃO'/><title type='text'>Resultado da prova</title><content type='html'>&lt;div style="text-align: justify;"&gt;Olá pessoal,&lt;br /&gt;&lt;br /&gt;Desculpem mais um bom tempo sem postar. Estava fazendo um curso estas últimas semanas sobre JSF e não estava tendo muito tempo. A boa notícia é que fui aprovado na parte 3 da certificação de arquiteto e agora com o fim do curso terei mais tempo de postar no site.&lt;br /&gt;&lt;br /&gt;Como próximo tópico para os posts colocarei algumas perguntas frequentes em provas de arquitetura e desenvolvimento. Todas as perguntas com uma resposta bem resumida. Agradeço muito aqueles que continuam lendo os posts.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-6728743271614112289?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/6728743271614112289/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=6728743271614112289' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/6728743271614112289'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/6728743271614112289'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/09/resultado-da-prova.html' title='Resultado da prova'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-1996982944425462916</id><published>2008-07-03T13:44:00.001-07:00</published><updated>2008-07-03T13:47:17.214-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CERTIFICAÇÃO'/><title type='text'>Certificação SCEA</title><content type='html'>&lt;span style=";font-family:arial;font-size:100%;"  &gt;Olá pessoal,&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;Acabei de fazer hoje a parte 3 da certificação de arquiteto (SCEA). Para fazer pesquisei antes no site do javaranch algumas dicas sobre esta parte da certificação. A que achei mais interessante foi a seguinte:&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;Responda as seguintes perguntas e tome nota. As perguntas estão em Inglês propositalmente, pois a parte 3 deve ser respondida em Inglês. Inclusive é interessante responder estas perguntas durante a parte 2, pois isto te ajuda a verificar se sua solução está completa.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;1) How does your design handle Scalability?&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;2) How does your design handle performance?&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;3) How does your design handle security?&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;4) How does your design handle Reliability?&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;5) How does your design handle Availability?&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;6) How does your design handle Extensibility?&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;7) How does your design handle Manageability?&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;8) How does your design handle Maintainability?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;Para cada uma das perguntas abaixo responda também "Porque você escolheu?".&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;1) How does your design support session/state handling?&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;2) How does your design handle persistence?&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;3) How does your client tier talk to business tier?&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;4) How does your design handle Qos 5 Sec in peak time?&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;5) How does your design handle transactions?&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;6) How does your design handle authentication and authorization?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style=";font-family:arial;font-size:100%;"  &gt;É isto aí pessoal. Espero ter &lt;/span&gt;&lt;span style=";font-family:verdana;font-size:100%;"  &gt;ajudado...&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-1996982944425462916?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/1996982944425462916/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=1996982944425462916' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/1996982944425462916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/1996982944425462916'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/07/certificao-scea_03.html' title='Certificação SCEA'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-551207979606211115</id><published>2008-06-24T07:34:00.000-07:00</published><updated>2008-06-24T10:26:12.840-07:00</updated><title type='text'>Remodelagem no portal</title><content type='html'>Olá pessoal,&lt;br /&gt;&lt;br /&gt;Nestes últimos tempos não tenho escrito muito. Mas tenho uma desculpa boa. Estou trabalhando no portal do arquiteto. Este que foi o pensamento inicial da criação deste blog e agora estou trabalhando nele. Em breve teremos um portal de arquitetura bem bacana.&lt;br /&gt;&lt;br /&gt;Então aguardem pessoal pois em breve me porei uma meta de um post por dia e teremos um portal muito bacana.&lt;br /&gt;&lt;br /&gt;[]s,&lt;br /&gt;&lt;br /&gt;Samuel&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-551207979606211115?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/551207979606211115/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=551207979606211115' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/551207979606211115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/551207979606211115'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/06/remodelagem-no-portal.html' title='Remodelagem no portal'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-1525633102364156903</id><published>2008-06-10T13:38:00.000-07:00</published><updated>2008-12-10T07:14:27.450-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DESENVOLVIMENTO JAVA'/><title type='text'>Eclipse fechando sozinho</title><content type='html'>Olá pessoal,&lt;br /&gt;&lt;br /&gt;Outro problema muito comum com o eclipse é quando ele fecha sozinho. Você está bem desenvolvendo sua aplicação e surpresa e ele  simplesmente fecha. Porque isto acontece? Em grande parte dos casos isto acontece quando acaba a memória reservada para o eclipse simplesmente acaba.&lt;br /&gt;&lt;br /&gt;Quando se esta programando para internet e se utiliza servidores web isto é muito comum. Na hora que se começa o servidor o eclipse inteiro fecha. Para acabar com este problema siga os seguintes passos:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Clique com o botão direito no atalho do eclipse.&lt;/li&gt;&lt;li&gt;Clique em propriedades.&lt;/li&gt;&lt;li&gt;Clique na aba atalho.&lt;/li&gt;&lt;li&gt;Onde está escrito Destino adicione no final o seguinte trecho “-vmargs -Xms256m -Xmx768m”.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Segue uma imagem que demonstra como isto será feito:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3AFYZsJfotY/SE7mRdWgBHI/AAAAAAAADHE/Te8t8PJS-Mc/s1600-h/aumentando_memoria_eclipse.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_3AFYZsJfotY/SE7mRdWgBHI/AAAAAAAADHE/Te8t8PJS-Mc/s320/aumentando_memoria_eclipse.JPG" alt="" id="BLOGGER_PHOTO_ID_5210355006525408370" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;É isto aí pessoal. Qualquer problema podem enviar email...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-1525633102364156903?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/1525633102364156903/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=1525633102364156903' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/1525633102364156903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/1525633102364156903'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/06/ol-pessoal-outro-problema-muito-comum.html' title='Eclipse fechando sozinho'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3AFYZsJfotY/SE7mRdWgBHI/AAAAAAAADHE/Te8t8PJS-Mc/s72-c/aumentando_memoria_eclipse.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-1504138546954692583</id><published>2008-06-10T12:34:00.000-07:00</published><updated>2008-12-10T07:14:27.620-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DESENVOLVIMENTO WEB'/><title type='text'>Aumentando a memória do tomcat no eclipse</title><content type='html'>Olá pessoal,&lt;br /&gt;&lt;br /&gt;Algumas pessoas me perguntaram sobre problemas com falta de memória utilizando o tomcat de dentro do eclipse. Então resolvi escrever este post falando sobre como isto seria feito.&lt;br /&gt;&lt;br /&gt;Primeira coisa a ser verificada: O erro que estou tendo é por falta de memória mesmo? Como eu sei se o erro é por causa disto? Você vai conseguir identificar procurando no console do servidor o seguinte trecho: java.lang.OutOfMemoryError.&lt;br /&gt;&lt;br /&gt;Este tipo de erro ocorre por falta de memória alocada para a JVM do Servidor Web. Se você estiver utilizando algum eclipse com plugins baseados no WTP a solução segue abaixo. Como fazer então para aumentá-la. Siga os seguintes passos:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;No eclipse clique em -&gt; Window -&gt; Preference.&lt;/li&gt;&lt;li&gt;Na caixa de text digite tomcat.&lt;/li&gt;&lt;li&gt;Clique em JDK.&lt;/li&gt;&lt;li&gt;Escolha a JDK que você está utilizando.&lt;/li&gt;&lt;li&gt;Aonde está escrito Optional Java VM Arguments escreva -Xms256m -Xmx768m.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3AFYZsJfotY/SE7XdVUv_RI/AAAAAAAADG0/Kgc4rTOCtxU/s1600-h/jvm_arguments.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_3AFYZsJfotY/SE7XdVUv_RI/AAAAAAAADG0/Kgc4rTOCtxU/s320/jvm_arguments.JPG" alt="" id="BLOGGER_PHOTO_ID_5210338717854596370" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;É isto aí pessoal. Bons estudos...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-1504138546954692583?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/1504138546954692583/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=1504138546954692583' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/1504138546954692583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/1504138546954692583'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/06/aumentando-memria-do-tomcat-no-eclipse.html' title='Aumentando a memória do tomcat no eclipse'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3AFYZsJfotY/SE7XdVUv_RI/AAAAAAAADG0/Kgc4rTOCtxU/s72-c/jvm_arguments.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-155633925045320408</id><published>2008-06-10T12:06:00.000-07:00</published><updated>2008-12-10T07:14:27.787-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DESENVOLVIMENTO JAVA'/><title type='text'>Aumentando a memória do tomcat no eclipse</title><content type='html'>&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CSAMUEL%7E1.DEL%5CCONFIG%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:hyphenationzone&gt;21&lt;/w:HyphenationZone&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;  &lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" latentstylecount="156"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} p 	{mso-margin-top-alt:auto; 	margin-right:0cm; 	mso-margin-bottom-alt:auto; 	margin-left:0cm; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} @page Section1 	{size:595.3pt 841.9pt; 	margin:70.85pt 3.0cm 70.85pt 3.0cm; 	mso-header-margin:35.4pt; 	mso-footer-margin:35.4pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;}  /* List Definitions */  @list l0 	{mso-list-id:446890944; 	mso-list-type:hybrid; 	mso-list-template-ids:566159118 68550671 68550681 68550683 68550671 68550681 68550683 68550671 68550681 68550683;} @list l0:level1 	{mso-level-tab-stop:36.0pt; 	mso-level-number-position:left; 	text-indent:-18.0pt;} ol 	{margin-bottom:0cm;} ul 	{margin-bottom:0cm;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabela normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Times New Roman"; 	mso-ansi-language:#0400; 	mso-fareast-language:#0400; 	mso-bidi-language:#0400;} &lt;/style&gt; &lt;![endif]--&gt;&lt;p style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;span style="background: rgb(230, 230, 230) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;font-family:Arial;font-size:100%;"  &gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;span style="font-size:100%;"&gt;Olá pessoal,&lt;br /&gt;&lt;br /&gt;Algumas pessoas me perguntaram sobre problemas com falta de memória utilizando o tomcat de dentro do eclipse. Então resolvi escrever este post falando sobre como isto seria feito.&lt;br /&gt;&lt;br /&gt;Primeira coisa a ser verificada: O erro que estou tendo é por falta de memória mesmo? Como eu sei se o erro é por causa disto? Você vai conseguir identificar procurando no console do servidor o seguinte trecho: java.lang.OutOfMemoryError.&lt;br /&gt;&lt;br /&gt;Este tipo de erro ocorre por falta de memória alocada para a JVM do Servidor Web. Se você estiver utilizando algum eclipse com plugins baseados no WTP a solução segue abaixo. Como fazer então para aumentá-la. Siga os seguintes passos:&lt;br /&gt;&lt;br /&gt;1. No eclipse clique em -&gt; Window -&gt; Preference.&lt;br /&gt;&lt;br /&gt;2. Na caixa de text digite tomcat.&lt;br /&gt;&lt;br /&gt;3. Clique em JDK.&lt;br /&gt;&lt;br /&gt;4. Escolha a JDK que você está utilizando.&lt;br /&gt;&lt;br /&gt;5. Aonde está escrito Optional Java VM Arguments escreva -Xms256m -Xmx768m.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Segue abaixo a imagem de demonstração:&lt;br /&gt;Segue abaixo a imagem de demonstração:&lt;/span&gt;&lt;br /&gt;&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CSAMUEL%7E1.DEL%5CCONFIG%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:hyphenationzone&gt;21&lt;/w:HyphenationZone&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;  &lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" latentstylecount="156"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} p 	{mso-margin-top-alt:auto; 	margin-right:0cm; 	mso-margin-bottom-alt:auto; 	margin-left:0cm; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} @page Section1 	{size:595.3pt 841.9pt; 	margin:70.85pt 3.0cm 70.85pt 3.0cm; 	mso-header-margin:35.4pt; 	mso-footer-margin:35.4pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;}  /* List Definitions */  @list l0 	{mso-list-id:446890944; 	mso-list-type:hybrid; 	mso-list-template-ids:566159118 68550671 68550681 68550683 68550671 68550681 68550683 68550671 68550681 68550683;} @list l0:level1 	{mso-level-tab-stop:36.0pt; 	mso-level-number-position:left; 	text-indent:-18.0pt;} ol 	{margin-bottom:0cm;} ul 	{margin-bottom:0cm;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabela normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Times New Roman"; 	mso-ansi-language:#0400; 	mso-fareast-language:#0400; 	mso-bidi-language:#0400;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;p style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3AFYZsJfotY/SE7Wjl72y2I/AAAAAAAADGs/3PyPV_mBZoE/s1600-h/jvm_arguments.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_3AFYZsJfotY/SE7Wjl72y2I/AAAAAAAADGs/3PyPV_mBZoE/s320/jvm_arguments.JPG" alt="" id="BLOGGER_PHOTO_ID_5210337725881174882" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;É isto aí pessoal. Qualquer problema me avisem...&lt;br /&gt; &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-155633925045320408?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/155633925045320408/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=155633925045320408' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/155633925045320408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/155633925045320408'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/06/aumentando-memria-do-tomcat-no-eclipse_10.html' title='Aumentando a memória do tomcat no eclipse'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3AFYZsJfotY/SE7Wjl72y2I/AAAAAAAADGs/3PyPV_mBZoE/s72-c/jvm_arguments.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-7059502271830120802</id><published>2008-06-04T15:48:00.000-07:00</published><updated>2009-02-27T12:32:36.550-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CERTIFICAÇÃO'/><title type='text'>Passos para a prova SCWCD</title><content type='html'>&lt;div style="text-align: justify;"&gt;Olá pessoal,&lt;br /&gt;&lt;br /&gt;Depois de um bom tempo sem postar nada agora finalmente voltei. Estes ultimos tempos gastei bastante tempo fazendo a parte 2 da prova de arquiteto. Hoje finalmente consegui um tempo para escrever.&lt;br /&gt;&lt;br /&gt;Para voltar a escrever resolvi voltar a falar sobre a certificação Sun Certified Web Component Developer (SCWCD). Esta é uma certificação que é bem interessante, pois a maior parte dos profissionais conhecem algum framework de desenvolvimento Web, mas grande parte não possui a mínima noção do que está acontecendo por trás.&lt;br /&gt;&lt;br /&gt;Alguns conceitos não se aprendem por experiência apenas e sim somente depois de ler um bom livro.&lt;br /&gt;&lt;br /&gt;Livros que recomendo:&lt;br /&gt;&lt;br /&gt;&lt;span class="postbody"&gt;Livro: Head first Servlets &amp;amp; JSP&lt;/span&gt;&lt;br /&gt;&lt;span class="postbody"&gt;&lt;a href="http://www.amazon.com/Head-First-Servlets-JSP-Developer/dp/0596005407/sr=8-1/qid=1160009779/ref=pd_bbs_1/002-0192800-2332034?ie=UTF8&amp;amp;s=books" target="_blank"&gt;http://www.amazon.com/Head-First-Servlets-JSP-Developer/dp/0596005407/sr=8-1/qid=1160009779/ref=pd_bbs_1/002-0192800-2332034?ie=UTF8&amp;amp;s=books&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sun Certified Web Component Developer Study Guide&lt;br /&gt;&lt;a href="http://www.amazon.com/Certified-Component-Developer-310-081-310-082/dp/0072258810/ref=pd_bbs_3?ie=UTF8&amp;amp;s=books&amp;amp;qid=1213039489&amp;amp;sr=8-3"&gt;http://www.amazon.com/Certified-Component-Developer-310-081-310-082/dp/0072258810/ref=pd_bbs_3?ie=UTF8&amp;amp;s=books&amp;amp;qid=1213039489&amp;amp;sr=8-3&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Aconselho fortemente que vocês busquem esta certificação, pois acho ela bem importante para profissionais da área. Bons estudos...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-7059502271830120802?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/7059502271830120802/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=7059502271830120802' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/7059502271830120802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/7059502271830120802'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/06/passos-para-prova-scwcd.html' title='Passos para a prova SCWCD'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-845839931069791338</id><published>2008-04-08T06:05:00.000-07:00</published><updated>2008-04-08T12:36:33.823-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CERTIFICAÇÃO'/><title type='text'>Passos para a prova SCJP</title><content type='html'>&lt;div style="text-align: justify;"&gt;Esta é a primeira das certificações Java. Na verdade é a segunda depois da criação da SCJA que é uma prova mais global. Como primeiro passo para a certificação, uma vez que vc adquiriu o voucher como explicado em  &lt;a href="http://portalarquiteto.blogspot.com/2008/03/passos-para-realizar-certificaes-sun.html"&gt;http://portalarquiteto.blogspot.com/2008/03&lt;/a&gt; é então se preparar para a prova.&lt;br /&gt;&lt;br /&gt;E esta é a pior parte. Para a preparação então é interessante ler algum livro e também fazer provas sobre o assunto. Como livro aconselho que você dê uma olhada em 2 que são muito interessantes.&lt;br /&gt;&lt;br /&gt;Um é o &lt;b class="sans"&gt;&lt;span id="btAsinTitle"&gt;SCJP Sun Certified Programmer for Java 5 Study Guide &lt;/span&gt;&lt;/b&gt;&lt;span class="sans"&gt;&lt;span id="btAsinTitle"&gt;que é um livro da Katie Sierra mais voltado para a certificação. Existe neste livro várias questões da prova com resposta e também explicação para as respostas. Este não é um livro para explicar passo a passo a linguagem, mas sim para te treinar para a certificação.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="sans"&gt;&lt;span id="btAsinTitle"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="sans"&gt;&lt;span id="btAsinTitle"&gt;Outro livro muito bom também, que foi o que estudei e se chama &lt;/span&gt;&lt;/span&gt;&lt;b class="sans"&gt;&lt;span id="btAsinTitle"&gt;Head First Java, 2nd Edition&lt;/span&gt;&lt;/b&gt;&lt;span class="sans"&gt;&lt;span id="btAsinTitle"&gt;. Ele explica muito melhor sobre a linguagem e sobre sua lógica em sí, mas não explica muito sobre a prova. É uma leitura muito bacana (pelo menos eu achei), mas não é muito voltada para a certificação.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="sans"&gt;&lt;span id="btAsinTitle"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="sans"&gt;&lt;span id="btAsinTitle"&gt;Vale a pena também estudar através de provas e simulados que se encontram nos seguintes sites abaixo:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="sans"&gt;&lt;span id="btAsinTitle"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul style="text-align: justify; font-family: arial;"&gt;&lt;li&gt;&lt;a href="http://www.javaranch.com"&gt;&lt;span style="font-size: 100%;"&gt;&lt;/span&gt;&lt;/a&gt;&lt;a target="_blank"&gt;&lt;span style="color: rgb(0, 0, 0);" lang="PT-BR"&gt;http://www.javaranch.com&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 100%;"&gt;&lt;a href="http://www.danchisholm.net/"&gt;             &lt;/a&gt;&lt;a href="http://www.danchisholm.net/" target="_blank"&gt;&lt;span style="color: rgb(0, 0, 0);" lang="PT-BR"&gt;http://www.danchisholm.net&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 100%;"&gt;             &lt;a href="http://www.michael-thomas.com/tech/java/index.html" target="_blank"&gt;&lt;span style="color: rgb(0, 0, 0);" lang="PT-BR"&gt;http://www.michael-thomas.com/tech/java/index.html&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 100%;"&gt;             &lt;a href="http://www.tipsmart.com/" target="_blank"&gt;&lt;span style="color: rgb(0, 0, 0);" lang="PT-BR"&gt;http://www.tipsmart.com&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: 100%;"&gt;             &lt;a href="http://www.whizlabs.com/" target="_blank"&gt;&lt;span style="color: rgb(0, 0, 0);" lang="PT-BR"&gt;http://www.whizlabs.com&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Existem alguns programas que possuem simulados da mesma maneira, mas realmente nunca comprei, mas sei que são muito bons para quem quiser fazer a prova com mais tranquilidade.&lt;br /&gt;&lt;br /&gt;Para quem for se aventurar a fazer as provas boa sorte e estudem porque não é tão simples como a maioria acha. Vou tentar postar mais posts, mas realmente estas semanas estão muito corridas, pois estou entregando minha monografia da pós.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="sans"&gt;&lt;span id="btAsinTitle"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;b class="sans"&gt;&lt;span id="btAsinTitle"&gt;&lt;/span&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-845839931069791338?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/845839931069791338/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=845839931069791338' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/845839931069791338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/845839931069791338'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/04/passos-para-prova-scjp.html' title='Passos para a prova SCJP'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-2903278155682467707</id><published>2008-03-25T11:27:00.000-07:00</published><updated>2008-12-10T07:14:27.974-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CERTIFICAÇÃO'/><title type='text'>Passos para realizar certificações SUN</title><content type='html'>&lt;div  style="text-align: justify;font-family:arial;"&gt;&lt;span lang="PT-BR"  style="font-size:100%;"&gt;A sequência de passos que vc precisa para qualquer certificação da SUN sã&lt;/span&gt;&lt;span lang="PT-BR"  style="font-size:100%;"&gt;o:&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt; &lt;ol  style="text-align: justify;font-family:arial;"&gt;   &lt;li&gt;&lt;span lang="PT-BR"  style="font-size:100%;"&gt;Se prepare pa&lt;/span&gt;&lt;span lang="PT-BR"  style="font-size:100%;"&gt;ra os exames da maneira que  você achar necessário.&lt;/span&gt;&lt;/li&gt;   &lt;li&gt;&lt;span lang="PT-BR"  style="font-size:100%;"&gt;Contate os Serviços Educacionais Sun para adquirir um voucher de testes ligando para 0800-55-78-63. (Os vouchers demoram algum tempo pra chegar)&lt;/span&gt;&lt;/li&gt;   &lt;li&gt;&lt;span lang="PT-BR"  style="font-size:100%;"&gt;De posse dos vouchers, marque seu teste em um local que                 seja mais conveniente através do site &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://www.prometric.com/" target="_blank"&gt;                     &lt;/a&gt;&lt;a href="http://www.prometric.com/"&gt;&lt;span style="color: rgb(0, 0, 0);" lang="PT-BR"&gt;www.prometric.com&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span lang="PT-BR"  style="font-size:100%;"&gt;.&lt;/span&gt;&lt;/li&gt;   &lt;li&gt;&lt;span lang="PT-BR"  style="font-size:100%;"&gt;Faça o teste no local e data indicada.&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;div  style="text-align: justify;font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt; Como para realizar os testes da Sun não é necessário fazer o treinamento com eles, cada um se prepara da maneira que achar conveniente. Meu conselho pessoal é estudar por algum livro e se possível fazer alguns simulados.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Algumas pessoas também acham melhor comprar o voucher e depois se preparar, pois ele demora um pouco para chegar. Depois de comprar o voucher você tem um ano para utilizá-lo e isto é importante, pois muita gente perde a data.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt; &lt;/div&gt; &lt;p class="MsoNormal"  style="margin: 0cm 0cm 0pt; text-align: justify;font-family:arial;"&gt;         &lt;span lang="PT-BR"  style="font-size:100%;"&gt;             Há também sites que disponibilizam conteudo e provas na web tais como:&lt;/span&gt;&lt;/p&gt; &lt;div  style="text-align: justify;font-family:arial;"&gt;      &lt;span style="font-size:100%;"&gt;&lt;a href="http://www.javaranch.com/"&gt;             &lt;/a&gt;&lt;/span&gt; &lt;/div&gt; &lt;ul  style="text-align: justify;font-family:arial;"&gt;   &lt;li&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://www.javaranch.com/"&gt;&lt;/a&gt;&lt;a target="_blank"&gt;&lt;span style="color: rgb(0, 0, 0);" lang="PT-BR"&gt;http://www.javaranch.com&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://www.danchisholm.net/"&gt;             &lt;/a&gt;&lt;a href="http://www.danchisholm.net/" target="_blank"&gt;&lt;span style="color: rgb(0, 0, 0);" lang="PT-BR"&gt;http://www.danchisholm.net&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;             &lt;a href="http://www.michael-thomas.com/tech/java/index.html" target="_blank"&gt;&lt;span style="color: rgb(0, 0, 0);" lang="PT-BR"&gt;http://www.michael-thomas.com/tech/java/index.html&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;             &lt;a href="http://www.tipsmart.com/" target="_blank"&gt;&lt;span style="color: rgb(0, 0, 0);" lang="PT-BR"&gt;http://www.tipsmart.com&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;             &lt;a href="http://www.whizlabs.com/" target="_blank"&gt;&lt;span style="color: rgb(0, 0, 0);" lang="PT-BR"&gt;http://www.whizlabs.com&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt; &lt;/ul&gt; &lt;div  style="text-align: justify;font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt; A sequência de certificações é:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3AFYZsJfotY/R-lPnVGi34I/AAAAAAAAC5I/Tvozo-DYjLU/s1600-h/certifica.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_3AFYZsJfotY/R-lPnVGi34I/AAAAAAAAC5I/Tvozo-DYjLU/s320/certifica.JPG" alt="" id="BLOGGER_PHOTO_ID_5181760383364554626" border="0" /&gt;&lt;/a&gt;Para as provas SCEA, SCJA e SCJP não existe nenhum pré-requisito. Para o restante é necessário possuir a certificação SCJP que por sinal é a mais procurada.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Vou tentar postar ao longo destas semanas mais detalhes sobre algumas destas certificações.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span lang="PT-BR"  style="font-size:100%;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-2903278155682467707?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/2903278155682467707/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=2903278155682467707' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/2903278155682467707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/2903278155682467707'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/03/passos-para-realizar-certificaes-sun.html' title='Passos para realizar certificações SUN'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3AFYZsJfotY/R-lPnVGi34I/AAAAAAAAC5I/Tvozo-DYjLU/s72-c/certifica.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-6063631379707579124</id><published>2008-03-18T07:30:00.000-07:00</published><updated>2008-03-18T07:46:20.770-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FERRAMENTAS DE TESTE'/><title type='text'>Porque integrar mantis e subversion</title><content type='html'>&lt;p class="MsoNormal" style="text-align: justify;"&gt;Hoje me perguntaram sobre qual o benefício de se integrar o Mantis e o Subversion e então resolvi escrever este post. No ultimo serviço trabalhávamos com o Bugzilla, o SVN e também com o Cruise control. &lt;/p&gt;     &lt;p class="MsoNormal" style="text-align: justify;"&gt;Então a seqüência de passos lá era a seguinte:&lt;/p&gt; &lt;ol style="margin-top: 0cm;" start="1" type="1"&gt; &lt;li class="MsoNormal" style="text-align: justify;"&gt;Desenvolvíamos nossa parte do sistema e subíamos      com nossas alterações para o SVN.&lt;/li&gt;&lt;li class="MsoNormal" style="text-align: justify;"&gt;Então o Cruise control executava a integração de      tudo que todo mundo mexeu.&lt;/li&gt;&lt;li class="MsoNormal" style="text-align: justify;"&gt;Para cada vez que o Cruise control integrava e      executava os testes de unidade com sucesso era gerada uma nova versão no      SVN.&lt;/li&gt;&lt;li class="MsoNormal" style="text-align: justify;"&gt;Então os testadores procuravam os erros nas versões      geradas pelo Cruise Control (e consequentemente também no SVN).&lt;/li&gt;&lt;li class="MsoNormal" style="text-align: justify;"&gt;Se achassem algum erro era cadastrado no Bugzilla      junto com o número da versão do SVN.&lt;/li&gt;&lt;li class="MsoNormal" style="text-align: justify;"&gt;Uma vez encontrado o erro este era corrigido e era colocada      a versão provável em que a correção já estaria corrigida. Neste caso era      mais uma estimativa, porque queríamos evitar que os testadores      verificassem erros corrigidos antes deste ter sido integrado pelo Cruise      Control.&lt;/li&gt; &lt;/ol&gt;     &lt;p class="MsoNormal" style="text-align: justify;"&gt;Esta era a seqüência normal. No nosso caso não existia integração entre o SVN e o Bugzilla e então a gente olhava no Cruise control e colocava na mão o número da versão. Esta versão era importante para depois conseguirmos ver quando o erro ocorreu e também funcionava como uma proteção para os testadores. O pessoal só poderia colocar o erro como inválido se fosse testado na mesma versão em que o erro foi cadastrado. &lt;/p&gt;     &lt;p class="MsoNormal" style="text-align: justify;"&gt;Não utilizei ainda os dois integrados ainda, mas a integração é então importante para que você cadastre o erro para a versão correspondente e para que a ferramenta te auxilie com isto.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-6063631379707579124?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/6063631379707579124/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=6063631379707579124' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/6063631379707579124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/6063631379707579124'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/03/porque-integrar-mantis-e-subversion.html' title='Porque integrar mantis e subversion'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-5215389672870985519</id><published>2008-03-13T14:56:00.001-07:00</published><updated>2008-12-10T07:14:28.376-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ANÁLISE UML'/><title type='text'>Diagrama de objetos</title><content type='html'>&lt;div style="text-align: justify;"&gt;Na prática este é mais um dos diagramas muito pouco utilizados. O &lt;span style=""&gt;diagrama de objetos&lt;/span&gt; é uma variação do diagrama de classes e utiliza quase à mesma notação. O diagrama de objetos é como se fosse o perfil do sistema em certo momento de sua execução. &lt;/div&gt; &lt;p style="text-align: justify;" class="MsoNormal"&gt;Existem apenas duas diferenças entre o diagrama de classes os objetos são escritos com seus nomes sublinhados e todas as instâncias num relacionamento são mostradas. Este diagrama é importante para se ter uma visão do sistema em determinado tempo e para se conferir se os dados estão atribuídos corretamente no tempo e se são consistentes.&lt;/p&gt; &lt;div style="text-align: justify;"&gt;   &lt;/div&gt; &lt;p style="text-align: justify;" class="MsoNormal"&gt;Segue abaixo um exemplo de um diagrama de objetos:&lt;/p&gt; &lt;div style="text-align: justify;"&gt;   &lt;/div&gt; &lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shapetype id="_x0000_t75" coordsize="21600,21600" spt="75" preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"&gt;  &lt;v:stroke joinstyle="miter"&gt;  &lt;v:formulas&gt;   &lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;   &lt;v:f eqn="sum @0 1 0"&gt;   &lt;v:f eqn="sum 0 0 @1"&gt;   &lt;v:f eqn="prod @2 1 2"&gt;   &lt;v:f eqn="prod @3 21600 pixelWidth"&gt;   &lt;v:f eqn="prod @3 21600 pixelHeight"&gt;   &lt;v:f eqn="sum @0 0 1"&gt;   &lt;v:f eqn="prod @6 1 2"&gt;   &lt;v:f eqn="prod @7 21600 pixelWidth"&gt;   &lt;v:f eqn="sum @8 21600 0"&gt;   &lt;v:f eqn="prod @7 21600 pixelHeight"&gt;   &lt;v:f eqn="sum @10 21600 0"&gt;  &lt;/v:formulas&gt;  &lt;v:path extrusionok="f" gradientshapeok="t" connecttype="rect"&gt;  &lt;o:lock ext="edit" aspectratio="t"&gt; &lt;/v:shapetype&gt;&lt;v:shape id="_x0000_i1025" type="#_x0000_t75" style="'width:375.75pt;"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\SAMUEL~2.DEL\CONFIG~1\Temp\msohtml1\01\clip_image001.gif" title="diagramaObjetos"&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3AFYZsJfotY/R9mjFnDxW5I/AAAAAAAAC5A/ANGKN3ThhRQ/s1600-h/diagramaObjetos.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_3AFYZsJfotY/R9mjFnDxW5I/AAAAAAAAC5A/ANGKN3ThhRQ/s320/diagramaObjetos.gif" alt="" id="BLOGGER_PHOTO_ID_5177348563418569618" border="0" /&gt;&lt;/a&gt;&lt;!--[endif]--&gt;&lt;/p&gt; &lt;div style="text-align: justify;"&gt;   &lt;/div&gt; &lt;p style="text-align: justify;" class="MsoNormal"&gt;O exemplo acima mostra um diagrama de objetos para o cliente Michael Richardson e seus dois pedidos na Virtual LTDA. O diagrama pode ser lido da seguinte maneira: O objeto R. Michael Richardson da classe Cliente está associado a ambos os objetos 123456 e 123700 da classe Pedido. Usa-se o diagrama de objetos para modelar a visão estática de um sistema. Ele mostra o retrato do sistema em determinado momento.&lt;/p&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;É isto aí pessoal. Qualquer problema entrem em contato...&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-5215389672870985519?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/5215389672870985519/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=5215389672870985519' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/5215389672870985519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/5215389672870985519'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/03/diagrama-de-objetos.html' title='Diagrama de objetos'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3AFYZsJfotY/R9mjFnDxW5I/AAAAAAAAC5A/ANGKN3ThhRQ/s72-c/diagramaObjetos.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-3133798686279569193</id><published>2008-03-10T12:45:00.001-07:00</published><updated>2008-03-10T12:48:13.892-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ANÁLISE UML'/><title type='text'>Diagrama de robustez</title><content type='html'>&lt;p class="MsoNormal" style="text-align: justify;"&gt;Este é um diagrama que não existe na UML e é geralmente um diagrama de colaboração adaptado e que faz uso dos estereótipos &lt;i style=""&gt;entity&lt;/i&gt;,&lt;i style=""&gt; boundary &lt;/i&gt;e &lt;i style=""&gt;control&lt;/i&gt;. Ele é utilizado em processos como o ICONIX para passar da análise (o que) para o desenho (como).&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;Através da análise de robustez, podemos fazer a verificação de sanidade, isto é, a verificação se o texto do caso de uso está correto e que ele não representa para o sistema que não é razoável ou impossível. &lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;Este é um diagrama que não é necessário ser mantido atualizado uma vez que é utilizado apenas para a transição. Sendo assim, ao criar os diagramas, é perfeitamente plausível usar apenas lápis e papel.&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;A análise de robustez consiste então em ler o texto do caso de uso e identificar de forma preliminar, o conjunto de objetos que irão participar do caso de uso. Em seguida deve-se percorrer cada passo do caso de uso desenhando os atores, as classes de fronteira, os controladores, as entidades e a conexões entre elas.&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;As seguintes regras devem ser obedecidas:&lt;/p&gt;   &lt;ol start="1" type="1"&gt; &lt;li class="MsoNormal" style="text-align: justify;"&gt;Atores      interagem apenas com objetos de fronteira (boundary)&lt;/li&gt;&lt;li class="MsoNormal" style="text-align: justify;"&gt;Objetos      de fronteira podem interagir com atores e controladores.&lt;/li&gt;&lt;li class="MsoNormal" style="text-align: justify;"&gt;Objetos      de entidade interagem apenas com controladores&lt;/li&gt;&lt;li class="MsoNormal" style="text-align: justify;"&gt;Controladores      interagem com qualquer outro tipo de objeto e também com outros      controladores, mas nunca com atores.&lt;/li&gt; &lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-3133798686279569193?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/3133798686279569193/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=3133798686279569193' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/3133798686279569193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/3133798686279569193'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/03/diagrama-de-robustez.html' title='Diagrama de robustez'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-5480860914797480158</id><published>2008-03-05T11:14:00.000-08:00</published><updated>2008-12-10T07:14:28.542-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ANÁLISE UML'/><title type='text'>Diagrama de componentes</title><content type='html'>&lt;span style=""&gt;O Diagrama de componentes&lt;/span&gt; da UML ilustra como as classes deverão se encontrar organizadas através da noção de componentes de trabalho. O diagrama tem por objetivo apresentar a disposição dos componentes físicos de um sistema. &lt;p style="text-align: justify;"&gt;O principal objetivo deste diagrama segundo Scott Ambler, é possibilitar a construção de artefatos para o perfil de arquitetura da solução, seja para a arquitetura técnica ou a de negócios.&lt;/p&gt;   &lt;p style="text-align: justify;"&gt;O diagrama é composto normalmente por componentes, interfaces e portas. Os componentes são representados pelo estereótipo da uml &lt;&lt;component&gt;&gt; ou um retângulo vertical de duas hastes. Interfaces são representadas através de uma linha com um círculo ou semicírculo ligado ao componente. Portas são representados através de retângulos saindo dos componentes.&lt;/component&gt;&lt;/p&gt;   &lt;p style="text-align: justify;"&gt;Normalmente é utilizado para:&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;ul type="disc"&gt; &lt;li class="MsoNormal" style="text-align: justify;"&gt;Modelar      os componentes do código-fonte, do código executável do software.&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="text-align: justify;"&gt;Destacar      a função de cada módulo para facilitar a sua reutilização.&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="text-align: justify;"&gt;Auxiliar      no processo de engenharia reversa, por meio da organização dos módulos do      sistema e seus relacionamentos.&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3AFYZsJfotY/R87xPlv9fgI/AAAAAAAAC44/fzRXjCAAKgo/s1600-h/diagrama+de+componentes.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_3AFYZsJfotY/R87xPlv9fgI/AAAAAAAAC44/fzRXjCAAKgo/s320/diagrama+de+componentes.gif" alt="" id="BLOGGER_PHOTO_ID_5174338272028884482" border="0" /&gt;&lt;/a&gt; &lt;ul type="disc"&gt;   &lt;/ul&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;Retirado de &lt;a href="http://www.rnp.br/newsgen/0107/imagens/dynavideo2.gif"&gt;http://www.rnp.br&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-5480860914797480158?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/5480860914797480158/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=5480860914797480158' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/5480860914797480158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/5480860914797480158'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/03/diagrama-de-componentes.html' title='Diagrama de componentes'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3AFYZsJfotY/R87xPlv9fgI/AAAAAAAAC44/fzRXjCAAKgo/s72-c/diagrama+de+componentes.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-7501090407966400573</id><published>2008-03-04T11:46:00.000-08:00</published><updated>2008-12-10T07:14:28.914-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ANÁLISE UML'/><title type='text'>Diagrama de máquina de estados</title><content type='html'>&lt;p class="MsoNormal" style="text-align: justify;"&gt;O diagrama de máquina de estados era conhecido nas versões anteriores como diagrama de gráfico ou simplesmente como diagrama de estados, tendo então mudado para este novo nome após a versão 2.0. Este diagrama procura acompanhar as mudanças sofridas nos estados de uma instância de uma classe ao longo da execução de um caso de uso, subsistema ou mesmo sistema. &lt;/p&gt;     &lt;p class="MsoNormal" style="text-align: justify;"&gt;O Diagrama de máquina de estados muitas vezes se baseia no caso de uso e se apóia no Diagrama de Classes. &lt;/p&gt;  &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3AFYZsJfotY/R82nZ1v9ffI/AAAAAAAAC4w/tDp2RUUSk4A/s1600-h/diagrama+de+m%C3%A1quinas+de+estado.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_3AFYZsJfotY/R82nZ1v9ffI/AAAAAAAAC4w/tDp2RUUSk4A/s320/diagrama+de+m%C3%A1quinas+de+estado.gif" alt="" id="BLOGGER_PHOTO_ID_5173975609285377522" border="0" /&gt;&lt;/a&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="font-size: 10pt;"&gt;Retirado de http://www.comp.ita.br/~olany/State_Diag2.jpg&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;     &lt;p class="MsoNormal" style="text-align: justify;"&gt;O diagrama acima mostra um diagrama de máquinas de estado. Este diagrama mostra como ocorrem as alterações nos estados de um objeto após terem sido realizados ações sobre este.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-7501090407966400573?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/7501090407966400573/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=7501090407966400573' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/7501090407966400573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/7501090407966400573'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/03/diagrama-de-mquina-de-estados.html' title='Diagrama de máquina de estados'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3AFYZsJfotY/R82nZ1v9ffI/AAAAAAAAC4w/tDp2RUUSk4A/s72-c/diagrama+de+m%C3%A1quinas+de+estado.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-2918466824644534751</id><published>2008-03-04T10:51:00.000-08:00</published><updated>2008-12-10T07:14:29.090-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ANÁLISE UML'/><title type='text'>Diagrama de Comunicação</title><content type='html'>O diagrama de comunicação é o antigo diagrama de colaboração até a versão 1.5 da UML, tendo modificado seu nome a partir da versão 2.0. Este é um diagrama bem parecido com o diagrama de seqüência, mas não possui seu aspecto temporal.&lt;o:p&gt; &lt;/o:p&gt;    &lt;p class="MsoNormal" style="text-align: justify;"&gt;Ele normalmente é utilizado como complemento do diagrama de seqüência, porem possui um enfoque diferente, concentrando-se em como os objetos estão vinculados através de mensagens. Pode ser gerado a partir do diagrama de seqüências por representar os mesmos dados. Outra característica do diagrama de comunicação é que as mensagens possuem numeração para designar seqüência.&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:12;"  &gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-family:times new roman;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;  &lt;/p&gt; &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3AFYZsJfotY/R82allv9feI/AAAAAAAAC4o/DPuLkAheOkA/s1600-h/diagrama+de+comunica%C3%A7%C3%A3o.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_3AFYZsJfotY/R82allv9feI/AAAAAAAAC4o/DPuLkAheOkA/s320/diagrama+de+comunica%C3%A7%C3%A3o.gif" alt="" id="BLOGGER_PHOTO_ID_5173961517497679330" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;span style="font-size: 10pt;"&gt;Figura retirada de &lt;a href="http://www.novatec.com.br/livros/uml2/capitulo9788575221457.pdf"&gt;http://www.novatec.com.br&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="text-align: justify;"&gt;Nesta figura é mostrado o diagrama de comunicação do caso de uso realizar submissão. É mostrado as mensagens trocadas entre o Submissor, a página do congresso, o controlador do congresso, o tema e a Submissão.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-2918466824644534751?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/2918466824644534751/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=2918466824644534751' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/2918466824644534751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/2918466824644534751'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/03/diagrama-de-comunicao.html' title='Diagrama de Comunicação'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3AFYZsJfotY/R82allv9feI/AAAAAAAAC4o/DPuLkAheOkA/s72-c/diagrama+de+comunica%C3%A7%C3%A3o.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-961974637559711003</id><published>2008-03-03T06:02:00.000-08:00</published><updated>2008-12-10T07:14:29.384-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ANÁLISE UML'/><title type='text'>Diagrama de estrutura composta</title><content type='html'>&lt;p class="MsoNormal" style="text-align: justify;"&gt;Olá pessoal,&lt;/p&gt;     &lt;p class="MsoNormal" style="text-align: justify;"&gt;Quis hoje começar a debater sobre alguns diagramas da uml 2.0 que são pouco utilizados. O primeiro da lista de diagramas pouco utilizados é o diagrama de estrutura composta.&lt;/p&gt;     &lt;p class="MsoNormal" style="text-align: justify;"&gt;O diagrama de estrutura composta é utilizado para modelar colaborações. Uma colaboração descreve uma visão de um conjunto de entidades cooperativas interpretadas por instâncias que cooperam entre si para executar uma função específica.&lt;/p&gt;      &lt;p class="MsoNormal" style="text-align: justify;"&gt;Então podemos dizer que o diagrama de estrutura composta reflete a colaboração interna das classes para descrever a funcionalidade. São bem similares aos diagramas de classes, exceto pelo fato de que eles modelam um uso específico da estrutura.&lt;br /&gt;&lt;/p&gt;     &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3AFYZsJfotY/R8wFcag3NDI/AAAAAAAAC4g/4dg_6E3VJKc/s1600-h/diagrama_composto.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_3AFYZsJfotY/R8wFcag3NDI/AAAAAAAAC4g/4dg_6E3VJKc/s320/diagrama_composto.gif" alt="" id="BLOGGER_PHOTO_ID_5173516057653490738" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:10;"&gt;&lt;span style="font-size:85%;"&gt;Retirado de &lt;a href="http://www.novatec.com.br/livros/uml2/capitulo9788575221457.pdf"&gt;http://www.novatec.com.br&lt;/a&gt;&lt;/span&gt;&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;O termo estrutura se refere à composição dos elementos estruturais interconectados de forma a atingir algum objetivo comum. O exemplo acima mostra como as instâncias das classes autor, submissão, tema e tipo colaboram entre si para submeter à submissão. As colaborações podem também possuir multiplicidade, se as regras seguidas pelas classes utilizarem múltiplas instâncias.&lt;br /&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="text-align: justify;"&gt;Este é um diagrama que não é muito utilizado na UML e provavelmente é mais um diagrama teórico do que um diagrama utilizado nos processos de desenvolvimento.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-961974637559711003?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/961974637559711003/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=961974637559711003' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/961974637559711003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/961974637559711003'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/03/diagrama-de-estrutura-composta.html' title='Diagrama de estrutura composta'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3AFYZsJfotY/R8wFcag3NDI/AAAAAAAAC4g/4dg_6E3VJKc/s72-c/diagrama_composto.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-2341365681298406513</id><published>2008-02-26T06:04:00.000-08:00</published><updated>2008-12-10T07:14:29.676-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FERRAMENTAS DE TESTE'/><title type='text'>Ferramenta de integração contínua</title><content type='html'>Integração contínua consiste em integrar o trabalho diversas vezes ao dia, assegurando que a base de código permaneça consistente ao final de cada integração. &lt;p class="MsoNormal"&gt;A este mesmo procedimento de construção podem ser adicionadas rotinas como:&lt;/p&gt;   &lt;ul type="disc"&gt; &lt;li class="MsoNormal" style=""&gt;Execução de testes      automatizados&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Geração de versões      internacionalizadas de seu software&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Disponibilizar a versão      atual em desenvolvimento para o cliente&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Criação de relatórios de      código como:&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Cobertura de testes&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Inspeção de padrões de codificação&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Estatísticas de acoplamento&lt;/li&gt; &lt;/ul&gt;   &lt;p class="MsoNormal" style=""&gt;Todo o processo segue a arquitetura descrita na imagem abaixo:&lt;/p&gt;  &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3AFYZsJfotY/R8QdVP2v12I/AAAAAAAAC4Y/q8OYCdkKk5U/s1600-h/imagem.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_3AFYZsJfotY/R8QdVP2v12I/AAAAAAAAC4Y/q8OYCdkKk5U/s320/imagem.gif" alt="" id="BLOGGER_PHOTO_ID_5171290522998789986" border="0" /&gt;&lt;/a&gt;  &lt;p class="MsoNormal"&gt;O cenário acima pode ser descrito como: (Fonte: Continuous Integration)&lt;/p&gt;   &lt;ol start="1" type="1"&gt; &lt;li class="MsoNormal" style=""&gt;O desenvolvedor envia o      código para o controle de versão (SVN, CVS, etc). &lt;a name="8574060534"&gt;Enquanto      isso&lt;/a&gt; a máquina de integração (servidor de Integração Contínua) está      verificando o repositório buscando por modificações&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Logo após um commit ser efetuado, o servidor ao verificar que alguma mudança ocorreu no repositório inicia o processo de build baixando os arquivos do Servidor de Controle de Versão. Assim, o script de build é executado, testes são realizados, relatórios gerados, e todo o projeto é integrado.&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;O Servidor de Integração envia por e-mail ou outros dispositivos o feedback sobre build para usuários específicos do projeto&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;O servidor volta ao estado      de Poll buscando por mudanças no repositório&lt;/li&gt; &lt;/ol&gt;   &lt;p class="MsoNormal" style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style=""&gt;Com relação a ferramentas a serem utilizadas e a comparação entre elas temos 3 que se destacaram. Entre elas temos as ferramentas cruise-control, continuum e hudson.&lt;/p&gt;    &lt;p class="MsoNormal"&gt;Minha escolha pessoal é a utilização do Hudson. Entre as funcionalidades que mais me agradam estão:&lt;/p&gt;     &lt;ul style="margin-top: 0cm;" type="disc"&gt; &lt;li class="MsoNormal" style=""&gt;Permite      a configuração de novos jobs através de interface web.&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Permite      a realização de builds distribuídos.&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;É um      projeto mais ativo com mais desenvolvedores.&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Possui      plugin para o eclipse.&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Possui      instalador do windows.&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Utilização      por parte de grandes projetos.&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Integração      com o Maven, SVN, CVS e com outras ferramentas.&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Facilidade      maior para configuração do que as outras ferramentas.&lt;/li&gt; &lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-2341365681298406513?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/2341365681298406513/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=2341365681298406513' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/2341365681298406513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/2341365681298406513'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/02/ferramenta-de-integrao-contnua.html' title='Ferramenta de integração contínua'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3AFYZsJfotY/R8QdVP2v12I/AAAAAAAAC4Y/q8OYCdkKk5U/s72-c/imagem.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-4924082776885275941</id><published>2008-02-20T13:04:00.000-08:00</published><updated>2008-03-12T07:35:40.619-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FERRAMENTAS DE TESTE'/><title type='text'>Controle de versão</title><content type='html'>&lt;p class="MsoNormal" style="text-align: justify;"&gt;A cada dia sistemas de versão concorrente vem sendo utilizados para os mais diversos fins. No passado era realidade apenas em grandes ambientes de desenvolvimento paralelo, onde literalmente dezenas de desenvolvedores demandavam acesso simultâneo aos mesmos arquivos, e ter um sistema de versão concorrente era imperativo para garantir adequadamente um ambiente de trabalho concorrente, e principalmente, garantir segurança desses dados, de forma que se um desenvolvedor interferisse negativamente no trabalho de outro, as mudanças em questão pudessem ser facilmente revertidas ao estado anterior.&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;Então o controle de versões é visto como uma extensão natural do processo de desenvolvimento, permitindo que se possa paralelizar o desenvolvimento de forma coerente e padronizada.&lt;/p&gt;   &lt;p style="text-align: justify;"&gt;Hoje existem dezenas de opções de sistemas de versionamento de projetos, esses sistemas são conhecidos com SCM ou apenas VCS (Version Control System). Alguns sistemas VCS comerciais, mais conhecidos são: &lt;/p&gt;   &lt;ul type="disc"&gt; &lt;li class="MsoNormal" style="text-align: justify;"&gt;&lt;strong&gt;&lt;span style="font-weight: normal;"&gt;Clear Case&lt;/span&gt;&lt;/strong&gt;&lt;b style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="text-align: justify;"&gt;&lt;strong&gt;&lt;span style="font-weight: normal;"&gt;Microsoft Team      Foundation&lt;/span&gt;&lt;/strong&gt;&lt;b style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/li&gt; &lt;/ul&gt;   &lt;p style="text-align: justify;"&gt;E alguns sistemas de controle de versão livre, mais conhecidos são: &lt;/p&gt;   &lt;ul type="disc"&gt; &lt;li class="MsoNormal" style="text-align: justify;"&gt;&lt;strong&gt;&lt;span style="font-weight: normal;"&gt;CVS&lt;/span&gt;&lt;/strong&gt;&lt;b style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="text-align: justify;"&gt;&lt;strong&gt;&lt;span style="font-weight: normal;"&gt;Subversion&lt;/span&gt;&lt;/strong&gt;&lt;b style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="text-align: justify;"&gt;&lt;strong&gt;&lt;span style="font-weight: normal;"&gt;GIT&lt;/span&gt;&lt;/strong&gt;&lt;b style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/li&gt; &lt;/ul&gt;   &lt;p style="text-align: justify;"&gt;Outros sistemas menos conhecidos:&lt;/p&gt;   &lt;ul type="disc"&gt; &lt;li class="MsoNormal" style="text-align: justify;"&gt;&lt;strong&gt;&lt;span style="font-weight: normal;"&gt;Visual Source Safe&lt;/span&gt;&lt;/strong&gt;&lt;b style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="text-align: justify;"&gt;&lt;strong&gt;&lt;span style="font-weight: normal;"&gt;PVCS&lt;/span&gt;&lt;/strong&gt;&lt;b style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="text-align: justify;"&gt;&lt;strong&gt;&lt;span style="font-weight: normal;"&gt;SVK&lt;/span&gt;&lt;/strong&gt;&lt;b style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="text-align: justify;"&gt;&lt;strong&gt;&lt;span style="font-weight: normal;"&gt;HG&lt;/span&gt;&lt;/strong&gt;&lt;b style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="text-align: justify;"&gt;&lt;strong&gt;&lt;span style="font-weight: normal;"&gt;BZR&lt;/span&gt;&lt;/strong&gt;&lt;b style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/li&gt;&lt;li class="MsoNormal" style="text-align: justify;"&gt;&lt;strong&gt;&lt;span style="font-weight: normal;"&gt;Perforce&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt; &lt;/ul&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;Temos como preferência utilizar sistemas open source e pelo conhecimento do CVS e do Subversion iremos basear os estudos e comparações nos dois sistemas.&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;O sistema aberto mais conhecido é o CVS, exatamente por existir a mais tempo, e ser a primeira implementação livre com um número de recursos que o tornasse viável a ser utilizado em todo tipo de ambiente, de qualquer porte, de projetos pequenos a gigantescos. O CVS é a opção de escolha mais comum, entre livres e comerciais. Ao menos por enquanto.&lt;/p&gt;Subversion é uma ferramenta open-source de controle de versão (veja o tutorial sobre controle de versão de software para mais informações). Segue a licença de software livre nos moldes da licença Apache/BSD.&lt;br /&gt;&lt;br /&gt;O projeto do Subversion iniciou em 2000 com a idéia de se construir um CVS melhor, isto é, mantendo o mesmo modelo de trabalho, mas consertando as falhas e limitações que o CVS apresenta. Desde então, vem atraindo uma comunidade cada vez maior de colaboradores e usuários.&lt;br /&gt;&lt;br /&gt;O Subversion tem a maior parte das funcionalidades do CVS. De modo geral, a interface do Subversion segue à do CVS. Isto facilita a transição dos usuários do CVS para o Subversion.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Controle de Diretórios, Renomeações e Meta-Dados&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Esta era uma das maiores reclamações sobre o CVS. Subversion não só controla a versão do conteúdo dos arquivos, mas também de diretórios, cópias, renomeações e meta-dados.&lt;p class="MsoNormal"&gt;&lt;b style=""&gt;Operações Atômicas de &lt;em&gt;commit&lt;o:p&gt;&lt;/o:p&gt;&lt;/em&gt;&lt;/b&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;i&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;Um conjunto de modificações a serem realizadas num &lt;em&gt;commit&lt;/em&gt; é aceito como um todo ou nenhuma alteração é feita. Não há a possibilidade que apenas uma parte das alterações seja aceita quando enviadas ao repositório tal como acontecia no CVS. Além disso, os números de revisão estão atrelados a cada operação de &lt;em&gt;commit&lt;/em&gt; e não aos arquivos.&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;a name="_Toc191266912"&gt;Opções de Acesso à Rede&lt;/a&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;Subversion foi projetado para uma camada abstrata de acesso ao repositório, o que permite a implementação de novos mecanismos de rede. Um dos mecanismos existentes usa o protocolo WebDAV/DeltaV baseado em HTTP através do Apache &lt;st1:metricconverter productid="2. A" st="on"&gt;2. A&lt;/st1:metricconverter&gt; outra opção é o servidor dedicado &lt;strong&gt;svnserve&lt;/strong&gt; como opção ao Apache, e que pode ser combinado ao ssh.&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;a name="_Toc191266913"&gt;&lt;b style=""&gt;Arquivos Binários e de Texto Tratados Consistentemente&lt;/b&gt;&lt;/a&gt;&lt;b style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;Outro grande problema bastante conhecido é que o CVS que não funciona tão bem com arquivos binários. Por outro lado, o Subversion usa um algoritmo de diferenciação binário que funciona de modo idêntico tanto para arquivos texto (legíveis por humanos) quanto para arquivos binários (ilegíveis para humanos).&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;a name="_Toc191266914"&gt;&lt;b style=""&gt;Ramificações e Rotulações &lt;/b&gt;&lt;/a&gt;&lt;st1:personname productid="em Tempo Constante" st="on"&gt;&lt;span style=""&gt;&lt;b style=""&gt;em Tempo Constante&lt;/b&gt;&lt;/span&gt;&lt;/st1:personname&gt;&lt;b style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;O tempo das operações de ramificação (branching) e rotulação (tagging) é constante, e não depende do tamanho do projeto no repositório. Esse resultado é obtido através da forma de implementação do Subversion para essas operações, que é feita como uma operação de cópia que resulta em links, ocupando pouco espaço e um intervalo de tempo constante.&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;a name="_Toc191266915"&gt;&lt;b style=""&gt;Uso mais Eficiente da Rede&lt;/b&gt;&lt;/a&gt;&lt;b style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;O protocolo de rede usa a largura de banda eficientemente enviando as diferenças entre cliente/servidor e servidor/cliente sempre que possível, ao contrário do CVS que envia as diferenças do servidor ao cliente, mas não do cliente ao servidor.&lt;br /&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="text-align: justify;"&gt;A seguir, é apresentado um pequeno quadro comparativo entre o CVS e o Subversion (SVN). Ressaltamos que este quadro não representa uma comparação completa.&lt;br /&gt;&lt;/p&gt; &lt;table class="MsoNormalTable" style="border: medium none ; width: 89.88%; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0" width="89%"&gt;   &lt;tbody&gt;&lt;tr style="height: 18.75pt;"&gt;   &lt;td style="border-style: solid solid none; padding: 0cm 3pt; background: rgb(61, 75, 123) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; height: 18.75pt;"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 18pt;" align="center"&gt;&lt;b&gt;&lt;span style="color:white;"&gt;Funcionalidade&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid none none; padding: 0cm 3pt; background: rgb(61, 75, 123) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; width: 14.8%; height: 18.75pt;" width="14%"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 18pt;" align="center"&gt;&lt;b&gt;&lt;span style="color:white;"&gt;CVS&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid none none; padding: 0cm 3pt; background: rgb(61, 75, 123) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; width: 10.98%; height: 18.75pt;" width="10%"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; text-align: center; line-height: 18pt;" align="center"&gt;&lt;b&gt;&lt;span style="color:white;"&gt;SVN&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 19.3pt;"&gt;   &lt;td style="border-style: none solid solid; padding: 12pt; background: rgb(249, 249, 242) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; height: 19.3pt;"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; line-height: 18pt;"&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;Commit Atômico&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 12pt; background: rgb(249, 249, 242) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; width: 14.8%; height: 19.3pt;" width="14%"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; line-height: 18pt;"&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;&lt;o:p&gt;     X&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 12pt; background: rgb(249, 249, 242) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; width: 10.98%; height: 19.3pt;" width="10%"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; line-height: 18pt;"&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shapetype id="_x0000_t75" coordsize="21600,21600" spt="75" preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"&gt;    &lt;v:stroke joinstyle="miter"&gt;    &lt;v:formulas&gt;     &lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;     &lt;v:f eqn="sum @0 1 0"&gt;     &lt;v:f eqn="sum 0 0 @1"&gt;     &lt;v:f eqn="prod @2 1 2"&gt;     &lt;v:f eqn="prod @3 21600 pixelWidth"&gt;     &lt;v:f eqn="prod @3 21600 pixelHeight"&gt;     &lt;v:f eqn="sum @0 0 1"&gt;     &lt;v:f eqn="prod @6 1 2"&gt;     &lt;v:f eqn="prod @7 21600 pixelWidth"&gt;     &lt;v:f eqn="sum @8 21600 0"&gt;     &lt;v:f eqn="prod @7 21600 pixelHeight"&gt;     &lt;v:f eqn="sum @10 21600 0"&gt;    &lt;/v:formulas&gt;    &lt;v:path extrusionok="f" gradientshapeok="t" connecttype="rect"&gt;    &lt;o:lock ext="edit" aspectratio="t"&gt;   &lt;/v:shapetype&gt;&lt;v:shape id="_x0000_i1025" type="#_x0000_t75" alt="sim" style="'width:12pt;height:12pt'"&gt;    &lt;v:imagedata src="file:///C:\DOCUME~1\SAMUEL~2.DEL\CONFIG~1\Temp\msohtml1\01\clip_image001.gif" href="http://www.pronus.eng.br/images/check.gif"&gt;   &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;  V&lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 16.65pt;"&gt;   &lt;td style="border-style: none solid solid; padding: 12pt; background: rgb(249, 249, 242) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; height: 16.65pt;"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; line-height: 18pt;"&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;Renomeações e cópias de arquivos e diretórios&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 12pt; background: rgb(249, 249, 242) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; width: 14.8%; height: 16.65pt;" width="14%"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; line-height: 18pt;"&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;&lt;o:p&gt;      X&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 12pt; background: rgb(249, 249, 242) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; width: 10.98%; height: 16.65pt;" width="10%"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; line-height: 18pt;"&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1026" type="#_x0000_t75" alt="sim" style="'width:12pt;height:12pt'"&gt;    &lt;v:imagedata src="file:///C:\DOCUME~1\SAMUEL~2.DEL\CONFIG~1\Temp\msohtml1\01\clip_image001.gif" href="http://www.pronus.eng.br/images/check.gif"&gt;   &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;  V&lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; padding: 12pt; background: rgb(249, 249, 242) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; line-height: 18pt;"&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;Rastreamento de Fusões (Merge)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 12pt; background: rgb(249, 249, 242) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; width: 14.8%;" width="14%"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; line-height: 18pt;"&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1027" type="#_x0000_t75" alt="parcialmente" style="'width:12pt;height:12pt'"&gt;    &lt;v:imagedata src="file:///C:\DOCUME~1\SAMUEL~2.DEL\CONFIG~1\Temp\msohtml1\01\clip_image002.gif" href="http://www.pronus.eng.br/images/warning.gif"&gt;   &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;     P&lt;br /&gt;&lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 12pt; background: rgb(249, 249, 242) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; width: 10.98%;" width="10%"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; line-height: 18pt;"&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1028" type="#_x0000_t75" alt="parcialmente" style="'width:12pt;height:12pt'"&gt;    &lt;v:imagedata src="file:///C:\DOCUME~1\SAMUEL~2.DEL\CONFIG~1\Temp\msohtml1\01\clip_image002.gif" href="http://www.pronus.eng.br/images/warning.gif"&gt;   &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;!--[endif]--&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1029" type="#_x0000_t75" alt="Previsão de implementação futura" style="'width:12pt;height:12pt'"&gt;    &lt;v:imagedata src="file:///C:\DOCUME~1\SAMUEL~2.DEL\CONFIG~1\Temp\msohtml1\01\clip_image003.gif" href="http://www.pronus.eng.br/images/information.gif"&gt;   &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;  PF&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 20.45pt;"&gt;   &lt;td style="border-style: none solid solid; padding: 12pt; background: rgb(249, 249, 242) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; height: 20.45pt;"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; line-height: 18pt;"&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;Permissões de Repositório&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 12pt; background: rgb(249, 249, 242) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; width: 14.8%; height: 20.45pt;" width="14%"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; line-height: 18pt;"&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1030" type="#_x0000_t75" alt="parcialmente" style="'width:12pt;height:12pt'"&gt;    &lt;v:imagedata src="file:///C:\DOCUME~1\SAMUEL~2.DEL\CONFIG~1\Temp\msohtml1\01\clip_image002.gif" href="http://www.pronus.eng.br/images/warning.gif"&gt;   &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;     P&lt;br /&gt;&lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 12pt; background: rgb(249, 249, 242) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; width: 10.98%; height: 20.45pt;" width="10%"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; line-height: 18pt;"&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1031" type="#_x0000_t75" alt="sim" style="'width:12pt;height:12pt'"&gt;    &lt;v:imagedata src="file:///C:\DOCUME~1\SAMUEL~2.DEL\CONFIG~1\Temp\msohtml1\01\clip_image001.gif" href="http://www.pronus.eng.br/images/check.gif"&gt;   &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;  V&lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; padding: 12pt; background: rgb(249, 249, 242) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; line-height: 18pt;"&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;Documentação Disponível&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 12pt; background: rgb(249, 249, 242) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; width: 14.8%;" width="14%"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; line-height: 18pt;"&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1032" type="#_x0000_t75" alt="sim" style="'width:12pt;height:12pt'"&gt;    &lt;v:imagedata src="file:///C:\DOCUME~1\SAMUEL~2.DEL\CONFIG~1\Temp\msohtml1\01\clip_image001.gif" href="http://www.pronus.eng.br/images/check.gif"&gt;   &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;     V&lt;br /&gt;&lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 12pt; background: rgb(249, 249, 242) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; width: 10.98%;" width="10%"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; line-height: 18pt;"&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1033" type="#_x0000_t75" alt="sim" style="'width:12pt;height:12pt'"&gt;    &lt;v:imagedata src="file:///C:\DOCUME~1\SAMUEL~2.DEL\CONFIG~1\Temp\msohtml1\01\clip_image001.gif" href="http://www.pronus.eng.br/images/check.gif"&gt;   &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;  V&lt;br /&gt;&lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; padding: 12pt; background: rgb(249, 249, 242) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; line-height: 18pt;"&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;Portabilidade&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 12pt; background: rgb(249, 249, 242) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; width: 14.8%;" width="14%"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; line-height: 18pt;"&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1034" type="#_x0000_t75" alt="sim" style="'width:12pt;height:12pt'"&gt;    &lt;v:imagedata src="file:///C:\DOCUME~1\SAMUEL~2.DEL\CONFIG~1\Temp\msohtml1\01\clip_image001.gif" href="http://www.pronus.eng.br/images/check.gif"&gt;   &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;     V&lt;br /&gt;&lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 12pt; background: rgb(249, 249, 242) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; width: 10.98%;" width="10%"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; line-height: 18pt;"&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1035" type="#_x0000_t75" alt="sim" style="'width:12pt;height:12pt'"&gt;    &lt;v:imagedata src="file:///C:\DOCUME~1\SAMUEL~2.DEL\CONFIG~1\Temp\msohtml1\01\clip_image001.gif" href="http://www.pronus.eng.br/images/check.gif"&gt;   &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;  V&lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; padding: 12pt; background: rgb(249, 249, 242) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; line-height: 18pt;"&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;Open Source&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 12pt; background: rgb(249, 249, 242) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; width: 14.8%;" width="14%"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; line-height: 18pt;"&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1036" type="#_x0000_t75" alt="sim" style="'width:12pt;height:12pt'"&gt;    &lt;v:imagedata src="file:///C:\DOCUME~1\SAMUEL~2.DEL\CONFIG~1\Temp\msohtml1\01\clip_image001.gif" href="http://www.pronus.eng.br/images/check.gif"&gt;   &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;     V&lt;br /&gt;&lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 12pt; background: rgb(249, 249, 242) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; width: 10.98%;" width="10%"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; line-height: 18pt;"&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1037" type="#_x0000_t75" alt="sim" style="'width:12pt;height:12pt'"&gt;    &lt;v:imagedata src="file:///C:\DOCUME~1\SAMUEL~2.DEL\CONFIG~1\Temp\msohtml1\01\clip_image001.gif" href="http://www.pronus.eng.br/images/check.gif"&gt;   &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;  V&lt;br /&gt;&lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 25.85pt;"&gt;   &lt;td style="border-style: none solid solid; padding: 12pt; background: rgb(249, 249, 242) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; height: 25.85pt;"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; line-height: 18pt;"&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;Interfaces Gráficas&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 12pt; background: rgb(249, 249, 242) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; width: 14.8%; height: 25.85pt;" width="14%"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; line-height: 18pt;"&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1038" type="#_x0000_t75" alt="sim" style="'width:12pt;height:12pt'"&gt;    &lt;v:imagedata src="file:///C:\DOCUME~1\SAMUEL~2.DEL\CONFIG~1\Temp\msohtml1\01\clip_image001.gif" href="http://www.pronus.eng.br/images/check.gif"&gt;   &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;     V&lt;br /&gt;&lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 12pt; background: rgb(249, 249, 242) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; width: 10.98%; height: 25.85pt;" width="10%"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; line-height: 18pt;"&gt;&lt;span style="color: rgb(85, 85, 85);"&gt; &lt;/span&gt;&lt;span style="color: rgb(85, 85, 85);"&gt; V&lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; padding: 12pt; background: rgb(249, 249, 242) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; line-height: 18pt;"&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;Suporta Grande Repositório&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 12pt; background: rgb(249, 249, 242) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; width: 14.8%;" width="14%"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; line-height: 18pt;"&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1040" type="#_x0000_t75" alt="sim" style="'width:12pt;height:12pt'"&gt;    &lt;v:imagedata src="file:///C:\DOCUME~1\SAMUEL~2.DEL\CONFIG~1\Temp\msohtml1\01\clip_image001.gif" href="http://www.pronus.eng.br/images/check.gif"&gt;   &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;     &lt;/span&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;V&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; padding: 12pt; background: rgb(249, 249, 242) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; width: 10.98%;" width="10%"&gt;   &lt;p class="MsoNormal" style="margin-top: 6pt; line-height: 18pt;"&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;  V&lt;/span&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;&lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt;   &lt;p class="MsoNormal" style="background: rgb(253, 253, 251) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; line-height: 18pt;"&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: rgb(253, 253, 251) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial; line-height: 18pt;"&gt;&lt;span style="color: rgb(85, 85, 85); display: none;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;Legenda: &lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1042" type="#_x0000_t75" alt="sim" style="'width:12pt;height:12pt'"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\SAMUEL~2.DEL\CONFIG~1\Temp\msohtml1\01\clip_image001.gif" href="http://www.pronus.eng.br/images/check.gif"&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;(V)&lt;!--[endif]--&gt;&lt;span style=""&gt; &lt;/span&gt;Possui tal funcionalidade&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;(X)&lt;!--[endif]--&gt;&lt;span style=""&gt; Não &lt;/span&gt;possui tal funcionalidade&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1043" type="#_x0000_t75" alt="parcialmente" style="'width:12pt;"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\SAMUEL~2.DEL\CONFIG~1\Temp\msohtml1\01\clip_image002.gif" href="http://www.pronus.eng.br/images/warning.gif"&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;!--[endif]--&gt;&lt;span style=""&gt;(P) &lt;/span&gt;Atende parcialmente o requisito&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1044" type="#_x0000_t75" alt="Previsão de implementação futura" style="'width:12pt;height:12pt'"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\SAMUEL~2.DEL\CONFIG~1\Temp\msohtml1\01\clip_image003.gif" href="http://www.pronus.eng.br/images/information.gif"&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;!--[endif]--&gt;&lt;span style=""&gt;(F) &lt;/span&gt;Existe previsão para implementação da funcionalidade no futuro&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="color: rgb(85, 85, 85);"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1045" type="#_x0000_t75" alt="Não determinado" style="'width:12pt;"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\SAMUEL~2.DEL\CONFIG~1\Temp\msohtml1\01\clip_image004.jpg" href="http://www.pronus.eng.br/images/quest.jpeg"&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;!--[endif]--&gt;&lt;span style=""&gt;(A) &lt;/span&gt;Informações insuficientes para classificação&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-4924082776885275941?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/4924082776885275941/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=4924082776885275941' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/4924082776885275941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/4924082776885275941'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/02/controle-de-verso.html' title='Controle de versão'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-6722675114563942748</id><published>2008-02-20T13:02:00.000-08:00</published><updated>2008-03-12T07:36:40.689-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FERRAMENTAS DE TESTE'/><title type='text'>Automação de testes de desempenho</title><content type='html'>&lt;div style="text-align: justify;"&gt;O teste de desempenho mede e avalia o tempo de resposta, o número de transações e outros requisitos sensíveis ao tempo. Este tipo de teste é importante para verificar a disponibilidade do sistema sobre situações em que existe um grande número de transações. Este é normalmente um requisito não funcional muito importante em aplicações comerciais.&lt;br /&gt;&lt;br /&gt;O software mais utilizado chama-se JMeter e é uma das ferramentas desenvolvidas dentro do projeto Jakarta. Ele esta disponível em http://jakarta.apache.org/jmeter. O JMeter permite testar diferentes componentes de um ambiente servidor, como servidores HTTP, FTP e SGBD.&lt;br /&gt;&lt;br /&gt;Um de seus atrativos é o fato de permitir a execução de plano de testes que podem ser configurados graficamente. Outro atrativo é conseguir realizar os testes de desempenho com clientes distribuídos. Isto é importante, pois utilizando várias máquinas clientes consegue-se simular carga de maneira mais próximo do ambiente de produção.&lt;br /&gt;&lt;br /&gt;Uma vez que o JMeter é uma ferramenta Open Source e consegue realizar os testes de desempenho de maneira simples e robusta esta será a ferramenta a ser utilizada.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-6722675114563942748?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/6722675114563942748/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=6722675114563942748' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/6722675114563942748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/6722675114563942748'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/02/automao-de-testes-de-desempenho.html' title='Automação de testes de desempenho'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-2097277238399165529</id><published>2008-02-20T12:35:00.000-08:00</published><updated>2008-03-12T07:37:02.784-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FERRAMENTAS DE TESTE'/><title type='text'>Automação de testes funcionais e de aceitação</title><content type='html'>&lt;div style="text-align: justify;"&gt;Testes funcionais são aqueles que encaram o sistema a ser testado como uma função que mapeia um conjunto de valores de entrada em um conjunto de valores de saída sem se preocupar com a forma como esse mapeamento foi implementado.&lt;br /&gt;&lt;br /&gt;Um teste de aceitação (ou Story Test, ou Customer Test) descreve um cenário (de sucesso ou não) com uma expectativa do cliente em relação à história ou funcionalidade. Como o nome sugere, ele ajuda a equipe a entender quando uma história ou funcionalidade está completa ou aceita.&lt;br /&gt;&lt;br /&gt;Diversas ferramentas e frameworks têm surgido para auxiliar sua vida. Entre as mais conhecidas temos o Selenium e o Watir podem facilitar sua vida no teste de aplicações web.&lt;br /&gt;&lt;br /&gt;Percebemos que teremos um problema ao utilizar o Selenium quando o projeto funciona apenas no navegador internet explorer. Isto ocorre, pois o Selenion IDE que é uma ferramenta que facilita a gravação dos scripts é um addin para o mozilla firefox e quando o sistema não funciona no navegador mozilla não é possível o utilizar.&lt;br /&gt;&lt;br /&gt;Situação ideal: Ter uma aplicação que funciona em ambos os browsers, gravar os scripts no Selenium e realizar os teste utilizando os navegadores.&lt;br /&gt;&lt;br /&gt;Situação alternativa: Para aplicações que funcionam somente no navegador internet explorer, o que nos deixa como melhor opção a utilização do Watir que possui como facilidade o aplicativo IE Developer Toolbar.&lt;br /&gt;&lt;br /&gt;O Watir é opensource e com seus comandos e funções particulares permite então que possamos controlar os objetos HTML e JavaScript presentes na aplicação Web, simulando os cliques em links, botões e os demais campos. Watir tem sido usado para testes de sistemas, testes funcionais e teste de aceitação do usuário. Como seu próprio nome diz (Web Application Testing in Ruby),&lt;br /&gt;&lt;br /&gt;Para o uso do Watir torna-se necessário a instalação do interpretador Ruby e do pacote que contém o Watir. O Watir não utiliza da técnica conhecida como Record/Playback, onde o arquiteto de testes grava o script através do movimento do mouse e teclado.&lt;br /&gt;&lt;br /&gt;Os scripts são escritos mesmo “na unha”, portanto o recomendado é que o responsável pelo uso do Watir tenha algum conhecimento de lógica de programação e dos atributos das tags HTML. Esse conhecimento em desenvolvimento se torna importante, visto que, estamos falando de programação de scripts e para que possamos ter um produto final de qualidade, podem ser aplicados todos os conceitos e boas práticas de programação.&lt;br /&gt;&lt;br /&gt;Existe um facilitador que é a instalação do aplicativo IE Developer Toolbar que se integra na barra de ferramentas do Internet Explorer facilitando na identificação dos atributos utilizados na automação.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-2097277238399165529?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/2097277238399165529/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=2097277238399165529' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/2097277238399165529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/2097277238399165529'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/02/automao-de-testes-funcionais-e-de.html' title='Automação de testes funcionais e de aceitação'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-655251212641944000</id><published>2008-02-20T12:28:00.000-08:00</published><updated>2008-03-12T07:34:43.972-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FERRAMENTAS DE TESTE'/><title type='text'>Gestão de testes</title><content type='html'>&lt;div style="text-align: justify;"&gt;A gestão de testes é a parte principal de um processo de testes. A gestão é importante para o planejamento e controle das atividades de um projeto de teste. A gestão de testes pode ser implementada por meio de ferramentas automatizadas (test management system).&lt;br /&gt;&lt;br /&gt;Estas ferramentas devem oferecer um repositório central e padronizado aonde os lideres de testes poderão criar suítes com os casos de teste, atribuir os casos de testes aos testadores, acompanhar o status da execução dos testes e emitir os relatórios com métricas e estatísticas.&lt;br /&gt;&lt;br /&gt;Entre as ferramentas que auxiliam na gestão de testes temos:&lt;br /&gt;&lt;/div&gt; &lt;ul style="text-align: justify;"&gt;   &lt;li&gt;TestLink&lt;/li&gt;   &lt;li&gt;RTH&lt;/li&gt;   &lt;li&gt;Testopia&lt;/li&gt;   &lt;li&gt;TestMaster&lt;/li&gt;   &lt;li&gt;Testitool&lt;/li&gt;   &lt;li&gt;Test Case Web&lt;/li&gt;   &lt;li&gt;QaManager&lt;br /&gt;&lt;/li&gt; &lt;/ul&gt; &lt;div style="text-align: justify;"&gt; Entre estas as ferramentas mais comentadas foram o TestLink e o RTH. A escolha do TestLink é hoje a escolha mais apropriada, pois seu desenvolvimento é o mais ativo e por ser uma ferramenta mais utilizada no mercado.&lt;br /&gt;&lt;br /&gt;O TestLink é uma aplicação Open Source cujo principal objetivo é gerenciar as atividades de teste de um projeto tais como test cases e test suítes. Ele é útil, pois é possível organizar os requisitos, associar os test cases aos requisitos garantindo então a rastreabilidade entre eles. Outra vantagem é a integração com a ferramenta de gestão de defeitos Mantis que será também utilizada no sistema.&lt;br /&gt;&lt;br /&gt;Outra vantagem é o sistema ser desenvolvido em php e utilizar a base de dados mysql, que também é a plataforma utilizada por outras ferramentas do sistema o que demandará menos recursos.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-655251212641944000?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/655251212641944000/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=655251212641944000' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/655251212641944000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/655251212641944000'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/02/gesto-de-testes.html' title='Gestão de testes'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-4491940687499911952</id><published>2008-02-20T12:15:00.000-08:00</published><updated>2008-02-20T12:27:52.450-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FERRAMENTAS DE TESTE'/><title type='text'>Gestão de defeitos</title><content type='html'>A gestão de defeitos é uma das atividades mais importantes de um processo de teste de software. Através da gestão de defeitos podemos acompanhar a qualidade do software em teste com base nos defeitos cadastrados pelos testadores ao longo de um ciclo de testes.&lt;br /&gt;&lt;br /&gt;Podemos então, para realizar o controle e a gestão dos defeitos no sistema, utilizar sistemas automatizados que nos auxiliem. Estas ferramentas devem possuir um local aonde os testadores cadastram os bugs de forma organizada, devem possuir também um local para acompanhar o ciclo de vida dos defeitos e emitir relatórios de gestão.&lt;br /&gt;&lt;br /&gt;Entre as ferramentas de gestão de defeitos temos três que são bastante utilizadas no mercado. Entre elas temos o Bugzilla, o Jira e o Mantis.&lt;br /&gt;&lt;br /&gt;Segue abaixo uma tabela de comparação entre estas ferramentas:&lt;br /&gt;&lt;table class="MsoNormalTable" style="height: 394px; width: 404px;" border="0" cellpadding="0"&gt; &lt;tbody&gt;&lt;tr style=""&gt;&lt;td style="padding: 0.75pt;"&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;System  &lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;Customizable   workflow  &lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;Unicode   support  &lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;a href="http://en.wikipedia.org/wiki/LDAP" title="LDAP"&gt;LDAP&lt;/a&gt; user   authen. &lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr&gt;       &lt;td style="vertical-align: top;"&gt;&lt;br /&gt;&lt;/td&gt;       &lt;td style="vertical-align: top;"&gt;&lt;br /&gt;&lt;/td&gt;       &lt;td style="vertical-align: top;"&gt;&lt;br /&gt;&lt;/td&gt;       &lt;td style="vertical-align: top;"&gt;&lt;br /&gt;&lt;/td&gt;       &lt;td style="vertical-align: top;"&gt;&lt;br /&gt;&lt;/td&gt;       &lt;td style="vertical-align: top;"&gt;&lt;br /&gt;&lt;/td&gt;       &lt;td style="vertical-align: top;"&gt;&lt;br /&gt;&lt;/td&gt;       &lt;td style="vertical-align: top;"&gt;&lt;br /&gt;&lt;/td&gt;       &lt;td style="vertical-align: top;"&gt;&lt;br /&gt;&lt;/td&gt;       &lt;td style="vertical-align: top;"&gt;&lt;br /&gt;&lt;/td&gt;       &lt;td style="vertical-align: top;"&gt;&lt;br /&gt;&lt;/td&gt;     &lt;/tr&gt; &lt;tr style=""&gt;   &lt;td style="padding: 0.75pt 0.75pt 0.75pt 12pt;"&gt;   &lt;p class="MsoNormal"&gt;&lt;a href="http://en.wikipedia.org/wiki/Bugzilla" title="Bugzilla"&gt;Bugzilla&lt;/a&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt; background: rgb(255, 144, 144) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="color:black;"&gt;No&lt;sup&gt;&lt;a href="http://en.wikipedia.org/wiki/Comparison_of_issue_tracking_systems#_note-8#_note-8" title=""&gt;[9]&lt;/a&gt;&lt;/sup&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt; background: rgb(144, 255, 144) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="color:black;"&gt;Yes&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt; background: rgb(144, 255, 144) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="color:black;"&gt;Yes&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0.75pt 0.75pt 0.75pt 12pt;"&gt;   &lt;p class="MsoNormal"&gt;&lt;a href="http://en.wikipedia.org/w/index.php?title=JIRA_%28software%29&amp;amp;action=edit" title="JIRA (software)"&gt;&lt;span style="color: rgb(204, 34, 0);"&gt;JIRA&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt; background: rgb(144, 255, 144) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="color:black;"&gt;Yes&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt; background: rgb(144, 255, 144) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="color:black;"&gt;Yes&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt; background: rgb(144, 255, 144) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="color:black;"&gt;Yes&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="padding: 0.75pt 0.75pt 0.75pt 12pt;"&gt;   &lt;p class="MsoNormal"&gt;&lt;a href="http://en.wikipedia.org/wiki/Mantis_Bug_Tracker" title="Mantis Bug Tracker"&gt;Mantis Bug Tracker&lt;/a&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt;"&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td style="padding: 0.75pt; background: rgb(144, 255, 144) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="color:black;"&gt;Yes&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt; background: rgb(144, 255, 144) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="color:black;"&gt;Yes&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0.75pt; background: rgb(144, 255, 144) none repeat scroll 0% 50%; -moz-background-clip: initial; -moz-background-origin: initial; -moz-background-inline-policy: initial;"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="color:black;"&gt;Yes&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;  &lt;/table&gt;     &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;     &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;br /&gt;Retirado de &lt;a href="http://en.wikipedia.org/wiki/Comparison_of_issue_tracking_systems"&gt;http://en.wikipedia.org/wiki/Comparison_of_issue&lt;/a&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;      &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;     &lt;p class="MsoNormal" style="text-align: justify;"&gt;O Jira será excluído da comparação, pois o projeto não é um projeto livre e sim &lt;span class="postbody"&gt;pago para projetos Comerciais. Ficamos então com a comparação entre o Mantis e o Bugzilla. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;     &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="postbody"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;     &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="postbody"&gt;Comparando as duas ferramentas vemos então que o Mantis é mais simples de instalar e de utilizar, e possui segundo a matriz acima um workflow configurável o que o torna mais extensível. Minha escolha cai sobre o Mantis então por sua simplicidade e também por ser bastante robusto. A simplicidade ajuda a usuários não técnicos executar o cadastro de defeitos.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;     &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="postbody"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;     &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="postbody"&gt;Entre as diversas funcionalidades oferecidas pelo Mantis temos:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;     &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="postbody"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;     &lt;ul style="margin-top: 0cm;" type="disc"&gt; &lt;li class="MsoNormal" style="text-align: justify;"&gt;Pode ser executado em qualquer plataforma.&lt;/li&gt;&lt;li class="MsoNormal" style="text-align: justify;"&gt;Suporta vários bancos de dados.&lt;/li&gt;&lt;li class="MsoNormal" style="text-align: justify;"&gt;Suporta múltiplos mecanismos de autenticação.&lt;/li&gt;&lt;li class="MsoNormal" style="text-align: justify;"&gt;Ciclo de vida personalizável.&lt;/li&gt;&lt;li class="MsoNormal" style="text-align: justify;"&gt;Gerador interno de relatório de defeitos.&lt;/li&gt;&lt;li class="MsoNormal" style="text-align: justify;"&gt;Controle de acesso e permissão por usuário.&lt;/li&gt;&lt;li class="MsoNormal" style="text-align: justify;"&gt;Mecanismo para a criação de campos personalizáveis.&lt;/li&gt;&lt;li class="MsoNormal" style="text-align: justify;"&gt;Notificação por meio de e-mails automáticos.&lt;/li&gt;&lt;li class="MsoNormal" style="text-align: justify;"&gt;Integração com ferramentas de controle de versão.&lt;/li&gt;&lt;li class="MsoNormal" style="text-align: justify;"&gt;Interface webservices para integração com outras      ferramentas.&lt;/li&gt; &lt;/ul&gt;&lt;br /&gt;&lt;h1 style="text-align: justify;"&gt;&lt;a name="_Toc191290619"&gt;&lt;span style=""&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h1&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-4491940687499911952?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/4491940687499911952/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=4491940687499911952' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/4491940687499911952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/4491940687499911952'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/02/gesto-de-defeitos.html' title='Gestão de defeitos'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-5482038333827428187</id><published>2008-01-25T08:19:00.001-08:00</published><updated>2009-04-17T11:15:57.119-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PADRÕES DE PROJETO'/><title type='text'>O padrão Singleton</title><content type='html'>O Singleton é um dos padrões de projeto mais simples existentes. É um padrão de projeto de software (do inglês Design Pattern). Este padrão garante a existência de apenas uma instância de uma classe, mantendo um ponto global de acesso ao seu objeto.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Nota linguística: O termo vem do significado em inglês quando se resta apenas uma carta nas mãos, num jogo de baralho&lt;/em&gt;&lt;em&gt;.&lt;/em&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;em&gt;&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;O GoF nos diz que para uma classe ser um singleton, deve-se garantir que haverá apenas uma instância na aplicação e que deve-se fornecer um ponto de acesso à mesma. Mas como garantir que haverá apenas uma instância? É de conhecimento comum que, para criar uma instância de uma classe, devemos chamar o seu construtor. Assim, para resolvermos o problema, devemos restringir o acesso ao construtor, tornando-o um método privado. Em seguida, deve-se utilizar um método público que faça o controle da instanciação, de modo que ela só possa ser feita uma vez. A Figura 1 mostra o diagrama de classes do singleton:&lt;br /&gt;&lt;p style="text-align: justify;"&gt;&lt;img id="BLOGGER_PHOTO_ID_5159474510840688002" style="margin: 0px auto 10px; display: block; text-align: center;" alt="" src="http://3.bp.blogspot.com/_3AFYZsJfotY/R5oiu0ZXbYI/AAAAAAAACtU/b3qwNgG-Fdg/s320/singleton_uml.png" border="0" /&gt;&lt;strong&gt;Figura 1: Diagrama de Classes do Singleton.&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;A implementação mais comum do singleton pode ser vista no código apresentado na Listagem 1 e comumente é chamada de singleton com lazy load. &lt;/p&gt;&lt;p style="text-align: justify;"&gt;public class Singleton {&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;private static Singleton instance;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;&lt;span style="font-family:Courier New;"&gt;private Singleton() { }&lt;/span&gt;&lt;/p&gt;&lt;span style="font-family:courier new;"&gt;public static Singleton getInstance() { &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;if (instance == null) instance = new Singleton(); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;return instance; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Implementação do Singleton. &lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;O diagrama de classes da Figura 1 e o código da Listagem 1 mostram apenas o necessário para a instanciação do singleton. Obviamente, a classe deve conter outros atributos e métodos.&lt;br /&gt;A Figura 2 mostra um diagrama de seqüências que representa o processo de criação de um singleton. Quando um objeto chama o singleton pela primeira vez, é realizada a instanciação da classe. Os demais acessos irão utilizar a instância já criada.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;img id="BLOGGER_PHOTO_ID_5159477135065705922" style="margin: 0px auto 10px; display: block; text-align: center;" alt="" src="http://2.bp.blogspot.com/_3AFYZsJfotY/R5olHkZXbcI/AAAAAAAACt0/4Z_BYBNeGvE/s320/diagrama_sequencia.gif" width="414" border="0" height="214" /&gt; &lt;strong&gt;Figura 2: Diagrama de Seqüências de um Singleton.&lt;/strong&gt; &lt;/div&gt;&lt;p style="text-align: justify;"&gt;O código da Listagem 1 pode ser problemático em ambientes multi-threaded, ou seja, ele não é uma solução thread-safe. Se uma thread chamar o método getInstance() e for interrompida antes de realizar a instanciação, uma outra thread poderá chamar o método e realizar a instanciação. Neste caso, duas instâncias serão construídas, o que fere os requisitos do singleton. &lt;/p&gt;&lt;p style="text-align: justify;"&gt;&lt;br /&gt;Uma solução para este problema seria utilizar o atributo synchronized em getInstance(), como visto na Listagem 2 , para que uma outra thread não possa acessá-lo até que a thread que o acessou pela primeira vez tenha terminado de fazê-lo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;public class Singleton { &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;private static Singleton instance; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;private Singleton() { } &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;public static synchronized Singleton getInstance() { &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;if (instance == null) instance = new Singleton(); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;return instance; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;} &lt;/span&gt;&lt;br /&gt;&lt;strong&gt;Implementação thread-safe com synchronized.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;O problema com o synchronized é que a sincronização é bastante custosa. Estima-se que métodos sincronizados sejam cerca de cem vezes mais lentos que métodos não sincronizados.&lt;br /&gt;&lt;br /&gt;Uma alternativa simples, rápida e thread-safe é a instanciação do singleton assim que ele for declarado. Veja a Listagem 3 .&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;public class Singleton { &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;private static Singleton instance = new Singleton(); &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;private Singleton() { } &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;public static Singleton getInstance() { return instance; }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;Implementação thread-safe com instanciação estática.&lt;/strong&gt; &lt;/p&gt;&lt;p style="text-align: justify;"&gt;&lt;strong&gt;3. Utilizações comuns&lt;/strong&gt; &lt;/p&gt;&lt;p style="text-align: justify;"&gt;Muitos projetos necessitam que algumas classes tenham apenas uma instância. Por exemplo, em uma aplicação que precisa de uma infraestrutura de &lt;a title="Log de dados" href="http://pt.wikipedia.org/wiki/Log_de_dados"&gt;log de dados&lt;/a&gt;, pode-se implementar uma classe no padrão singleton. Desta forma existe apenas um objeto responsável pelo log em toda a aplicação que é acessível unicamente através da classe singleton. Outra utilização comum é utilizar o padrão singleton sobre a fábrica de conexões com o banco.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;3. Conclusões&lt;/strong&gt;&lt;br /&gt;Além de ser um dos padrões mais simples, o singleton é também um dos mais criticados e mal usados. Uma situação em que realmente é necessário que exista apenas uma instância de uma classe é difícil e o seu uso pode levar a muitos problemas. O uso abusivo de singletons leva a soluções onde a dependência entre objetos é muito forte e a testabilidade é fraca.&lt;br /&gt;&lt;/p&gt;&lt;p style="text-align: justify;"&gt;Adicionalmente, os singletons são difíceis de escalar, pois é difícil garantir uma única instância de um singleton em um cluster, onde existem várias JVMs. Um outro problema é que os singletons dificultam o hot redeploy por permanecerem em cache, bloqueando mudanças de configuração. Por esses e outros problemas, deve-se ter cuidado com o uso abusivo de singletons. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-5482038333827428187?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/5482038333827428187/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=5482038333827428187' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/5482038333827428187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/5482038333827428187'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/01/o-padro-singleton.html' title='O padrão Singleton'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3AFYZsJfotY/R5oiu0ZXbYI/AAAAAAAACtU/b3qwNgG-Fdg/s72-c/singleton_uml.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-6231322722509099459</id><published>2008-01-25T05:13:00.000-08:00</published><updated>2009-04-17T11:15:31.398-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PADRÕES DE PROJETO'/><title type='text'>Padrões de projeto de software</title><content type='html'>&lt;div style="text-align: justify;"&gt;Os padrões de projeto de software ou padrões de desenho de software, também muito conhecido pelo termo original em inglês: Design Patterns, descrevem soluções para problemas recorrentes no desenvolvimento de sistemas de software orientados a objetos. Um padrão de projeto estabelece um nome e define o problema, a solução, quando aplicar esta solução e suas conseqüências.&lt;br /&gt;&lt;br /&gt;Os padrões de projeto visam facilitar a reutilização de soluções de desenho - isto é, soluções na fase de projeto do software, sem considerar reutilização de código. Também acarretam um vocabulário comum de desenho, facilitando comunicação, documentação e aprendizado dos sistemas de software.&lt;br /&gt;&lt;br /&gt;Um Padrão de Projeto pode ser definido como “a solução para um problema em um contexto”. Isto significa que os padrões de projeto nos oferecem soluções prontas para utilizarmos em determinados problemas que podemos enfrentar quando desenvolvemos um software orientado a objetos.&lt;br /&gt;&lt;br /&gt;Para realizar a descrição de um padrão de projeto devemos especificar o seu nome, que o identifica e descreve; o contexto, ou seja, a situação que está gerando se está na qual se deve aplicar o padrão; o problema, que é a meta que está se tentando atingir neste contexto; a solução proposta pelo padrão para o problema no contexto especificado e as conseqüências da aplicação do padrão, podendo ser elas boas ou ruins. Para compreender melhor esse conceito, veja o exemplo abaixo, que não pode ser considerado um padrão de projeto, servindo apenas para ajudar a compreender o modo como um padrão de projeto deve ser definido.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Nome: Chegar à reunião! &lt;/li&gt;&lt;li&gt;Problema: Como chegar no horário à reunião? &lt;/li&gt;&lt;li&gt;Contexto: Você está trancado dentro de casa! &lt;/li&gt;&lt;li&gt;Solução: Pule a janela, entre no carro e corra até o trabalho. &lt;/li&gt;&lt;li&gt;Conseqüências: Você deve achar a chave ou pular a janela para entrar em casa.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="text-align: justify;"&gt;Podemos classificar os padrões de projeto de várias maneiras, porém o mais comum é classificá-los de acordo com os tipos de problemas que eles resolvem. De acordo com esse critério, os padrões podem ser: &lt;/p&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Criação: resolvem os problemas da criação de objetos; &lt;/li&gt;&lt;li&gt;Estruturais: que lidam com os problemas de relacionamentos entre objetos; &lt;/li&gt;&lt;li&gt;Comportamentais: que lidam com os problemas de atribuição de responsabilidades aos objetos. &lt;/li&gt;&lt;/ul&gt;&lt;p style="text-align: justify;"&gt;Os padrões de projeto solucionam muitos dos problemas que os projetistas enfrentam no dia a dia, e de diversas maneiras diferentes. Nesta série de post tentarei mostrar alguns dos padrões mais comuns, explicando o contexto, o problema, a solução e suas conseqüências com exemplos simples e acessíveis. Todos os exemplos estarão escritos na linguagem Java, mas são aplicáveis em qualquer linguagem orientada a objetos como .Net, Delphi, C++ ou outras.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-6231322722509099459?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/6231322722509099459/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=6231322722509099459' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/6231322722509099459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/6231322722509099459'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2008/01/padres-de-projeto-de-software-os-padres.html' title='Padrões de projeto de software'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-4917232841949203264</id><published>2007-11-05T08:28:00.000-08:00</published><updated>2008-01-25T05:33:01.662-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PLATAFORMA GOOGLE JME'/><title type='text'>Plataforma Google para telefones celulares</title><content type='html'>Boa tarde a todos,&lt;br /&gt;&lt;br /&gt;Segue abaixo alguns links interessantes acerca dos passos do &lt;a href="http://www.google.com/"&gt;Google&lt;/a&gt;&lt;br /&gt;para entrar no mercado de desenvolvimento de aplicações móveis em&lt;br /&gt;&lt;a href="http://java.sun.com/javame/index.jsp"&gt;JavaME&lt;/a&gt; (Plataforma Java para Celulares). Eles devem estar lançando um&lt;br /&gt;sistema operacional para celulares (Google Mobile OS) em breve (neste mês).&lt;br /&gt;&lt;br /&gt;Segue abaixo os links:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.sun.com/hinkmond/entry/google_phone_uses_java_technology" target="_blank"&gt;http://blogs.sun.com/hinkmond&lt;wbr&gt;/entry/google_phone_uses_java&lt;wbr&gt;_technology&lt;/a&gt;&lt;br /&gt;&lt;a href="http://idgnow.uol.com.br/telecom/2007/11/05/idgnoticia.2007-11-05.8932974539/" target="_blank"&gt;http://idgnow.uol.com.br&lt;wbr&gt;/telecom/2007/11/05/idgnoticia&lt;wbr&gt;.2007-11-05.8932974539/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://gigaom.com/2007/10/31/the-google-phone-the-story-so-far-some-launch-details-whats-next/" target="_blank"&gt;http://gigaom.com/2007/10/31&lt;wbr&gt;/the-google-phone-the-story-so&lt;wbr&gt;-far-some-launch-details-whats&lt;wbr&gt;-next/&lt;/a&gt;&lt;br /&gt;http://abhishek.tiwari.com/2007/10/30/gphone-if-i-built-it-part-2/&lt;br /&gt;&lt;br /&gt;Alguns fatos interessantes sobre o Google Phone (não confirmados):&lt;br /&gt;&lt;br /&gt;- SO será baseado em Linux com a habilidade de executar máquinas virtuais Java (JavaSE/JavaME).&lt;br /&gt;- Todas as aplicações a serem desenvolvidas neste produto serão em Java&lt;br /&gt;- A GUI será desenvolvida em Java e possibilitará alta interatividade e desempenho&lt;br /&gt;- Acordos e testes estão sendo feitos em várias marcas de aparelhos móveis. Porém alguns fabricantes não estão sendo envolvidos, tais com a Nokia, Samsung e Motorola (Os três maiores fabricantes de celulares) .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-4917232841949203264?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/4917232841949203264/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=4917232841949203264' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/4917232841949203264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/4917232841949203264'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2007/11/plataforma-google-para-telefones.html' title='Plataforma Google para telefones celulares'/><author><name>Waldir R. Pires Jr</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-280178845676750246</id><published>2007-10-22T08:05:00.001-07:00</published><updated>2008-12-10T07:14:30.350-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DESENVOLVIMENTO WEB'/><title type='text'>Projeto Struts com mais arquivos de configuração</title><content type='html'>Algumas pessoas tinham ficado com dúvida sobre como configurar o struts para ter mais de um arquivo de configuração.&lt;br /&gt;&lt;br /&gt;Para isto basta configurar o arquivo web.xml e no local em que existia:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3AFYZsJfotY/RxzANmSbLNI/AAAAAAAABdY/TizBxE5aSws/s1600-h/primeira.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_3AFYZsJfotY/RxzANmSbLNI/AAAAAAAABdY/TizBxE5aSws/s320/primeira.JPG" alt="" id="BLOGGER_PHOTO_ID_5124181815889439954" border="0" /&gt;&lt;/a&gt;Deve ser colocado o seguinte trecho:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3AFYZsJfotY/RxzAEGSbLMI/AAAAAAAABdQ/rV1QcP3O0xA/s1600-h/segunda.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 411px; height: 107px;" src="http://2.bp.blogspot.com/_3AFYZsJfotY/RxzAEGSbLMI/AAAAAAAABdQ/rV1QcP3O0xA/s320/segunda.JPG" alt="" id="BLOGGER_PHOTO_ID_5124181652680682690" border="0" /&gt;&lt;/a&gt;Boa sorte!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-280178845676750246?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/280178845676750246/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=280178845676750246' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/280178845676750246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/280178845676750246'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2007/10/projeto-struts-com-mais-arquivos-de.html' title='Projeto Struts com mais arquivos de configuração'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3AFYZsJfotY/RxzANmSbLNI/AAAAAAAABdY/TizBxE5aSws/s72-c/primeira.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-2530995403776773483</id><published>2007-10-21T14:44:00.000-07:00</published><updated>2008-12-10T07:14:31.541-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DESENVOLVIMENTO WEB'/><title type='text'>Criando um projeto Struts 1.3.8 usando o eclipse WTP</title><content type='html'>&lt;ol style="margin-top: 0in;" start="1" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="PT-BR"&gt;Clique File &gt; New &gt;      Other.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol style="margin-top: 0in;" start="2" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="PT-BR"&gt;Web &gt; Dinamic Web Project&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;    &lt;ol style="margin-top: 0in;" start="3" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="PT-BR"&gt;Crie um projeto com o nome      Projeto e click em Finish.&lt;/span&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;      &lt;p class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3AFYZsJfotY/RxvQuWSbLFI/AAAAAAAABb8/l5yS98UEL_o/s1600-h/primeira.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_3AFYZsJfotY/RxvQuWSbLFI/AAAAAAAABb8/l5yS98UEL_o/s320/primeira.JPG" alt="" id="BLOGGER_PHOTO_ID_5123918495739489362" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="4" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="PT-BR"&gt;Mude então para a perspectiva      Java EE.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal" style="margin-left: 0.25in;"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.25in;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3AFYZsJfotY/RxvRAWSbLGI/AAAAAAAABcE/oGw99l4_bfY/s1600-h/segunda.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_3AFYZsJfotY/RxvRAWSbLGI/AAAAAAAABcE/oGw99l4_bfY/s320/segunda.JPG" alt="" id="BLOGGER_PHOTO_ID_5123918804977134690" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.25in;"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="5" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="PT-BR"&gt;Copie o projeto&lt;/span&gt;&lt;span style="" lang="PT-BR"&gt;      struts-blank.zip disponível em &lt;a href="http://courses.coreservlets.com/Course-Materials/struts-code/struts-blank.zip"&gt;http://groups.google.com/group/curso-struts/files&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal" style="margin-left: 0.25in;"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="6" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="PT-BR"&gt;Extraia o projeto no local de      sua preferência.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="7" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="PT-BR"&gt;Copie o conteúdo do diretório WEB-INF/lib&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="8" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="PT-BR"&gt;Cole as bibliotecas dentro do      diretório WebContent/WEB-INF/lib do projeto criado.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal" style="margin-left: 0.25in;"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="9" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="PT-BR"&gt;Copie os arquivos de      configuração do diretório WEB-INF&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal" style="margin-left: 0.25in;"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="10" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="PT-BR"&gt;Cole as bibliotecas dentro do      diretório WebContent/WEB-INF do projeto criado e sobrescreva o arquivo web.xml      já criado.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal" style="margin-left: 0.25in;"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in; text-indent: -0.25in;"&gt;&lt;span style="" lang="PT-BR"&gt;* Adicionamos então as bibliotecas do Struts assim como seus arquivos de configuração.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="11" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="PT-BR"&gt;Devemos então configurar o      servidor dentro do ambiente do WTP.&lt;span style=""&gt;       &lt;/span&gt;Na aba Servers na&lt;/span&gt;&lt;span style="" lang="PT-BR"&gt; parte inferior do eclipse clique em new &gt; Server&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3AFYZsJfotY/RxvRlmSbLHI/AAAAAAAABcM/Kkb0m0STgxo/s1600-h/terceira.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_3AFYZsJfotY/RxvRlmSbLHI/AAAAAAAABcM/Kkb0m0STgxo/s320/terceira.JPG" alt="" id="BLOGGER_PHOTO_ID_5123919444927261810" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="12" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="PT-BR"&gt;Selecione a versão do tomcat      instalado em sua máquina e clique em Next.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal" style="margin-left: 0.25in;"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="13" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="PT-BR"&gt;Selecione o local de instalação      do tomcat e clique em Next.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.25in;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3AFYZsJfotY/RxvgqmSbLII/AAAAAAAABcU/5Zvj3ISrftQ/s1600-h/quarta.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_3AFYZsJfotY/RxvgqmSbLII/AAAAAAAABcU/5Zvj3ISrftQ/s320/quarta.JPG" alt="" id="BLOGGER_PHOTO_ID_5123936023501024386" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.25in;"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="14" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="PT-BR"&gt;Adicione o projeto que voc&lt;/span&gt;&lt;span style="" lang="PT-BR"&gt;ê      acabou de criar e clique em Finish.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal" style="margin-left: 0.25in;"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="15" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="PT-BR"&gt;Clique com o botão direito na      pasta WebContent e depois clique em New &gt; Other.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="16" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="PT-BR"&gt;Selecione JSP e clique em next.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3AFYZsJfotY/RxvhEWSbLJI/AAAAAAAABcc/L3ASs_z8BDQ/s1600-h/quinta.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_3AFYZsJfotY/RxvhEWSbLJI/AAAAAAAABcc/L3ASs_z8BDQ/s320/quinta.JPG" alt="" id="BLOGGER_PHOTO_ID_5123936465882655890" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="17" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="PT-BR"&gt;Escolha o nome do arquivo como      index.jsp&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal" style="margin-left: 0.25in;"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="18" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="PT-BR"&gt;Altere o jsp coloque no      interior da tag body o texto "Primeira aplicação"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol style="margin-top: 0in;" start="19" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="PT-BR"&gt;Clique então no botão Start the      Server na aba Servers&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal" style="margin-left: 0.25in;"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3AFYZsJfotY/RxvhimSbLKI/AAAAAAAABck/mCciiPK8hmo/s1600-h/sexta.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_3AFYZsJfotY/RxvhimSbLKI/AAAAAAAABck/mCciiPK8hmo/s320/sexta.JPG" alt="" id="BLOGGER_PHOTO_ID_5123936985573698722" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="PT-BR"  style="font-size:8;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="20" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="PT-BR"&gt;Vá ao endereço &lt;a href="http://localhost:8080/Projeto"&gt;http://localhost:8080/Projeto&lt;/a&gt; no      navegador de sua preferência.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="PT-BR"&gt;Verifique que aparece em sua tela o texto primeira aplicação.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="PT-BR"&gt;Parabéns. A sua primeira aplicação Struts está rodando.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-2530995403776773483?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/2530995403776773483/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=2530995403776773483' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/2530995403776773483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/2530995403776773483'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2007/10/criando-um-projeto-struts-1.html' title='Criando um projeto Struts 1.3.8 usando o eclipse WTP'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3AFYZsJfotY/RxvQuWSbLFI/AAAAAAAABb8/l5yS98UEL_o/s72-c/primeira.JPG' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-8233525084364618073</id><published>2007-10-15T05:26:00.000-07:00</published><updated>2007-10-15T12:39:06.940-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CERTIFICAÇÃO'/><title type='text'>Certificação: Ter ou não ter</title><content type='html'>&lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="st"&gt;&lt;span style=";font-family:Arial;font-size:10;"  lang="PT-BR" &gt;Olá&lt;/span&gt;&lt;/span&gt;&lt;span class="st"&gt;&lt;span style=";font-family:Arial;font-size:10;"  lang="PT-BR" &gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="st"&gt;&lt;span style=";font-family:Arial;font-size:10;"  lang="PT-BR" &gt;pessoal&lt;/span&gt;&lt;/span&gt;&lt;span class="st"&gt;&lt;span style=";font-family:Arial;font-size:10;"  &gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="st"&gt;&lt;span style=";font-family:Arial;font-size:10;"  lang="PT-BR" &gt;Tenho sido questionado sobre o real valor de certificações para o profissional de TI. Resolvi então escrever este post a respeito do assunto.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span  lang="PT-BR"  style="font-family:Arial;font-size:10;"&gt;Certificação profissional&lt;/span&gt;&lt;b&gt;&lt;span style=";font-family:Arial;font-size:10;"  lang="PT-BR" &gt; &lt;/span&gt;&lt;/b&gt;&lt;span style=";font-family:Arial;font-size:10;"  lang="PT-BR" &gt;é o processo voluntário pelo qual uma entidade não-governamental fornece uma credencial a um indivíduo depois de verificar que ele atendeu a critérios pré-determinados. É o veículo pelo qual uma profissão (ou ocupação) diferencia seus membros, utilizando padrões geralmente definidos num processo consensual.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=";font-family:Arial;font-size:10;"  lang="PT-BR" &gt;A certificação profissional credencia um indivíduo a desempenhar determinada atividade, com base em padrões e normas pré-estabelecidos por agências, associações ou empresas. O credenciamento é obtido com a aprovação do candidato numa prova elaborada de tal forma que comprove a competência do candidato.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=";font-family:Arial;font-size:10;"  lang="PT-BR" &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;span class="st"&gt;&lt;span style=";font-family:Arial;font-size:10;"  lang="PT-BR" &gt;Ou seja, certificação&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:10;"  lang="PT-BR" &gt; é uma forma das empresas saberem que possuem os profissionais corretos fazendo as coisas corretas, muitas empresas inclusive lhe pagam para fazer a &lt;span class="st"&gt;certificação&lt;/span&gt; e não apenas porque elas contam pontos em licitações.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="st"&gt;&lt;span style=";font-family:Arial;font-size:10;"  lang="PT-BR" &gt;Certificação&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:10;"  lang="PT-BR" &gt; não te garante salário e nem a qualidade do profissional. A &lt;span class="st"&gt;certificação&lt;/span&gt; foi criada (a Microsoft foi a primeira a pensar nisso) simplesmente para atestar ou não que a pessoa que fez a certificação conhece um determinado produto (em uma determinada versão).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=";font-family:Arial;font-size:10;"  lang="PT-BR" &gt;Determinada empresa atesta que o José conhece determinada tecnologia. É uma maneira simples e correta de provar em uma seleção de emprego que você tem o domínio de algo.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=";font-family:Arial;font-size:10;"  lang="PT-BR" &gt;Você não precisa tirar a &lt;span class="st"&gt;certificação&lt;/span&gt;, como também não precisa fazer faculdade, como também não precisa conhecer outras línguas ou conhecer de novas tecnologias.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style=";font-family:Arial;font-size:10;"  lang="PT-BR" &gt;Agora caso você tenha algumas destas coisas, isto vai fazer um bem danado na sua carreira. &lt;/span&gt;&lt;span style=";font-family:Arial;font-size:10;"  lang="PT-BR" &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="st"&gt;&lt;span style=";font-family:Arial;font-size:10;"  lang="PT-BR" &gt;Resumindo, certificação&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:10;"  lang="PT-BR" &gt; é um diferencial, é motivo de orgulho e achar legal, e quer saber dá um prazer enorme passar nas provas.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-8233525084364618073?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/8233525084364618073/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=8233525084364618073' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/8233525084364618073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/8233525084364618073'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2007/10/certificao-ter-ou-no-ter.html' title='Certificação: Ter ou não ter'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-209604677920436931</id><published>2007-10-12T18:48:00.000-07:00</published><updated>2007-10-15T06:00:54.748-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DESENVOLVIMENTO WEB'/><title type='text'>Manual de configuração de ambiente para desenvolvimento Web</title><content type='html'>&lt;h2&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;h2&gt;&lt;span style="" lang="PT-BR"&gt;JDK&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="PT-BR"&gt;O JDK é um kit de desenvolvimento Java fornecido livremente pela Sun. Constitui um conjunto de programas que engloba compilador, interpretador e utilitários, fornecendo um pacote de ferramentas básicas para o desenvolvimento de aplicações Java.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="PT-BR"&gt;Procure a versão do jdk que será utilizado em sua aplicação no site &lt;a href="http://java.sun.com/javase/downloads/index.jsp"&gt;http://java.sun.com/javase/downloads/index.jsp&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;h2&gt;&lt;span style="" lang="PT-BR"&gt;Eclipse e WTP&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;p&gt;&lt;span style="" lang="PT-BR"&gt;O &lt;/span&gt;&lt;a href="http://www.eclipse.org/"&gt;&lt;span style="" lang="PT-BR"&gt;Eclipse&lt;/span&gt;&lt;/a&gt;&lt;span style="" lang="PT-BR"&gt; é uma robusta plataforma de software livre para desenvolvimento de aplicações em Java. O projeto Eclipse surgiu e mantém sua força da doação e envolvimento da IBM para manter como código aberto uma base para suas ferramentas IBM/Rational. O projeto, ao longo dos anos, ganhou o apoio e participação de grandes empresas e instituições, como Borland, BEA, JBoss e Oracle.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="" lang="PT-BR"&gt;O grande problema é que o foco central do projeto Eclipse não é ser um ambiente de desenvolvimento pronto, mas sim uma plataforma ampla e aberta, sobre a qual se pode desenvolver um efetivo ambiente de desenvolvimento.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="" lang="PT-BR"&gt;O WTP é um projeto que faz parte do Eclipse.Org e tem por finalidade prover um ambiente de desenvolvimento padrão para web sob a plataforma Eclipse, sendo formado por um conjunto de APIs para JEE e aplicações web, além de ferramentas para suporte de deploy e testes de aplicações.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="PT-BR"&gt;Baixando e instalando o Eclipse com o WTP:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="1" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="PT-BR"&gt;Entre no site &lt;a href="http://www.eclipse.org/webtools/news.php"&gt;http://www.eclipse.org/webtools/news.php&lt;/a&gt;      e procure a última versão estável.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="2" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="PT-BR"&gt;Clique em download e procure a      versão Web Tools Platform All-In-One Packages para o seu sistema      operacional.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="3" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="PT-BR"&gt;Execute o download e extraia na      pasta de sua preferência.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;  &lt;h2&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;h2&gt;&lt;span style="" lang="PT-BR"&gt;Tomcat&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="PT-BR"&gt;O Tomcat é um servidor de aplicações Java &lt;strong&gt;para web&lt;/strong&gt;. É software livre e de código aberto, surgido dentro do conceituado projeto Apache Jakarta e que teve apoio e endosso oficial da Sun Microsystems como Implementação de Referência (RI) para as tecnologias Java Servlet e JavaServer Pages (JSP). Atualmente, o Tomcat tem seu próprio projeto de desenvolvimento independente, dentro da Apache Software Foundation.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="PT-BR"&gt;Baixando e instalando o tomcat:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;span style="" lang="PT-BR"&gt;Dica:&lt;/span&gt;&lt;/b&gt;&lt;span style="" lang="PT-BR"&gt; Tente procurar uma versão que seja compatível com a jdk que vc está usando.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="PT-BR"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;ol style="margin-top: 0in;" start="1" type="1"&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="PT-BR"&gt;Entre no site &lt;a href="http://tomcat.apache.org/"&gt;http://tomcat.apache.org/&lt;/a&gt; e clique o      tomcat de sua preferência.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;a name="Binary_Distributions"&gt;&lt;strong&gt;&lt;span style="font-weight: normal;" lang="PT-BR"&gt;Procure a sua      distribuição binária&lt;/span&gt;&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&lt;span style="font-weight: normal;" lang="PT-BR"&gt; e execute o download.&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-weight: normal;" lang="PT-BR"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span style="" lang="PT-BR"&gt;Extraia o zip baixado na pasta      de sua preferência&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-209604677920436931?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/209604677920436931/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=209604677920436931' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/209604677920436931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/209604677920436931'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2007/10/manual-de-configurao-de-ambiente-para.html' title='Manual de configuração de ambiente para desenvolvimento Web'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4910060404641588003.post-785521659521720571</id><published>2007-10-10T15:41:00.000-07:00</published><updated>2007-10-12T19:09:17.190-07:00</updated><title type='text'>Blog do portal do arquiteto</title><content type='html'>Este é meu primeiro post de prováveis muitos outros. Este blog surgiu a partir de minha idéia de criar um site onde prováveis arquitetos possam se comunicar e trocar idéias com os outros.&lt;br /&gt;&lt;br /&gt;Espero que o portal do arquiteto seja em breve realidade e que ele ajude a vários arquitetos a tomarem melhores decisões para seus projetos.&lt;br /&gt;&lt;br /&gt;Até a próxima pessoal.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4910060404641588003-785521659521720571?l=portalarquiteto.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://portalarquiteto.blogspot.com/feeds/785521659521720571/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4910060404641588003&amp;postID=785521659521720571' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/785521659521720571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4910060404641588003/posts/default/785521659521720571'/><link rel='alternate' type='text/html' href='http://portalarquiteto.blogspot.com/2007/10/blog-do-portal-do-arquiteto.html' title='Blog do portal do arquiteto'/><author><name>Samuel Martins Delfim</name><uri>http://www.blogger.com/profile/17304535374318086091</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://lh6.google.com/samuelmd/Rq_4k-swYjE/AAAAAAAABMs/eqhUlN7Fhnw/s160-c/SerraDoCip.jpg'/></author><thr:total>1</thr:total></entry></feed>
