quarta-feira, junho 24, 2009

Projeto "startado"

Finalmente inciamos o projeto que visará a criação de um sistema, ou melhor, o "improvement" de um sistema de formulários eletrônicos e workflow. Nas próxima postagens estarei disponibilizando os dados das equipes envolvidas, isso caso eles deixarem. Mas é para um boa causa.

Abraços!

domingo, maio 17, 2009

Projeto desafiador

Desde um tempo venho prevendo a possibilidade de inciar um projeto que acredito que será muito desafiador para os meus conhecimentos na plataforma Java.
Basicamente, sem mais delongas, o proj. consiste em desenvolver um produto o qual servirá não só para a gerência de documentos como também para workflow. O nome o qual estão sendo previstos eu não curto muito. Acho que não vende... Não vou dizer ainda, pois vai que o chefe utiliza alguma ferramenta de busca pela internet e localiza o meu blog dizendo que o produto que ele quer vender não é, segundo a minha visão, bom o nome. heHEhEHA

Vou tentar postar constantemente para deixa-los informados... se é que alguém vai estar ligando para isso!!!

sábado, março 14, 2009

sexta-feira, março 13, 2009

GWT

Eu não me considero um desenvolvedor muito atualizado. Não estou sempre antenado às novidade da tecnologia de desenvolvimento de software, sobretudo quando se trata do desenvolvimento de aplicações web que é o que mais gosto. Mas recentemente tive contato, quase que por acaso, com a Google Web Toolkit (GWT). Basicamente, é uma toolkit de desenvolvimento de aplicações web 2.0 usando praticamente java. Ela, digamos, abstrai toda a parte de desenvolvimento de scripts javascript, html, css usando para isso apenas a robusta linguagem de programação java. Bom, ainda me sinto muito verde para discorrer precisamente sobre GWT e, portanto, não vou correr o risco de dizer alguma bobagem, etc. Por hora é isso. Só informo que acho que terei uma experiência muito interessante com GWT.
Estarei postando outras novidades a respeito.

sexta-feira, fevereiro 20, 2009

Antileis Já Estabelecidas Na Risofísica - Considerações

Quem me conhece sabe que, volta e meia, eu chamo na, não pouco conhecida, sobretudo, dos profissionais de TI, lei de Murphy. Abaixo, segue uma dissertação acerca das Antileis na Risofísica. Eu não vou me preocupar em explicar os seus significados, até porque é só continuar lendo o e-mail. Mas uma coisa interessante é o que trata uma das Antileis de Murphy e que diz o seguinte: "Deixadas a si mesmas as coisa irão de mal a pior. A natureza está sempre do lado da falha. Estabelecendo que a natureza é canalha, sempre que alguma coisa não dá certo é porque você deixou de fazer alguma coisa." O interessante, no meu ponto de vista, não é o pessimismo da antilei em si, mas o simples fato de que ela, digamos, corrobora a existência de um ser superior dotado de inteligência a nos guiar. Veja o argumento de Murphy: "deixadas por si mesmas as coisas irão de mal a pior". A história humana conta com mais ou menos uns 4000 anos de existência e de incansável evolução. Tal processo evolutivo nos leva a crer que, caso estivéssemos em nossa jornada totalmente sozinhos, haja visto que somos fruto da natureza, muito provavelmente eu não estaria aqui para compartilhar convosco de minhas divagações sobre a trajetória bem sucedida da humanidade, isso porque muito provavelmente algo não teria dado certo. Portanto, me leva a crer que somente guiados por algo acima de nós (não olhe para o teto) conseguimos alcançar o patamar atual de sociedade moderna. Murphy e todas as seitas estão certas e ambos os argumentos se convergem no seguinte: "não há efeito semcausa" (vide o Livro dos Espíritos) e "deixadas por si mesmas as coisas irão de mal a pior".

PS: Este e-mail está postado também nos Blogs: universu.blogspot.com e gnulinuxfreak.blogspot.com

Abraços a todos!

Em 1974, foi dado início à publicação de algumas Antileis Risofísicas em páginas semanais da revista Veja. Essas leis foram denominadas antileis, por serem contra determinadas leis vigentes em todas as atividades humanas, erisofísicas para nos aparentarmos protetoramente com a metafísica. Na verdade essas antileis continuam e contam mais verdades do que as leis estabelecidas e devem ser encaradas com mais seriedade do que elas. Lembrem-se de que a primeira vez em que Proudhon declarou: "Toda propriedade é um roubo" o pessoal da festa caíu na gargalhada diante dessa - na época - antilei. O mesmo aconteceu quando, mais tarde, Lênine indagou: "Afinal o que é o roubo de um banco diante da fundação de um banco?".

