# Fabio Brandão - Blog --- ## Posts - [Impacto de Two Phase Commit (2PC / XA) na disponibilidade / performance](https://www.fnbrandao.com.br/blog/2023/02/impacto-de-two-phase-commit-2pc-xa-na-disponibilidade-performance/): Two Phase Commit é utilizado para garantir a consistência entre dois recursos (por exemplo: banco de dados e servidor de... - [Obtenção de grande volume de dados em Jobs](https://www.fnbrandao.com.br/blog/2021/11/obtencao-de-grande-volume-de-dados-em-jobs/): Sempre que é feito um job,uma das preocupações do lado da aplicação é em como não levar todos os registros... - [High CPU causado pelo método copyRowsAsNeeded do driver do Oracle](https://www.fnbrandao.com.br/blog/2021/10/high-cpu-causado-pelo-metodo-copyrowsasneeded-do-driver-do-oracle/): Algum tempo atrás me deparei com uma situação onde uma aplicação começava a utilizar muita CPU, o load da máquina... - [Resolvendo “enq: TX - allocate ITL entry” com uma abordagem alternativa](https://www.fnbrandao.com.br/blog/2021/10/resolvendo-enq-tx-allocate-itl-entry-com-uma-abordagem-alternativa/): Um dos problemas vistos num banco Oracle com muitos DML’s concorrentes é o evento de espera “enq: TX – allocate... - [Access vs Filter Predicate](https://www.fnbrandao.com.br/blog/2021/10/access-vs-filter-predicate/): A maioria das aplicações desenvolvidas atualmente utilizam um banco de dados relacional para armazenar e recuperar os seus dados. Para... - [Chamadas remotas em contexto transacional de banco de dados](https://www.fnbrandao.com.br/blog/2021/10/chamadas-remotas-em-contexto-transacional-de-banco-de-dados/): Um dos problemas que vejo acontecendo em diversos sistemas de produção é o pool de conexões com o banco de... - [git svn rebase e fatal: bad object](https://www.fnbrandao.com.br/blog/2012/11/git-svn-rebase-e-fatal-bad-object/): Ao tentar atualizar um repositório do svn através do git na minha máquina recebi o seguinte erro: Para resolver esse... - [Executando um comando para cada linha de um arquivo com bash](https://www.fnbrandao.com.br/blog/2012/09/executando-um-comando-para-cada-linha-de-um-arquivo-com-bash/): Hoje precisei gerar o diff do svn de alguns arquivos cujo nomes estavam armazenados dentro de um arquivo. Para gerar... - [Excluindo arquivos não versionados no SVN](https://www.fnbrandao.com.br/blog/2012/05/excluindo-arquivos-nao-versionados-no-svn/): Para excluir arquivos não versionados no SVN você pode utilizar o seguinte comando: A primeira parte desse comando lista todos... - [Repositório Git no Apache2](https://www.fnbrandao.com.br/blog/2012/01/repositorio-git-no-apache2/): Algum tempo atrás eu coloquei um repositório Git disponibilizado através do Apache2 + WebDAV utilizando a seguinte configuração do apache:... - [O Guia de Dez Minutos de diff e patch](https://www.fnbrandao.com.br/blog/2012/01/o-guia-de-dez-minutos-de-diff-e-patch/): O seguinte texto foi traduzido e adaptado de: http://jungels. net/articles/diff-patch-ten-minutes. html Primeira situação: você está tentando compilar um pacote à... - [Teclado ABNT2 no Mac OS X](https://www.fnbrandao.com.br/blog/2011/10/teclado-abnt2-no-mac-os-x/): Instalei o Mac OS X Snow Leopard em uma VM esses dias e tive que alterar o teclado para o... - [Upgrade do Ubuntu 10.04 para 10.10: An unresolvable problem occurred while calculating the upgrade](https://www.fnbrandao.com.br/blog/2011/02/upgrade-do-ubuntu-10-04-para-10-10-an-unresolvable-problem-occurred-while-calculating-the-upgrade/): Essa semana atualizei o ubuntu que estava na minha máquina da versão 8. 04 até a 10. 10. Para fazer... - [Weblogic 10.3.0.0 + JSF 2.0 + @EJB Injection](https://www.fnbrandao.com.br/blog/2011/01/weblogic-10-3-0-0-jsf-2-0-ejb-injection/): Ao se colocar o JSF 2. 0 no Weblogic 10. 3. 0. 0, os EJB’s não são injetados nos manageds... - [Weblogic + JPA + Hibernate = ClassNotFoundException: org.hibernate.hql.ast.HqlToken](https://www.fnbrandao.com.br/blog/2011/01/weblogic-jpa-hibernate-classnotfoundexception-org-hibernate-hql-ast-hqltoken/): Ao tentar efetuar o deploy de uma aplicação com JPA (implementação: Hibernate), ocorre o seguinte erro: org. springframework. orm. hibernate3.... - [Passando propriedades de sistemas para os testes no maven](https://www.fnbrandao.com.br/blog/2011/01/passando-propriedades-de-sistemas-para-os-testes-no-maven/): Esses dias precisei fazer alguns testes que verificavam se existia uma propriedade de sistema para tomar determinada ação. Ao se... - [Describe no Oracle de uma tabela com dblink](https://www.fnbrandao.com.br/blog/2011/01/describe-no-oracle-de-uma-tabela-com-dblink/): Primeiramente vamos encontrar o nome do dblink onde a tabela está realmente localizada. Isto é feito através do comando: SELECT... - [Winamp + MP4](https://www.fnbrandao.com.br/blog/2010/09/winamp-mp4/): Hoje fui executar um vídeo mp4 dentro do winamp, mas o mesmo não funcionou. Após algumas pesquisas no Google achei... - [Rompimento do tendão de aquiles - Volta ao taekwondo](https://www.fnbrandao.com.br/blog/2010/08/rompimento-do-tendao-de-aquiles-volta-ao-taekwondo/): Após quase 10 meses que sofri a lesão, voltei a fazer aulas de taekwondo. Hoje fiz uma aula bem tranquila,... - [Show Aerosmith - 29/05/10](https://www.fnbrandao.com.br/blog/2010/06/show-aerosmith-290510/): Colocando as fotos do show após quase 1 mês! ! ! Seguem abaixo algumas fotos: As fotos estão em: http://picasaweb.... - [Show Megadeth - 24/04/10](https://www.fnbrandao.com.br/blog/2010/04/show-megadeth-240410/): Show do Megadeth no Creditcard Hall! ! ! Seguem abaixo algumas fotos: As fotos estão em: http://picasaweb. google. com/fabio. nb/Megadeth240410 - [Upgrade para o Ubuntu 9.10](https://www.fnbrandao.com.br/blog/2010/04/upgrade-para-o-ubuntu-9-10/): Hoje migrei o Ubuntu da versão 9. 04 para 9. 10. Tive apenas um único problema que o Firefox ficou... - [Selenium + Wait for Ajax](https://www.fnbrandao.com.br/blog/2010/04/selenium-wait-for-ajax/): Hoje tive que fazer um teste automatizado que deveria obrigatoriamente esperar por um Ajax ser executado para continuar a sua... - [Rompimento do tendão de aquiles - Cicatriz](https://www.fnbrandao.com.br/blog/2010/03/rompimento-do-tendao-de-aquiles-cicatriz/): Abaixo duas foto de como ficou a cirurgia. A primeira foi uma foto tirada 1 mês após a cirurgia na... - [Rompimento do tendão de aquiles – Recuperação 2](https://www.fnbrandao.com.br/blog/2010/02/rompimento-do-tendao-de-aquiles-%e2%80%93-recuperacao-2/): Alguns dias atrás fez 3 meses que operei por causa da ruptura total do tendão de aquiles. Minha recuperação está... - [Como montar arquivos bin / cue no Linux](https://www.fnbrandao.com.br/blog/2010/01/como-montar-arquivos-bin-cue-no-linux/): Um dos jeitos para montar arquivos bin / cue no Linux é primeiro convertendo-os para o formato iso. Isto pode... - [The Duct Tape Programmer](https://www.fnbrandao.com.br/blog/2010/01/the-duct-tape-programmer/): Hoje voltei a ler os artigos que estavam armazenados nas abas do meu firefox! Este eu não lembro quem me... - [O mínimo que todo o desenvolvedor de software precisa saber sobre Unicode e CharSets](https://www.fnbrandao.com.br/blog/2010/01/o-minimo-que-todo-o-desenvolvedor-de-software-precisa-saber-sobre-unicode-e-charsets/): Hoje, após muito tempo resolvi ler um artigo recomendado por um colega do trabalho (Willian). O artigo fala sobre o... - [PHP + Zend + PDO + MySQL](https://www.fnbrandao.com.br/blog/2010/01/php-zend-pdo-mysql/): Hoje eu estava fazendo um site utilizando php, Zend Framework, PDO e MySQL. Quando fui fazer uma tela que se... - [Rompimento do tendão de aquiles - Recuperação](https://www.fnbrandao.com.br/blog/2009/12/rompimento-do-tendao-de-aquiles-recuperacao/): Após 61 dias de cirurgia (26/12/2009) voltei a dirigir. Estou conseguindo dirigir por um bom tempo e não tenho dores.... - [Rompimento do tendão de aquiles - Fisioterapia](https://www.fnbrandao.com.br/blog/2009/12/rompimento-do-tendao-de-aquiles-fisioterapia/): Ontem (22/12/2009) fez 57 dias que fiz a cirurgia no tendão de aquiles. Ontem também foi minha segunda sessão de... - [Rompimento do tendão de aquiles - Terceiro retorno](https://www.fnbrandao.com.br/blog/2009/12/rompimento-do-tendao-de-aquiles-terceiro-retorno/): 53 dias após a cirurgia voltei ao médico. A minha recuperação está indo bem e como dia 21/12/2009 irá fazer... - [Rompimento do tendão de aquiles - Segundo retorno](https://www.fnbrandao.com.br/blog/2009/12/rompimento-do-tendao-de-aquiles-segundo-retorno/): Após 39 dias de cirurgia voltei ao médico e tive uma boa notícia: posso voltar a andar com a bota... - [Rompimento do tendão de aquiles - Retorno](https://www.fnbrandao.com.br/blog/2009/11/rompimento-do-tendao-de-aquiles-retorno/): Após um pouco mais de 2 semanas depois da cirurgia, voltei ao médico para verificar como estava a minha perna.... - [Novo Site do PagSeguro](https://www.fnbrandao.com.br/blog/2009/11/novo-site-do-pagseguro/): O novo site do PagSeguro não foi apenas uma melhoria no código antigo, foi muito mais que isso. O novo... - [Rompimento do tendão de aquiles](https://www.fnbrandao.com.br/blog/2009/10/rompimento-do-tendao-de-aquiles/): Faz 2 meses que voltei a fazer taekwondo (já tinha feito cerca de 2 anos e depois fiz mais 2... - [Turbogears 2 + i18n + formatação de datas e números](https://www.fnbrandao.com.br/blog/2009/10/turbogears-2-i18n-formatacao-de-datas-e-numeros/): Para setar a linguagem padrão da sua aplicação utilizando o turbogears basta editar o arquivo development. ini e incluir a... - [Turbogears 2 e Elixir](https://www.fnbrandao.com.br/blog/2009/10/turbogears-2-e-elixir/): Para se integrar o elixir no turbogears 2, basta editar o arquivo model/__init__. py do seu projeto para ficar desse... - [Instalando o setuptools no Python 2.6 no Windows](https://www.fnbrandao.com.br/blog/2009/10/instalando-o-setuptools-no-python-26-no-windows/): Para instalar o setuptools no Python 2. 6 no Windows baixe os seguintes arquivos: setuptools-0. 6c9. tar. gz setuptools-0. 6c9-py2.... - [As coisas estúpidas feitas quando se trabalha com programação](https://www.fnbrandao.com.br/blog/2009/09/as-coisas-estupidas-feitas-quando-se-trabalha-com-programacao/): Este post foi traduzido e alterado deste link: http://blog. cherouvim. com/the-stupidest-things-ive-done-in-my-programming-job/ Observação: Não fui eu quem escreveu este post. Apenas... - [Trocando a localização de um repositório svn de uma working copy](https://www.fnbrandao.com.br/blog/2009/08/trocando-a-localizacao-de-um-repositorio-svn-de-uma-working-copy/): Essa semana troquei o repositório svn de um sistema meu do meu desktop para o site http://www. xp-dev. com. Tive... - [ORA-17410: No more data to read from socket](https://www.fnbrandao.com.br/blog/2009/07/ora-17410-no-more-data-to-read-from-socket/): Semana passada no trabalho perdi umas 2 horas com o problema ORA-17410: No more data to read from socket. Em... - [Freemarker + Sitemesh + Spring](https://www.fnbrandao.com.br/blog/2009/07/freemarker-sitemesh-spring/): Depois de muito tempo consegui fazer minha aplicação utilizando Freemarker (template engine) + Sitemesh (web page layout framework) + Spring... - [Vôo duplo de Parapente - Pedra Grande - Atibaia - 18/04/09](https://www.fnbrandao.com.br/blog/2009/05/voo-duplo-de-parapente-pedra-grande-atibaia-180409/): Há algum tempo atrás venho pensando seriamente em fazer algum esporte radical. Depois de conversar bastante, achei um esporte interessante:... - [Show Kiss - 07/04/09](https://www.fnbrandao.com.br/blog/2009/04/show-kiss-070409/): Kiss! ! ! You wanted the best, You’ve got the best, the hottest band in the world! Seguem abaixo algumas... - [Show Deep Purple - 06/03/09](https://www.fnbrandao.com.br/blog/2009/04/show-deep-purple-060309/): Show do Deep Purple! ! ! Atrasadas, mas estão aí as fotos. Seguem abaixo algumas fotos: As fotos estão em:... - [Show Claustrofobia + In Flames - 15/02/09](https://www.fnbrandao.com.br/blog/2009/02/show-claustrofobia-in-flames-150209/): Fui no show do Claustrofobia + In Flames, que foi muito bom. O que foi ruim foi o local do... - [Show Queen - 26/11/08](https://www.fnbrandao.com.br/blog/2008/12/show-queen-261108/): Fui no show do Queen, que foi muito bom. Seguem abaixo algumas fotos: As fotos estão em: http://picasaweb. google. com/fabio.... - [Ubuntu + Kodak C743](https://www.fnbrandao.com.br/blog/2008/12/ubuntu-kodak-c743/): Para utilizar a câmera digital Kodak EasyShare C743, basta criar o arquivo “/etc/udev/rules. d/KodakC743. rules” com o seguinte conteúdo: ACTION=="add",... - [Ubuntu + Nokia 6235](https://www.fnbrandao.com.br/blog/2008/12/ubuntu-nokia-6235/): Para conectar o nokia 6235 no ubuntu, basta instalar o pacote obexfs e colocar no arquivo “/etc/fstab” a seguinte linha... - [PDB Extractor](https://www.fnbrandao.com.br/blog/2008/12/pdb-extractor/): Ainda em relação ao post anterior, tive que extrair o conteúdo de um arquivo PDB (um formato de arquivo usado... - [Descompilando Java](https://www.fnbrandao.com.br/blog/2008/12/descompilando-java/): Há algum tempo atrás, peguei um serviço pra fazer no qual o cliente não tinha o código fonte do sistema.... - [ORA-12519, TNS:no appropriate service handler found](https://www.fnbrandao.com.br/blog/2008/11/ora-12519-tnsno-appropriate-service-handler-found/): Tenho o oracle xe instalado no computador do trabalho. Após algumas horas trabalhando a aplicação não consegue mais se conectar... - [Ubuntu + Alsa + Flash = Device or resource busy](https://www.fnbrandao.com.br/blog/2008/08/ubuntu-alsa-flash-device-or-resource-busy/): Após atualizar o ubuntu para 8. 04 no trabalho, não estava mais com sons simultâneos com o flash e o... - [Selenium - Permission denied to get property Location.href](https://www.fnbrandao.com.br/blog/2008/07/selenium-permission-denied-to-get-property-locationhref/): Hoje tive um problema no Selenium, no qual o mesmo não conseguia verificar a url do navegador, jogando uma exceção... - [Archlinux HP Pavilion dv9000 - Suspend e Hibernate](https://www.fnbrandao.com.br/blog/2008/07/archlinux-hp-pavilion-dv9000-suspend-e-hibernate/): Como mencionado no último post, não estava conseguindo fazer meu notebook hibernar ou suspender no modo gráfico no Archlinux. Após... - [Instalação do ArchLinux no HP Pavilion dv9000](https://www.fnbrandao.com.br/blog/2008/07/instalacao-do-archlinux-no-hp-pavilion-dv9000/): No último final de semana resolvi remover o ubuntu do meu notebook e instalar o archlinux. A instalação foi feita... - [Autenticação rede wireless wpa no Linux na mão](https://www.fnbrandao.com.br/blog/2008/07/autenticacao-rede-wireless-wpa-no-linux-na-mao/): Para autenticar na mão numa rede wireless wap basta utilizar os seguintes comandos: sudo iwconfig wlan0 sudo wpa_passphrase > wpa_supplicant.... - [Upgrade Ubuntu e problema no Postgre](https://www.fnbrandao.com.br/blog/2008/06/upgrade-ubuntu-e-problema-no-postgre/): Após atualizar o Ubuntu para a versão 8. 04, o servidor do postgre não iniciava mais com o seguinte erro:... - [Plugins Firefox3](https://www.fnbrandao.com.br/blog/2008/06/plugins-firefox3/): Após o upgrade do Ubuntu 7. 10 para 8. 04 no trabalho, alguns plugins não funcionavam no Firefox 3. Para... - [Ubuntu e Locale](https://www.fnbrandao.com.br/blog/2008/06/ubuntu-e-locale/): Para se alterar o locale padrão do sistema, basta seguir esses passos: Adicione o seguinte texto “en_US. ISO-8859-1 ISO-8859-1” no... - [Upgrade Ubuntu 7.10 para 8.04](https://www.fnbrandao.com.br/blog/2008/06/upgrade-ubuntu-710-para-804/): Hoje no trabalho fiz o upgrade do Ubuntu 7. 10 para 8. 04. Foram quase 900MB para serem baixados, e... - [Show Megadeth - 06/06/08](https://www.fnbrandao.com.br/blog/2008/06/show-megadeth-060608/): Esta sexta fui no show do Megadeth no Credicard Hall... O show estava muito bom. Abaixo seguem algumas fotos: Segue... - [Spring gerenciando as transações](https://www.fnbrandao.com.br/blog/2008/06/spring-gerenciando-as-transacoes/): Após duas longas semanas resolvi o problema que estava tendo com o Spring gerenciando as transações de banco de dados.... - [PostBack no JSF](https://www.fnbrandao.com.br/blog/2008/06/postback-no-jsf/): Um grande problema com o JSF é que na especificação 1. 1 não existe algum método para saber se a... - [Problemas no upgrade do Kubuntu 7.10 para 8.04](https://www.fnbrandao.com.br/blog/2008/05/problemas-no-upgrade-do-kubuntu-710-para-804/): Após o upgrade de versão do Kubuntu 7. 10 para o 8. 04 tive alguns pequenos problemas: Apache2 + SVN:... - [JSF - Duplicate componentID](https://www.fnbrandao.com.br/blog/2008/05/jsf-duplicate-componentid/): Utilizando o DataTable do RichFaces em uma simples página, após um reload na página sempre era retornado o seguinte erro:... - [JSF + Spring + JPA + Hibernate](https://www.fnbrandao.com.br/blog/2008/05/jsf-spring-jpa-hibernate/): Ao tentar fazer o deploy de uma aplicação utilizando JSF, Spring e JPA (com implementação do hibernate) é recebida a... - [Debug no Tomcat 5.5](https://www.fnbrandao.com.br/blog/2008/05/debug-no-tomcat-55/): Para rodar um debug remoto no tomcat 5. 5 no Ubuntu, basta editar o arquivo “/etc/init. d/tomcat5. 5” e colocar... - [Problema no botão back do navegador](https://www.fnbrandao.com.br/blog/2008/05/problema-no-botao-back-do-navegador/): O botão back do navegador é muito útil ao usuário para ele conseguir navegar entre diferentes páginas e websites. Entretanto,... - [MySQL não responde para outras máquinas](https://www.fnbrandao.com.br/blog/2008/05/mysql-nao-responde-para-outras-maquinas/): Se você estiver tendo algum problema ao tentar conectar ao MySQL de outra máquina, basta alterar o arquivo “my. cnf”... - [Eclipse e PermGen](https://www.fnbrandao.com.br/blog/2008/05/eclipse-e-permgen/): Se você estiver tendo problemas de memória com o Eclipse, como por exemplo: java. lang. OutOfMemoryError: PermGen space Basta alterar... - [O primeiro post](https://www.fnbrandao.com.br/blog/2008/05/o-primeiro-post/): Talvez esta seja uma tarefa difícil, escolher o que escrever no seu primeiro post, ainda mais se este for o... --- ## Páginas - [Sobre](https://www.fnbrandao.com.br/blog/sobre/): Brasileiro, nascido e morando em São Paulo. Sou formado em Ciência da Computação pelo Mackenzie e pós-graduado em Engenharia de... - [Currículo](https://www.fnbrandao.com.br/blog/curriculo/): Fabio Nascimento Brandão Profissional da área de TI, focado em desenvolvimento de software. Meu currículo completo pode ser encontrado no... --- # # Detailed Content ## Posts - Published: 2023-02-20 - Modified: 2025-12-29 - URL: https://www.fnbrandao.com.br/blog/2023/02/impacto-de-two-phase-commit-2pc-xa-na-disponibilidade-performance/ - Categorias: Banco de dados, Oracle, Programação Two Phase Commit é utilizado para garantir a consistência entre dois recursos (por exemplo: banco de dados e servidor de filas) para que os recursos participem de um contexto transacional de forma atômica, isto é, ou ambos sejam executados ou ambos façam o rollback (na falha de algum dos recursos). O problema com esse tipo de protocolo é que ele causa um problema de escalabilidade no sistema já que o protocolo trabalha de forma blocante. Um outro problema comum que vemos é que ele segura os recursos compartilhados (por exemplo conexões com banco de dados) até o término da transação. No caso de uma lentidão num servidor de filas JMS, o que pode ocorrer com a aplicação é a falta de conexão com o banco de dados já que a mesma só é liberada após o término da transação. Vamos simular esse problemas com o código disponibilizado em https://github. com/fabionb/artigo_2pc A aplicação está configurada com 10 conexões no pool (padrão do Hikari) e 5 segundos de espera para obter a conexão do pool, após esse tempo a aplicação irá receber um erro caso não consiga obter a conexão, além disso está configurada para permitir até 30 conexões com um servidor JMS. A aplicação possui um endpoint que insere um registro no banco e publica uma mensagem JMS com o id do registro inserido. Sem o Two Phase Commit ela foi implementada da seguinte forma: BEGIN -- Início da transação Select da sequence Insert do registro no banco COMMIT -- Término... --- - Published: 2021-11-03 - Modified: 2021-11-03 - URL: https://www.fnbrandao.com.br/blog/2021/11/obtencao-de-grande-volume-de-dados-em-jobs/ - Categorias: Java, Java EE, Programação - Tags: hibernate, java, Java EE, job, Programação Sempre que é feito um job,uma das preocupações do lado da aplicação é em como não levar todos os registros necessários para a memória. Existem algumas maneiras para se fazer isso, sendo que as duas mais comuns que vejo são queries limitadas e queries paginadas. Além dessas duas formas existe uma terceira que é limitando a quantidade de registros que o banco retorna através da opção “fetch size” no driver. Limitação na query Esse é um dos jeitos mais utilizados que vejo. O uso consiste em rodar a mesma query diversas vezes, retornando uma quantidade limitada de registros e, ao processar o registro, fazer um update no mesmo para que esse registro não retorne novamente na query. O job irá executar a query diversas vezes, até não ser retornado mais registros, o que indica que o job terminou o seu processamento. Segue um exemplo de como ficaria o job: int processed = 0; List toProcess = outboxRepository. retrieveLimited(quantity); while (! toProcess. isEmpty) { for (OutboxEntity item : toProcess) { // Do some processing logger. info("Processing item {}", item. getId); // Mark as processed item. setProcessed(true); processed++; } // Flush pending changes entityManager. flush; // Clear memory entityManager. clear; logger. info("Processed {}", processed); toProcess = outboxRepository. retrieveLimited(quantity); } return processed; E a query: public List retrieveLimited(int quantity) { return entityManager. createQuery("SELECT o FROM OutboxEntity o WHERE o. processed = FALSE", OutboxEntity. class) . setMaxResults(quantity) . getResultList; } Paginação na query Essa maneira é muito similar com a primeira abordagem, exceto pelo... --- - Published: 2021-10-25 - Modified: 2021-10-25 - URL: https://www.fnbrandao.com.br/blog/2021/10/high-cpu-causado-pelo-metodo-copyrowsasneeded-do-driver-do-oracle/ - Categorias: Banco de dados, Java, Java EE, Oracle, Programação - Tags: hibernate, java, Java EE, Oracle, Programação Algum tempo atrás me deparei com uma situação onde uma aplicação começava a utilizar muita CPU, o load da máquina física subia demais e o tempo de resposta da aplicação acabava piorando junto com o uso de cpu / load da máquina. Para identificar o que estava causando, colocamos um script na máquina física que sempre que o load passava um determinado valor ele começava a tirar thread dumps da aplicação. Os threads dumps possuíam diversas threads paradas no mesmo ponto: "http-nio-8081-exec-6" #42 daemon prio=5 os_prio=0 cpu=8869. 88ms elapsed=34. 97s tid=0x00007f6f58009560 nid=0x9ad runnable java. lang. Thread. State: RUNNABLE at oracle. jdbc. driver. T4CTTIrxd. copyRowsAsNeededByOffset(T4CTTIrxd. java:1405) at oracle. jdbc. driver. T4CTTIrxd. copyRowsAsNeeded(T4CTTIrxd. java:1313) at oracle. jdbc. driver. T4CTTIrxd. unmarshal(T4CTTIrxd. java:1502) at oracle. jdbc. driver. T4CTTIrxd. unmarshal(T4CTTIrxd. java:1289) at oracle. jdbc. driver. T4C8Oall. readRXD(T4C8Oall. java:850) at oracle. jdbc. driver. T4CTTIfun. receive(T4CTTIfun. java:543) at oracle. jdbc. driver. T4CTTIfun. doRPC(T4CTTIfun. java:252) at oracle. jdbc. driver. T4C8Oall. doOALL(T4C8Oall. java:612) at oracle. jdbc. driver. T4CPreparedStatement. doOall8(T4CPreparedStatement. java:226) at oracle. jdbc. driver. T4CPreparedStatement. fetch(T4CPreparedStatement. java:1023) at oracle. jdbc. driver. OracleStatement. fetchMoreRows(OracleStatement. java:3353) at oracle. jdbc. driver. InsensitiveScrollableResultSet. fetchMoreRows(InsensitiveScrollableResultSet. java:736) at oracle. jdbc. driver. InsensitiveScrollableResultSet. absoluteInternal(InsensitiveScrollableResultSet. java:692) at oracle. jdbc. driver. InsensitiveScrollableResultSet. next(InsensitiveScrollableResultSet. java:406) - locked (a oracle. jdbc. driver. T4CConnection) at com. zaxxer. hikari. pool. HikariProxyResultSet. next(HikariProxyResultSet. java) at org. hibernate. loader. Loader. getRowsFromResultSet(Loader. java:1035) at org. hibernate. loader. Loader. processResultSet(Loader. java:990) at org. hibernate. loader. Loader. doQuery(Loader. java:959) at org. hibernate. loader. Loader. doQueryAndInitializeNonLazyCollections(Loader. java:349) at org. hibernate. loader. Loader. doList(Loader. java:2843) at org. hibernate. loader.... --- - Published: 2021-10-22 - Modified: 2021-10-22 - URL: https://www.fnbrandao.com.br/blog/2021/10/resolvendo-enq-tx-allocate-itl-entry-com-uma-abordagem-alternativa/ - Categorias: Banco de dados, Java, Java EE, Programação - Tags: hibernate, java, Java EE, Oracle, Programação Um dos problemas vistos num banco Oracle com muitos DML’s concorrentes é o evento de espera “enq: TX - allocate ITL entry”. O problema com esse evento é que as sessões fazendo os comandos de alteração nos registros demoram para executar, causando mais espera na aplicação. Existem alguns jeitos de resolver esse evento de espera, entre eles: Aumentar os parâmetros INITRANS e MAXTRANS da tabela / índice afetadoMover a tabela para um tablespace com blocksize menorFazer um reorg da tabelaReduzir a concorrência de DML’s na tabela Sobre essas alternativas: Alterar o INITRANS e MAXTRANS das tabelas e índices é fácil, o problema é que os valores só são utilizados para os novos blocos criados. Além disso, valores maiores que 100 não diminuem essa contenção (conforme uma das referências). Mover a tabela para um tablespace com blocksize menor pode ser feito de maneira online mas existem algumas condições nas quais o online não funciona. Além disso, em tabelas muito grandes e com alta taxa de DML’s, a aplicação acaba sentindo uma queda grande de performance nos DML’s durante essa movimentação. Reduzir a concorrência dos DML’s parece ser uma solução boa, mas necessita a troca da lógica da aplicação, que nem sempre é viável / rápida de ser feita pois envolve a alteração para insert’s / update’s em batch. Como funciona o ITL O ITL (interested transaction list) é uma lista de transações que estão alterando os registros que estão localizados dentro de um bloco. Essa lista fica no cabeçalho do bloco... --- - Published: 2021-10-20 - Modified: 2021-10-20 - URL: https://www.fnbrandao.com.br/blog/2021/10/access-vs-filter-predicate/ - Categorias: Banco de dados, Programação - Tags: banco de dados, plano de execução, Programação A maioria das aplicações desenvolvidas atualmente utilizam um banco de dados relacional para armazenar e recuperar os seus dados. Para que o tempo de resposta e escalabilidade de aplicação não seja prejudicado, é necessário que o banco de dados consiga recuperar as informações necessárias da maneira mais rápida e fácil possível. Os índices em banco de dados são utilizados para conseguir recuperar os registros de uma maneira mais rápida e performática. Um índice é uma estrutura de dados que mantém os registros ordenados com base em algumas colunas definidas durante a sua criação. Com os dados ordenados dentro de um índice, ele pode ser utilizado para a filtragem e a ordenação dos registros. A maioria das queries contém problemas no seu plano de execução. Os mais comuns são a falta de índices ou a utilização de índices não tão adequados para a query em execução. A falta de índice geralmente ocasiona um full table scan. Já a utilização de índices não adequados pode consumir mais CPU que o necessário para a execução da query. Quando o índice é utilizado de forma adequada, a filtragem dos registros que devem ser recuperados são feitos totalmente através do uso do índice, nesse caso o banco está fazendo um “access predicate”. Já no caso da falta de índice ou até mesmo o uso de um índice não otimizado para a query, o banco irá fazer um “filter predicate”. O filter predicate nada mais é do que a filtragem dos dados utilizando a CPU do... --- - Published: 2021-10-19 - Modified: 2021-11-08 - URL: https://www.fnbrandao.com.br/blog/2021/10/chamadas-remotas-em-contexto-transacional-de-banco-de-dados/ - Categorias: Banco de dados, Java, Java EE, Programação - Tags: banco de dados, java, Java EE, open session in view, Programação Um dos problemas que vejo acontecendo em diversos sistemas de produção é o pool de conexões com o banco de dados esgotar, através da exception abaixo: java. sql. SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 5000ms. Geralmente, a primeira solução proposta é aumentar o pool de conexões. Só que após algum tempo o problema volta a ocorrer novamente. Olhando à partir do banco de dados não são vistas queries lentas e a maioria das conexões não estão executando nenhuma instrução, apenas estão ociosas, ou seja, abertas mas esperando a aplicação enviar algum comando. Após algumas análises é possível por exemplo identificar que no mesmo momento uma dependência da aplicação com problema fica lenta. Vamos simular isso com o código disponibilizado em https://github. com/fabionb/artigo_remotecall A aplicação está configurada com 10 conexões no pool (padrão do Hikari) e 5 segundos de espera para obter a conexão do pool, após esse tempo a aplicação irá receber um erro caso não consiga obter a conexão. Vamos primeiro executar o seguinte método: @Transactional public void testTransactionalOutside(int sleep, long start) { logMaxId; logger. info("In use connections {}", dataSource. getHikariPoolMXBean. getActiveConnections); logger. info("Response {}", restTemplate. getForObject(URI. create("http://localhost:8081/slowService/" + sleep), String. class)); RemoteCallLogEntity log = new RemoteCallLogEntity; log. setSleep(sleep); log. setTime(System. currentTimeMillis - start); entityManager. persist(log); } Para isso, basta chamar a url: http://localhost:8081/testTransactionalOutside/3000 Esse código executa um select no método logMaxId, depois exibe no log quantas conexões estão sendo utilizadas pela aplicação, faz uma chamada externa para um serviço que iremos simular a... --- - Published: 2012-11-27 - Modified: 2021-10-19 - URL: https://www.fnbrandao.com.br/blog/2012/11/git-svn-rebase-e-fatal-bad-object/ - Categorias: Programação Ao tentar atualizar um repositório do svn através do git na minha máquina recebi o seguinte erro: fatal: bad object 0dfa7fb77d2a08b78a9d57d3445f3d60c4734cf6 rev-list -1 0dfa7fb77d2a08b78a9d57d3445f3d60c4734cf6 bd5d9701516cfe2d4661eaa95a03755f7ae3c8a3 0fae1f416f17141abd6d78d9e042a1c5a35c7873 --not dc522b20890dbbdfef1c3bd104587d59b353d5ce: command returned error: 128 Para resolver esse problema entre no diretório . git e rode o seguinte comando: grep -ir 0dfa7fb77d2a08b78a9d57d3445f3d60c4734cf6 * No meu caso o comando acima retornou apenas 1 arquivo: Binary file . /svn/. caches/lookup_svn_merge. db matches Apague o arquivo e rode novamente o comando git svn rebase --- - Published: 2012-09-05 - Modified: 2012-09-05 - URL: https://www.fnbrandao.com.br/blog/2012/09/executando-um-comando-para-cada-linha-de-um-arquivo-com-bash/ - Categorias: Linux, Programação - Tags: bash, diff, svn, xargs Hoje precisei gerar o diff do svn de alguns arquivos cujo nomes estavam armazenados dentro de um arquivo. Para gerar o diff no svn de cada um desses arquivos basta fazer o seguinte: cat arquivos. txt | xargs -I {} svn diff -r 39177:HEAD https://svn/projeto{} > diff. txt Onde o arquivo arquivos. txt contém o nome dos arquivos em cada linha, e o diff. txt será o diff de todos esses arquivos. --- - Published: 2012-05-23 - Modified: 2021-10-19 - URL: https://www.fnbrandao.com.br/blog/2012/05/excluindo-arquivos-nao-versionados-no-svn/ - Categorias: Linux, Programação - Tags: svn Para excluir arquivos não versionados no SVN você pode utilizar o seguinte comando: svn status --no-ignore | grep '^\? ' | sed 's/^\? //' | xargs -Ixx rm -rf xx A primeira parte desse comando lista todos os arquivos alterados no SVN (modificados, adicionados, excluídos e não versionados), a segunda parte do comando filtra as linhas que começam com "? " (arquivos não versionados). A terceira parte elimina o "? " e os espaços do começo das linhas e a quarta parte exclui arquivo por arquivo retornado pelos comandos anteriores. Este texto foi adaptado do link http://www. guyrutenberg. com/2008/01/18/delete-unversioned-files-under-svn/ --- - Published: 2012-01-06 - Modified: 2021-10-19 - URL: https://www.fnbrandao.com.br/blog/2012/01/repositorio-git-no-apache2/ - Categorias: Programação - Tags: Apache2, Git, git-http-backend, WebDAV Algum tempo atrás eu coloquei um repositório Git disponibilizado através do Apache2 + WebDAV utilizando a seguinte configuração do apache: Dav on AuthType Basic AuthName "Repositorio Git" AuthUserFile /etc/apache2/repositorio. passwd Require valid-user Após algum tempo comecei a receber erros ao tentar fazer o push de muitas alterações. Se eu tentasse realizar vários push's com erro, uma hora o push funcionava. Fui procurar outras formas de disponibilizar o repositório Git no Apache2 e encontrei a forma descrita abaixo: SetEnv GIT_PROJECT_ROOT /var/www/git SetEnv GIT_HTTP_EXPORT_ALL AliasMatch ^/git/(. */objects/{2}/{38})$ /var/www/git/$1 AliasMatch ^/git/(. */objects/pack/pack-{40}. (pack|idx))$ /var/www/git/$1 ScriptAlias /git/ /usr/lib/git-core/git-http-backend/ Esta configuração até agora não deu problema. Mais detalhes dessa configuração podem ser encontrados no help do comando git-http-backend: http://manpages. ubuntu. com/manpages/lucid/man1/git-http-backend. 1. html --- - Published: 2012-01-04 - Modified: 2012-02-15 - URL: https://www.fnbrandao.com.br/blog/2012/01/o-guia-de-dez-minutos-de-diff-e-patch/ - Categorias: Programação - Tags: diff, patch O seguinte texto foi traduzido e adaptado de: http://jungels. net/articles/diff-patch-ten-minutes. html Primeira situação: você está tentando compilar um pacote à partir do código fonte e descobre que alguém já o modificou para compilar na sua plataforma. Ele disponibilizou o seu trabalho como um "patch", mas você não tem certeza de como utilizá-lo. Para utilizá-lo você deve aplicar o patch no código fonte original com uma ferramenta de linha de comando chamada patch. Segunda situação: você fez o download do código fonte de um pacote open source e depois de algumas alterações você conseguiu compilá-lo na sua plataforma. Você gostaria de disponibilizar o seu trabalho para outros programadores, ou para os autores do pacote, sem distribuir todo o pacote modificado. Nesta situação você deve criar um patch, e a ferramenta necessária é a diff. Este é um guia rápido para gerar ou utilizar patches que irá ajudá-lo nestas situações, mostrando como usar as ferramentas nas situações mais comuns. Aplicando patches com patch Para aplicar um patch em um arquivo, vá ao diretório onde o arquivo está e chame o comando patch: patch < foo. patch O comando acima assume que o patch está distribuído no formato unificado, que identifica o arquivo no qual patch deve ser aplicado. Se não estiver no formato unificado, você pode especificar o arquivo na linha de comando: patch foo. txt < bar. patch A aplicação de patches em um diretório (caso mais comum) é similar, mas você deve setar um "p level". Isto significa que dentro... --- - Published: 2011-10-16 - Modified: 2011-10-16 - URL: https://www.fnbrandao.com.br/blog/2011/10/teclado-abnt2-no-mac-os-x/ - Categorias: Programas - Tags: abnt2, mac Instalei o Mac OS X Snow Leopard em uma VM esses dias e tive que alterar o teclado para o padrão ABNT2. Depois de alguma pesquisa encontrei o seguinte site http://www. appunix. com. br/howto/mac-os/teclado-abnt2-on-mac-os-x-hackintosh-snow-leopad/ que descreve como fazer o procedimento manual e, também fornece um arquivo . pkg para instalar as configurações do teclado ABNT2. --- - Published: 2011-02-02 - Modified: 2011-02-02 - URL: https://www.fnbrandao.com.br/blog/2011/02/upgrade-do-ubuntu-10-04-para-10-10-an-unresolvable-problem-occurred-while-calculating-the-upgrade/ - Categorias: Linux, Ubuntu - Tags: 10.04, 10.10, ubuntu, unresolvable problem, upgrade, xserver-xorg-video-nouveau Essa semana atualizei o ubuntu que estava na minha máquina da versão 8. 04 até a 10. 10. Para fazer esse upgrade tive que atualizar versão por versão, nada que fosse muito difícil já que o programa de atualização faz tudo automaticamente. Ao tentar migrar da versão 10. 04 para a versão 10. 10 apareceu o seguinte erro: Could not determine the upgrade An unresolvable problem occurred while calculating the upgrade: E:Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages. This can be caused by: * Upgrading to a pre-release version of Ubuntu * Running the current pre-release version of Ubuntu * Unofficial software packages not provided by Ubuntu Após algumas pesquisas na internet a solução foi remover o pacote xserver-xorg-video-nouveau através do comando: apt-get --purge remove xserver-xorg-video-nouveau Fontes: http://ubuntuforums. org/showthread. php? t=1664249 https://bugs. launchpad. net/ubuntu/+source/xorg-server/+bug/614993 --- - Published: 2011-01-27 - Modified: 2021-10-22 - URL: https://www.fnbrandao.com.br/blog/2011/01/weblogic-10-3-0-0-jsf-2-0-ejb-injection/ - Categorias: Java EE, Programação - Tags: @ejb, jsf 2.0, weblogic Ao se colocar o JSF 2. 0 no Weblogic 10. 3. 0. 0, os EJB's não são injetados nos manageds beans do JSF através da anotação @EJB. Para corrigir esse problema, basta utilizar a classe abaixo: import java. lang. reflect. Field; import java. util. *; import javax. ejb. EJB; import javax. el. *; import javax. naming. NamingException; import com. sun. faces. el. ManagedBeanELResolver; public class VariableResolver extends CompositeELResolver { private final Map ejbFields; public VariableResolver { this. ejbFields = new HashMap; add(new ManagedBeanELResolver); } private void preencherEjbFields(List fields, Class clazz, Set visitados) { if (clazz ! = null && ! visitados. contains(clazz)) { visitados. add(clazz); for (Field field : clazz. getDeclaredFields) { EJB ejb = field. getAnnotation(EJB. class); if (ejb ! = null) { field. setAccessible(true); fields. add(new EJBField(field, ejb. mappedName, field. getType)); } } preencherEjbFields(fields, clazz. getSuperclass, visitados); for (Class i : clazz. getInterfaces) { preencherEjbFields(fields, i, visitados); } } } private List getEjbFields(Object obj) { List fields = ejbFields. get(obj. getClass); if (fields == null) { fields = new ArrayList; Set visitados = new HashSet; preencherEjbFields(fields, obj. getClass, visitados); synchronized (ejbFields) { ejbFields. put(obj. getClass, fields); } } return fields; } private void processarEjbs(Object obj) throws IllegalAccessException, ClassCastException, NamingException, IllegalArgumentException { for (EJBField field : getEjbFields(obj)) { if (field. getField. get(obj) == null) { Object ejb = ServiceLocator. lookup(field. getType, field. getMappedName); field. getField. set(obj, ejb); } } } @Override public Object getValue(ELContext arg0, Object arg1, Object arg2) { try { Object obj = super. getValue(arg0, arg1, arg2);... --- - Published: 2011-01-27 - Modified: 2011-01-27 - URL: https://www.fnbrandao.com.br/blog/2011/01/weblogic-jpa-hibernate-classnotfoundexception-org-hibernate-hql-ast-hqltoken/ - Categorias: Java, Java EE, Programação - Tags: hibernate, jpa, weblogic Ao tentar efetuar o deploy de uma aplicação com JPA (implementação: Hibernate), ocorre o seguinte erro: org. springframework. orm. hibernate3. HibernateQueryException: ClassNotFoundException: org. hibernate. hql. ast. HqlToken ; nested exception is org. hibernate. QueryException: ClassNotFoundException: org. hibernate. hql. ast. HqlToken Caused by: org. hibernate. QueryException: ClassNotFoundException: org. hibernate. hql. ast. HqlToken at org. hibernate. hql. ast. HqlLexer. panic(HqlLexer. java:57) at antlr. CharScanner. setTokenObjectClass(CharScanner. java:340) at org. hibernate. hql. ast. HqlLexer. setTokenObjectClass(HqlLexer. java:31) at antlr. CharScanner. (CharScanner. java:51) at antlr. CharScanner. (CharScanner. java:60) at org. hibernate. hql. antlr. HqlBaseLexer. (HqlBaseLexer. java:56) at org. hibernate. hql. antlr. HqlBaseLexer. (HqlBaseLexer. java:53) at org. hibernate. hql. antlr. HqlBaseLexer. (HqlBaseLexer. java:50) at org. hibernate. hql. ast. HqlLexer. (HqlLexer. java:26) at org. hibernate. hql. ast. HqlParser. getInstance(HqlParser. java:44) at org. hibernate. hql. ast. QueryTranslatorImpl. parse(QueryTranslatorImpl. java:242) at org. hibernate. hql. ast. QueryTranslatorImpl. doCompile(QueryTranslatorImpl. java:157) at org. hibernate. hql. ast. QueryTranslatorImpl. compile(QueryTranslatorImpl. java:111) at org. hibernate. engine. query. HQLQueryPlan. (HQLQueryPlan. java:77) at org. hibernate. engine. query. HQLQueryPlan. (HQLQueryPlan. java:56) at org. hibernate. engine. query. QueryPlanCache. getHQLQueryPlan(QueryPlanCache. java:72) at org. hibernate. impl. AbstractSessionImpl. getHQLQueryPlan(AbstractSessionImpl. java:133) at org. hibernate. impl. AbstractSessionImpl. createQuery(AbstractSessionImpl. java:112) at org. hibernate. impl. SessionImpl. createQuery(SessionImpl. java:1623) at org. springframework. orm. hibernate3. HibernateTemplate$29. doInHibernate(HibernateTemplate. java:837) at org. springframework. orm. hibernate3. HibernateTemplate. execute(HibernateTemplate. java:367) at org. springframework. orm. hibernate3. HibernateTemplate. find(HibernateTemplate. java:835) at org. springframework. orm. hibernate3. HibernateTemplate. find(HibernateTemplate. java:827) at db. ProductManagerDaoHB. getProductList(ProductManagerDaoHB. java:14) at bus. ProductManager. getProducts(ProductManager. java:25) at web. controllers. SpringappController. handleRequest(SpringappController. java:33) at org. springframework. web. servlet. mvc. SimpleControllerHandlerAdapter. handle(SimpleControllerHandlerAdapter. java:48) at org.... --- - Published: 2011-01-27 - Modified: 2011-01-27 - URL: https://www.fnbrandao.com.br/blog/2011/01/passando-propriedades-de-sistemas-para-os-testes-no-maven/ - Categorias: Java, Programação - Tags: maven, system.getproperty, tests Esses dias precisei fazer alguns testes que verificavam se existia uma propriedade de sistema para tomar determinada ação. Ao se passar a propriedade através da seguinte linha de comando: mvn -Dminha. propriedade=valor test Verifiquei que o teste nunca encontrava a propriedade passada através da chamada System. getProperty("minha. propriedade"). Dois jeitos fáceis para fazer a passagem de propriedade corretamente para os testes são: mvn -Dminha. propriedade=valor test -DforkMode=never ou mvn test -DargLine="-Dminha. propriedade=valor" Particularmente eu prefiro o segundo jeito. Fonte: http://stackoverflow. com/questions/824019/maven-2-1-0-not-passing-on-system-properties-to-java-virtual-machine --- - Published: 2011-01-27 - Modified: 2011-01-27 - URL: https://www.fnbrandao.com.br/blog/2011/01/describe-no-oracle-de-uma-tabela-com-dblink/ - Categorias: Oracle, Programação - Tags: dblink, describe, Oracle, table Primeiramente vamos encontrar o nome do dblink onde a tabela está realmente localizada. Isto é feito através do comando: SELECT DB_LINK FROM ALL_SYNONYMS WHERE SYNONYM_NAME = 'MINHA_TABELA' Após isto basta obter as informações da tabela com os seguintes selects: SELECT * FROM ALL_TABLES@MEU_DB_LINK WHERE TABLE_NAME = 'MINHA_TABELA' SELECT * FROM USER_TAB_COLUMNS@MEU_DB_LINK WHERE TABLE_NAME = 'MINHA_TABELA' Fonte: http://forums. oracle. com/forums/thread. jspa? messageID=4411870&tstart=0 --- - Published: 2010-09-28 - Modified: 2010-09-28 - URL: https://www.fnbrandao.com.br/blog/2010/09/winamp-mp4/ - Categorias: Winamp - Tags: mp4, Winamp Hoje fui executar um vídeo mp4 dentro do winamp, mas o mesmo não funcionou. Após algumas pesquisas no Google achei o link http://forum. doom9. org/archive/index. php/t-90134. html que fala que é só instalar os codec's xvid, 3ivx, DIVX anti-freeze e WM9codecs e ir no Winamp em Preferences - Plug-ins - Input - Nullsoft Directshow Decoder e adicionar a extensão MP4 à lista. No meu caso acho que não tenho esses codec's instalados, apenas o ffdshow --- - Published: 2010-08-23 - Modified: 2010-08-23 - URL: https://www.fnbrandao.com.br/blog/2010/08/rompimento-do-tendao-de-aquiles-volta-ao-taekwondo/ - Categorias: Taekwondo, Vida - Tags: bota ortopédica, cirurgia, fisioterapia, robofoot, rompimento, Taekwondo, tendão de aquiles Após quase 10 meses que sofri a lesão, voltei a fazer aulas de taekwondo. Hoje fiz uma aula bem tranquila, já que esta semana vai ter exame de faixa (e novamente eu irei perder o exame! ). Acabei fazendo um pouco de corrida, polichinelo, abdominais e chutes na raquete. Não senti dor ou qualquer coisa diferente do normal. Só não fiz duas coisas: flexão de braço e troca de base. A primeira porque é necessário ficar na ponta do pé e a segunda porque foi em uma mudança de base que eu rompi o tendão. Acho que o problema maior é adquirir confiança para fazer esses movimentos mais forçados. Daqui 2 / 3 meses vou retornar ao médico só para ele verificar como está o tendão, mas parece que agora realmente está tudo bem! --- - Published: 2010-06-21 - Modified: 2010-06-21 - URL: https://www.fnbrandao.com.br/blog/2010/06/show-aerosmith-290510/ - Categorias: Aerosmith, Shows - Tags: Aerosmith Colocando as fotos do show após quase 1 mês! ! ! Seguem abaixo algumas fotos: As fotos estão em: http://picasaweb. google. com/fabio. nb/Aerosmith290510 --- - Published: 2010-04-25 - Modified: 2010-04-25 - URL: https://www.fnbrandao.com.br/blog/2010/04/show-megadeth-240410/ - Categorias: Megadeth, Shows - Tags: Megadeth Show do Megadeth no Creditcard Hall! ! ! Seguem abaixo algumas fotos: As fotos estão em: http://picasaweb. google. com/fabio. nb/Megadeth240410 --- - Published: 2010-04-21 - Modified: 2010-04-21 - URL: https://www.fnbrandao.com.br/blog/2010/04/upgrade-para-o-ubuntu-9-10/ - Categorias: Ubuntu - Tags: 9.10, amsn, Firefox, fonte, ubuntu, upgrade Hoje migrei o Ubuntu da versão 9. 04 para 9. 10. Tive apenas um único problema que o Firefox ficou com fontes estranhas no menu. Para resolver este problema basta fazer o seguinte: sudo rm /etc/fonts/conf. d/10-hinting-slight. conf sudo ln -s /etc/fonts/conf. avail/10-hinting-full. conf /etc/fonts/conf. d/ A correção acima foi retirada de http://ubuntu-virginia. ubuntuforums. org/showthread. php? t=1305969. Uma melhoria que fiz foi utilizar a nova versão do amsn, para isto basta adicionar o seguinte repositório no ubuntu (http://www. ubuntu-inside. me/2009/05/amsn-daily-repository-for-ubuntu-jaunty. html): deb http://ppa. launchpad. net/amsn-daily/ppa/ubuntu karmic main De resto, foi tudo tranquilo. --- - Published: 2010-04-20 - Modified: 2010-04-20 - URL: https://www.fnbrandao.com.br/blog/2010/04/selenium-wait-for-ajax/ - Categorias: Java, Programação, Selenium - Tags: ajax, Selenium, waitforcondition Hoje tive que fazer um teste automatizado que deveria obrigatoriamente esperar por um Ajax ser executado para continuar a sua execução. Encontrei este link: http://agilesoftwaretesting. com/? p=111, que fala o seguinte: Faça um método em java como: public static void waitForAjax(Selenium selenium, String timeout) { String js_condition = "selenium. browserbot. getCurrentWindow. jQuery. active == 0"; selenium. waitForCondition(js_condition, timeout); } O valor da variável js_condition dependerá do framework JS que está sendo utilizado no site. Basicamente ele segue o seguinte formato: "selenium. browserbot. getCurrentWindow. " + library specific string + " == 0" Onde a parte específica pode ser: jQuery: "jQuery. active" Prototype: "Ajax. activeRequestCount" Dojo: "dojo. io. XMLHTTPTransport. inFlight. length" --- - Published: 2010-03-18 - Modified: 2010-03-18 - URL: https://www.fnbrandao.com.br/blog/2010/03/rompimento-do-tendao-de-aquiles-cicatriz/ - Categorias: Taekwondo, Vida - Tags: bota ortopédica, carro, cicatriz, cirurgia, fisioterapia, musculação, robofoot, rompimento, Taekwondo, tendão de aquiles Abaixo duas foto de como ficou a cirurgia. A primeira foi uma foto tirada 1 mês após a cirurgia na qual ainda aparecem os pontos. A segunda foto foi tirada 5 meses após a cirurgia. --- - Published: 2010-02-01 - Modified: 2010-02-01 - URL: https://www.fnbrandao.com.br/blog/2010/02/rompimento-do-tendao-de-aquiles-%e2%80%93-recuperacao-2/ - Categorias: Taekwondo, Vida - Tags: bota ortopédica, carro, cirurgia, fisioterapia, musculação, robofoot, rompimento, Taekwondo, tendão de aquiles Alguns dias atrás fez 3 meses que operei por causa da ruptura total do tendão de aquiles. Minha recuperação está muito boa e tranquila. Já fiz 17 sessões de fisioterapia, tenho andado bastante e só começo a mancar após muito tempo andando (30 minutos ou mais) ou quando fico de pé por bastante tempo. Semana passada fui ao médico e ele trocou minha fisioterapia por musculação. Acho que hoje já irei ver alguma academia perto de casa para começar antes da semana que vem. --- - Published: 2010-01-11 - Modified: 2010-01-11 - URL: https://www.fnbrandao.com.br/blog/2010/01/como-montar-arquivos-bin-cue-no-linux/ - Categorias: Linux, Ubuntu - Tags: bin, cue, iso, Linux, mount Um dos jeitos para montar arquivos bin / cue no Linux é primeiro convertendo-os para o formato iso. Isto pode ser feito da seguinte maneira: Instale o programa bchunk sudo apt-get install bchunk Converta o bin e cue para iso bchunk arquivo. bin arquivo. cue arquivo Monte o iso sudo mount -o loop -t iso9660 arquivo. iso /mnt/tmp Referência: http://goinggnu. wordpress. com/2007/05/08/howto-mount-bincue-files-in-linux/ --- - Published: 2010-01-06 - Modified: 2010-01-06 - URL: https://www.fnbrandao.com.br/blog/2010/01/the-duct-tape-programmer/ - Categorias: Programação - Tags: duct tape programmer Hoje voltei a ler os artigos que estavam armazenados nas abas do meu firefox! Este eu não lembro quem me enviou, acho que foi pelo twitter. Alguns trechos interessantes: And the duct-tape programmer is not afraid to say, “multiple inheritance sucks. Stop it. Just stop. ” Here’s what Zawinski says about Netscape: “It was decisions like not using C++ and not using threads that made us ship the product on time. ” Peter asked Zawinski, “Overengineering seems to be a pet peeve of yours. ” “Yeah,” he says, “At the end of the day, ship the fucking thing! It’s great to rewrite your code and make it cleaner and by the third time it’ll actually be pretty. But that’s not the point—you’re not here to write code; you’re here to ship products. ” Zawinski didn’t do many unit tests. They “sound great in principle. Given a leisurely development pace, that’s certainly the way to go. But when you’re looking at, ‘We’ve got to go from zero to done in six weeks,’ well, I can’t do that unless I cut something out. And what I’m going to cut out is the stuff that’s not absolutely critical. And unit tests are not critical. If there’s no unit test the customer isn’t going to complain about that. ” http://www. joelonsoftware. com/items/2009/09/23. html --- - Published: 2010-01-06 - Modified: 2010-01-06 - URL: https://www.fnbrandao.com.br/blog/2010/01/o-minimo-que-todo-o-desenvolvedor-de-software-precisa-saber-sobre-unicode-e-charsets/ - Categorias: Programação - Tags: character set, charset, unicode Hoje, após muito tempo resolvi ler um artigo recomendado por um colega do trabalho (Willian). O artigo fala sobre o problema da representação de string nos computadores e como escrever uma aplicação de forma correta para que os usuários não vejam o texto com problemas (como por exemplo letras substituídas por uma ? ou um quadrado preenchido com uma interrogação no meio). http://www. joelonsoftware. com/articles/Unicode. html --- - Published: 2010-01-04 - Modified: 2021-10-21 - URL: https://www.fnbrandao.com.br/blog/2010/01/php-zend-pdo-mysql/ - Categorias: MySQL, PHP - Tags: access denied for user, mysql, pdo, php, unknown mysql server host, zend, zend framework Hoje eu estava fazendo um site utilizando php, Zend Framework, PDO e MySQL. Quando fui fazer uma tela que se conectava com o banco de dados, ocorria o seguinte erro: SQLSTATE Unknown MySQL server host ''localhost'' (1) Removi do arquivo de configuração a linha que informava o host onde estava o banco de dados e o erro passou a ser: SQLSTATE Access denied for user 'user'@'localhost' (using password: YES) Não, as permissões não estavam erradas. O problema todo era o arquivo de configuração do zend (application. ini), que estava assim: resources. db. params. host = 'localhost' resources. db. params. username = 'user' resources. db. params. password = 'pass' resources. db. params. dbname = 'db' O problema todo era as aspas simples, deveriam ser aspas duplas: resources. db. params. host = "localhost" resources. db. params. username = "user" resources. db. params. password = "pass" resources. db. params. dbname = "db" Acabei perdendo a manhã toda até achar este pequeno problema. --- - Published: 2009-12-27 - Modified: 2009-12-27 - URL: https://www.fnbrandao.com.br/blog/2009/12/rompimento-do-tendao-de-aquiles-recuperacao/ - Categorias: Taekwondo, Vida - Tags: bota ortopédica, carro, cirurgia, fisioterapia, robofoot, rompimento, Taekwondo, tendão de aquiles Após 61 dias de cirurgia (26/12/2009) voltei a dirigir. Estou conseguindo dirigir por um bom tempo e não tenho dores. O problema ainda é que no final do dia meu pé fica extremamente inchado e tenho que fazer compressa no tornozelo para diminuir o inchaço. --- - Published: 2009-12-23 - Modified: 2009-12-23 - URL: https://www.fnbrandao.com.br/blog/2009/12/rompimento-do-tendao-de-aquiles-fisioterapia/ - Categorias: Taekwondo, Vida - Tags: bota ortopédica, cirurgia, fisioterapia, robofoot, rompimento, Taekwondo, tendão de aquiles Ontem (22/12/2009) fez 57 dias que fiz a cirurgia no tendão de aquiles. Ontem também foi minha segunda sessão de fisioterapia. Essas duas primeiras sessões foram bem parecidas: 15 minutos com compressa de água quente, exercícios de movimentação do pé (30 minutos) e 15 minutos com compressa de gelo. A sessão de ontem teve apenas uma diferença: andei um pouco durante a sessão enquanto o fisioterapeuta corrigia a minha passada, pois eu estou mancando. Durante as sessões senti muito pouca dor, sendo que só nos exercícios com peso que eu senti alguma dor na panturrilha. Na próxima sessão estarei liberado para fazer bicicleta também. Ontem também larguei definitivamente a robofoot, já que não estou sentindo dores ao andar. Acho que agora só falta recuperar massa muscular e parar de mancar. --- - Published: 2009-12-18 - Modified: 2009-12-23 - URL: https://www.fnbrandao.com.br/blog/2009/12/rompimento-do-tendao-de-aquiles-terceiro-retorno/ - Categorias: Taekwondo, Vida - Tags: bota ortopédica, cirurgia, fisioterapia, robofoot, rompimento, Taekwondo, tendão de aquiles 53 dias após a cirurgia voltei ao médico. A minha recuperação está indo bem e como dia 21/12/2009 irá fazer 8 semanas que fiz a cirurgia, já vou poder começar a fazer a fisioterapia. O médico pediu 10 sessões de fisioterapia (treino de marcha, ganho de ADM e força muscular) e já consegui marcar 7 sessões. Não consegui marcar mais 3 sessões pois o meu convênio só permite marcar 7 sessões por vez. As sessões estão marcadas para os dias 21/12, 22/12, 28/12, 29/12, 04/01, 05/01 e 06/01. O médico pediu para voltar a marcar uma consulta com ele após estas sessões, então devo passar em uma nova consulta lá pelo dia 08/01/2010. À partir do dia 21/12 vou poder começar a andar sem a robofoot! Outra boa notícia é que ele me disse que talvez em mais 1 mês eu esteja andando normalmente. Assim espero pois andar com robofoot é chato demais. --- - Published: 2009-12-04 - Modified: 2009-12-04 - URL: https://www.fnbrandao.com.br/blog/2009/12/rompimento-do-tendao-de-aquiles-segundo-retorno/ - Categorias: Taekwondo, Vida - Tags: bota ortopédica, cirurgia, robofoot, rompimento, Taekwondo, tendão de aquiles Após 39 dias de cirurgia voltei ao médico e tive uma boa notícia: posso voltar a andar com a bota ortopédica robofoot. Já comecei a andar com a ajuda de uma bengala (só estou utilizando-a pois estou com receio de cair e machucar novamente a perna) e já consigo fazer boas caminhadas. Não sinto dores e o único problema é dar os 3 primeiros passos da caminhada: parece que minha sola do pé dá um choque ao colocar o peso do corpo na perna com o tendão lesionado. Após esses passos tudo volta ao normal e consigo caminhar "normalmente" (leia: caminhar um pouco de lado e de forma lenta). Estou proibido de colocar o pé no chão sem robofoot, pois isto pode causar o rompimento do tendão. Daqui 15 dias voltarei ao médico, e pelo que ele me falou nessa consulta, se a recuperação continuar na mesma velocidade que está já poderei fazer fisioterapia. --- - Published: 2009-11-11 - Modified: 2009-11-11 - URL: https://www.fnbrandao.com.br/blog/2009/11/rompimento-do-tendao-de-aquiles-retorno/ - Categorias: Taekwondo, Vida - Tags: bota ortopédica, cirurgia, robofoot, rompimento, Taekwondo, tendão de aquiles Após um pouco mais de 2 semanas depois da cirurgia, voltei ao médico para verificar como estava a minha perna. A cicatrização do corte está boa, com pouco sangue, e o tendão está no lugar correto. Como tudo está ok, pude retirar o gesso e trocar pela bota ortopédica robofoot. Basicamente, a diferença é que com o gesso meu pé estava na posição equina(sendo que esta é a posição normal ao se engessar o pé após a cirurgia para rompimento do tendão de aquiles), e agora com a robofoot meu pé está a 90º. Se tudo correr bem, daqui 1 mês poderei começar a pisar e fazer fisioterapia. Quem sabe no natal eu já esteja andando normalmente! --- - Published: 2009-11-01 - Modified: 2009-11-01 - URL: https://www.fnbrandao.com.br/blog/2009/11/novo-site-do-pagseguro/ - Categorias: Java, Programação, Vida - Tags: PagSeguro, UOL O novo site do PagSeguro não foi apenas uma melhoria no código antigo, foi muito mais que isso. O novo site do PagSeguro foi a reescrita completa de um enorme sistema que estava em produção. A entrada em produção começou no dia 30/10/2009 no início da noite, onde o sistema antigo foi alterado para não permitir a utilização do saldo nem o login dos usuários. Após um certo tempo, a migração de dados do sistema antigo para o sistema novo foi iniciada. Essa parte deve ter demorado em torno de 10 horas. Após isto, o novo sistema foi liberado para o pessoal que estava dentro do UOL para a homologação. Foram encontrados alguns problemas (nada sério, ex. : tela de consulta do CEP no cadastro não estava funcionando) que foram corrigidos de forma fácil e rápido. Após essa homologação o sistema foi liberado para os usuários no dia 01/11/2009 às 01:11:11. Essa reescrita de sistema envolveu desde uma remodelagem completa do banco de dados (também foi trocado de SQLServer para Oracle), troca de linguagem de programação (. Net para Java), e duas coisas críticas: troca de conceitos e de regras de negócio. A troca de conceitos deve-se ao novo jeito que as transações são vistas no sistema. Antes, cada movimentação de dinheiro (ou movimentação financeira) era feita através de uma nova transação. No novo PagSeguro cada intenção de compra, adição de fundos, etc, cria apenas uma transação, sendo que esta transação pode possuir diversas movimentações financeiras associadas. Outra mudança grande... --- - Published: 2009-10-29 - Modified: 2009-10-29 - URL: https://www.fnbrandao.com.br/blog/2009/10/rompimento-do-tendao-de-aquiles/ - Categorias: Taekwondo, Vida - Tags: cirurgia, rompimento, Taekwondo, tendão de aquiles Faz 2 meses que voltei a fazer taekwondo (já tinha feito cerca de 2 anos e depois fiz mais 2 anos de kung-fu). Estava fazendo aula todas as semanas, pelo menos 2 aulas por semana. Como estava de férias estava fazendo 3 aulas por semana. No dia 23/10/2009 fui fazer 2 aulas. A primeira aula foi mais pesada, com treino de chutes em raquete, utilizando diversas combinações de chutes (até 4). A primeira aula acabou sem eu ter me cansado muito e depois de 15 minutos começou a segunda aula. A segunda aula foi uma aula no estilo da primeira, só que ao invés de utilizar raquete foi utilizado colete. Após uns 45 minutos de aula, estávamos fazendo um treino mais de reflexo e velocidade de chute. O movimento era simples, perna direita na frente, troca de base e chute da faixa branca com a perna direita (que após a troca de base estaria atrás). Na minha primeira tentantiva, após a troca de base, quando fui dar o chute, no momento em que o meu pé saiu do chão escutei um estalo muito alto e como se tivesse levado um chute na pantorrilha da perna direita. Olhei para trás e não havia ninguém. A primeira coisa que me veio na cabeça: "Quebrei a perna". O que eu senti é descrito nos livros de medicina como sendo a "síndrome da pedrada". Na hora senti muita dor e não conseguia colocar o pé no chão. Outra coisa que não conseguia era fazer... --- - Published: 2009-10-23 - Modified: 2009-10-23 - URL: https://www.fnbrandao.com.br/blog/2009/10/turbogears-2-i18n-formatacao-de-datas-e-numeros/ - Categorias: Programação, Python - Tags: babel, formatação datas, formatação números, i18n, Locale, turbogears Para setar a linguagem padrão da sua aplicação utilizando o turbogears basta editar o arquivo development. ini e incluir a seguinte linha após : lang = pt_BR Depois execute os seguintes comandos: python setup. py extract_messages python setup. py init_catalog -l pt_BR python setup. py compile_catalog O primeiro comando extrai todas as mensages que devem ser traduzidas (dos templates e dos códigos python). O segundo comando cria um arquivo de tradução para a linguagem pt_BR. Após esse passo, você deve editar o arquivo gerado para traduzir as mensagens. O terceiro comando compila as mensagens traduzidas. Agora para formatar datas e números no formato da linguagem padrão (ou da linguagem selecionada pelo usuário) basta criar o arquivo lib/i18nHelpers. py: import tg. i18n import babel. numbers import babel. dates __all__ = def get_lang(lang): if lang: return lang return tg. i18n. get_lang def format_currency(number, currency = "", locale = None, *args, **kargs): return babel. numbers. format_currency(number, currency, locale = get_lang(locale), *args, **kargs) def format_datetime(datetime, *args, **kargs): return babel. dates. format_datetime(datetime, locale = get_lang(locale), *args, **kargs) E importar essas funções no arquivo lib/helpers. py. No seu template basta fazer algo assim: R$ ${h. format_currency(xyz. valor)} Não mapei todas as funções que o Babel disponibiliza, mas basta fazer como foi feito com essas duas funções. --- - Published: 2009-10-23 - Modified: 2009-10-23 - URL: https://www.fnbrandao.com.br/blog/2009/10/turbogears-2-e-elixir/ - Categorias: Programação, Python - Tags: active record, elixir, python, turbogears Para se integrar o elixir no turbogears 2, basta editar o arquivo model/__init__. py do seu projeto para ficar desse jeito: # -*- coding: utf-8 -*- from zope. sqlalchemy import ZopeTransactionExtension from sqlalchemy. orm import scoped_session, sessionmaker from sqlalchemy. ext. declarative import declarative_base import elixir maker = sessionmaker(autoflush=True, autocommit=False, extension=ZopeTransactionExtension) DBSession = scoped_session(maker) elixir. session = DBSession elixir. options_defaults = True DeclarativeBase = declarative_base metadata = DeclarativeBase. metadata elixir. metadata = metadata def init_model(engine): """Call me before using any of the tables or classes in the model. """ DBSession. configure(bind=engine) from xyz. model. auth import User, Group, Permission from xyz. model. entidades import Xyz elixir. setup_all E para declarar suas entidades, basta fazer do jeito do Elixir, estendendo a classe elixir. Entity. Com essa integração conseguimos utilizar o padrão Active Record. --- - Published: 2009-10-14 - Modified: 2009-10-14 - URL: https://www.fnbrandao.com.br/blog/2009/10/instalando-o-setuptools-no-python-26-no-windows/ - Categorias: Programação, Python - Tags: easy_install, python, setuptools Para instalar o setuptools no Python 2. 6 no Windows baixe os seguintes arquivos: setuptools-0. 6c9. tar. gz setuptools-0. 6c9-py2. 6. egg Estes arquivos estão no site: http://pypi. python. org/pypi/setuptools. Depois extraia o arquivo setuptools-0. 6c9. tar. gz e execute o seguinte comando: python ez_setup. py setuptools-0. 6c9-py2. 6. egg O comando acima irá instalar o setuptools no diretório de instalação do python. Para executar o easy_install basta que no PATH do sistema esteja o diretório Scripts que está dentro da pasta de instalação do Python. --- - Published: 2009-09-23 - Modified: 2021-10-21 - URL: https://www.fnbrandao.com.br/blog/2009/09/as-coisas-estupidas-feitas-quando-se-trabalha-com-programacao/ - Categorias: Java, Java EE, Programação - Tags: erros, estupidez, Programação Este post foi traduzido e alterado deste link: http://blog. cherouvim. com/the-stupidest-things-ive-done-in-my-programming-job/ Observação: Não fui eu quem escreveu este post. Apenas fiz a tradução e alteração pois achei muito interessante. As coisas estúpidas feitas quando se trabalho com programação ORM Estupidez Construir um framework próprio de ORM. Consequências O projeto vira uma bagunça depois de 2 anos de manutenção com gambiarras para passar pelo meu framework ORM desenvolvido e chamar comandos SQL's customizados. O que deveria ter sido feito? Usar hibernate, iBATIS, Cayenne ou outros parecidos. EAV Estupidez Usar uma modelagem de banco de dados do tipo Entity-Attribute-Value model. Consequências Solução não escalável e impossibilidade de rodar queries úteis no banco de dados. O que deveria ter sido feito? Usar uma modelagem de banco de dados normalizada. Acesso ao Banco de dados Estupidez Sincronizar o acesso ao banco de dados com uma conexão compartilhada. Consequências Escalabilidade zero. Tempos de respostas muito lentos quando mais de 10 usuários estavam utilizando a aplicação. O que deveria ter sido feito? Não fazer isto e utilizar um pool de conexões como c3p0 e usar uma "nova" (reutilizada) conexão retornada do pool para cada ciclo de request / response. IDE Estupidez Evitar aprender e utilizar uma IDE. Consequências Falta de habilidade de compilar, testar e fazer o deploy da aplicação rapidamente e / ou geralmente fazer qualquer coisa útil. O que deveria ter sido feito? Familiarizar-me com uma IDE. Ex. : NetBeans, eclipse, etc. Transações Estupidez Não usá-las. Consequências Corromper os dados da aplicação. O que... --- - Published: 2009-08-30 - Modified: 2009-08-30 - URL: https://www.fnbrandao.com.br/blog/2009/08/trocando-a-localizacao-de-um-repositorio-svn-de-uma-working-copy/ - Categorias: Programação - Tags: host, localização, relocate, svn, switch Essa semana troquei o repositório svn de um sistema meu do meu desktop para o site http://www. xp-dev. com. Tive que trocar todas as working copies do meu notebook e desktop para referenciar essa nova localização. Para fazer isso basta utilizar o seguinte comando: svn sw --relocate --- - Published: 2009-07-27 - Modified: 2009-07-27 - URL: https://www.fnbrandao.com.br/blog/2009/07/ora-17410-no-more-data-to-read-from-socket/ - Categorias: Programação - Tags: índice, no more data to read from socket, ora-17410, Oracle Semana passada no trabalho perdi umas 2 horas com o problema ORA-17410: No more data to read from socket. Em diversos lugares falava que era porque o oracle não estava suportando o modo de conexões compartilhadas. Tentei alterar o oracle para dar o suporte para conexões compartilhadas mas sem sucesso. Após algumas tentativas, verifiquei que o problema era ocasionado quando fazia um select no banco de dados e esse select utilizava um índice específico. Depois de dropar e recriar o índice este erro parou de acontecer. --- - Published: 2009-07-21 - Modified: 2009-07-21 - URL: https://www.fnbrandao.com.br/blog/2009/07/freemarker-sitemesh-spring/ - Categorias: Java EE - Tags: freemarker, java, sitemesh, spring Depois de muito tempo consegui fazer minha aplicação utilizando Freemarker (template engine) + Sitemesh (web page layout framework) + Spring (IOC, etc) funcionar. Basicamente, basta configurar no web. xml o filtro do Sitemesh (com. opensymphony. sitemesh. webapp. SiteMeshFilter), a servlet do Freemarker que vem com o Sitemesh (com. opensymphony. module. sitemesh. freemarker. FreemarkerDecoratorServlet) e a servlet do Spring MVC (org. springframework. web. servlet. DispatcherServlet). O filtro do Sitemesh é aplicado a todas as requisições, a servlet do freemarker às urls *. ftl e a servlet do Spring às urls *. html. O problema que eu tive foi que os templates do Freemarker e do Sitemesh não eram encontrados. No web. xml, um dos parâmetros iniciais da servlet do Freemarker é o diretório dos templates (TemplatePath). Configurei este parâmetro para "/WEB-INF/templates/". E no arquivo decorators. xml configurei que os templates do Sitemesh ficavam no diretório "/decorators". O que acontecia é que o diretório dos templates do Sitemesh deveriam ficar dentro do diretório dos templates do Freemarker. Logo a estrutura de diretórios é dessa maneira: /WEB-INF/templates/decorators. Segue abaixo o link com a aplicação de exemplo desta integração: http://www. fnbrandao. com. br/blog/files/freemarker. tar. gz --- - Published: 2009-05-15 - Modified: 2009-05-15 - URL: https://www.fnbrandao.com.br/blog/2009/05/voo-duplo-de-parapente-pedra-grande-atibaia-180409/ - Categorias: Esportes, Parapente - Tags: atibaia, paraglider, Parapente, pedra grande, vôo livre Há algum tempo atrás venho pensando seriamente em fazer algum esporte radical. Depois de conversar bastante, achei um esporte interessante: parapente. No dia 18 de março, fui até atibaia para fazer um vôo duplo para ver como que é esse esporte. O que posso dizer é que é muito bom, e apesar de meu medo sobre a segurança do esporte, este parece ser muito seguro. Ainda não sei quando e se vou mesmo começar a fazer as aulas para voar sozinho. Seguem abaixo algumas fotos: As fotos estão em: http://picasaweb. google. com/fabio. nb/ParapenteVooDuploAtibaiaPedraGrande180409 Os vídeos estão em: http://www. youtube. com/view_play_list? p=622B966AA3F0F01C --- - Published: 2009-04-22 - Modified: 2009-04-22 - URL: https://www.fnbrandao.com.br/blog/2009/04/show-kiss-070409/ - Categorias: Kiss, Shows - Tags: Kiss Kiss! ! ! You wanted the best, You've got the best, the hottest band in the world! Seguem abaixo algumas fotos: As fotos estão em: http://picasaweb. google. com/fabio. nb/Kiss070409 --- - Published: 2009-04-22 - Modified: 2009-04-22 - URL: https://www.fnbrandao.com.br/blog/2009/04/show-deep-purple-060309/ - Categorias: Deep Purple, Shows - Tags: Deep Purple Show do Deep Purple! ! ! Atrasadas, mas estão aí as fotos. Seguem abaixo algumas fotos: As fotos estão em: http://picasaweb. google. com/fabio. nb/DeepPurple060309 --- - Published: 2009-02-20 - Modified: 2009-04-22 - URL: https://www.fnbrandao.com.br/blog/2009/02/show-claustrofobia-in-flames-150209/ - Categorias: In Flames, Shows - Tags: Claustrofobia, In Flames Fui no show do Claustrofobia + In Flames, que foi muito bom. O que foi ruim foi o local do show: Santana Hall (fica na Av. Cruzeiro do Sul, perto do Metrô Carandiru), pois havia uma mureta no meio da pista, e a pista era muito pequena. Mas mesmo assim o show valeu a pena! Seguem abaixo algumas fotos: As fotos estão em: http://picasaweb. google. com/fabio. nb/ClaustrofobiaInFlames150209 --- - Published: 2008-12-14 - Modified: 2009-04-22 - URL: https://www.fnbrandao.com.br/blog/2008/12/show-queen-261108/ - Categorias: Queen, Shows - Tags: Queen Fui no show do Queen, que foi muito bom. Seguem abaixo algumas fotos: As fotos estão em: http://picasaweb. google. com/fabio. nb/Queen261108 --- - Published: 2008-12-14 - Modified: 2008-12-14 - URL: https://www.fnbrandao.com.br/blog/2008/12/ubuntu-kodak-c743/ - Categorias: Linux, Ubuntu - Tags: c743, kodak, ubuntu, udev Para utilizar a câmera digital Kodak EasyShare C743, basta criar o arquivo "/etc/udev/rules. d/KodakC743. rules" com o seguinte conteúdo: ACTION=="add", SYSFS{idVendor}=="Eastman Kodak Company", SYSFS{idProduct}=="KODAK EasyShare C743 Zoom Digital Camera", MODE="0660", GROUP="plugdev" E rodar o seguinte comando: "sudo /etc/init. d/udev restart" Para saber qual é o idVendor e o idProduct basta executar: "for dev in `ls /sys/bus/usb/devices`; do udevinfo -ap /sys/bus/usb/devices/$dev; done" Retirado de: http://linuxnet. blogspot. com/2007/03/kodak-c743-no-ubuntu-610. html http://ubuntuforums. org/showthread. php? t=286730 --- - Published: 2008-12-14 - Modified: 2008-12-14 - URL: https://www.fnbrandao.com.br/blog/2008/12/ubuntu-nokia-6235/ - Categorias: Ubuntu - Tags: 6235, nokia, ubuntu Para conectar o nokia 6235 no ubuntu, basta instalar o pacote obexfs e colocar no arquivo "/etc/fstab" a seguinte linha "obexfs#-u0 /media/fuse fuse user,fsname=obexfs#-u0 0 0". Após conectar o celular basta digitar no console: "sudo mount -a" Redirado de: http://dev. zuckschwerdt. org/openobex/wiki/ObexFs --- - Published: 2008-12-14 - Modified: 2008-12-14 - URL: https://www.fnbrandao.com.br/blog/2008/12/pdb-extractor/ - Categorias: Java, Programação - Tags: java, pdb extractor Ainda em relação ao post anterior, tive que extrair o conteúdo de um arquivo PDB (um formato de arquivo usado nos Palm's). Encontrei a solução parcial neste post:http://www. neowin. net/forum/index. php? s=d21af43a292e783de98d0644c0824b70&showtopic=689476&pid=590047756&st=0&#entry590047756 A solução descrita não funcionou, mas após algumas alterações na solução, serviu para o que eu precisava: /*** * T3_allfiles * based upon T3_APR. java from Shadowmite's forum * * This file will extract a binary file from it's * Palm PDB prison. Just drop this in the directory * that contains the *. pdb files, and run it. It'll * get them all. Well, mostly. See next. * * This file is NOT made to extract the rom image. * Use Grack's RomTool for that. */ import java. io. *; public class T3_allfiles { public static void main(String args) throws Exception { File directory = new File("/home/fabio/Desktop/pdb/"); String files = directory. list(new PDBfilter); for (String individualFile : files) { pdb2("/home/fabio/Desktop/pdb/" + individualFile); } } static void pdb2(String file) throws Exception { System. out. println(file); RandomAccessFile in = new RandomAccessFile(file, "r"); in. skipBytes(76); int numRec = in. readShort; int toc = new int; for (int i = 0; i < numRec; ++i) { toc = in. readInt; in. readInt; } for (int i = 0; i < numRec; ++i) { in. seek(toc); short fileNameSize = in. readShort; byte fn = new byte; in. read(fn); String fileName = new String(fn); System. out. println("\t" + fileName); String directories = fileName. split("\\/"); String directory = ". "; for (int j =... --- - Published: 2008-12-14 - Modified: 2008-12-14 - URL: https://www.fnbrandao.com.br/blog/2008/12/descompilando-java/ - Categorias: Java, Programação - Tags: descompilador, java, jd, jd-gui Há algum tempo atrás, peguei um serviço pra fazer no qual o cliente não tinha o código fonte do sistema. Após alguns dias procurando um descompilador java, achei este: JD-Gui Este descompilador é muito bom, devido à diversas features, como por exemplo, poder descompilar um jar inteiro, fazer links entre os arquivos descompilados, etc. --- - Published: 2008-11-10 - Modified: 2021-10-21 - URL: https://www.fnbrandao.com.br/blog/2008/11/ora-12519-tnsno-appropriate-service-handler-found/ - Categorias: Banco de dados, Oracle, Programação - Tags: ORA-12519, Oracle Tenho o oracle xe instalado no computador do trabalho. Após algumas horas trabalhando a aplicação não consegue mais se conectar com o banco de dados dando o erro "ORA-12519, TNS:no appropriate service handler found". Neste blog: http://en. newinstance. it/2007/06/01/ora-12519-tnsno-appropriate-service-handler-found/ a solução dada foi executar o seguinte comando como system: ALTER SYSTEM SET PROCESSES=150 SCOPE=SPFILE; Executei o comando e até agora não tive mais este erro! --- - Published: 2008-08-08 - Modified: 2008-08-08 - URL: https://www.fnbrandao.com.br/blog/2008/08/ubuntu-alsa-flash-device-or-resource-busy/ - Categorias: Ubuntu - Tags: alsa, Flash, Linux, ubuntu Após atualizar o ubuntu para 8. 04 no trabalho, não estava mais com sons simultâneos com o flash e o alsa. Quando tentava fazer: "aplay /usr/share/sounds/startup. wav" recebia o seguinte erro: ALSA lib pcm_dmix. c:874:(snd_pcm_dmix_open) unable to open slave aplay: main:546: audio open error: Device or resource busy Para arrumar isto basta criar o arquivo "/etc/asound. conf", com o seguinte conteúdo: pcm. ! default { type pulse } ctl. ! default { type pulse } E adicionar o seguinte pacote no ubuntu: libasound2-plugins. --- - Published: 2008-07-23 - Modified: 2008-07-23 - URL: https://www.fnbrandao.com.br/blog/2008/07/selenium-permission-denied-to-get-property-locationhref/ - Categorias: Java, Programação, Selenium - Tags: java, Location.href, Selenium Hoje tive um problema no Selenium, no qual o mesmo não conseguia verificar a url do navegador, jogando uma exceção com a seguinte mensagem: Permission denied to get property Location. href Procurando no google, encontrei o seguinte blog: http://www. woloszyn. org/2008/04/22/selenium-and-the-permission-denied-to-get-property-locationhref-problem/ Este blog mencionava que o problema era causado por um redirect enviado pelo response do servidor. A solução desse blog foi não utilizar o redirect. Em outro site: http://www. nabble. com/Permission-denied-to-get-property-Location. href-td8081383. html Falava que só bastava utilizar o *chrome ou *iehta (no meu código estava sendo utilizado o *firefox). Após esta alteração, tudo voltou a funcionar normalmente. --- - Published: 2008-07-22 - Modified: 2021-10-21 - URL: https://www.fnbrandao.com.br/blog/2008/07/archlinux-hp-pavilion-dv9000-suspend-e-hibernate/ - Categorias: ArchLinux, Linux, Programas - Tags: ArchLinux, dv9000, hibernate, HP, Linux, Suspend Como mencionado no último post, não estava conseguindo fazer meu notebook hibernar ou suspender no modo gráfico no Archlinux. Após uma simples pesquisa no google encontrei a solução: bastou colocar o meu usuário no grupo "power". --- - Published: 2008-07-13 - Modified: 2008-07-13 - URL: https://www.fnbrandao.com.br/blog/2008/07/instalacao-do-archlinux-no-hp-pavilion-dv9000/ - Categorias: ArchLinux - Tags: ArchLinux, dv9000, HP, notebook, Pavilion No último final de semana resolvi remover o ubuntu do meu notebook e instalar o archlinux. A instalação foi feita totalmente através de wireless (utilizando o post anterior para a autenticação). Não tive problemas durante a instalação, e o que eu fiz está muito bem documentado no wiki do archlinux: http://wiki. archlinux. org/index. php/Beginners_Guide O Gnome foi instalado, bem como os pacotes cleartype, que adicionam melhorias na renderização das fontes: http://wiki. archlinux. org/index. php/Fonts O único problema que tive até o momento foi que não consigo suspender ou hibernar o notebook pelo modo gráfico, mas executando o comando manualmente funciona perfeitamente. Quando descobrir a solução deste problema, eu escrevo um post! --- - Published: 2008-07-13 - Modified: 2008-07-13 - URL: https://www.fnbrandao.com.br/blog/2008/07/autenticacao-rede-wireless-wpa-no-linux-na-mao/ - Categorias: Linux - Tags: Linux, wireless, wpa, wpa_passphrase, wpa_supplicant Para autenticar na mão numa rede wireless wap basta utilizar os seguintes comandos: sudo iwconfig wlan0 sudo wpa_passphrase > wpa_supplicant. conf sudo wpa_supplicant -iwlan0 -cwpa_supplicant. conf Em outro terminal basta fazer: sudo dhcpcd wlan0 --- - Published: 2008-06-16 - Modified: 2008-06-16 - URL: https://www.fnbrandao.com.br/blog/2008/06/upgrade-ubuntu-e-problema-no-postgre/ - Categorias: Linux, Postgre, Ubuntu - Tags: Postgre, ubuntu, upgrade Após atualizar o Ubuntu para a versão 8. 04, o servidor do postgre não iniciava mais com o seguinte erro: * The PostgreSQL server failed to start. Please check the log output: BRT LOG: could not load root certificate file "root. crt": no SSL error reported BRT DETAIL: Will not verify client certificates. BRT FATAL: could not create shared memory segment: Invalid argument BRT DETAIL: Failed system call was shmget(key=5432001, size=34504704, 03600). BRT HINT: This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter. You can either reduce the request size or reconfigure the kernel with larger SHMMAX. To reduce the request size (currently 34504704 bytes), reduce PostgreSQL's shared_buffers parameter (currently 3456) and/or its max_connections parameter (currently 103). If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for. The PostgreSQL documentation contains more information about shared memory configuration. Foi necessário alterar o arquivo "/etc/postgresql/8. 3/main/postgresql. conf", trocando o valor da variável "shared_buffers" de "32MB" para "26MB". --- - Published: 2008-06-16 - Modified: 2008-06-16 - URL: https://www.fnbrandao.com.br/blog/2008/06/plugins-firefox3/ - Categorias: Firefox, Firefox 3, Programas - Tags: Firefox, Firefox 3, Plugins Após o upgrade do Ubuntu 7. 10 para 8. 04 no trabalho, alguns plugins não funcionavam no Firefox 3. Para fazer os plugins funcionarem, siga estes passos: Faça o download do arquivo . xpi do plugin desejado Abra o arquivo como um arquivo do tipo . zip Dentro do arquivo existe um arquivo chamado "install. rdf", altere este arquivo e troque o valor de qualquer "maxVersion" por "3. 0. 0. *" --- - Published: 2008-06-16 - Modified: 2008-06-16 - URL: https://www.fnbrandao.com.br/blog/2008/06/ubuntu-e-locale/ - Categorias: Linux, Ubuntu - Tags: ISO-8859-1, Locale, ubuntu Para se alterar o locale padrão do sistema, basta seguir esses passos: Adicione o seguinte texto "en_US. ISO-8859-1 ISO-8859-1" no final do arquivo "/var/lib/locales/supported. d/local" Troque o valor da variável "LANG" no arquivo "/etc/default/locale" por "en_US. ISO-8859-1" Execute o commando "sudo locale-gen --purge" Após estes passos, basta reiniciar o sistema! --- - Published: 2008-06-13 - Modified: 2008-06-13 - URL: https://www.fnbrandao.com.br/blog/2008/06/upgrade-ubuntu-710-para-804/ - Categorias: Linux, Ubuntu - Tags: Linux, ubuntu, upgrade Hoje no trabalho fiz o upgrade do Ubuntu 7. 10 para 8. 04. Foram quase 900MB para serem baixados, e o upgrade durou cerca de 40 minutos! ! ! Por enquanto não tive nenhum problema após a migração, mas talvez seja porque hoje é sexta-feira e saí mais cedo do serviço. Vamos ver na segunda-feira se tudo está ok! ! ! --- - Published: 2008-06-09 - Modified: 2008-12-14 - URL: https://www.fnbrandao.com.br/blog/2008/06/show-megadeth-060608/ - Categorias: Megadeth, Shows - Tags: Megadeth Esta sexta fui no show do Megadeth no Credicard Hall... O show estava muito bom. Abaixo seguem algumas fotos: Segue abaixo o endereço onde estão as outras fotos: http://picasaweb. google. com/fabio. nb/Megadeth060608 --- - Published: 2008-06-06 - Modified: 2008-06-06 - URL: https://www.fnbrandao.com.br/blog/2008/06/spring-gerenciando-as-transacoes/ - Categorias: Java, Programação - Tags: java, spring Após duas longas semanas resolvi o problema que estava tendo com o Spring gerenciando as transações de banco de dados. O que acontecia é que nenhuma transação era aberta na classe marcada com a anotação “@Transactional”. Segue abaixo um exemplo de como utilizar o gerenciamento de transações do Spring: package br. com. test; public interface IService { int myServiceMethod(String myServiceParameter); } Segue abaixo a implementação, repare no uso da anotação “@Transactional” na classe (isto indica que a classe toda deve estar associada à um contexto transacional. É possível também marcar métodos: package br. com. test; import org. springframework. transaction. annotation. Transactional; @Transactional public class ServiceBean implements IService { public int myServiceMethod(String myServiceParameter) { return Integer. parseInt(myServiceParameter); } } Agora só falta configurar o “applicationContext. xml” do Spring: Repare no uso da tag “”. Esta tag ativa a configuração de transações baseada em anotações. Até aí é muito simples utilizar o gerenciamento de transações do Spring. O problema que tive foi o seguinte: meu serviço possuía uma interface, e esta interface estava sendo implementada por uma classe abstrata. Essa classe abstrata definia o método que eu queria que fosse transacional. Depois eu criei uma terceira classe que extendia essa classe abstrata. Coloquei a anotação “@Transactional” na classe concreta, e o Spring não gerenciava as transações no método definido na classe abstrata. Para resolver o problema só foi necessário colocar a anotação da classe abstrata. --- - Published: 2008-06-06 - Modified: 2008-06-06 - URL: https://www.fnbrandao.com.br/blog/2008/06/postback-no-jsf/ - Categorias: Java EE, Programação - Tags: java, Java EE, JEE, JSF, postback Um grande problema com o JSF é que na especificação 1. 1 não existe algum método para saber se a página está sendo executada no postback (quando você reenvia os dados para ela mesma). Mas existe o seguinte workaround: package web. jsf. vh; import java. io. IOException; import java. util. Locale; import java. util. Map; import javax. faces. FacesException; import javax. faces. application. ViewHandler; import javax. faces. component. UIViewRoot; import javax. faces. context. FacesContext; public class PostBackViewHandler extends ViewHandler { protected ViewHandler baseViewHandler; public CustomViewHandler(ViewHandler viewHandler) { super; this. baseViewHandler = viewHandler; } public Locale calculateLocale(FacesContext facesContext) { return baseViewHandler. calculateLocale(facesContext); } public String calculateRenderKitId(FacesContext facesContext) { return baseViewHandler. calculateRenderKitId(facesContext); } public UIViewRoot createView(FacesContext facesContext, String arg1) { setPostback(facesContext, false); return baseViewHandler. createView(facesContext, arg1); } public String getActionURL(FacesContext facesContext, String arg1) { return baseViewHandler. getActionURL(facesContext, arg1); } public String getResourceURL(FacesContext facesContext, String arg1) { return baseViewHandler. getResourceURL(facesContext, arg1); } public void renderView(FacesContext facesContext, UIViewRoot arg1) throws IOException, FacesException { baseViewHandler. renderView(facesContext, arg1); } public UIViewRoot restoreView(FacesContext facesContext, String arg1) { setPostback(facesContext, true); return baseViewHandler. restoreView(facesContext, arg1); } public void writeState(FacesContext facesContext) throws IOException { baseViewHandler. writeState(facesContext); } public Map getRequestScope(FacesContext facesContext) { return (Map)facesContext. getApplication. createValueBinding(“#{requestScope}”). getValue(facesContext); } public void setPostback(FacesContext facesContext, boolean value) { getRequestScope(facesContext). put(“ispostback”, new Boolean(value)); } } O código acima é um View Handler do JSF, agora basta registrá-lo no "facesconfig. xml": web. jsf. vh. PostBackViewHandler E para saber em sua página se é um postback: public boolean isPostback { FacesContext facesContext = FacesContext. getCurrentInstance; Map... --- - Published: 2008-05-24 - Modified: 2008-05-24 - URL: https://www.fnbrandao.com.br/blog/2008/05/problemas-no-upgrade-do-kubuntu-710-para-804/ - Categorias: Linux, Ubuntu - Tags: alsa, compilação, kubuntu, Linux, module-assistant, snd-hda-intel, ubuntu, upgrade Após o upgrade de versão do Kubuntu 7. 10 para o 8. 04 tive alguns pequenos problemas: Apache2 + SVN: reclamando que faltava o MPM (só foi instalar o pacote apache2-mpm-worker) Splash Screen do KDE: ocorria um erro ao carregar (só foi instalar o pacote ksplash-engine-moodin) E o problema mais chato que tive foi que o som não estava mais funcionando. Após pesquisar muito achei alguns bugs abertos sobre este problema. Uma das soluções encontradas foi instalar o alsa à partir do código fonte: sudo apt-get install module-assistant sudo m-a update sudo m-a prepare sudo m-a a-i alsa sudo modprobe snd-hda-intel sudo /etc/init. d/alsa-utils reset Após isto o som já estará funcionando. Bom, por enquanto foram apenas estes problemas encontrados! --- - Published: 2008-05-23 - Modified: 2008-05-23 - URL: https://www.fnbrandao.com.br/blog/2008/05/jsf-duplicate-componentid/ - Categorias: Java EE, Programação - Tags: JEE, JSF, RichFaces Utilizando o DataTable do RichFaces em uma simples página, após um reload na página sempre era retornado o seguinte erro: Duplicate component ID '_id0:_dataTable:_id1' found in view. Segue abaixo o código da página que causava o erro: A solução foi colocar id's em todos os componentes "outputText". Segue abaixo a página modificada: --- - Published: 2008-05-21 - Modified: 2008-05-21 - URL: https://www.fnbrandao.com.br/blog/2008/05/jsf-spring-jpa-hibernate/ - Categorias: Java EE, Programação - Tags: hibernate, JEE, jpa, session closed, spring Ao tentar fazer o deploy de uma aplicação utilizando JSF, Spring e JPA (com implementação do hibernate) é recebida a seguinte exception: javax. persistence. PersistenceException: org. hibernate. SessionException: Session is closed! Para resolver este problema, basta apenas adicionar o seguinte filtro no "web. xml": Spring OpenEntityManagerInViewFilter org. springframework. orm. jpa. support. OpenEntityManagerInViewFilter Spring OpenEntityManagerInViewFilter /* --- - Published: 2008-05-14 - Modified: 2008-05-14 - URL: https://www.fnbrandao.com.br/blog/2008/05/debug-no-tomcat-55/ - Categorias: Java EE, Programação - Tags: debug, java, tomcat, ubuntu Para rodar um debug remoto no tomcat 5. 5 no Ubuntu, basta editar o arquivo "/etc/init. d/tomcat5. 5" e colocar a seguinte linha: -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n antes das linhas: # Define other required variables CATALINA_P BOOTSTRAP_CLASS=org. apache. catalina. startup. Bootstrap JSVC_CLASSPATH="/usr/share/java/commons-daemon. jar:$CATALINA_HOME/bin/bootstrap. jar" --- - Published: 2008-05-13 - Modified: 2008-05-26 - URL: https://www.fnbrandao.com.br/blog/2008/05/problema-no-botao-back-do-navegador/ - Categorias: Java EE, Programação - Tags: Back Button, Cache, Filtro, JEE O botão back do navegador é muito útil ao usuário para ele conseguir navegar entre diferentes páginas e websites. Entretanto, o botão back pode trazer diversos problemas aos sites. Uma maneira de "travar" o botão é desabilitar completamente o cache das páginas que não devem permitir que sejam acessadas através do botão back. Para se fazer isso no Java EE basta apenas criar um filtro e mapeá-lo para as url's necessárias. Segue abaixo o código do filtro: import java. io. IOException; import javax. servlet. Filter; import javax. servlet. FilterChain; import javax. servlet. FilterConfig; import javax. servlet. ServletException; import javax. servlet. ServletRequest; import javax. servlet. ServletResponse; import javax. servlet. http. HttpServletResponse; public class ClearCacheFilter implements Filter { public void destroy { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletResponse httpResponse = (HttpServletResponse) response; httpResponse. setHeader("Expires", "Sat, 1 Jan 1990 12:00:00 GMT"); httpResponse. setHeader("Cache-Control", "no-store, no-cache, must-revalidate"); httpResponse. addHeader("Cache-Control", "post-check=0, pre-check=0"); httpResponse. setHeader("Pragma", "no-cache"); chain. doFilter(request, response); } public void init(FilterConfig filterConfig) throws ServletException { } } Basicamente o que o filtro faz é setar as diretivas de cache para o navegador. Primeiro ele seta a data de expiração da página para uma data passada. Depois, o código seta 3 diretivas para desabilitar o cache: no-store: não armazena o conteúdo no cache no-cache: o browser deve enviar o request para o servidor mesmo se ele possuir uma cópia do que será enviado must-revalidate: revalida o cache em outro request, se estiver expirado Depois, são setadas duas... --- - Published: 2008-05-11 - Modified: 2008-05-11 - URL: https://www.fnbrandao.com.br/blog/2008/05/mysql-nao-responde-para-outras-maquinas/ - Categorias: Programação - Tags: mysql, ubuntu Se você estiver tendo algum problema ao tentar conectar ao MySQL de outra máquina, basta alterar o arquivo "my. cnf" localizado no diretório "/etc/mysql" e comentar a seguinte linha: bind-address = 127. 0. 0. 1 No caso, ela ficará da seguinte maneira: #bind-address = 127. 0. 0. 1 Após alterar o arquivo, e salvá-lo, bastar restartar o mysql: sudo /etc/inid. d/mysql restart Obs. : esses caminhos e executáveis foram testados no Ubuntu 8. 04 --- - Published: 2008-05-10 - Modified: 2008-05-11 - URL: https://www.fnbrandao.com.br/blog/2008/05/eclipse-e-permgen/ - Categorias: Programação - Tags: eclipse, java, OutOfMemoryError, permgen Se você estiver tendo problemas de memória com o Eclipse, como por exemplo: java. lang. OutOfMemoryError: PermGen space Basta alterar o arquivo "eclipse. ini" e adicionar as seguintes linhas no final dele: -XX:PermSize=64M -XX:MaxPermSize=128M --- - Published: 2008-05-02 - Modified: 2021-10-21 - URL: https://www.fnbrandao.com.br/blog/2008/05/o-primeiro-post/ Talvez esta seja uma tarefa difícil, escolher o que escrever no seu primeiro post, ainda mais se este for o seu primeiro blog. Nesta hora surgem diversas dúvidas: o que escrever, como escrever, pra que criar um blog, onde iremos chegar, etc... Acho que devo dividir este post em algumas partes: Por que criei o blog Quais assuntos serão escritos neste blog O que quero com este blog Vamos então definir cada uma destas partes: Por que criei o blog? Criei o blog simplesmente porque surgiu a oportunidade de possuir um domínio . com. br com um CPF e não mais com o CNPJ. Mas este não é o único motivo, um outro seria a possibilidade de repassar conhecimentos adquiridos no trabalho / faculdade / pós-graduação / vida. Outro motivo seria postar dúvidas e, de preferência, que alguém me ajuda-se a solucioná-las. Quais assuntos serão escritos neste blog? Com certeza, a maior parte dos posts escritos neste blog terão referência direta à área de informática, na qual trabalho há pelo menos 5 anos e estou envolvido com programação desde os 12 anos de idade (12 anos atrás! ! ! ). Outros assuntos poderão ser abordados neste blog também, como por exemplo shows que irei, discussões sobre assuntos diversos, etc... O que quero com este blog? Pergunta muito difícil de responder, mas com certeza a melhor resposta é adquirir conhecimentos com os post aqui discutidos. --- --- ## Páginas - Published: 2008-05-02 - Modified: 2021-10-19 - URL: https://www.fnbrandao.com.br/blog/sobre/ Brasileiro, nascido e morando em São Paulo. Sou formado em Ciência da Computação pelo Mackenzie e pós-graduado em Engenharia de Software baseada em Componentes e Mestre em Engenharia Elétrica (inteligência artificial / processamento de imagens). Analista de sistemas. Pianista apaixonado por Deep Purple e Symphony X. Estilos musicais preferidos: Hard rockHeavy metalProgressive metalSymphonic metalDeath metalTrash metalPower metalSpeed metalMelodic hardcoreMelodic death metal --- - Published: 2008-05-02 - Modified: 2021-10-19 - URL: https://www.fnbrandao.com.br/blog/curriculo/ Fabio Nascimento Brandão Profissional da área de TI, focado em desenvolvimento de software. Meu currículo completo pode ser encontrado no LinkedIn através do link https://www. linkedin. com/in/fabionbrandao/ Para mais informações, estou disponível no email fabio at fnbrandao dot com dot br --- ---