Grupo Haw

Compartilhando o que eu acho =)

ago

25

Resumo TDC 2010 – Sexta

By Gabriel Rubens

Nos dias 20, 21 e 22 deste mês (Agosto) rolou o TDC 2010, e eu não pude comparecer, mas o André Reis (Twitter) que trabalha comigo foi e fez um resumo de tudo que ele viu por lá. A principio esse resumo foi passado por e-mail pra todos da empresa, mas como ficou bem legal eu pedi a autorização do André pra divulgar aqui esse resumo. O resumo está escrito em forma de anotações, e conta os pontos principais de cada palestra segundo o ponto de vista do André.
Eu vou dividir esses resumos em três postagens, e a primeira é essa de sexta-feira:

Sexta Feira

Na abertura, a Yara Senger da globalcode mais uma vez ressalta a importância da participação da comunidade na realização desses eventos e agradece a todos os patrocinadores, apoiadores, coordenadores e participantes.

Devido ao tempo muito curto, os palestrantes corriam muito com o conteúdo. Os slides serão disponibilizados posteriormente. Vamos ficar de olho no twitter.

Primeira palestra: JSF 2.0

JSF sem nenhum conjunto de componentes não faz sentido. Na versão 2, a dica é usar o Primefaces, que está mais maduro que o RichFaces e o Icefaces.

Segunda palestra: JSF 2.0 no GAE


Para usar o JSF 2 no Google App Engine, precisa de um pequeno hack em um classe da API. Infelizmente não consegui anotar qual era exatamente a classe.
O trecho se refere a chamada JNDI do EJB remoto, pois como o GAE está na CLOUD, não faz sentido escrever o “caminho do serviço”.
Fica a dica pra pesquisas futuras no Google se precisar.

Nesse endereço: http://www.yaw.com.br/open tem exemplos de apps adaptadas para rodar no GAE

Terceira palestra: JBoss Seam

Agora tive uma ideia legal do propósito do Seam. Ele possui implementações para facilitar a vida dos desenvolvedores JEE de ponta a ponta, desde a camada WEB até o Mapeamento Objeto Relacional com o Banco de dados. Com suas annotations podemos dizer que um simples POJO é um ManagedBean do JSF, sem tocar no faces-config.xml ou até mesmo um EJB sem configurar nada. Enviar e-mail pela javamail.api com apenas uma linha de comando e usar o próprio JSP para criar o html do e-mail. Com a annotation @In qualquer dependência pode ser injetada automaticamente nas suas classes, por exemplo, o EntityManager e o Transaction. Com a anotação @Resource declaramos que este objeto fica disponível para essa injeção. Não preciso nem falar que ele abre e fecha toda a transação automaticamente.. mais exemplos quando sair o slide.

Quarta Palesta: Arquitetura JEE 6

Essa foi apenas conceitual, exibindo algumas novas features do EJB 3.1 como a annotation @Singleton.
Mostrou também algumas opções de camadas lógicas e físicas de arquitetura, por exemplo, como camadas lógicas:
Cliente (HTML, Javascript, XML, etc.)
Presentation (JSP, MBs JSF, Action Struts, outros Controllers, etc…)
Business (EJB, JTA, …)
Integração (DAO, JPA, JMS…)
Recursos (Banco de dados, Mensageria, …)

E depois ele mostrou alguns exemplos de camadas físicas e onde ficavam as camadas lógicas.

Quinta Palestra: JPA 2 na prática

Antes de falar no JPA em si, criou um Servlet, usando a annotation @WebServlet disponível no Java 6. Essa anotação elimina completamente a declaração do Servlet no web.xml.
Exemplo: http://www.javabeat.net/articles/97-new-features-in-servlets-30-1.html
API doc: http://download.oracle.com/javaee/6/api/index.html?javax/servlet/annotation/WebServlet.html

Uma dica para facilitar na hora de criar os testes: No arquivo persistence.xml não declarar explicitamente o tipo de transação, se será JTA ou ResourceLocal. O conteiner faz isso automaticamente, evitando ter que criar um mock para poder testar um método que utilize essa unidade de persistência.

De resto, não deu tempo pra fazer muita coisa, ele só criou rapidamente relacionamentos OneToOne e OneToMany e mostrou o JPA criando as tabelas e persistindo no banco.
Para o relacionamento ManyToOne, quando a lista é enorme, é melhor optar por um query porque perde muito em performance.
Falou também da diferença entre os métodos .persist() e .merge();
Salientou que qualquer mudança de estado feita num objeto gerenciado durante uma transação pode ir para o banco de dados.

