Maximizando Virtual Box Ubuntu

Bom dia,

Para quem é usuário linux e precisou instalar a ferramenta Virtual Box para para rodar o Sistema Operacional Ubuntu e quer usar toda extensão da tela.

Use o seguinte comando:

sudo apt-get install virtualbox-guest-dkms

Após reinicar sua Virtual Box ela está usando toda extensão da tela.

Espero ter ajudado.

Obrigado.

Até mais.

Exportando relatório criado com Ireport em java + jsf

Olá a todos!

Bom este é um post destinado a quem já trabalha com Ireport, pois será somente exibido como exportar esses relatórios para pdf com java e jsf.

Posteriormente será criando post com um passo a passo de como se construir um relatório completo usando Ireport.

O código abaixo é usado para realizar a exportação:


import javax.faces.context.FacesContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

	public void executeReport() {
		FacesContext facesContext = FacesContext.getCurrentInstance();

		HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();

		InputStream reportStream = facesContext.getExternalContext().getResourceAsStream("caminho_arquivo.jasper");

		response.setContentType("application/pdf");

		response.setHeader("Content-disposition", "inline;filename=relatorio.pdf");

		try {
			ServletOutputStream servletOutputStream = response.getOutputStream();

			JRBeanCollectionDataSource datasource = new JRBeanCollectionDataSource(arrayList);

			JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, parameters, datasource);

			servletOutputStream.flush();
			servletOutputStream.close();
		} catch (JRException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally{
			facesContext.responseComplete();
		}
	}

É bom lembrar que na sua pagina.xhtml é preciso usar um link, pois se usado botões para chamar este método o resultado não será o esperado.

Abaixo segue um exemplo de como esse método deve ser chamado:


<h:commandLink id="exportReport" immediate="true" action="#{bean.executeReport()}" value="#{messages['report.export']}"/>

Espero que ajude.

Até mais…

Trabalhando com datas utilizando a API JodaTime – Parte 1

Olá a todos!

Trabalhar com datas parece ser um pouco complicado, realizar cálculos de diferenças, trabalhar com minutos, segundos e até milissegundos.

Para isso temos as classes java.util.Date e java.util.Calendar, mas agora existem um nova API JodaTime.

Bom, neste primeiro será mostrado que com o uso desta API é possível deixar seu código mais limpo efetuando cálculos com datas.

Abaixo segue um exemplo:


import java.util.Calendar;
import java.util.Date;

import org.joda.time.DateTime;
import org.joda.time.Days;
import org.joda.time.Duration;
import org.joda.time.Hours;
import org.joda.time.Months;
import org.joda.time.Years;

public class JodaTimeExample {

	public static void main(String[] args) {
		
		Calendar calendarInitial = Calendar.getInstance();
		calendarInitial.set(Calendar.HOUR_OF_DAY, 1);
		calendarInitial.set(Calendar.MINUTE, 0);
		calendarInitial.set(Calendar.SECOND, 0);
		calendarInitial.set(Calendar.MILLISECOND, 0);
		
		Calendar calendarFinish = Calendar.getInstance();
		calendarFinish.add(Calendar.DAY_OF_MONTH, 37);
		calendarFinish.set(Calendar.HOUR_OF_DAY, 15);
		calendarFinish.set(Calendar.MINUTE, 0);
		calendarFinish.set(Calendar.SECOND, 0);
		calendarFinish.set(Calendar.MILLISECOND, 0);
		
		Date dateInitial = calendarInitial.getTime();
		Date dateFinish = calendarFinish.getTime();
		
		//--Exemplos que podem ajudar a deixar o código mais orgainzado
		
		System.out.println("\n");
		
		System.out.println(Duration.standardDays(1).getMillis() + " milliseconds.");
		System.out.println(Duration.standardDays(1).getStandardHours() + " hours.");
		System.out.println(Duration.standardDays(1).getStandardMinutes() + " minutes.");
		System.out.println(Duration.standardDays(1).getStandardSeconds() + " seconds.");

		System.out.println("\n");
		
		System.out.println(Duration.standardHours(48).getMillis() + " milliseconds.");
		System.out.println(Duration.standardHours(48).getStandardDays() + " days.");
		System.out.println(Duration.standardHours(48).getStandardMinutes() + " minutes.");
		System.out.println(Duration.standardHours(48).getStandardSeconds() + " seconds.");

		System.out.println("\n");
		
		System.out.println(Duration.standardMinutes(2880).getMillis() + " milliseconds.");
		System.out.println(Duration.standardMinutes(2880).getStandardDays() + " days.");
		System.out.println(Duration.standardMinutes(2880).getStandardHours() + " hours.");
		System.out.println(Duration.standardMinutes(2880).getStandardSeconds() + " seconds.");
		
		System.out.println("\n");

		System.out.println(Duration.standardSeconds(360000).getMillis() + " milliseconds.");
		System.out.println(Duration.standardSeconds(360000).getStandardDays() +" days.");
		System.out.println(Duration.standardSeconds(360000).getStandardHours() + " hours.");
		System.out.println(Duration.standardSeconds(360000).getStandardMinutes() + " minutes.");

		System.out.println("\n");

		//--Exemplos que podem ajudar a calcular diferenças entre datas
		
		System.out.println(Hours.hoursBetween(new DateTime(dateInitial), new DateTime(dateFinish)).getHours() + " hours.");
		System.out.println(Days.daysBetween(new DateTime(dateInitial), new DateTime(dateFinish)).getDays() + " days."); 
		System.out.println(Months.monthsBetween(new DateTime(dateInitial), new DateTime(dateFinish)).getMonths() + " months.");
		System.out.println(Years.yearsBetween(new DateTime(dateInitial), new DateTime(dateFinish)).getYears() + " years.");
		
		System.out.println("\n");
		
	}
	
}

