Palestra Fixture-Factory e debate sobre TDD

A Tartigrado participou no dia 31/01/2013 de uma palestra sobre o Fixture-Factory e um debate sobre TDD na Caleum – São Paulo.

20130131_201145

Este framework, desenvolvido pela equipe que trabalha na Amil, tem como objetivo gerar automaticamente cenários (objetos) para testes através de templates.

https://github.com/aparra/fixture-factory

A apresentação do framework ficou por conta do Anderson Parra.

Após a apresentação houve um debate sobre TDD (Test Driven Development) comandado pelo Maurício Aniche que trabalha na Caelum e possui mestrado na área.

20130131_214215

Gostaríamos de agradecer a excelente recepção que tivemos no evento e elogiar o profissionalismo da Caelum.

Campus Party 2013 #CPBR6

campus-party

A Campus Party é o maior acontecimento tecnológico do mundo! Criada há 16 anos na Espanha, ela atrai anualmente geeks, nerds, empreendedores, gamers, cientistas e muitos outros criativos que reúnem-se para acompanhar centenas de atividades sobre Inovação, Ciência, Cultura e Entretenimento Digital.

Ao longo de cinco dias (28/01/2013 – 02/02/2013), palestras, debates e oficinas fazem da Campus Party uma experiência única porque, neste período, ela se transforma no principal ponto de encontro das mais importantes comunidades digitais do país. São momentos em que é possível interagir, compartilhar conhecimento, produzir novidades e, através de seus palcos, acompanhar e analisar as principais tendências de um universo onde inovar é a palavra mágica.

A Tartigrado está presente na Campus Party, dando continuidade a sua política de estar presente nos maiores eventos de tecnologia do Brasil.

Uma das grandes atrações do evento é o lançamento do Firefox OS, um sistema operacional para dispositivos móveis.

firefox_os

Configurando SSL no Tomcat

