300x250 AD TOP

adv1

Formulário de contato

21 de novembro de 2011

Tags: , , , , ,

Como conectar o SQuirreL com o DB2

Mais um problema que encontrei estes dias no trabalho... Este, pode não ser muito comum entre a maioria dos programadores, uma vez que poucos usam o banco de dados DB2 da IBM, mas sempre tem um que acaba tendo este problema, assim como eu.


O problema consiste em conectar a famosa ferramenta de acesso a bancos de dados, SQuirreL, ao banco de dados DB2 (veja links). Inicialmente, instalei a ferramenta, fazendo o download no site (vide links) e aparentemente estava tudo pronto para configurar uma conexão com o banco em questão. Fui na aba de "Aliases" e criei uma nova conexão fornecendo os dados para o DB2.
Entretanto ao tentar conectar dava um erro de url mal-formada ou que não conseguia encontrar a classe do driver jdbc.

Depois de algumas pesquisas consegui finalmente conectar com sucesso. Vide passos para tal:
  1. Faça o download dos seguintes jars no site da IBM, se não os já tiver: db2jcc4.jar e db2jcc.jar. Obs.: Certifique-se de que os jars estão atualizados, pois isso poderia causar problemas;
  2. Clique na aba "Drivers" e localize o driver "IBM DB2 App Driver". Dois cliques rápidos no mesmo e uma janela como a da figura 1 se abrirá. Clique na mini-aba "Extra Class Path" e adicione os dois jars que você baixou no passo 1;
  3. Depois disso, certifique-se de que a classe do driver no campo "Class Name" esteja setada com o seguinte valor: com.ibm.db2.jcc.DB2Driver.
  4. Vá na aba "Aliases" e crie um novo alias fornecendo as seguintes informações em ordem (também mostrado no figura 2):
    • Name: nome do alias (pode ser qualquer nome) 
    • Driver: IBM DB2 App Driver
    • URL: jdbc:db2://seuHost:suaPorta/seuBanco
    • User Name: Nome do usuário do banco
    • Password: Senha do banco
Figura 1: Adicionando jars ao app driver db2
Figura 2: Setando propriedades de conexão
E pronto. Clica em "ok" e conecta normalmente com o banco.

Se ainda assim não funcionar, logo abaixo tem um link de SGBD para DB2 muito bom também: o SQL Manager for DB2. =)

Links:
- http://www.squirrelsql.org
- http://pt.wikipedia.org/wiki/DB2
- http://www-01.ibm.com/software/data/db2/

21 de outubro de 2011

Tags: , , ,

Como acessar um iframe e seus elementos via jQuery?

Recentemente tive um problema no projeto pois sentiu a necessidade de acessar um valor de um input que estava dentro de um iframe. Esse tipo de situação não é tão comum, uma vez que geralmente acessamos os valores do iframe para fora.


Para acessar, de dentro de um iframe, um valor externo, utilizamos o seguinte código:
$('#idDoElementoExterno', parent.document).val();
Entretanto, nunca tínhamos passado pela situação contrária. Pesquisando um pouco descobrimos uma alternativa, porém em JavaScript. Para ficar melhor o entendimento, vamos simular uma situação aqui. Temos uma página html "A.html" e dentro da mesma existe um iframe que aponta (src) para uma página "B.html":

<!-- A.html -->
<html>
 <head>
  <title>Testando iframe - jQuery</title>
   <script language="JavaScript">
    function exibeValor() {
     // alert aqui!
    }
   </script>   
  </head>
  <body>
  <input type="button" value="Exibir valor de campo do iframe" onclick="exibeValor()"/>
  <br/>
  <iframe name="iframeTeste" id="iframeTeste" src="B.html" />
  </body>
</html>
<!-- B.html -->
<html>
 <head>
  <title>Testando iframe - jQuery</title>    
  </head>
  <body>
   Campo de teste: <input type="text" id="campoTeste" />
  </body>
</html>
Suponhamos que queremos buscar o valor digitado no campo de texto ('campoTeste') do iframe e exibir em um alert javascript o mesmo ao clicar no botão que está fora do iframe.
Para isso, precisamos implementar o seguinte código javascript na função "exibeValor()":
var valor = window.parent.iframeTeste.document.getElementById('campoTeste').value;

 alert(valor);
Entretanto, essa abordagem ainda não compreendia o que queríamos, uma vez que estávamos utilizando jQuery. Logo, encontramos a solução abaixo para o mesmo método:
var valor = $('#campoTeste', window.parent.iframeTeste.document).val();
 alert(valor);