No próximo post será mostrado mais sobre essa API e sobre a persistências dessas datas na sua base de dados.

Até mais…

Criptografando senhas usando MD5 em Java

Olá a todos!

Quando se trabalha com sistemas com múltiplos usuários é interessante criptografar as senhas do usuários para uma maior confiabilidade e descrição dessas senhas, para isso uma boa opção é o MD5.

Uma senha criptografada com MD5 não pode ser novamente transformada no texto de origem, portanto a comparação deve ser feita por duas strings criptografadas.

Abaixo segue uma classe que vai ajudar na criação de MD5.


import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class ConvertPasswordToMD5 {

	public static String convertPasswordToMD5(String password) throws NoSuchAlgorithmException {
		MessageDigest md = MessageDigest.getInstance("MD5");

		BigInteger hash = new BigInteger(1, md.digest(password.getBytes()));

		return String.format("%32x";, hash);
	}

}

Bom, abaixo segue o código de teste desta classe que criptografa as senhas em MD5.


import java.security.NoSuchAlgorithmException;

public class Test {

	public static void main(String[] args) {
		String password1 = "Senha1";
		String password2 = "Senha2";

		try {
			String password1MD5 = ConvertPasswordToMD5.convertPasswordToMD5(password1);
			String password2MD5 = ConvertPasswordToMD5.convertPasswordToMD5(password2);

			String passwordCompareMD5 = ConvertPasswordToMD5.convertPasswordToMD5(password1);

			System.out.println("Password1: " + password1MD5);
			System.out.println("Password2: " + password2MD5);

			System.out.println("passwordCompareMD5: " + passwordCompareMD5);

			if (password1MD5.equals(passwordCompareMD5)) {
				System.out.println("Compare OK");
			} else {
				System.out.println("Compare NOK");
			}

			if (password2MD5.equals(passwordCompareMD5)) {
				System.out.println("Compare OK");
			} else {
				System.out.println("Compare NOK");
			}
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
	}
}

As saídas deste teste são:

Password1: be6b9084a5dcdb09af8f433557a2119c
Password2: 14621de3463eb7e1b3606d5514bbf800
passwordCompareMD5: be6b9084a5dcdb09af8f433557a2119c
Compare OK
Compare NOK

Em outro post será abordada a criptografia feita com RSA, onde é possível criptografar e descriptografar.

Até mais.

Aumentando o tempo de transação do JBoss

Olá a todos!

Para quem trabalha com JBoss AS 5.1.GA já deve ter se deparado com a seguinte exception “com.arjuna.ats.jbossatx.jta.TransactionManagerService”, ela acontece pois o tempo padrão de uma transação no JBoss é de 5 minutos.

Bom, mas sempre teremos métodos que levaram mais do que 5 minutos para responder, então vamos aumentar este tempo fazendo as configurações necessárias.

Para realizar esta configuração vá ate o arquivo jboss/server/default/deploy/transaction-jboss-beans.xml e edite a seguinte linha:


<property name="transactionTimeout">300</property>

O valor 300 é o padrão, pois é configurado em segundos, onde 300 segundos são iguais a 5 minutos, mude este valor para um que atenda as suas necessidades e reinicie o servidor.

Mas lembrando que se seus métodos estão demorando muito tempo e o sistema estiver apresentado algum problema de performance, está não é a solução, e sim, usar uma ferramenta de profile como por exemplo a Visual VM para encontrar o gargalo da aplicação.

Se quiser saber mais saber a Visual VM, deixe um comentário ou aguarde o próximo post.

Até mais…

Liberando acesso do Servidor JBoss AS 7 pela rede.

Olá a todos!

Para quem já trabalhou com JBoss 5.1GA que é a versão mais estável e está migrando para a versão 7.1 deve ter se deparado com o problema em disponibilizar o acesso do sistema pela rede, bem, na versão 5.1 se usava o comando -b 0.0.0.0 tanto no eclipse como nos arquivos.conf do JBoss.

Para a versão 7.1 isso muda um pouco, se você esta desenvolvendo e realizando os testes realizando o start do servidor pelo eclipse é possível continuar configurando o host como 0.0.0.0, mas para fazer um deploy manual, vá ate o arquivo /jboss//standalone/configuration/standalone.xml e econtre as seguinte linhas:


<interfaces>
    <interface name="management">
        <inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
    </interface>
    <interface name="public">
        <inet-address value="${jboss.bind.address:127.0.0.1}"/>
    </interface>
    <interface name="unsecure">
        <inet-address value="${jboss.bind.address.unsecure:127.0.0.1}"/>
    </interface>
</interfaces>

Para liberar o sistema pela rede, troque o endereço 17.0.0.1 por 0.0.0.0, pronto, assim o sistema estará disponível na rede.

O mesmo vale para quado você estiver usando o tipo domain, vá até /domain/configuration/domain.xml e edite as mesmas linhas.

Até mais…