Diante disso resolvi mostrar para vocês caros internautas, algumas Antileis Risofísicas.


ANTILEIS JÁ ESTABELECIDAS NA RISOFÍSICA

Antilei de Lowry: "O momento exato em que você se torna excelente em determinada coisa coincide com o momento em que você não precisa mais dela."

Antilei de Milton: "O parente mais próximo e mais violento do jogador de futebol que você xinga está sempre sentado exatamente à sua frente, na arquibancada do Maracanã."

Antilei de Pondiczery: "A vida é a causa da morte."

Antilei de Young: "T1 é o tempo necessário pruma pessoa que discou o telefone chegar à conclusão de que não vão atender do outro lado. T2 é o tempo necessário para a pessoa do outro lado - que está no banheiro - chegar ao telefone que toca. Logo T1 = T2."

Antilei de Cox: "Pra onde quer que você mude é sempre do mesmo lado da rua."

Antilei de Etorre: "A outra fila sempre anda mais rápido. Isso se aplica a qualquer fila, banco, alfândega, supermercado, tráfego. Não mude de fila pois a antilei não muda - a outra fila sempre anda mais rápido."

Antilei de Murphy: "1.Se houver possibilidade de alguma coisa dar errado, dará. 2. Das coisas que não tem a menor possibilidade de dar errado, algumas darão."

Antilei de Murphy: Deixadas a si mesmas as coisa irão de mal a pior. A natureza está sempre do lado da falha. Estabelecendo que a natureza é canalha, sempre que alguma coisa não dá certo é porque você deixou de fazer alguma coisa."

Antilei de Parkinson: "O trabalho se expande até preencher o tempo disponível."

Antilei de da mulher de Parkinson: "As despesas se expandem até o consumo total da renda."

segunda-feira, fevereiro 16, 2009

Certificação Oracle

Estou dando início ao meu processo de certificação Oracle. Vou buscar, a princípio, a certificação Oracle OCA. São dois exames: 1Z0-001 (Introduction to Oracle: SQL and PL/SQL) e 1Z0-147 (Program with PL/SQL). Essa certificação é basicamente para desenvolvedores. Existem outras certificações. Caso estejas interessado, consulte o site http://education.oracle.com

Abraços!

terça-feira, janeiro 13, 2009

Extendendo PL/SQL com JAVA

Este artivo visa explanar uma experiência que tive recentemente na qual tive a necessidade de aperfeiçoar rotinas em Oracle PL/SQL com classes JAVA. Aparentemente o que pode parecer complicado não é! É necessário também informar que este artigo baseia-se em capítulo do livro Expert Oracle PL/SQL escrito por Ron Hardman e Michael McLaughlin (McGraw-Hill/Osborne, 2005; ISBN: 0072261943). Válido também é fazer nota ao artigo de autoria por mim desconhecida mas que foi muito importante também http://docstore.mik.ua/orelly/oracle/guide8i/ch09_08.htm

O problema.

Quando inciei um projeto de desenvolvimento de um sistema de informação, um pouco Work Flow, um pouco ERP (guardado as devidas proporções para este último), tive a necessidade de processar documentos no formato XML. Então criei um modelo de documento XML e iniciei o desenvolvimento de uma rotina em Oracle PL/SQL que fizesse, entre outras palavras, a leitura desse xml. Foi um processo de criação de um algoritmo vencedor que lesse o xml em questão. Contudo, após alguns testes bem sucedidos, me debati com um problema enorme de performance da leitura do xml. Isso porque o PLSQL não é uma linguagem otimizada para esses tipos de tarefas.
Bom, procurando algo por aí na internet, mais precisamente no Google.com, achei umas funcionalidades bastante úteis onde é possível integrar a poderosa ferramenta de programação JAVA com Oracle PL/SQL. Basicamente, desde a versão 9i da Oracle é possível usar componentes OO Java, ou seja, classes javas, POJOS, etc diretamente em banco através de PL's.

Os prérequisitos.

Vamos precisar para concretização desse artigo do seguinte:
i. um sistema operacional LINUX (qualquer um);
ii. um sistema de banco de dados relacional Oracle (10g preferencialmente, pois foi a versão que uso)
iii. um ambiente de desenvolvimento JAVA (Netbeans ou Eclipse);
iv. JDK 1.4.2*