Ainda assim, essa implementação ainda faz uso de chamada de atributos javascript bruta. Queríamos algo totalmente jQuery, e então chegamos a código:
var valor = $('#iframeTeste').contents().find('#campoTeste').val();
 alert(valor); 

Tudo ficou mais simples por causa da função contents() do jquery. Normalmente, a função retorna todos os nós filhos a partir dos elementos combinados, mas no caso de um iframe todo o documento é carregado no iframe. Agora você pode usar o find() para localizar os elementos que você precisa para trabalhar e é isso.

Update 15/01/2016


Se você estiver usando o Google Chrome como browser para efetuar os testes deste exemplo, provavelmente receberá um erro do tipo: 
Uncaught SecurityError: Failed to read the 'contentDocument' property from 'HTMLIFrameElement': Blocked a frame with origin "null" from accessing a frame with origin "null". Protocols, domains, and ports must match.
Isso acontece porque o Chrome tem uma política de restrição de segurança que não permite acesso a outros arquivos direto do disco rígido da sua máquina, mesmo que pertençam ao mesmo diretório/app de origem.

Existem algumas opções simples de resolver isso, vejamos:

  1. Você pode executar seus códigos via Firefox ou outro browser, uma vez que eles não impõem tais restrições;
  2. É possível ainda configurar a flag "--allow-file-access-from-files" no seu arquivo de inicialização do Chrome para habilitar tal recurso;
  3. Ou você pode hospedar suas páginas HTML em algum servidor (Apache, Tomcat, etc.) e executá-las via http://localhost/. A forma mais simples de fazer isso, se você não tiver conhecimentos avançados de servidor, é usando o módulo http-server do Node.js.

-->

21 de setembro de 2011

Tags: , , , ,

Java x JavaScript: Semelhantes ou diferentes?!

Java vs JavaScript: Uma boa discussão!
Uma colega de trabalho encontrou um post no GUJ essa semana onde um dos integrantes fazia a seguinte comparação entre "Java" e "JavaScript":

Java:
  • compilada e interpretada
  • roda em servidores, desktops, notebooks, SISC e RISC
  • roda em browsers, celulares, PDAs, smartcards e microchips
  • API extremamente rica e extensa
  • orientada a objetos
  • diversão ao programar: comparável a ir a um parque temático

JavaScript:
  • interpretada
  • roda somente em browsers
  • API extremamente simples
  • baseada em objetos
  • diversão ao programar: comparável a comer uma sopa de jiló com rodelas de quiabo e fígado cru.

Achei interessante pelo fato de muita gente ainda confundir o Java com o Javascript. Apesar de ambos terem o nome iniciando igualmente, são muito diferentes.

Para quem quiser entender melhor a diferença entre as duas linguagens segue link explicativo da CriarWeb.com: http://www.criarweb.com/artigos/164.php.

Concordei com o amigo do fórum no quesito: "programar com Java é como ir a um parque temático", mais que isso. São inúmeras ferramentas, frameworks, plataformas e opções de desenvolvimento, e é considerada uma das linguagens que mais ferramentas tem.

Com uma API extremamente forte, constitui a maior comunidade de desenvolvimento do planeta. Multiplataforma, extensível e com atualizações de software e afins com grande frequência.

Em relação ao JavaScript, discordo do fato de ser simples, não é todo mundo que consegue compreender como utilizar regex (Apesar de ambas as linguagens implementarem a feature).

JavaScript também é orientada a objetos (fato omitido), mesmo 90% dos programadores a utilizando estruturalmente.

Por fim, a diversão de programar com JavaScript, para mim, também não se compara ao Java. Mas achei engraçada a comparação e os termos atribuídos à mesma! =)
-->

25 de agosto de 2011

Tags: , , , ,

Configurando o GWT no Eclipse – Uma visão inicial

1. Introdução
O GWT (Google Web Toolkit) é uma ferramenta da Google poderosa que, trocando em miúdos, transforma Java em javascript. Com isso, é fácil criar aplicações web em Java, tendo uma camada front-end bem definida e o melhor de tudo, debugando código javascript como se fosse Java.

Pensando nisso, estou postando aqui uma série de artigos sobre este framework como forma de aprendizado pessoal e compartilhamento de informações com os leitores do blog. Qualquer comentário, correção ou sugestão será bem-vinda =).

2. Procedimentos iniciais

