Autenticação rede wireless wpa no Linux na mão

Linux No Comments

Para autenticar na mão numa rede wireless wap basta utilizar os seguintes comandos:

sudo iwconfig wlan0 <ESSID>
sudo wpa_passphrase <ESSID> <PASSWORD> > wpa_supplicant.conf
sudo wpa_supplicant -iwlan0 -cwpa_supplicant.conf


Em outro terminal basta fazer:

sudo dhcpcd wlan0

Upgrade Ubuntu e problema no Postgre

Linux, Postgre, Ubuntu No Comments

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”.

Plugins Firefox3

Firefox, Firefox 3, Programas No Comments

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.*”

Ubuntu e Locale

Linux, Ubuntu No Comments

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!

Upgrade Ubuntu 7.10 para 8.04

Linux, Ubuntu No Comments

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!!!

Show Megadeth - 06/06/08

Megadeth, Shows No Comments

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

Spring gerenciando as transações

Java, Programação No Comments

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:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:aop="http://www.springframework.org/schema/aop"
     xmlns:tx="http://www.springframework.org/schema/tx"
     xsi:schemaLocation="
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">

  <bean id="myService" class="br.com.test.ServiceBean"/>

  <tx:annotation-driven transaction-manager="txManager"/>

  <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
  </bean>

  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${jdbc.driverClassName}" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
  </bean>
</beans>

Repare no uso da tag “<tx:annotation-driven transaction-manager=”txManager”/>”. 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.

PostBack no JSF

Java EE, Programação No Comments

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”:

<application>
   <view-handler>web.jsf.vh.PostBackViewHandler</view-handler>
</application>

E para saber em sua página se é um postback:

public boolean isPostback() {
    FacesContext facesContext = FacesContext.getCurrentInstance();
    Map requestScope = (Map)facesContext.getApplication().createValueBinding(“#{requestScope}”).getValue(facesContext);
    boolean ispostback = ((Boolean)requestScope.get(“ispostback”)).booleanValue();
    return ispostback;
}

Obs.: Esse workaround só funciona se o estado da view não é salva no servidor.

Problemas no upgrade do Kubuntu 7.10 para 8.04

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!

JSF - Duplicate componentID

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>

« Previous Entries Next Entries »