* o uso da JDK 1.4.2 dá-se em função da VM embarcada no Oracle ser a 1.4. Não quero entrar nesse mérito. Não agora...

O desenvolvimento.

Como dito, precisei fazer o parsing de um documento xml. Para isso recorri à API JDOM que manipula muito bem os elementos de documentos xml. Em nosso exemplo simples vou usar um POJO para demonstrar como implementar classes java em stored procedures Oracle.

Eis a classe:

/*
* GnuLinuxFreak.java
*
* Created on 5 de Fevereiro de 2009, 10:21
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/

package jplsql;

/**
*
* @author Daniel Barcellos
*/
public class GnuLinuxFreak {

private static String freak;

/** Creates a new instance of GnuLinuxFreak */
public GnuLinuxFreak() {
}

public static void setFreak(String frk) {
freak = frk;
}

public static String getFreak() {
return freak;
}
}

Tanto os atributos quanto os metodos tem de utilizar o modificador static porque será necessário envocá-los diretamente sem a necessidade de instanciar objetos da classe.
Exemplo:

GnuLinuxFreak.getFreak();

Agora, vamos aos objetos de banco.

Eis a procedure. Note a utilização do operador AS LANGUAGE JAVA o qual informa ao compilador de que se trata de uma implementação com JAVA.

CREATE OR REPLACE PROCEDURE PRC_GNU_LINUX_FREAK( P_FREAK VARCHAR )
AS LANGUAGE JAVA
NAME 'GnuLinuxFreak.setFreak(java.lang.String)';

A function.

CREATE OR REPLACE FUNCTION FNC_GNU_LINUX_FREAK RETURN VARCHAR2
AS LANGUAGE JAVA
NAME 'GnuLinuxFreak.getFreak(java.lang.String) return java.lang.String';

A diferença, entre outras, é o fato que, na implementação da chamada à classe tanto no argumento (parâmetro), quanto no retorno deve-se utilizar o full qualified name da classe correspondente.

Agora, vamos fazer o load da classe em nossa base. Para tanto, utilizaremos o utilitario loadjava. Este é um utilitário de linha de comando, o que obriga decorar uma quase que infinidade de comandos adicionais. É possível também fazê-lo utilizando a chamada DBMS_JAVA.LOADJAVA

call dbms_java.loadjava(' -schema "" C:\Temp\JPlsql.jar')

Em nosso exemplo utilizaremos o utilitario de linha de comando. A sintaxe usada segue abaixo:

loadjava -v -user USER/SENHA -resolve c:\Temp\JPlsql.jar

Uma listagem explanatória sobre os demais parâmetros pode ser encontrada em http://docstore.mik.ua/orelly/oracle/guide8i/ch09_04.htm.
O argumento -v significa verbose mode, ou seja, mostrará na tela tudo que for de informações do processo de carga.
O -user indicará para o utilitario para qual esquema utilizar na carga.
O -resolve é o cerne do comando propriamente dito. Ele resolverá as dependecias.

Se tu der certo durante o processo todo de carga de nossa classe de exemplo. Podemos passar para os testes. Se você tiver alguma dúvida em algo que deu errado, não deixe de postar comentários, críticas, etc.

Os testes.

Para testar, primeiro vamos fazer a chamada à procedure PRC_GNU_LINUX_FREAK.

EXEC PRC_GNU_LINUX_FREAK('Im Crazy For LINUX!!!');

Em seguida podemos ver se o método getFreak conseguirá buscar a string informada pela procedure acima.

SET SERVEROUTPUT ON
EXEC DBMS_OUTPUT.PUT_LINE(FNC_GNU_LINUX_FREAK);

Tudo certo?!

A conclusão.

Bom, imagine a quantidade de possibilidades que podemos com essas duas ferramentas. Eu sei que muitos fundamentalistas do mundo java dirão porque extender plsql de oracle se hoje em dias podemos contar com as mais diversas API'S e Frameworks disponíveis de acesso a banco de dados e persitência. Eu concordo em partes. Porém quando se trata de sistemas legados onde todas a estrutura foi e está sendo desenvolvida em PLSQL as possibilidade desse casamento podem ser infinitas até o limite de ambas as linguagens.
Sou um grande fã das duas tecnologias e percebo um futuru muito interessante não só para o PLSQL como também para o Java. Agora, image juntá-los.

Até a próxima.