Para início de conversa, a primeira coisa que temos de fazer é configurar o ambiente de desenvolvimento. Para isto, utilizaremos as seguintes ferramentas, com respectivos links para download e descrição das mesmas:
  • Eclipse Helios, na sua versão 3.6. Link para download (Windows - Linux - Mac OS X);
  • Plug-in do GWT para o Eclipse, na sua versão 2.3.3, responsável por nos disponibilizar as ferramentas e suporte ao GWT. Link para download;
3. Configurando ambiente

Descompacte o seu Eclipse em um diretório de sua preferência (Se já não tiver instalado) e execute-o.

No menu “Help > Install New Software” clique em “Add… > Archive…” e selecione o arquivo do plug-in que você baixou (vide tópico 2), tal como na Figura 1.

Figura 1. Add repositório do plug-in do GWT no Eclipse
Clique em OK, e logo após selecione as três opções seguintes:

Figura 2. Selecionando pacotes de instalação
Clique em “Next” e logo após em “Finish” e aguarde o carregamento (Não se esqueça de aceitar os termos e condições).

Obs.: Se no meio da instalação aparecer uma modal informando que o aplicativo não é seguro, e se você deseja mesmo instalá-lo, é só clicar em OK.

Você também tem a opção de instalar o plug-in via “update site - http://dl.google.com/eclipse/plugin/3.6”, segue link com passo-a-passo específico para o Helios: http://code.google.com/eclipse/docs/install-eclipse-3.6.html

Ao término da instalação reinicie o Eclipse.

Lá em cima, na Toolbar aparecerão os seguintes botões:

Figura 3. Campos novos GWT – ToolBar
4. Finalizando...

Para criar uma aplicação é bem simples, além do suporte de toda a documentação do Google (Em inglês, porém bem visual). Neste link você encontra um “getting started” completo de como criar a aplicação e executá-la.

Essa foi uma demonstração de como iniciar no mundo GWT. É um excelente framework e ainda tem muita coisa a aprender. Aos poucos vou postando aqui pra vocês.




7 de agosto de 2011

Tags: , , , ,

Aplicação de Vendas com JBoss Seam - Parte I (Instalando o JBoss)


Pensando recentemente em como fazer alguma coisa de mais útil para a galera que lê meu blog, me deparei com uma situação nova: o novo curso que estou ministrando no CEPEP de Java Avançado.

E o objetivo central do curso é desenvolver a aplicação referida utilizando tecnologias web recentes e estáveis como EJB para a camada de negócio, JPA para persistência, a dupla JSF e Ajax integrados ao JBoss Seam como visão. Então estarei aqui postando pra vocês o resultado deste trabalho que servirá também como forma de incentivo à revisão dos meus alunos. :)

Antes de mais nada temos de fazer a configuração do nosso servidor JBoss. Pra quem ainda nunca ouviu falar do JBoss, este é um servidor corporativo J2EE robusto, com suporte a EJB e você pode encontrar mais detalhes neste link.

Atualmente estamos na versão 7.0 do JBoss AS (Application Server), mas iremos trabalhar com a versão 6.0 por questão de conveniência, abrangência e aceitação geral. Usaremos também a versão Helios do Eclipse (também não é a mais recente, estamos com o Eclipse Indigo, mas a usaremos pelo mesmo motivo do servidor).

Resumindo, o que precisaremos para o projeto:
  1. Eclipse Helios IDE, que você pode baixar aqui (Instale a versão de acordo com seu Sistema Operacional; Aqui vamos utilizar a versão para Windows 7);
  2. JBoss Tools 3.2 (plugin para o Eclipse). Link para instalação e configuração do plugin aqui;
  3. JBoss AS 6.0 (Servidor JEE), download aqui (Não esqueça de descompactar);
Obs.: Também precisaremos fazer o download do pacote do Seam, mas isso ficará para o momento específico.

Descompacte o Eclipse em um diretório de sua preferência e execute-o. Selecione seu workspace e saia da tela de apresentação. Verifique se está na Perspectiva Java EE e com a aba Servers selecionada, tal como na Figura 1.

Figura 1. Tela inicial do Eclipse

Para trabalhar com versões do servidor JBoss superiores à 5 no Helios, temos de instalar o JBoss Tools, pois é nele que se encontra a adesão à versão 6 do JBoss. Para isso, vamos no menu "Help > Install New Software > Add" e adicione a seguinte URL: http://download.jboss.org/jbosstools/updates/stable/helios/ tal como na figura 2.

