Arquivos mensais: dezembro 2011

Injeção de Dependência no JSF 2

Como  já  é  do  conhecimento  de  qualquer  desenvolvedor,  cada  classe  em  Java  possui características  específicas  possuindo  seus  atributos  próprios  e  métodos  relacionados  com  suas características e funcionalidades  que precisará realizar. Em  qualquer  aplicação  Orientada  a  Objetos  muitas  vezes  é  necessário  que  uma  classe  use serviços de outras classes. Para que ocorra essa troca de funcionalidades é preciso que uma classe possua a referência da outra classe que deseja usar. Normalmente faríamos isso instânciando a classe ou seja daríamos um ‘new’ no nosso objeto, entretanto hoje será mostrada uma forma para se fazer isso através da Injeção de Dependência do JSF.

Um bom motivo para usarmos Injeção de Dependência em nosso projeto é o desacoplamento do nosso código,  facilidade para reuso e também facilidade para realizar testes.

A  partir  do  JSF  2  isso  ficou  muito  mais  simples  de  ser  feito,  podemos  usar  a  Injeção de Dependência  disponibilizada  por  ele  apenas  utilizando  anotações  em  cima  das  nossas  classes,  abaixo segue uma exemplificação de como podemos fazer isso:

@ManagedBean(name="veiculo")
@ApplicationScoped
public class VeiculoDaoImpl implements VeiculoDao{

//Atributos
//Métodos

//Gets e Sets

}

Primeiramente, damos um nome para no ManagedBean, no exemplo chamamos de veiculo mas pode ser qualquer nome. Esse ManagedBean é a classe que queremos usar, ou seja, queremos injetar essa classe para que a outra classe possa se utilizar de suas funcionalidades.
Note que VeiculoDao é apenas uma interface nela apenas colocamos as assinaturas dos métodos que vamos posteriormente implementar na classe VeiculoDaoImpl, é extremamente importante de criarmos uma interface para cada classe, pois o JSF injeta apenas as os métodos que estão declarados nas interfaces.
Por fim precisamos apenas injetar a classe VeiculoDaoImpl, para isso procedemos da seguinte forma:

@ManagedBean(name="vendaController")
@ApplicationScope
public class VendaController implementes Serializable{

@ManagedProperty(value="#{veiculo}")
private VeiculoDao veiculoDao;

//Gets e Sets

}

Esse segundo ManagedBean é onde nós iremos injetar a nossa classe VeiculoDaoImpl, para fazer isso apenas utilizamos a anotação @ManagedProperty e na propriedade value colocamos o nome dado anteriormente ao nosso ManagedBean, ou seja, “veiculo” outro detalhe importante é criar os Gets e Sets para a classe a ser injetada. Pronto com apenas algumas linhas acabamos de realizar a injeção de dependência do JSF 2.

Criando formulários com o Google Docs

As vezes surge a necessidade de elaborarmos formulários para pesquisa, enquetes, votações, entre outros e a incluirmos em nosso site, blog, ou de compartilharmos na web para que os internautas façam o uso dos mesmos.

Me deparando com uma tarefa destas em meu trabalho tive a necessidade de buscar uma ferramenta que pudesse me ajudar na criação de um formulário online. Foi quando descobri que o Google Docs possui este recurso que no meu caso resolveu 100% do problema.

Para começarmos basta apenas termos uma conta do Google e acessarmos o endereço e entrarmos no google Docs.

Ao entrarmos localizaremos o botão CREATE e escolhemos a opção form como a imagem mostrada abaixo:

Após criarmos o formulário agora entraremos na tela de criação dos campos do formulário. Podemos escolher entre diversos formatos para a nossa questão como: campo texto, texto parágrafo, múltipla escolha, Checkbox, Listagem, Scala e Grid.
Assim personalizamos a questão de acordo com a nossa necessidade.

Após concluído clicamos no botão Done, se caso quisermos incluir mais alguma questão nos remetemos ao canto superior esquerdo da tela no botão ADD Item para inserirmos mais uma questão ao nosso formulário. Se caso concluído apenas nos remetemos ao botão Saved no canto superior direito da tela. A tela é mostrada logo abaixo:

Compartilhando e Incorporando o formulário.

Após o nosso formulário ser salvo temos a opção de incorporá-lo ao nosso site, blog, onde for, através de um Iframe. Na opção More actions acionamos o campo embed e logo depois copiamos o código que aparecerá na janela, ou seja, o código do iframe, que poderá ser colado em qualquer lugar de seu site ou blog.

Para acessar os resultados no Google Docs basta entrar lá e procurar o arquivo do formulário que foi criado, assim os resultados se apresentarão em forma de planilha. Onde poderemos alterar, visualizar, gerar relatórios do nosso formulário através da opção Form() no menu da planilha. Como mostra na figura abaixo.

Essa foi mais uma dica aqui do nosso blog, assim como me ajudou pode também estar resolvendo o problema de outras pessoas. Muito obrigado, até a próxima.

Cursores em MySql

No desenvolvimento e manutenção de sistemas, é comum que apareçam algumas funcionalidades ou mudanças que impliquem em alterar a estrutura existente do banco de dados. Nos sistemas que já estão em produção, já não se pode mais eliminar a base de dados e iniciar novamente, pois não podemos deixar que os dados do cliente “desapareçam”.

Em muitas dessas modificações de estrutura do banco, é necessário “transferir” dados de determinadas tabelas para outras, ou fazer alguma operação para que a nova estrutura do banco de dados também se adapte ao sistema. Uma das formas para se efetuar esses ajustes é programando e executando scripts SQL.

Para tratar de uma coleção de dados(vinda de um select, por exemplo), nos utilizamos de cursores. Tive a necessidade de ajustar uma base de dados MySql, e tive de escrever uma rotina para se utilizar de duas tabelas e gerar dados para uma outra tabela. Achei um tanto burocrático, sem contar que nem o exemplo contido na documentação funcionou.

A fim de evitar que passem pelas mesmas dificuldades que passei, vou disponibilizar a estrutura com a qual tive sucesso.

delimiter ;
drop procedure if exists insereDados;

delimiter |

create procedure insereDados()
 begin

 DECLARE done INT DEFAULT 0;
 DECLARE var1, var2, var3 BIGINT;

 DECLARE curs CURSOR FOR (
	SELECT dado1, dado2, dado3 FROM TABELA
	);

 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

 OPEN curs;

 REPEAT

 	FETCH curs INTO var1, var2, var3;
		IF NOT done THEN
			INSERT INTO OUTRA_TABELA(campo1, campo2, campo3) VALUES(var1, var2, var3);
		END IF;
 UNTIL done END REPEAT;

 CLOSE curs;

 end
|

delimiter ;

call insereDados();
drop procedure if exists insereDados;

 

Lembrando que a ordem de declaração de delimitadores, variáveis e cursores deve ser seguida rigorosamente. Vale lembrar também que estaremos criando uma procedure (que para funcionar deverá ser chamada), portanto ela ficará armazenada no banco, a menos que você exclua ela. Para resolver isto, aproveitei e criei mais duas linhas(as duas últimas) onde estou chamando a procedure criada e depois de sua execução estou eliminando-a.

Um post rápido que espero que sirva de ajuda para quem precisa fazer coisas mais “cabulosas” com o banco de dados MySql.