O algoritmo como tecnologia

Um algoritmo é basicamente uma sequência de instruções que tem como objetivo a realização de alguma tarefa. Um exemplo simplório de um algoritmo poderia ser os passos necessários para se trocar uma lâmpada ou, melhor ainda, uma receita de um prato, onde são descritos os ingredientes e suas quantidades necessárias e o passo a passo…

Escolhendo a próxima linguagem da JVM

Em seu artigo da série Java.next, intitulado “Choosing your next JVM language”, Neal Ford – arquiteto de software na ThoughtWorks – comenta sobre a JVM como plataforma para outras linguagens e apresenta comparações entre Groovy, Scala e Clojure. Neal diz que entramos em um mundo poliglota de linguagens de programação e que os números estão…

Qualidade de código: encapsular estruturas condicionais

Recentemente escrevi sobre qualidade de código apresentando uma ferramenta de análise de código chamada Sonar. Esta ferramenta verifica vários aspectos do código fonte, entre eles a complexidade do código. Códigos complexos possuem muitos caminhos de execução e, além de ter uma chance maior de serem origens de bugs, são mais difíceis de ler. O ideal…

Arquitetura de um sistema crítico de tempo real

Como você projetaria um sistema de informações para a polícia de uma cidade, com o objetivo de fornecer informações em tempo real aos policiais sobre as ocorrências relatadas por telefone e atualizações em tempo real destas ocorrências? Certamente um sistema assim precisa de uma arquitetura robusta, voltada a performance e confiabilidade. É um sistema crítico,…

EJB: Stateless Session Bean

O diagrama de classes abaixo ilustra a modelagem de um EJB Stateless para um hipotético serviço de criptografia. Criptografia por si só é um tópico muito mais complexo do que sugere este diagrama, assim com EJBs, mas o foco aqui é mostrar como os componentes EJB se relacionam. A interface EncryptionCommonBusiness serve como um contrato…

Padrões de Código Java do Google e Oracle

O Google Java Style, ou Estilo de Código do Google, é um guia de referência de como organizar o código fonte dentro do Google, ou seja, os princípios que todos os desenvolvedores do Google seguem. O documento é muito interessante e fornece uma ideia de como organizar seu código em um padrão de alto nível,…

Monitoramento de performance Java com VisualVM

É importante ver e entender os números e estatísticas de performance de aplicações e existem inúmeras ferramentas para monitorar aplicações para registrar seu comportamento ao longo da execução. A plataforma Java dispõe da ferramenta VisualVM, pouco conhecida, mas muito poderosa e útil. O melhor de tudo de tudo é que esta ferramenta faz parte da…

Nginx + Tomcat 7 + Java: Cluster com replicação de sessão

No post Load balancing: simulando um cluster com NGinx e Tomcat em localhost foi mostrado como configurar o NGinx para fazer o balanceamento de carga de três instâncias do Tomcat rodando na mesma máquina. Imagine que tenhamos uma aplicação que faz uso de sessão para armazenar dados do usuário e de navegação. Como essa aplicação…

Load balancing: simulando um cluster com NGinx e Tomcat em localhost

Antes de iniciar, convém entender conceitualmente o que é um cluster e o que é load balancing. Um cluster, ou agregado de computadores, é formado por um conjunto de computadores, que utiliza um tipo especial de sistema operacional classificado como sistema distribuído. Muitas vezes é construído a partir de computadores convencionais (personal computers), os quais são ligados…

[Resolvido] SEVERE: Request[/url] does not contain handler parameter named ‘action’

Recentemente tive que fazer manutenção em um sistema bem antigo, código de 10 anos atrás, J2EE 1.4 e Struts 1. Tive o seguinte erro ao acessar algumas páginas novas que havia desenvolvido: SEVERE: Request[/url] does not contain handler parameter named ‘action’ Depois de muito penar pela internet em vários fóruns e não encontrar solução, encontrei…