Figura 2. Adicionando URL JBoss Tools
Aguarde até ele carregar a lista de dependências e selecione a última opção "Web and Java EE Development". Clique em "Next", aceite os termos de licença e por fim clique em "Finish" e aguarde ele fazer a instalação. No final, irá ser solicitada o restart do Eclipse.

Feito isso, nosso Eclipse já está apto a portar um servidor JBoss As 6. Para tanto, vá até a aba "Servers", clique com o botão direito, "New > Server > JBoss As 6.0". Clique em "Next" e na próxima janela em "Home Directory" selecione "Browse..." e procure o diretório do JBoss As que você fez download há pouco (Figura 3).

Figura 3. Configurando JBoss AS
Clique em "Finish". Inicie seu servidor: Botão direito no servidor > Start.

Prontinho, servidor instalado e pronto pra usar! =)

  • Erros Comuns
    • Na instalação do JBoss Tools, é necessário que você esteja conectado à internet (e sem proxy), uma vez que a mesma faz a instalação do plugin via download. Se não tiver acesso, faça o download do plugin e instale-o manualmente, tal como é mostrado neste link;
    • É comum tomar o seguinte erro quando se inicia o JBoss: Error installing to Start: name=jboss.web.deployment:war=/invoker state=Create mode=Manual requiredState=Installed: java.net.URISyntaxException:. Este erro acontece porque você instalou o JBoss em um diretório que tem "espaços em branco". Ex.: C:/Users/Diogo Souza/Teste tem um espaço em branco no meio dele, e isso ocasiona quebra de URL location para o server. Para resolver, coloque o JBoss em um diretório sem quebras e reinstale o servidor - Algumas vezes pode ser necessário fechar o Eclipse para renomear o caminho do servidor.

16 de julho de 2011

Tags: , ,

Quer saber se ano é bissexto no Java? Simples...


Depois de muito quebrar a cabeça pensando em uma forma de calcular o ano bissexto e tomando a deixa de alguns amigos meus do JavaFree, resolvi um problema recorrente às vezes no Java, mas que pode parecer mais complexo se não analisarmos direito...

Pode ser comum pensarmos na forma habitual de calcular um ano bissexto averiguando as seguintes regras:

1. Se é divisivel por 4:
bissexto = (ano % 4 == 0);
2.  Mas não pode ser centenário:
bissexto = (ano % 4 == 0) && (ano % 100 != 0);
3. Porém há cada 400 anos, validar:
bissexto = (ano % 4 == 0) && ( (ano % 100 != 0) || (ano % 400 == 0) );
Não que a forma acima não funcione, é até interessante sabermos porque é bissexto... hehe
Mas conseguimos resolver isso facilmente com a API do Java, usando GregorianCalendar:
new GregorianCalendar().isLeapYear(ano);
Vlew'z!


-->

18 de abril de 2011

Tags: , ,

foward vs include - Uma questão que confunde no Java Web

As funcionalidades das ações forward e include são bem semelhantes e por isso as vezes confunde! Motivado por isso e pela recente necessidade de alguns alunos meus, resolvi postar aqui um breve artigo sobre as principais diferenças entre as duas ações.


O "forward" serve para transferir o controle para outro componente web (servlet/JSP). Você deve lembrar como ele funciona: redireciona seus objetos request e reponse para o recurso que você aponta no getRequestDispatcher.

//Redireciona para A.jsp
RequestDispatcher dispatcher = request.getRequestDispatcher("A.jsp");
dispatcher.forward(request, response);

Por isso ele só pode ser chamado uma vez pelo seu servlet, porque ele delega toda a responsabilidade da requisição para outro servlet ou JSP. Isto também significa que ele só pode ser redirecionado para um servlet/JSP por vez, nada mais!
Se você tentar executar qualquer método após o forward, terá uma exceção!

Já o "include" serve, como o próprio nome diz, para incluir recursos web na sua página atual (Objeto response). É no reponse que ele age principalmente, e também pode ser chamado quantas vezes você quiser.

Ex.:
RequestDispatcher dispatcher = request.getRequestDispatcher("A.jsp");
dispatcher.include(request, response);
dispatcher = request.getRequestDispatcher("B.jsp");
dispatcher.include(request, response);


Isso fará tanto a página A.jsp quanto a B.jsp serem incluídas na sua página de retorno para o usuário (response)!

Lembre-se: A ação include não redireciona, apenas inclui, por isso você pode chama-lá e continuar executando código logo após, porque ainda está no mesmo recurso web - no caso, no teu servlet!
-->