terça-feira, 10 de julho de 2007

Oracle : SQL : exclusiva ( sentido de exclusão )

algo útil também é como realizar um SELECT onde tenha a necessidade de excluir da seleção dados que estejam presente em outra tabela...

por exemplo, selecionar todos os dados de uma tabela de produtos disponíveis onde essa lista de produtos não selecione novamente um produto que anteriormente foi adicionado a lista de interesse em outra tabela, tendo um cenário:

- tabela_produto ( COD, DESC )
- tabela_produto_selecionado ( COD_PRODUTO, COD_USUARIO )

SELECT * FROM tabela_produto
WHERE COD NOT IN(
SELECT DISTINCT COD_PRODUTO
FROM tabela_produto_selecionado )

Usando Displaytags

algo que normalmente vejo pelos foruns de programação a galera usando esse tal do Displaytags, atualmente no projeto que estou trabalhando também estou utilizando, enfim vai alguns links que lhe pode ser útil assim como foi para mim ;)

- Manual DisplayTag, por Guilherme Mello, disponível no Portal Java

como realizar configurações gerais:

- displaytag.properties

segunda-feira, 9 de julho de 2007

Oracle : SQL : INNER JOIN : mais de um campo

ainda continuando o tema, refazendo mais alguns testes verifiquei que o formato de SQL para INNER JOIN com mais de um campo como o abaixo:

SELECT
A.COLUNA1,
B.COLUNA2
FROM
TB1 A
INNER JOIN TB2 B ON (
B.CHAVE1 = A.CHAVE1 AND
B.CHAVE2 = A.CHAVE2 AND
B.CHAVE3 = A.CHAVE3
)
WHERE
A.CODIGO = 1


funcinou, anteriormente no teste que havia feito tinha uma clausula errada no WHERE por isso não estava funcionando :P

sábado, 7 de julho de 2007

Oracle : SQL : OUTER JOIN : continuando...

bom sobre o post anterior, resolveu em partes mas ainda sim não acabou sendo muito útil
pois acabei tendo de relacionar no SQL mais outras 3 entidades/tabelas, ai a coisa ficou feia...

por enquanto a solução mais rápida foi fragmentar em 3 consultas separadas...

Oracle : SQL : OUTER JOIN

hoje brigando com as SQL para Oracle tive a necessidade de fazer um JOIN entre 2 tabelas, bom até tudo bem, normalmente os JOINs que faço usam apenas 1 única coluna, mas nesse caso eu precisava realizar um que considerasse 3 colunas, as quais são chave primária de uma entidade na base de dados e utilizadas como chave estrangeira na outra...

e fui eu lá tentar, na primeira tentativa, fui no INNER JOIN padrão:

SELECT
A.COLUNA1,
B.COLUNA2
FROM
TB1 A
INNER JOIN TB2 B ON ( B.CHAVE1 = A.CHAVE1 )
WHERE
A.CODIGO = 1

porém essa SQL não me garantia a precisão dos dados recuperados e fui eu tentar ( tudo bem que está errado, mas as vezes cometemos erros hauhauhau )

SELECT
A.COLUNA1,
B.COLUNA2
FROM
TB1 A
INNER JOIN TB2 B ON (
B.CHAVE1 = A.CHAVE1 AND
B.CHAVE2 = A.CHAVE2 AND
B.CHAVE3 = A.CHAVE3
)
WHERE
A.CODIGO = 1

e como era de se prever não funcionou...
até que com a ajuda de um colega do trabalho ele me sugeriu algo que chamava de OUTER JOIN o qual é o respectivo formato abaixo:

SELECT
A.COLUNA1,
B.COLUNA2
FROM
TB1 A,
TB2 B
WHERE
B.CHAVE1 (+)= A.CHAVE1 AND
B.CHAVE2 (+)= A.CHAVE2 AND
B.CHAVE3 (+)= A.CHAVE3 AND
A.CODIGO = 1

esse sim funcionou perfeitamente e me recuperou os dados de forma correta.

sexta-feira, 6 de julho de 2007

Importância do uso de uma ferramenta de gerência de projeto

quando ocorre algum problema relacionado ao desenvolvimento onde falha a comunicação entre a equipe é que realmente percebemos a utilidade e necessidade de uma ferramenta de gerência de projeto para acompanhar o desenvolvimento e saber o que ocorre, quais problemas foram encontrados e FUNDAMENTALMENTE o que foi alterado...

pois pode ocorrer que uma alteração feito por outro desenvolvedor da equipe de desenvolvimento afete um outro caso de uso que inicialmente/aparentemente estava "correto", com isso podendo ocorrer que quando em um novo teste for verificar este mesmo caso de uso que estava funcionando, observar que agora está ocorrendo um problema...

e a grande questão nessa hora é: o que foi alterado?

bom caso não conheça nenhuma ferramenta do genero de uma olhada nessa: dotProject

problema com o dotProject em inglês? olhe então: dotProject-BR

quinta-feira, 5 de julho de 2007

quarta-feira, 4 de julho de 2007

Oracle : útil : selecionando próximo código