Sexta Palesta: 10 Dicas para Tunning do JBoss

Quando ele fala em tunning, ele não esta se referindo apenas a performance, mas também à usabilidade e à customização.

Mostrou muitos detalhes de configuração, pastas etc… Para saber quais só quando o slide estiver disponível.

Dica 1: slimming
Deletar todos os serviços não utilizados. Ele mostrou como faz isso e mostrou em tempo real o tempo de inicialização reduzido quase pela metade.

Dica 2: Binding Service
Este é para evitar o conflito de portas quando estiver subindo mais de uma instancia do servidor na mesma maquina, sem precisar ficar alterando xmls
Criar um alias, ex. “ports-01″, e configurar para somar + 100 ao numero das portas, por ex 8080+100 = 8180. Criar quantos alias for necessário.
Depois é só rodar o comando de inicialização, passando o parâmetro de qual binding usar para cada instancia. Acho que o parâmetro era:
-Djboss.service.binding.port = ports-01; Passou muito rápido o slide.

Dica 3: Jboss Web Thread Pool
Aumentar o maxThreads para melhorar o throughput da aplicação. Observar o currentThreadBusy pelo admin console.
Quem não sabe a quantidade ideal, ele sugere por 200 threads por cpu core. Ex Intel quadcore = 200 x 4 = 800 no maxThreads
Falou tb sobre um tal conector AJP… (pesquisar)

Dica 4: JVM Tunning
Ele mostrou muuuuitos parâmetros para otimizar a JVM… Desde os -Xmx, -Xms e -XX:PermSize até os que configuram a estratégia do garbage collector. (novo no Java 6: -XX:UseG1GC)
Só com o slide mesmo.

Dica 5: StackSize
Diminuir o tamanho reservado para cada Thread. Parametros -Xss ou -XX:ThreadStackSize
Evita erros de não conseguir alocar espaço para mais objetos ou threads.

Dica 6: JCA Thread Pool, StrictMaxPool para Message-Driven Beans e Jboss Messaging Thread Pool
Configurar os parâmetros para Mensageria JMS, Message-Driven Beans, no arquivo jca-jboss-beans.xml.
parametros maximumQueue, maximumPool, PoolSize e outros.

Dica 7: Logging
Diminuir o nível de log para WARN ou ERROR quando em produção, para reduzir a quantidade de I/O no sistema operacional
Mostrou o parametro -Djboss.server.log.thresold
Desligar o appender console em produção. (usar só o arquivo .log)
Usar o appender ASYNC junto com o FILE
Mudar a pasta do log, pelo parametro -Djboss.server.log.dir
E usar if(logger.isDebugEnable())
Todas essas dicas tem o objetivo de reduzir o I/O, que diminui bastante a performance.

Dica 8: Trocar o banco de dados nativo
Não consegui entender direito. Ele falou que o JBoss vem com o Hypersonic (HSQLDB) como padrão. Não sei se o JBoss usa esse banco para persistir alguma coisa própria.

Dica 9: Datasource
Falou que, por exemplo, cada conexão aberta no Oracle consome aproximadamente 8MB de memória, no servidor do banco de dados.
Mostrou alguns parâmetros do datasource:
min-pool-size, max-pool-size.
prefil (se setado como true, ja preenche o pool com conexões até o min-pool-size setado)
falou vários outros: blocking-timeout-millis, idle-timeout-minutes, transaction-isolation (setar conforme o banco), prepared-statement-cache-size, e outros…

Dica 10: Segurança
Não se esquecer de setar senha para o admin console
Falou para descontentar algumas linhas nos arquivos de configuração para habilitar a segurança.

Sétima Palestra: Escalando APPs

Falou dos problemas enfrentados quando chega a necessidade de se escalar as aplicações.
- Configurações estáticas, Sessão do usuário perdida quando o nó cai, custo de upgrade, balanceamento de carga não considera capacidade dos nós, etc…
Explicou a estratégia DNS Round-Robin.
Mostrou a nova solução da JBoss: mod_cluster, que implementa configuração dinâmica

Oitava e última Palestra: HornetQ
Apresentou essa solução para mensageria, que obteve um desempenho 307% maior que o JMS padrão do JBoss.
Pode rodar stand alone, não precisa o JBossAS.

Gabriel Rubens

Postagens Relacionadas:

One Response so far

[...] Rumo a SCJP! Postagens SimilaresResumo TDC 2010 – Sexta [...]

Leave a comment

*