Este tutorial em como objetivo mostrar como configurar SSL (acesso https://localhost:8443) no Tomcat.

A configuração consiste em 4 passos básicos:

1 – Criar um arquivo keystore usando Java
2 – Configurar o Tomcat para usar o keystore
3 – Testar
4 – Configurar sua web app para usar SSL (acesso através https://localhost:8443/suaApp)

1 – Criando um arquivo keystore usando Java

Abra o terminal do seu computador e digite:

Linux:

$ cd /usr/local/java/bin

Mac

$ cd /Library/Java/Home/bin

Você irá mudar o diretório corrente para o diretório de instalação Java para a pasta bin. Dentro da pasta bin existe um arquivo chamado keytool. Esse arquivo é responsável por gerar o arquivo keystore.

Vamos agora gerar o keystore. Digite no terminal:

keytool -genkey -alias tomcat -keyalg RSA

Quando der “Enter” no comando acima, irá aparecer algumas perguntas. Primeiro irá pedir para criar uma senha (escolhi “password” mesmo):

loiane:bin loiane$ keytool -genkey -alias tomcat -keyalg RSA

Enter keystore password:  password
Re-enter new password: password
What is your first and last name?
[Unknown]:  Loiane Groner
What is the name of your organizational unit?
[Unknown]:  home
What is the name of your organization?
[Unknown]:  home
What is the name of your City or Locality?
[Unknown]:  Sao Paulo
What is the name of your State or Province?
[Unknown]:  SP
What is the two-letter country code for this unit?
[Unknown]:  BR
Is CN=Loiane Groner, OU=home, O=home, L=Sao Paulo, ST=SP, C=BR correct?
[no]: yes
Enter key password for
(RETURN if same as keystore password):  password
Re-enter new password: password

O arquivo .keystore será criado no seu diretório home. No WIndows será algo do tipo C:\Documents and Settings\<username>; no Mac será /Users/<username> e no Linux será /home/<username>.

2 – Configurando o Tomcat para usar o keystore

Abra o diretório de instalação do Tomcat e abra a pasta conf . Dentro dessa pasta irá encontrar um arquivo chamado server.xml. Vamos editar esse arquivo.

Ache a seguinte declaração:

<!--

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
-->

Descomente o código acima e altere para ficar como abaixo – detalhe para o diretório onde está o keystore e a senha que setou quando criou o keystore:

<Connector SSLEnabled="true" acceptCount="100" clientAuth="false"

disableUploadTimeout="true" enableLookups="false" maxThreads="25"
port="8443" keystoreFile="/Users/loiane/.keystore" keystorePass="password"
protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https"
secure="true" sslProtocol="TLS" />

3 – Vamos testar!

Inicie o serviço do Tomcar e tente acessar https://localhost:8443. Deverá abrir a homepage local do Tomcat.

Note também que se tentar acessar pela porta padrão 8080 deverá funcionar também:http://localhost:8080

4 – Configurando sua web app para usar SSL (acesso através https://localhost:8443/suaApp)

Para forçar sua aplicação web a funcionar com SSL, adicione o código abaixo no arquivo web.xml da sua aplicação (antes do final da tag web-app):

<security-constraint>

<web-resource-collection>
<web-resource-name>securedapp</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>

A tag url pattern tem o valor /* para que qualquer página ou arquivo da sua aplicação seja seguro (só poderá ser acessado através de https). A tag transport-guarantee foi setado como CONFIDENTIAL para fazer com que a aplicação seja acessada através de SSL.

Se desejar desativar o acesso SSL da aplicação, não precisa deletar o código do arquivo web.xml, basta trocar oCONFIDENTIAL para NONE.

Referência: http://www.loiane.com/2011/06/configurando-ssl-no-tomcat-em-5-minutos-httpslocalhost8443/

 

Modificar encoding do banco de dados PostgreSQL no Ubuntu Server

Este artigo tem como objetivo ensinar como modificar o encoding do banco de dados PostgreSQL 9.1 de ISO-8859-1 (ISO LATIN1) para UTF-8, em um sistema operacional Ubuntu Server 11.10.

Ao instalar o PostgreSQL, ele inicializa automaticamente uma área de armazenamento de banco de dados no disco. Chamamos isso de um cluster de banco de dados. Um cluster de banco de dados é uma coleção de bancos de dados que são gerenciados por uma única instância de um servidor de banco de dados rodando.

O encoding deste cluster por padrão vai possuir o mesmo encoding do sistema operacional.

Ao se criar um banco de dados novo, tal banco vai possuir o encoding do seu cluster.

Ou seja, se o sistema operacional possui o encoding Latin1, o cluster padrão do PostgreSQL chamado de “main” também vai possuir este encoding. E os bancos de dados criados neste cluster também terão o mesmo encoding.

Existem três opções para modificar o encoding do banco de dados:

Antes de efetuar qualquer umas dessas opções, certifique-se de fazer backup dos seus bancos de dados.

1 – Modificar o encoding do sistemas operacional para UTF-8 e reinstalar o PostgreSQL. Neste caso ao reinstalar o PostgreSQL ele cria o cluster padrão com o encoding do sistema operacional.

2 – Criar um novo cluster com o encoding UTF-8. Neste caso você terá um novo cluster rodando em uma nova porta, por exemplo: 5433;

3 – Apagar o cluster padrão e recriá-lo com o encoding UTF-8;

Neste artigo vamos executar a terceira opção, por entender, que ela é a que exige menos esforço e tempo.

1 – Modificar o encoding do sistema operacional através do seguinte comando:

update-locale LANG=pt_BR.UTF-8 LC_MESSAGES=pt_BR.UTF-8

2 – Reinicie o computador para aplicar a mudança do encoding.

3 – Para destruir o cluster padrão, digite o comando abaixo(9.1 é a versão do PostgreSQL):

$sudo pg_dropcluster –stop 9.1 main

4 – Para criar o novo cluster padrão digite:

$sudo pg_createcluster -e UTF-8 –start 9.1 main

Pronto, agora bastar criar seus bancos de dados e eles já terão a codificação UTF-8;

Banco de Dados MySQL

Para fazer o backup digite o seguinte comando:

mysqldump -u <username> -p –database <database_name> > backup_banco.sql

Após digitar esse comando vai ser solicitado a senha, basta digitá-la para finalizar o backup;

Para Restaurar o backup basta digitar o seguinte comando:

mysql -u root -p123 -h localhost banco_exemplo < backup_banco.sql

Obs: O Banco de Dados “banco_exemplo” deve ser criado previamente;

Miscelânea de comandos

#create database
CREATE DATABASE DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

#criar usuário e liberar acesso
CREATE USER ”@’%’ IDENTIFIED BY ”;
GRANT ALL ON .* TO ”@’%’;

#migração direta
mysqldump –allow-keywords –opt -u -h -p | mysql -u -h -p

Auto-completar com o Plugin JQuery para Struts 2

Neste tutorial iremos aprender como fazer um campo auto-completar utilizando o plugin JQuery para Struts 2. Como exemplo utilizaremos um campo de produtos.

1 – Baixar o plugin struts2-jquery-plugin-x.x.x.jar

http://code.google.com/p/struts2-jquery/downloads/detail?name=struts2-jquery-plugin-3.1.0.jar

2 – Copiar o plugin struts2-jquery-plugin-x.x.x.jar para a pasta libraries/struts2.x.x

3 – Adicionar o plugin as bibliotecas do projeto;

4 – Criar a seguinte classe:

package com.tartigrado.strada.model;
public class ProductList {

    private Long id;
    private String description;

    public ProductList(Long id, String description) {
        this.id = id;
        this.description = description;
    }

    //GET - SET

5 – Criar o seguinte método na classe ProductDAO:


@Transactional(readOnly=true)
public List<ProductList> findByDescription(String description) {
   description = "%" + description + "%";
   StringBuilder command = new StringBuilder();
   command.append("select new com.tartigrado.strada.model.ProductList(id, description) from Product ");
   command.append("where description LIKE :description ");
   command.append("order by description");
   Query query = this.em.createQuery(command.toString());
   query.setParameter("description", description);
   query.setMaxResults(10);
   return query.getResultList();
}

6 – Disponibilizar o método  “List<Product> findByDescription(String description)” na interface e implementação do produto;

7 – Criar no arquivo product-struts.xml a seguinte declaração de Action:

<package name="productJSON" extends="json-default">
    <action name="findProductJSON" class="com.tartigrado.strada.controller.ProductAction" method="findProductJSON">
        <result name="success" type="json" />
    </action>
</package>

8 – Criar o atributo term do tipo String na Classe ProductAction.java para receber o texto que foi digitado no campo auto-completar;

9 – Criar o seguinte método na Classe ProductAction.java:

public String findProductJSON() {
    setProductsList(service.findByDescription(getTerm()));
    return SUCCESS;
}

OBS: Verificar o método prepare para que nenhum código gere erro ao chamar o método findProduct JSON()

10 – Criar na classe responsável pela JSP onde vai estar o campo auto-complete (Ex: BuyAction.java) o atributo Long idProduct para receber o valor que vem da JSP;

11 – Não existindo o seguinte trecho de código no arquivo header.jspf inseri-lo:

<%@ taglib prefix="sj" uri="/struts-jquery-tags"%>

<sj:head jqueryui="true" jquerytheme="cupertino"/>

12 – Criar o seguinte trecho de código JavaScript na página JSP onde se encontra o campo auto-completar:

<script type="text/javascript">
    $.subscribe("autocompleteSelectProduct", function(event, data) {
        var productSelected = event.originalEvent.ui.item;
        $("#idProduct").val(productSelected.value);
        var nameProduct = productSelected.label;
        nameProduct = nameProduct.replace(/<strong>/g,'').replace(/<\/strong>/g,'');
        $("#nameProduct").val(nameProduct);
    });

    $.subscribe("clearFieldProduct", function(event, data) {
        var nameProduct = document.getElementById('nameProduct').value;
        if (nameProduct != '') {
            $("#product").val("");
            $("#product").val(document.getElementById('nameProduct').value);
            $("#nameProduct").val("");
        }
    });

    $.subscribe("addAtributeProduct", function(event, data) {
            var options = {};
            options.delay = 50;
            options.minimum = 2;
            options.selectBox = false;
            options.onsearchtopics = "addAtributeProduct";
            options.onselecttopics = "autocompleteSelectProduct";
            options.list = "productsList";
            options.listkey = "id";
            options.listvalue = "description";

            options.jqueryaction = "autocompleter";
            options.id = "product";
            options.oncom = "clearFieldProduct";
            options.href = "findProductJSON.action";

            jQuery.struts2_jquery.bind($('#product'), options);
    });
</script>

13 – Inserir o seguinte código no formulário onde se encontra o campo auto-completar:

Produto: <sj:autocompleter name="product" id="product" size="20" onSearchTopics="addAtributeProduct"/>
<s:hidden name="idProduct" id = "idProduct" />
s:hidden name="nameProduct" id = "nameProduct" />