algo útil que de vez em sempre me esqueço, uma SQL para selecionar um próximo valor, normalmente utilizada para recupara qual o próximo valor de código a ser inserido na entidade/tabela, segue:

SELECT nvl( max( COLUNA ), 0 )+1 COLUNA FROM ENTIDADE_TABELA


bom fica ae a dica ;)

segunda-feira, 2 de julho de 2007

Foz do Iguaçu - PR : WiMax

uma notícia interessante de hoje, que vi no O Globo Online - WiMax: rede sem fio transforma Foz do Iguaçu em cidade digital

bom eu enquanto ainda estava por lá já sabia do desenvolvimento da infra de rede sem fio da prefeitura, relacionado aos postos de saúde e escolas, mas não pensei que estavam planejando uma rede voltada a toda população...

referência WiMax : Wikipedia

Struts 1: utilizando html:select

hoje acabei tento um pouco de problema, com falta de conhecimento disponível momentaneamente ( hehe ), como de costume meu usando Webwork, Struts 2 e a maioria dos outros frameworks MVC web java, utilizo por padrão a interface List, porém a mesma nada de funcionar... bastou apenas mudar de List para um Vector e funcionou =]

o problema em si era na definição dos options:
<html:options collection="customers" property="id" labelProperty="name" />

PostgreSQL : configurando acessos

para habilitar o PostgreSQL que o mesmo seja acessível via rede é necessário realizar uma pequena configuração, no arquivo pg_hba.conf onde deverá ser definido as informações relacionadas ao IP, ou faixa de IP e método de Autenticação e no arquivo, postgresql.conf configurar: listen_addresses="*", isso irá fazer com que o PosgreSQL aceite conexões externas a máquina do servidor.

Curitiba : Peach Café



quando vier a Curitiba - PR, um local legal para ir com os amigos(as)...
mais informações [link]
Rua 15 de Novembro, esquina com Francisco Torres [mapa]

Java: novidades

* JSTL (Javascript template engine in Java)
[Sistema/Motor de template javascript em java]

JSTL é um projeto OpenSource de templates escrito em java
o qual utiliza javascript como template de programação de expansão.

* Ant Commander 1.1

É um gerenciador de arquivos escrito em java. O Ant Commander utiliza o Ant e commons VFS.
- Arquivos de sistema: Local, Zip, FTP, WebDAV, ...
- Forma de arranjo dos paineis como quizer
- Tudo é configurével( menu, toolbar,... )
- e mais funcionalidades [confira]

domingo, 1 de julho de 2007

Dia 2 de Julho

mais um ano e mais um dia que me pergunto, será que algum ano chegará esse dia, em que estarei com um sentimento de alegria...?

João Gilberto - A Felicidade

sábado, 30 de junho de 2007

Apresentação genero Powerpoint...

algo realmente complicado, quando no deparamos com a situação de ter que montar uma apresentação, normalmente cometemos alguns erros..., mas segue ae umas dicas de o que NÂO fazer em uma apresentação ( genero powerpoint ) [em inglês]



o interessante é o jeito que o cara narra o que não deve ser feito =]

Struts : exemplo de projeto

algo útil em geral, pelo menos eu tenho maior facilidade de assimilar conhecimento pegando um projeto funcionando, ver os fontes e debugar =]

baseado nisso estou disponibilizando 5 projetos simples de uso do Struts:

- struts1_tiles_crud
uso do Struts 1 em conjunto do Tiles( gerenciador de templates ) em um caso de CRUD simples

- struts2_action_annotations
exemplo de como utilizar actions através de anotações no Struts 2

- struts2_blank
exemplo de um projeto simples em branco do Struts 2, também nesse projeto tem um exemplo de como definir saída de stream de dados dinamicamente

- struts2_crud_example
exemplo de crud simples utilizando o Struts 2

- struts2_tiles2_example
exemplo de uso do Tiles 2 em conjunto do Struts 2

Obs.: em todos os projetos possuem um arquito NOTA.txt, com mais informações

ambiente no qual foi montado esses projetos:
- Eclipse 3.2
- WTP 1.5.3
- Java SDK 1.5.x
- Java SDK 1.4.x
- Apache Tomcat 5.5.20
- Apache Tomcat 5.0.28

Eclipse : Web Tools Platform 2.0

ontem foi disponibilizado para download a nova versão da plataforma de ferramentas web para o Eclipse...

essa nova versão possui algumas atualizações interessantes
com um suporte inicial para o Java EE 5...

noticiado também no JavaLobby [link: Eclipse Web Tools Platform 2.0 has arrived]
Eclipse WTP 2.0 [link]

sexta-feira, 29 de junho de 2007

PortalJavaSupport : Mail : v 1.0

relembrando o post no qual falei sobre o suporte de envio de email que o Mentawai possui, resolvi portar ele para dentro do projeto de suporte PortalJavaSupport, para que fosse possível utiliza-lo em qualquer outra aplicação web utilizando qualquer outro framework MVC java de sua preferência...

nota: Reutilização de classes para envio de email, também utilizada no Mentawai Framework MVC

