Cluster com Terracotta
Publicado em 1 de July de 2010 | Sem comentários
Pesquisando sobre clusterização, acabei encontrando o TerraCotta (http://www.terracotta.org/)
Para executá-lo no modo mais simples, sem fazer uma configuração mais fina, bastou instalá-lo no servidor (terracotta-3.2.1_2-installer.jar) e colocá-lo para funcionar.
Configurei um arquivo (tc-config.xml) e coloquei junto com o start-tc-server.bat – na pasta bin.
C:\Arquivos de programas\terracotta\terracotta-3.2.1_2\bin>start-tc-server.bat -n Server1
O meu arquivo de configuração:
<?xml version="1.0" encoding="UTF-8"?>
<!-- All content copyright Terracotta, Inc., unless otherwise indicated. All rights reserved. -->
<tc:tc-config xsi:schemaLocation="http://www.terracotta.org/schema/terracotta-5.xsd"
xmlns:tc="http://www.terracotta.org/config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<servers>
<!– Sets where the Terracotta server can be found. Replace the value of host with the server’s IP address. –>
<server host=”10.2.0.101″ name=”Server1″>
<data>%(user.home)/terracotta/server-data</data>
<logs>%(user.home)/terracotta/server-logs</logs>
</server>
<!– If using more than one server, add an <ha> section. –>
<ha>
<mode>networked-active-passive</mode>
<networked-active-passive>
<election-time>5</election-time>
</networked-active-passive>
</ha>
</servers>
<!– Sets where the generated client logs are saved on clients. –>
<clients>
<logs>%(user.home)/terracotta/client-logs</logs>
</clients>
</tc:tc-config>
E nas aplicações, eu coloquei no context.xml (no META-INF) ou diretamente na pasta conf do Tomcat:
<Context>
<Valve className="org.terracotta.session.TerracottaTomcat60xSessionValve" tcConfigUrl="10.2.0.101:9510"/>
<param-value>10.2.0.101:9510</param-value>
</Context>
Pronto, acione o Developer Console e veja os clientes de seu cluster.
JSF + Facelets + ICEfaces
Publicado em 1 de July de 2010 | Sem comentários
Tive alguns problemas para conseguir incluir o ICEfaces (1.8.1) na minha aplicação JSF 1.2 (com MyFaces) + Facelets + Hibernate.
1o passo: incluir os jars necessários
Como já estava utilizando o MyFaces, utilizei o jar just-ice.jar ao invés do icefaces.jar.
backport-util-concurrent.jar
commons-beanutils.jar
commons-collections.jar
commons-digester.jar
commons-fileupload.jar
commons-logging.jar
FastInfoset.jar
icefaces-comps.jar
just-ice.jar
jxl.jar
krysalis-jCharts-1.0.0-alpha-1.jar
xercesImpl.jar
xml-apis.jar
E para utilizar o facelets também no icefaces:
icefaces-facelets.jar
2o passo: configurar web.xml
O Eclipse adicionou essa parte para mim:
<context-param>
<description>To allow multiple windows for a single application.</description>
<param-name>com.icesoft.faces.concurrentDOMViews</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<description>Turn on/off application-wide synchronous or asynchronous updates. </description>
<param-name>com.icesoft.faces.synchronousUpdate</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<description>Google Maps API key is required if gMap component is used. Sign up for an API key from http://code.google.com/apis/maps/signup.html</description>
<param-name>com.icesoft.faces.gmapKey</param-name>
<param-value>ABQIAAAADlu0ZiSTam64EKaCQr9eTRTOTuQNzJNXRlYRLknj4cQ89tFfpxTEqxQnVWL4k55OPICgF5_SOZE06A</param-value>
</context-param>
<context-param>
<param-name>com.icesoft.faces.uploadDirectory</param-name>
<param-value>upload</param-value>
</context-param>
<context-param>
<param-name>com.icesoft.faces.uploadMaxFileSize</param-name>
<param-value>404857600</param-value>
</context-param>
<listener>
<listener-class>com.icesoft.faces.util.event.servlet.ContextEventRepeater</listener-class>
</listener>
<servlet>
<servlet-name>Persistent Faces Servlet</servlet-name>
<servlet-class>com.icesoft.faces.webapp.xmlhttp.PersistentFacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>Blocking Servlet</servlet-name>
<servlet-class>com.icesoft.faces.webapp.xmlhttp.BlockingServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>uploadServlet</servlet-name>
<servlet-class>com.icesoft.faces.component.inputfile.FileUploadServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Persistent Faces Servlet</servlet-name>
<url-pattern>*.iface</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Persistent Faces Servlet</servlet-name>
<url-pattern>/xmlhttp/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Blocking Servlet</servlet-name>
<url-pattern>/block/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>uploadServlet</servlet-name>
<url-pattern>/uploadHtml</url-pattern>
</servlet-mapping>
E essa parte, eu adicionei para que em algumas páginas eu utilizasse o icefaces e em sem.
<context-param>
<description>
The following parameter will cause the ICEfaces ViewHandler
to process only those pages with a .iface extension:
</description>
<param-name>com.icesoft.faces.delegateNonIface</param-name>
<param-value>true</param-value>
</context-param>
3o passo: configurar faces-config.xml
Tive que basicamente mudar as navegações, onde estava pagina.xhtml, mudei para pagina.iface
4o passo:
Testar
Regras:
Nas expressões, se o icefaces estende o html ou o tomahawk, tive que utilizar a implementação do icefaces. Exemplo: onde era mudei para . Podem até coexistir, porém não funcionará corretamente.
Algumas referências:
Icefaces + Tomahawk – Status of ICEfaces Support for MyFaces Tomahawk Components
http://support.icesoft.com/jive/servlet/KbServlet/download/731-102-1045/ICEfacesTomahawkCompSupport.html
PDF – Guia do desenvolvedor do ICEfaces (ver pasta docs do download do ICEfaces)
JSF + Facelets: alterar objeto agregado em um droplist
Publicado em 9 de June de 2010 | Sem comentários
Estou fazendo uma prova de conceito com JSF + Facelets + Hibernate, e tive problemas em alterar um objeto agregado em um droplist.
Antes, eu estava somente colocando o código identificador do objeto que queria modificar, e assim ele me dava o erro “org.hibernate.HibernateException: identifier of an instance …”
O código antes era:
<h:selectOneMenu id=”forn” value=”#{NotaFiscalBean.notaFiscal.fornecedor.codFornecedor}” >
<f:selectItems value=”#{NotaFiscalBean.fornecedores}” ></f:selectItems>
</h:selectOneMenu>
Onde #{Bean.notaFiscal.fornecedor.codFornecedor} é o código do objeto agregado e;
#{NotaFiscalBean.fornecedores} é uma lista de objetos do tipo Map (na verdade, SelectItem) com os valores possíveis. E a chave continha o código identificador e o valor, o nome do fornecedor.
O novo código passou a ser:
<h:selectOneMenu id=”forn” converter=”#{NotaFiscalBean.fornecedorConverter}”
value=”#{NotaFiscalBean.notaFiscal.fornecedor}” >
<f:selectItems value=”#{NotaFiscalBean.fornecedores}” ></f:selectItems>
</h:selectOneMenu>
Onde: #{NotaFiscalBean.notaFiscal.fornecedor} é o objeto agregado;
#{NotaFiscalBean.fornecedores} é igual acima, exceto que na chave do mapeamento passei a utilizar os objetos;
#{NotaFiscalBean.fornecedorConverter} é uma classe que implementa a interface javax.faces.convert.Converter
Na implementação de javax.faces.convert.Converter, você precisa implementar os métodos:
public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) e;
public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2).
Adicionalmente, inclui o construtor que recebe a lista dos possíveis objetos.
Então, a minha classe Converter ficou assim:
package com.renatom.jsf.converter;
import java.util.List;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import com.renatom.jsf.model.Fornecedor;
public class FornecedorConverter implements Converter {
List <Fornecedor> list;
public FornecedorConverter(List<Fornecedor> fornecedores) {
list = fornecedores;
}
@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
if (arg2 == null || arg2.length() == 0)
return null;
long id = Long.valueOf(arg2).longValue();
if (id < 0)
return null;
Fornecedor fornRet = null;
for (Fornecedor forn : list) {
if (forn.getCodFornecedor() == id) {
fornRet = forn;
break;
}
}
return fornRet;
}
@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
if (arg2==null) return "-1";
Fornecedor forn = (Fornecedor)arg2;
return String.valueOf(forn.getCodFornecedor());
}
}
Fonte: http://seamframework.org/Community/SelectOneMenuAndJPAManyToOne
Hibernate + JPA no Eclipse com Hiber Objects
Publicado em 28 de May de 2010 | Sem comentários
Hiber Objects – http://objectgeneration.com/eclipse/index.html
Plugin para eclipse que gera, através de um diagrama de classes, todo o código necessário para persistir dados de uma tabela.
Gera código Java dos POJOs, DAOs, classes de teste.
Agiliza o desenvolvimento com o Hibernate para Java.
Revisão bibliográfica – Blogs
Publicado em 4 de February de 2010 | Sem comentários
WIKIPEDIA. Blog. 2001. Atualizada em 3 jan. 2010. Disponível em <http://en.wikipedia.org/wiki/Blog>. Acesso em 03 fev. 2010.
Descrição
História, como funciona, tipos de blogs.
Contribuição para o TCC
Um blog, derivado de web log, é um tipo de sítio. Mantido por uma pessoa ou um grupo de pessoas que inclui um texto, chamado de post. Um post pode conter comentários dos leitores do blog, interagindo assim com o sítio. Um blog pode ser pessoal, a grande maioria dos blogs, corporativo ou por um assunto. Um post pode ser classificado e etiquetado. As etiquetas auxiliam os usuários a encontrarem um post relacionado a algum assunto.
Vantagens
- Facilidade de uso
- Classificação dos textos, facilitando a procura
- Livre estrutura para criação de categorias e etiquetas
Desvantagens
- Não ter um relacionamento mais íntimo entre os posts
- Com a grande quantidade de posts, há dificuldade em encontrar o item correto se não for bem estruturado
- Deve haver um supervisor para que os usuários não classifiquem os posts indevidamente
Revisão bibliográfica – Fórum de Discussão
Publicado em 4 de February de 2010 | Sem comentários
WIKIPEDIA. Internet Forum. 2003. Atualizada em 25 jan. 2010. Disponível em <http://en.wikipedia.org/wiki/Internet_forum>. Acesso em 31 jan. 2010.
Descrição
O que é um Fórum de Discussão? História, contribuição registrada ou anônima, regras e políticas, tipos de usuário, estrutura de um fórum, características comuns, comparação entre fórum e lista de discussão.
Contribuição para TCC
Segundo WIKIPEDIA (2003), um Fórum de Discussão é um sítio de discussão online sobre um determinado tema. Os participantes, através das discussões, podem socializar-se, encontrando um grupo que tenha os mesmos interesses que seus. Para participar de um fórum, abrindo um novo assunto ou respondendo, normalmente é necessário que haja um registro no sítio e os usuários são classificados de acordo com suas contribuições.
Um fórum é uma estrutura de diretórios em que o nó final é o tópico, que contém as mensagens. Ele é organizado como um conjunto de tópicos genéricos, atualizado pelos membros do fórum e regido por um grupo de moderadores.
Vantagens
- Facilidade de uso
- Estrutura de tópicos
Desvantagens
- Manutenção da estrutura de tópicos
- Relacionamento entre textos difuso
- Pesquisa difícil pelos interesses
Riscos – Análise
Publicado em 30 de August de 2009 | Sem comentários
Em um projeto sempre nos lembramos de fazer o escopo, as estimativas de esforço e de tempo. Porém, há um item que sempre deve ser considerado, não importando o tamanho do projeto: os riscos.
Menosprezá-lo pode significar a falha do projeto inteiro.
Para avaliar um risco, devemos considerar a probabilidade em que o risco pode ocorrer e o impacto que ela trará, se ocorrer. A probabilidade sendo calculada como porcentagem e o impacto como um valor monetário.
O produto da probabilidade e do impacto é o VME (valor monetário esperado).
Os riscos de um projeto podem ser negativos ou positivos.
Em caso negativo podemos dar respostas como evitar, mitigar, transferir ou aceitar.
- Evitar: a resposta dada, evitará o risco. Ex.: Vou viajar para a Europa daqui a 4 meses e possuo o risco da variação cambial. Para evitar a variação, comprarei os Euros necessários hoje.
- Mitigar / Reduzir: a resposta sobre a causa do risco irá diminuir a probabilidade de ocorrer ou o impacto. Ex.: roubo de carro. Mitigação sobre o impacto: venda do carro e compra de um menos visado. Mitigação sobre a probabilidade: evitar estacionar na rua.
- Transferência: transferir a responsabilidade do impacto para um terceiro. Ex.: roubo de carro. Seguro do carro mediante o pagamento de um prêmio.
- Aceitar: dado um risco, ele é aceito se nenhuma resposta identificada é factível. Ex.: poderá haver atraso de dois dias, porém mais que isso deve ser tratado.
Em caso de um risco positivo, podemos ter como respostas:
- Explorar: garantir que a oportunidade ocorra
- Compartilhar: envolver terceiros que possam capturar melhor a oportunidade
- Melhorar: aumentar a probabilidade ou impacto da oportunidade.
Sabendo que o risco existe e do tipo de resposta que existem, podemos seguir para um próximo passo: como fazer isso.
Para fazer isso, eu utilizarei da área de conhecimento gerenciamento de riscos do PMBoK, da quarta edição.
- Planejar o gerenciamento de riscos
- Identificar riscos
- Realizar análise qualitativa dos riscos
- Realizar análise quantitativa dos riscos
- Planejar resposta aos riscos
- Monitorar e controlar riscos
1. Planejar o gerenciamento de riscos
Deve ser iniciado na concepção do projeto e finalizado nas fases iniciais do planejamento do projeto.
Ele é concebido para definir as atividades do gerenciamento de riscos.
ENTRADAS: escopo do projeto, plano do projeto, ativos organizacionais, fatores ambientes da empresa, plano de gerenciamento de custos, plano de gerenciamento de tempo, de comunicação
TÉCNICAS: reuniões e análises de planejamento
SAÍDAS: Plano de gerenciamento de riscos
O plano de gerenciamento de riscos contém: metodologia, papéis e responsabilidades, orçamento, prazos, categorias de riscos, definições de probabilidades e impactos, matriz de probabilidade e impacto, tolerâncias revisadas das partes interessadas, formatos dos riscos e acompanhamento.
(A partir desse ponto, vou parar de detalhar – ficará para uma atualização posterior)
2. Identificar riscos
É o processo de identificar os riscos que podem afetar o projeto e documentação de suas características.
Nesse processo, existem diversas técnicas para identificar:
2.1. Revisões de documentação
2.2. Coleta de informações: técnica Delphi, brainstorming, entrevista, análise da causa-raiz.
2.3. Análise de listas de verificação
2.4. Análise das premissas
2.5. Técnicas de diagramas: diagrama de Ishikawa, de influência e fluxograma
2.6. Análise SWOT
2.7. Opinião especializada
3. Realizar análise qualitativa de riscos
É o processo para priorizar os riscos de acordo com a probabilidade e o impacto.
4. Realizar análise quantitativa de riscos
Dos riscos que foram selecionados no processo 3 pela priorização, terão suas probabilidades e impactos calculados numericamente.
É utilizado também para riscos que não tivemos certeza no processo 3 para garantir que um risco que possa ter grande impacto não seja tratado.
5. Planejar resposta aos riscos
Desenvolvimento de opções e ações para aumentar as oportunidades e reduzir as ameaças ao projeto.
6. Monitorar e controlar os riscos
Implementação dos planos de respostas aos riscos, acompanhamento dos riscos identificados, riscos residuais, identificação de novos riscos e avaliação da eficácia do processo de riscos.
Fonte: PMI – Project Management Institute. A guide to the project management body of knowledge – PMBOK Guide. PMI Standards Committee, 2008.
[CEGTI - TCC - Vanzolini] Revisão Bibliográfica – Wikinomics
Publicado em 17 de May de 2009 | 1 Comentário
Tapscott, Don; Williams, Anthony D. Wikinomics: How mass collaboration changes everything (Expanded Edition). Nova Iorque: Ed. Portfolio, 2008.
Status: Lido.
Descrição
Em Wikinomics, os autores dão exemplos como a colaboração em massa pode resolver problemas em que se não fosse utilizada, consumiria grandes recursos financeiros e seria postergada ou até mesmo não chegassem ao objetivo.
Contribuição para o TCC
Análise de idéias para solucionar problemas da com ferramentas colaborativas como Wiki, Fórum, Blog, etc.
No final do livro, características como código-aberto (open source), peering, compartilhamento são analisadas, e como elas dão origens a empresas 2.0
Tags: Revisão bibliográfica > tapscott > TCC > vanzolini > wikinomics
[CEGTI - TCC - Vanzolini] Escolha do tema
Publicado em 17 de May de 2009 | Sem comentários
Como dito, eu estou cursando pós-graduação entitulado Curso de Especialização em Gestão da Tecnologia da Informação (CEGTI) , com duração de 20 meses. E término previsto para Dezembro de 2009.
Para conseguir o meu diploma, terei que desenvolver um Trabalho de conclusão de curso (TCC).
Algumas áreas foram consideradas:
- Gestão da Comunicação
- Gestão do Conhecimento
- Gestão da Qualidade
- Gestão de Projetos
Eu acabei escolhendo Gestão da Comunicação e Gestão do Conhecimento. A escolha dessas áreas ocorreu, porque na empresa, que eu trabalho, percebi que há perda de informação ou dificuldade em conseguí-la quando está restrita a poucas pessoas, ou há a contratação de um novo colaborador.
Algumas informações poderiam estar sempre disponíveis, e assim, serem atualizadas conforme necessárias.
Como ferramenta para conseguir gerir esse conhecimento e disseminá-la, considerei as ferramentas colaborativas surgidas com a Web 2.0: blogs, wikis, redes sociais, etc.
A partir disso, o tema foi definido em “Gestão da conhecimento com ferramentas colaborativas (web 2.0)”
Tema
Gestão da conhecimento com ferramentas colaborativas (web 2.0)
Contexto
A empresa possui ferramentas para gestão de incidentes, problemas, mudanças e de configuração em um ambiente web.
Problema
Principalmente nos grandes clientes, muitas das sugestões e pequenos erros dos usuários não são reportados para o desenvolvedor, ficando concentrados nos gestores desses usuários, gerente de contas e de projetos ou analistas que vão a campo fazer visitas. Perde-se, assim, sugestões, críticas dos usuários.
Com a rotatividade, e mesmo esquecimento por processo falho, há perda dessas informações.
Objetivos
Promover registro das idéias, sugestões e críticas para melhorar as ferramentas, tanto em usabilidade quanto em funcionalidade, e dar um melhor suporte aos colaboradores e gestores através de base histórica.
Justificativa
Melhoria das ferramentas, com melhor usabilidade e com características para auxiliar os processos de seus clientes.
Economia em treinamento através da base de conhecimento.
Satisfação do cliente tanto do suporte técnico quanto da facilidade de uso da ferramenta.
Etapas
Na intranet, configurar um sistema de colaboração para que haja troca de informações, do útil ao social.
Construção de um módulo como plugin para registrar idéias dos usuários das ferramentas.
No sistema de chamados, registrar as melhores idéias como características futuras (roadmap) das ferramentas.
O Gerente-Minuto
Publicado em 17 de May de 2009 | Sem comentários
Em 08/09/2008, iniciei a disciplina Gestão de RH e Comunicação na pós que estou fazendo.
A aula é bem dinâmica e posso dizer que foi dividida em duas partes: aula exposicional e dinâmica de grupo. E nessa aula inaugural, recebemos uma apostila. Na parte final, contém algumas bibliografias interessantes que o professor comentou.
Uma das que me chamaram a atenção foi o livro “Liderança e o Gerente-Minuto”, tentei comprar no Submarino, mas não havia disponível e acabei comprando o “Gerente-Minuto” mesmo. Mais tarde, consegui comprar o primeiro.
Os livros são bem didáticos e, por serem pequenos, rápidos de serem lidos.
Algumas bases dos livros:
- objetivo-minuto, elogio-minuto e repreensão-minuto.
- liderança situacional: direção, treinamento, apoio e delegação.