May 24, 2008
Linux, Ubuntu
No Comments
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!
May 23, 2008
Java EE, Programação
No Comments
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:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="https://ajax4jsf.dev.java.net/ajax"
xmlns:rich="http://richfaces.ajax4jsf.org/rich">
<h:form binding="#{UserConsultPage.component}">
<rich:dataTable id="dataTable"
binding="#{UserConsultPage.dataTable}" var="item">
<rich:column>
<f:facet name="header">
<h:outputText value="Name" />
</f:facet>
<h:outputText value="#{item.name}" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText value="Email" />
</f:facet>
<h:outputText value="#{item.email}" />
</rich:column>
</rich:dataTable>
<h:commandButton id="btnLoad" actionListener="#{UserConsultPage.load}" />
</h:form>
</ui:composition>
A solução foi colocar id’s em todos os componentes “outputText”. Segue abaixo a página modificada:
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="https://ajax4jsf.dev.java.net/ajax"
xmlns:rich="http://richfaces.ajax4jsf.org/rich">
<h:form binding="#{UserConsultPage.component}">
<rich:dataTable id="dataTable"
binding="#{UserConsultPage.dataTable}" var="item">
<rich:column>
<f:facet name="header">
<h:outputText id="headerNameValue" value="Name" />
</f:facet>
<h:outputText id="nameValue" value="#{item.name}" />
</rich:column>
<rich:column>
<f:facet name="header">
<h:outputText id="headerEmailValue" value="Email" />
</f:facet>
<h:outputText id="emailValue" value="#{item.email}" />
</rich:column>
</rich:dataTable>
<h:commandButton id="btnLoad" actionListener="#{UserConsultPage.load}" />
</h:form>
</ui:composition>
May 21, 2008
Java EE, Programação
1 Comment
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”:
<filter>
<filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
<filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
May 14, 2008
Java EE, Programação
No Comments
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_PID="/var/run/$NAME.pid"
BOOTSTRAP_CLASS=org.apache.catalina.startup.Bootstrap
JSVC_CLASSPATH="/usr/share/java/commons-daemon.jar:$CATALINA_HOME/bin/bootstrap.jar"
May 13, 2008
Java EE, Programação
No Comments
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 diretivas específicas do Internet Explorer. Estas diretivas indicam que o conteúdo sempre deve ser atualizado. E por último, é desabilitado o cache para o protocolo HTTP/1.0 (já que as outras 3 são específicas do HTTP/1.1).
Por último é preciso configurar o filtro na aplicação web. Segue abaixo o trecho de código referente à configuração para o filtro, bem como para ele ser aplicado a todas as páginas da aplicação:
<filter>
<filter-name>ClearCacheFilter</filter-name>
<filter-class>br.com.uol.ps.common.web.ClearCacheFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ClearCacheFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
May 11, 2008
Programação
No Comments
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
May 10, 2008
Programação
No Comments
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
May 2, 2008
Uncategorized
No Comments
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.