obs.: o jar disponível foi compilado com o java 5

download: [projeto|código] [jar]

definição do pacote: com.portaljava.support.mail

dependências: ( estão dentro do diretório lib do projeto )
- activation.jar
- mail.jar
- velocity-dep-1.4.jar
- servlet-api.jar ( aponte para ${tomcat}/common/lib )

configuração do servlet:
<servlet>
    <servlet-name>
EmailServletConfig</servlet-name>
    <servlet-class>
com.portaljava.support.mail.config.servlet.EmailSenderConfig</servlet-class>
    <!-- caso o nome do properties for diferente deste [ o diretório inicial considerado é /WEB-INF/classes ]
    <init-param>
        <param-name>config</param-name>
        <param-value>email.properties</param-value>
    </init-param> -->

    <load-on-startup>1</load-on-startup>
</servlet>


chaves de configuração do arquivo properties: ( default: email.properties, em /WEB-INF/classes )
# definição das informações referentes ao servidor em si
smtp.server=
smtp.port=  # caso não informado assume que é a porta padrão
smtp.ssl=   # caso não informado assume que é uma conexão não criptografada
# usuário e senha para autentificação no servidor
smtp.authentication=    # caso seja um SMTP que seja autentificado
smtp.user=
smtp.password=
# definição do email que será definido como default sender
smtp.sender.mail=
smtp.sender.label=


exemplo de configuração para utilizar o SMTP do Gmail:
# definição das informações referentes ao servidor em si
smtp.server=smtp.gmail.com
smtp.port=465 
smtp.ssl=true  
# usuário e senha para autentificação no servidor
smtp.authentication=true  
smtp.user=login@gmail.com
smtp.password=login.password
# definição do email que será definido como default sender
smtp.sender.mail=login@gmail.com
smtp.sender.label=Login


para enviar um email simples
try {
  SimpleEmail email = new SimpleEmail();
  email.addTo("login@gmail.com""Login");
  email.setSubject("Testing...");
  email.setMsg("Hi,\n\nBye!");
  email.send();            
catch(Exception e) {
  e.printStackTrace();
}   


para enviar um email utilizando um template:
try {
  Letter letter = new VelocityLetter("Template.html");
  letter.setAttribute("name""Nome");
  letter.setAttribute("age""22");
  String msg = letter.getText();
  
  HtmlEmail email = new HtmlEmail();
  email.addTo("login@host.dom""Login");
  email.setSubject("Testing...");
  email.setHtmlMsg(msg);
  email.send()
catch(Exception e) {
  e.printStackTrace();


download: [projeto|código] [jar]

Google : Docs and Spreadsheets : novo visual

ontem ao acessar, percebi que realizaram uma alteração na interface, a qual agora ficou muito boa, também é possível a organização dos documentos e planilhas em pastas =]

link: Google Docs | Novos Recustos

ps.: também agora possue tradução para português, basta acessar as configurações e alterar para o idioma =]

ps.2: é possível também a partir do Google Docs publicar um documento no blog, fiz um teste rápido e funciona muito bem, acho que vou mudar a forma de postagem no meu blog =]

o pessoal do Meio Bit também postou sobre a nova interface do Google Docs [link]

quinta-feira, 28 de junho de 2007

Mentawai: usando o SMTP do Gmail

algo interessante que acabei contribuindo para o projeto do Mentawai, foi uma vez que tive a necessidade de enviar email pela minha aplicação porém eu não possuia nenhum servidor SMTP disponível, o jeito era utilizar o que eu tinha disponível que no caso era utilizar o SMTP do Gmail, mas como fazer para utilizar o SMTP do Gmail, inicialmente o suporte de email do Mentawai( que é excelente ) não me possibilitava, com isso peguei os fontes do Mentawai, fiz uma proposta de alteração que possibilitaria o envio de email usando o SMTP do Gmail, o qual é autentificado via SSL, a proposta de alteração foi aceita e desde a versão 1.8 do Mentawai está disponível para os usuários...

porém no site do Mentawai no exemplo de uso do suporte de email, não tem um exemplo de como usar o SMTP do Gmail, bom eis aqui um exemplinho:

import org.mentawai.core.*;
import org.mentawai.mail.*;

public class ApplicationManager extends org.mentawai.core.ApplicationManager {
    
    public void init() {
        Email.setDefaultHostName("smtp.gmail.com");
        Email.setSSLConnectiontrue );
        Email.setDefaultPort465 );
        Email.setDefaultAuthentication("login@gmail.com""*senha*")
        Email.setDefaultFrom("login@gmail.com""Login");
    }
  
    public void loadActions() {
        // ...
    }
}
   

e dentro da sua classe action para enviar um mail simples, você pode utilizar esse trecho de código:
        try {
            SimpleEmail email = new SimpleEmail();
            email.addTo("login@gmail.com""Login");
            email.setSubject("Testing...");
            email.setMsg("Hi,\n\nBye!");
            email.send();            
        catch(Exception e) {
            e.printStackTrace();
        }  


veja o link:[Mentawai:enviando email]