O Congresso Brasileiro de Software: Teoria e Prática (CBSoft) é a principal conferência nacional de software.
O CBSoft integra quatro eventos tradicionais organizados pela comunidade brasileira de desenvolvimento de software: XXIV Simpósio Brasileiro de Engenharia de Software (SBES), XIV Simpósio Brasileiro de Linguagens de Programação (SBLP), IV Simpósio Brasileiro de Componentes, Arquiteturas e Reutilização de Software (SBCARS) e VIII Conferência Latino-americana em Linguagens de Padrōes de Programaçāo (SugarLoafPlop).
Em sua primeira edição, o CBSoft será realizado em uma das cidades mais belas e receptivas do Brasil, Salvador - Bahia, no período de 27 de setembro a 01 de outubro, no Hotel Bahia Othon Palace.
O CBSoft é um evento promovido pela Sociedade Brasileira de Computação (SBC) e organizado pelo Laboratório de Engenharia de Software (LES) da Universidade Federal da Bahia (UFBA).
Manoel Mendonça, Coordenador Geral do CBSoft
http://wiki.dcc.ufba.br/CBSOFT/WebHomePt
Mostrando postagens com marcador Java. Mostrar todas as postagens
Mostrando postagens com marcador Java. Mostrar todas as postagens
quinta-feira, 23 de setembro de 2010
sábado, 16 de janeiro de 2010
Google Collections Framework
Olá galera, só pra fazer a devida referência, o post é meu, mas a dica é do nosso "colaborador senior" Mário Jorge: Google Collections Framework 1.0 lançado.
Confira aqui mais informações e vídeos falando desse novo produto da Google.
"The Google Collections Library 1.0 is a set of new collection types, implementations and related goodness for Java 5 and higher, brought to you by Google. It is a natural extension of the Java Collections Framework."
Vale apena dar uma olhada, pois as novas implementações deles são, no mínimo, muito interessantes, fora os novos tipos que são show de bola.
Até mais...
Confira aqui mais informações e vídeos falando desse novo produto da Google.
"The Google Collections Library 1.0 is a set of new collection types, implementations and related goodness for Java 5 and higher, brought to you by Google. It is a natural extension of the Java Collections Framework."
Vale apena dar uma olhada, pois as novas implementações deles são, no mínimo, muito interessantes, fora os novos tipos que são show de bola.
Até mais...
sábado, 24 de outubro de 2009
REST sem rodeios
REST (Representational State Transfer): é uma técnica de engenharia de software para sistemas hipermídia distribuídos como a Internet.
"A REST (Transferência do Estado Representacional) é pretendida como uma imagem do design da aplicação se comportará: uma rede de websites (um estado virtual), onde o usuário progride com uma aplicação selecionando as ligações (transições do estado), tendo como resultado a página seguinte (que representa o estado seguinte da aplicação) que está sendo transferida ao usuário e apresentada para seu uso." (Fielding,2000)
Os serviços Web RESTful são serviços construídos com o estilo de arquitetura RESTful. A construção de serviços Web com a abordagem RESTful está surgindo como uma alternativa popular ao uso de tecnologias baseadas em SOAP para implantação de serviços na Internet, por ser mais leve e possuir a capacidade de transmitir dados diretamente através de HTTP.
A JSR 311: JAX-RS: The JavaTM API for RESTful Web Services define uma especificação para java do RESTful e o Jersey é a implementação de referencia dessa especificação.
Despois dessa rapida explicação vamos a pratica e fazer o famoso "alô mundo" (Esse é na unha e pode ser feito em qualque IDE).
1. Crie um projeto Java
2. Baixe as seguintes bibliotecas:
. jersey-core
. jersey-server
. grizzly-servlet-webserver
. jsr311-api
. asm
3. Importe para o seu projeto as bibliotecas
4. Crie as seguintes classes:
a. Classe do Serviço
b. Classe de implantação e execução
Para testar acesse cm o navegador http://localhost:9998/alomundo
Aguardem os proximos post
[]'s
"A REST (Transferência do Estado Representacional) é pretendida como uma imagem do design da aplicação se comportará: uma rede de websites (um estado virtual), onde o usuário progride com uma aplicação selecionando as ligações (transições do estado), tendo como resultado a página seguinte (que representa o estado seguinte da aplicação) que está sendo transferida ao usuário e apresentada para seu uso." (Fielding,2000)
Os serviços Web RESTful são serviços construídos com o estilo de arquitetura RESTful. A construção de serviços Web com a abordagem RESTful está surgindo como uma alternativa popular ao uso de tecnologias baseadas em SOAP para implantação de serviços na Internet, por ser mais leve e possuir a capacidade de transmitir dados diretamente através de HTTP.
A JSR 311: JAX-RS: The JavaTM API for RESTful Web Services define uma especificação para java do RESTful e o Jersey é a implementação de referencia dessa especificação.
Despois dessa rapida explicação vamos a pratica e fazer o famoso "alô mundo" (Esse é na unha e pode ser feito em qualque IDE).
1. Crie um projeto Java
2. Baixe as seguintes bibliotecas:
. jersey-core
. jersey-server
. grizzly-servlet-webserver
. jsr311-api
. asm
3. Importe para o seu projeto as bibliotecas
4. Crie as seguintes classes:
a. Classe do Serviço
package br.javalinuxevatapa.jersey.resource;
import javax.ws.rs.Path;
import javax.ws.rs.GET;
import javax.ws.rs.Produces;
@Path("/alomundo")
public class AloMundoResource {
@GET
@Produces("text/plain")
public String getClichedMessage() {
return "Alô Mundo!";
}
}
b. Classe de implantação e execução
package br.javalinuxevatapa.jersey.teste;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import com.sun.grizzly.http.SelectorThread;
import com.sun.jersey.api.container.grizzly.GrizzlyWebContainerFactory;
public class Inicio {
public static void main(String[] args) throws IOException {
final String baseUri = "http://localhost:9998/";
final MapinitParams = new HashMap ();
initParams.put("com.sun.jersey.config.property.packages","br.javalinuxevatapa.jersey.resource");
System.out.println("Starting grizzly...");
SelectorThread threadSelector = GrizzlyWebContainerFactory.create(baseUri,initParams);
System.out.println("baseUri: "+baseUri);
System.in.read();
threadSelector.stopEndpoint();
System.exit(0);
}
}
Para testar acesse cm o navegador http://localhost:9998/alomundo
Aguardem os proximos post
[]'s
terça-feira, 1 de setembro de 2009
Java 7: As alterações aprovadas
No GUJ tem uma lista interessante de discussão sobre as alterações aprovadas no Java 7. Dêem uma olhada, vale a pena conferir.
sexta-feira, 21 de agosto de 2009
VRaptor 3 Beta Lançado pela Caelum
A Caelum liberou a versão beta do VRaptor 3, "um framework MVC para web focado no desenvolvimento ágil".
Eu, particularmente, utilizei a versão 2 do VRaptor em um projeto e gostei bastante dos resultados, acho que só faltou mesmo algum tipo de auxílio nos componentes JSP (TagLIB). Mas realmente a velocidade de desenvolver utilizando VRaptor é impressionante.
"Através da inversão de controle e injeção de depêndencias ele corta drasticamente o tempo de trabalho que seria perdido com o código repetitivo: validações, conversões, direcionamentos, ajax e lookups ".
Assim que puder, vou testar essa nova versão e posto aqui as minhas impressões sobre o framework.
Até mais!
Eu, particularmente, utilizei a versão 2 do VRaptor em um projeto e gostei bastante dos resultados, acho que só faltou mesmo algum tipo de auxílio nos componentes JSP (TagLIB). Mas realmente a velocidade de desenvolver utilizando VRaptor é impressionante.
"Através da inversão de controle e injeção de depêndencias ele corta drasticamente o tempo de trabalho que seria perdido com o código repetitivo: validações, conversões, direcionamentos, ajax e lookups ".
Assim que puder, vou testar essa nova versão e posto aqui as minhas impressões sobre o framework.
Até mais!
quinta-feira, 23 de julho de 2009
Curso de JavaFX
Um curso de Java FX ministrado na UFPB.
Mini-curso JavaFX Aula1
View more documents from raphaelmarques.
Mini-curso JavaFX Aula2
View more documents from raphaelmarques.
Mini-curso JavaFX Aula3 UFPB
View more documents from raphaelmarques.
sábado, 18 de julho de 2009
Como instalar o Java media Framework (JMF) com suporte a mp3 no Mac OS X.
Java Media Framework (JMF) é uma API para o desenvolvimento de aplicações com recursos de multimidia. Essa API é usada para fazer captura de video e audio, reprodução de arquivos de mídia e distribuição de audio como video via streaming. Para criar aplicações com essas funcionalidades podemos utilizar a API JMF.
O primeiro passo é instalar a API e para windows, linux e Solares existem instaladores. Esse foi o meu primeiro problema, pois eu prefiro usar o Mac OS X. Nem tudo esta perdido existe no site uma versão Cross-platform Java. Então na hora do download podemos escolher qualquer plataforma e depois verifique que logo abaixo da versão referente a plataforma existe a versão cross-plataform.
(http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/download.html)
Depois do download, descompacte o arquivo jmf-X_x_x.zip.
Copie toda a pasta descompactada para /volume/Developer/
Para o suporte a mp3 faça o download da JMF MP3 Plugin (http://java.sun.com/javase/technologies/desktop/media/jmf/mp3/download.html)
Descompacte o arquivo javampX-x_x.zip
Dentro da pasta descompactada copie o arquivo mp3plugin.jar que esta em /lib/ext para
/volume/Developer/jmf-X_x_x/lib e para /volume/Library/Java/Extensions
Copie tambem o jmf.jar que esta dentro da pasta /volume/Developer/jmf-X_x_x/lib para a pasta /volume/Library/Java/Extensions
Através do Terminal execute o arquivo jmfinit que esta na pasta jmf-X_x_x/bin/
Ao executar o Terminal deve apresentar as seguintes informações:
JavaSound Capture Supported = true
JavaSoundAuto: Committed ok
Ainda no terminal execute o arquivo jmfregistry na pasta jmf-X_x_x/bin/
Selecione a aba PlugIns e depois a aba Codec.
No campo de texto ao lado do botão add digite a seguinte caminho para a classe com.sun.media.codec.audio.mp3.JavaDecoder e depois clique no botão Add.
Verifique na lista se a classe foi adicionada, clique na linha.
Clique em Commit e feche o jmfregistry.
Para testar execute o jmstudio.
Vá File, open file, procure um arquivo de audio no formato mp3 e abra.
Execute o mp3 e se você ouvir o arquivo a instalação esta ok!
terça-feira, 7 de julho de 2009
Como alterar diretório root do tomcat
Recentemente no trabalho precisamos fazer essa alteração para que o caminho padrão do tomcat fosse uma aplicação nossa em vez do diretório ROOT. Entrei em vários foruns, jugs e etc sobre java em busca dessa informação mas foi difícil. Vi muitas perguntas e poucas respostas e a maioria dessas poucas respostas não atendia. Eis que enfim encontrei um site que dizia como fazer. Infelizmente, por estar meio na correria pois tinha que passar essa informação com certa urgência para um colega de trabalho, eu não anotei o endereço onde encontrei a informação mas gostaria de deixar aqui a informação para quem também precisar.
Entre no diretório
/conf/
procure o arquivo server.xml
localize a tag:
e insira a tag dentro dela
ficaria mais ou menos assim:
Por enquanto é só, espero que a informação tenha sido útil
Abraços
Entre no diretório
procure o arquivo server.xml
localize a tag:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
e insira a tag dentro dela
<context path="" docbase="nomedasuaaplicacao" debug="0"/>
ficaria mais ou menos assim:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<context path="" docbase="nomedasuaaplicacao" debug="0"/>
</host>
Por enquanto é só, espero que a informação tenha sido útil
Abraços
segunda-feira, 29 de junho de 2009
Netbeans 6.7 - O que tem de novo!
Mais breve impossível. (he he he)
Vamos direto ao assunto, o quem tem no Netbens 6.7:
1. Integração com o projeto Kenai, super falado na Java One . O Project Kenai (http://kenai.com/) é um ambiente colaborativo para os desenvolvedores hospedarem seus projetos open-source de forma bem simples e agora integrado ao Netbeans (acho que vale um post sobre o projeto!)
2. Struts (http://struts.apache.org/) migrado para a versão 1.3.8
3. Suporte nativo ao Maven (http://maven.apache.org/)
4. Integração com o Hudson (https://hudson.dev.java.net/)
5.Glassfish v3 Prelude (https://glassfish.dev.java.net/) pré-configurado e com Derby (Java DB - http://db.apache.org/derby/) integrado.
6. Groovy e Grails completando código e mais umas firulas.
7. Para quem gosta do Qt (http://www.qtsoftware.com/) agora tem integração e suporte a biblioteca Qt.
8. JME e Java Card agora com suporte ao JDK 3.0
9. Melhorias no Profiler e no Debugger (Que ainda vou futucar mais!)
10. Mais apoio aos desenvolvedores PHP, C e C++.
Acho que para inicio de conversa está bom!
[]'s
Vamos direto ao assunto, o quem tem no Netbens 6.7:
1. Integração com o projeto Kenai, super falado na Java One . O Project Kenai (http://kenai.com/) é um ambiente colaborativo para os desenvolvedores hospedarem seus projetos open-source de forma bem simples e agora integrado ao Netbeans (acho que vale um post sobre o projeto!)
2. Struts (http://struts.apache.org/) migrado para a versão 1.3.8
3. Suporte nativo ao Maven (http://maven.apache.org/)
4. Integração com o Hudson (https://hudson.dev.java.net/)
5.Glassfish v3 Prelude (https://glassfish.dev.java.net/) pré-configurado e com Derby (Java DB - http://db.apache.org/derby/) integrado.
6. Groovy e Grails completando código e mais umas firulas.
7. Para quem gosta do Qt (http://www.qtsoftware.com/) agora tem integração e suporte a biblioteca Qt.
8. JME e Java Card agora com suporte ao JDK 3.0
9. Melhorias no Profiler e no Debugger (Que ainda vou futucar mais!)
10. Mais apoio aos desenvolvedores PHP, C e C++.
Acho que para inicio de conversa está bom!
[]'s
Download do Netbeans 6.7
Foi liberada a versão final do Netbeans 6.7 para download. Para saber um pouco mais sobre todas as novas funcionalidades dessa versão acesse essa página.
Ainda não pude relizar nenhum teste nessa versão, mas em breve algum integrante do blog deve postar suas conclusões.
Até a próxima.
quarta-feira, 24 de junho de 2009
IDE Eclipse
O Lançamento do Eclipse Galileo está prometido para hoje 24.06.09.
Dentre outras coisas a atualização do JUnit para o 4.5.
Outra coisa são as melhorias para quem usa MAC OS X.
Dentre outras coisas a atualização do JUnit para o 4.5.
Outra coisa são as melhorias para quem usa MAC OS X.
terça-feira, 16 de junho de 2009
Idiomas Java
Aproveitando a abordagem de Mário sobre padrões de projeto, vou falar um pouco sobre idiomas. Um idioma é um conjunto de práticas, assim como padrões de projeto, mas específico de uma linguagem de programação. Ou seja, existe para Java, C++, C#, PHP... Estranhamente não é um princípio muito conhecido(eu pessoalmente nunca tinha ouvido falar até fazer uma pós graduação). Se você, por exemplo, buscar no google "idiomas java" vai se deparar com links relativos a cursos de inglês, dúvidas de gramáticas e outros resultados irrelevantes. Nada relacionado a boas práticas de desenvolvimento.
Para clarear as idéias(ou ideias de acordo com as novas regras gramaticais) vou apresentar um exemplo conhecido como "Double Brace Initialization" ou Inicialização Dupla Chave.
Vejam o código abaixo:
Repararam nas duas chaves? Apesar de não ser muito comum, essa abordagem é uma maneira bastante conveniente de inicializar coleções em Java.
Espero que tenham gostado. Em breve postarei mais sobre esse interessante assunto.
Para clarear as idéias(ou ideias de acordo com as novas regras gramaticais) vou apresentar um exemplo conhecido como "Double Brace Initialization" ou Inicialização Dupla Chave.
Vejam o código abaixo:
private Set JaliVE = new TreeSet(){{
add("Fábio");
add("Mário");
add("Diego");
add("Ian");
}};
Repararam nas duas chaves? Apesar de não ser muito comum, essa abordagem é uma maneira bastante conveniente de inicializar coleções em Java.
Espero que tenham gostado. Em breve postarei mais sobre esse interessante assunto.
domingo, 14 de junho de 2009
Padrões de Projeto: Observer + Aspectos
Apresentamos o Padrão de Projeto Observer em 2 versões. Implementando todas as classes do padrão ou implementando com o uso das classes da API. Nos dois casos existem problemas para o reuso do código.
Para implementar o Padrão de Projeto podemos definir uma interface ou uma classe abstrata para o Subject. A classe concreta nos 2 casos vai ter "código extra" que não faz parte do negócio. Com o uso da interface Subject a classe Concreta deve implementar os métodos do padrão de projeto. Se utilizar a classe abstrata Suject a classe Concreta deve estender dessa classe impedindo que se faça reuso da classe por meio de herança (Java não permite herança múltipla).
Isso levanta uma discussão quanto ao uso desse padrão e a possibilidade de reuso das classes. Uma outra forma de implementar o padrão é utilizando aspectos, dessa maneira a classe a ser observada não ficaria com nenhum código estranho.
Faça o download da versão utilizando Aspectos: PadraoObserverImpl_3.zip
No post anterior temos download de 2 formas de implementação do padrão e um exemplo de aplicação do padrão.
Para implementar o Padrão de Projeto podemos definir uma interface ou uma classe abstrata para o Subject. A classe concreta nos 2 casos vai ter "código extra" que não faz parte do negócio. Com o uso da interface Subject a classe Concreta deve implementar os métodos do padrão de projeto. Se utilizar a classe abstrata Suject a classe Concreta deve estender dessa classe impedindo que se faça reuso da classe por meio de herança (Java não permite herança múltipla).
/**
* Estendendo de uma classe abstrata Subject.
* Em vermelho código adicionado em virtude do padrão.
*
*/
public class ConcreteSubject extends Subject {
private int estado = 0;
public int getEstado() {
return estado;
}
public void setEstado(int estado) {
this.estado = estado;
this.notifyObservers(estado);
}
}
Isso levanta uma discussão quanto ao uso desse padrão e a possibilidade de reuso das classes. Uma outra forma de implementar o padrão é utilizando aspectos, dessa maneira a classe a ser observada não ficaria com nenhum código estranho.
/**
* Utilizando Aspectos.
* O padrão é implementado sem interferir diretamente na classe ConcreteSubject.
*/
public class ConcreteSubject {
private int estado = 0;
public int getEstado() {
return estado;
}
public void setEstado(int estado) {
this.estado = estado;
}
}
Faça o download da versão utilizando Aspectos: PadraoObserverImpl_3.zip
No post anterior temos download de 2 formas de implementação do padrão e um exemplo de aplicação do padrão.
quinta-feira, 11 de junho de 2009
Padrões de Projeto: Observer
Os Padrões de Projeto são soluções genéricas para problemas recorrentes, “cada padrão descreve um problema no nosso ambiente e o cerne da solução, de tal forma que você possa usar essa solução mais de um milhão de vezes, sem nunca fazê-lo da mesma maneira”(Alexander, C. et al. apud Gamma, E. et al., 2000).
Ao utilizar um padrão de projeto na solução de um problema no desenvolvimento do software significa que optamos por uma solução de boa qualidade e já testada.
O padrão Observer é também conhecido como Publish-Subscribe, Event Generator ou Dependents (Salve, J.,2008). Esse padrão é endereçado a família de problemas que tem a intenção de “definir uma dependência um-para-muitos entre objetos, de maneira que quando um objeto muda de estado todos os seus dependentes são notificados e atualizados automaticamente” (Gamma, E. et al., 2000 ).
O padrão Observer que é aplicável quando a alteração no estado de um objeto implica em notificar ou alterar outros objetos. Além disso, os objetos que vão sofrer alteração ou ser notificados não são conhecidos pelo objeto que sofreu a mudança, conseguindo assim um fraco acoplamento.
No padrão Observer temos um objeto que será observado, chamado de Subject. Na API Java temos as classes java.util.Observable e java.swing.EventSource são implementações do Subject. Temos também o objeto que observa e é notificado chamado de Observer, em Java as classes que o implementam são java.util.Observer e o java.swing.Listener. Java usa o padrão na API de duas formas diferentes (Sauvé, J.,2006).
Download de uma implementação do Observer completa: PadraoObserverImpl_1.zip
Download de uma implementação do Observer com uso das classes da API java.util.Observable e java.util.Observer : PadraoObserverImpl_2.zip
Para exemplificar o uso do padrão de projeto Observer definimos uma aplicação que vamos chamar de “Bolsa de Valores”. Essa aplicação obtém o índice da bolsa de valores e exibe em formato texto ou em um gráfico. (Exemplo completo disponível no artigo download)
Download da implementação do Observer aplicado ao exemplo da Bolsa de Valores: PadroObserverBolsa.zip
Considerações:
O padrão atende as expectativas reduzindo bastante o acoplamento entre as abstrações. No entanto, em java, quando o ConcreteSubject precisa estender a classe Subject não pode estender de outra classe dificultando sua reutilização.
Na solução do padrão Observer apresentada existe apenas um método de atualização onde devemos passar o Subject ou o estado do Subject. Isso torna a missão de descobrir quem disparou a mudança no estado uma tarefa árdua (Sauvé, J., 2006).
A solução de proposta utilizando o Listner (equivalente ao Observer) é implementa pelo Java Swing. Permite a criação de vários eventos que são disparados executando os métodos associados. Ela também facilita a descoberta da fonte do evento. Conseguimos obter um código mais claro e os observares são registrados de forma mais específicada (Sauvé, J., 2006).
As duas implementações do padrão Observer citadas tem problemas pois tanto o ConcreteSubject quanto o ConcreteObserver não estão apenas com seus métodos de “negócio”. É necessário inserir código para tratar o problema da notificação dos observadores não sendo possível a reutilização direta desses objetos.
Espero ter contribuído para seus estudos sobre padrões de projeto.
Ao utilizar um padrão de projeto na solução de um problema no desenvolvimento do software significa que optamos por uma solução de boa qualidade e já testada.
O padrão Observer é também conhecido como Publish-Subscribe, Event Generator ou Dependents (Salve, J.,2008). Esse padrão é endereçado a família de problemas que tem a intenção de “definir uma dependência um-para-muitos entre objetos, de maneira que quando um objeto muda de estado todos os seus dependentes são notificados e atualizados automaticamente” (Gamma, E. et al., 2000 ).
O padrão Observer que é aplicável quando a alteração no estado de um objeto implica em notificar ou alterar outros objetos. Além disso, os objetos que vão sofrer alteração ou ser notificados não são conhecidos pelo objeto que sofreu a mudança, conseguindo assim um fraco acoplamento.
No padrão Observer temos um objeto que será observado, chamado de Subject. Na API Java temos as classes java.util.Observable e java.swing.EventSource são implementações do Subject. Temos também o objeto que observa e é notificado chamado de Observer, em Java as classes que o implementam são java.util.Observer e o java.swing.Listener. Java usa o padrão na API de duas formas diferentes (Sauvé, J.,2006).
Download de uma implementação do Observer completa: PadraoObserverImpl_1.zip
Download de uma implementação do Observer com uso das classes da API java.util.Observable e java.util.Observer : PadraoObserverImpl_2.zip
Para exemplificar o uso do padrão de projeto Observer definimos uma aplicação que vamos chamar de “Bolsa de Valores”. Essa aplicação obtém o índice da bolsa de valores e exibe em formato texto ou em um gráfico. (Exemplo completo disponível no artigo download)
Download da implementação do Observer aplicado ao exemplo da Bolsa de Valores: PadroObserverBolsa.zip
Considerações:
O padrão atende as expectativas reduzindo bastante o acoplamento entre as abstrações. No entanto, em java, quando o ConcreteSubject precisa estender a classe Subject não pode estender de outra classe dificultando sua reutilização.
Na solução do padrão Observer apresentada existe apenas um método de atualização onde devemos passar o Subject ou o estado do Subject. Isso torna a missão de descobrir quem disparou a mudança no estado uma tarefa árdua (Sauvé, J., 2006).
A solução de proposta utilizando o Listner (equivalente ao Observer) é implementa pelo Java Swing. Permite a criação de vários eventos que são disparados executando os métodos associados. Ela também facilita a descoberta da fonte do evento. Conseguimos obter um código mais claro e os observares são registrados de forma mais específicada (Sauvé, J., 2006).
As duas implementações do padrão Observer citadas tem problemas pois tanto o ConcreteSubject quanto o ConcreteObserver não estão apenas com seus métodos de “negócio”. É necessário inserir código para tratar o problema da notificação dos observadores não sendo possível a reutilização direta desses objetos.
Espero ter contribuído para seus estudos sobre padrões de projeto.
1001 utilidades em Java
O nome da biblioteca é Alfred mais poderia se chamar "BomBril".
Alfred é uma biblioteca para Java que contém dezenas de classes utilitárias que faz de tudo para você. Desde uma simples formatação de CPF ao cálculo de envio de encomendas por Sedex.
Mais informações: http://code.google.com/p/alfredlibrary/
Eu já estou contribuindo para essa iniciativa e você também pode contribuir.
Parabéns ao meu grande amigo Marlon por essa iniciativa e valeu por ter me chamado para entrar nessa.
terça-feira, 26 de maio de 2009
Obtendo uma Collection Java com DWR
Bem, o post está bem específico mas eu li em alguns foruns essa dúvida e por isso vou postar assim específico mesmo. Ou seja, esse post é para quem está começando a usar DWR.
Primeiro eu crio o método na minha classe RemoteProxy:
@RemoteProxy
public class Funcoes {
@RemoteMethod
public Collection obterMinhaLista() {
Collection lista = new ArrayList();
return lista;
}
}
As propriedades que eu quero usar do Bean devem ser mapeadas com Annotation:
@DataTransferObject
public class MeuBean{
@RemoteProperty
private Integer id;
@RemoteProperty
private String descricao;
...
}
Agora é só usar essa chamada no javascript do JSP que você desejar:
mapear esses arquivos na sua classe html, na seção head:
/dwr/interface/Funcoes.js
/dwr/engine.js
/dwr/util.js
----------------------------
<script>
function mudarDisciplinas() {
Funcoes.obterMinhaLista( exibe);
}
function exibe(meusBeans){
//aqui agora é só usar o array como quiser, lembrando que
//cada objeto do array tem id e descricao. Exemplo: meusBeans[1].descricao
}
</script>
Ah, não esqueça de mapear as duas classes no web.xml:
<servlet>
<description>DWR controller servlet</description>
<servlet-name>DWR controller servlet</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>classes</param-name>
<param-value>
meuPacote.Funcoes,
meuPacote.MeuBean
</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DWR controller servlet</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
Para quem quiser saber mais sobre AJAX com DWR é só dar uma olhada no mini-curso que Mário ministrou na FIB.
Até apróxima e qualquer dúvida, já sabe, é só comentar.
Primeiro eu crio o método na minha classe RemoteProxy:
@RemoteProxy
public class Funcoes {
@RemoteMethod
public Collection
}
As propriedades que eu quero usar do Bean devem ser mapeadas com Annotation:
@DataTransferObject
public class MeuBean{
@RemoteProperty
private Integer id;
@RemoteProperty
private String descricao;
...
}
Agora é só usar essa chamada no javascript do JSP que você desejar:
mapear esses arquivos na sua classe html, na seção head:
/dwr/interface/Funcoes.js
/dwr/engine.js
/dwr/util.js
----------------------------
<script>
function mudarDisciplinas() {
Funcoes.obterMinhaLista( exibe);
}
function exibe(meusBeans){
//aqui agora é só usar o array como quiser, lembrando que
//cada objeto do array tem id e descricao. Exemplo: meusBeans[1].descricao
}
</script>
Ah, não esqueça de mapear as duas classes no web.xml:
<servlet>
<description>DWR controller servlet</description>
<servlet-name>DWR controller servlet</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>classes</param-name>
<param-value>
meuPacote.Funcoes,
meuPacote.MeuBean
</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DWR controller servlet</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
Para quem quiser saber mais sobre AJAX com DWR é só dar uma olhada no mini-curso que Mário ministrou na FIB.
Até apróxima e qualquer dúvida, já sabe, é só comentar.
sexta-feira, 22 de maio de 2009
Lógica Básica
Galera, pra dar início as minhas postagens aqui no blog, proponho um simples desafio como distração. A proposta é criar uma "class LogicaBasica" que implemente uma solução para informar o resultado de uma subtração entre "x" e "y" sendo que só é permitido utilizar o operador de adição para os cálculos.
quarta-feira, 20 de maio de 2009
Apostila Fj21 da Caelum
Ontem resolvi acessar o site da Caelum, observei que a apostila gratuita que eles distribuem do curso de java web (FJ21), havia sido atualizada em fevereiro de 2009. Quando comecei a estudar java web essa apostila me ajudou muito e quando comecei a estagiar na área - em 2008 - meu treinamento foi praticamente baseado na apostila. Observei que a apostila está bem interessante. Uma das coisas que me chamou atenção de cara foi na seção "11.1 - Propriedades de páginas JSP" da apostila. Nesta seção eles destacam as novas propriedades permitidas pela API do JSP que são:
- Desativar Scriptlets nas páginas jsp.
<scripting-invalid>true</scripting-invalid>
Ao conversar com um colega de trabalho sobre esta possibilidade ele comentou "que bom, assim acaba com a macarronada nos jsp". Macarronada é o termo que algumas pessoas utilizam para qualificar essa prática de incluir programação nas páginas JSP. Quando pensamos numa macarronada temos aquela visão de tudo misturado, enrolado um no outro sem saber onde começa um ou termina o outro. Se você pensar em um sistema que utiliza código na pagina JSP para fazer conexão com um banco de dados é mais ou menos a mesma coisa... o lugar que vc devia utilizar apenas para apresentação, vc colocar código, fica um tanto quanto dificil de um outro programador dê manutenção no seu código.
- Desativar Expression Language
<el-ignored>false</el-ignored> //O padrão é que venha habilitado para desabilitar set true
Não sei em que situação isso seria útil, eu por exemplo utilizo bastante expression Language. Talvez alguns frameworks permitam que utilizem outras formas.
- Determinar a codificação dos arquivos de maneira genérica
<page-encoding>UTF-8</page-encoding>
Imagine toda vez que você criar uma pagina jsp ter que definir a codificação da mesma. Isso é meio chato, essa solução eu achei bastante prática.
- Incluir arquivos estaticamente antes e depois de seus JSPs:
<include-prelude>/antes.jspf</include-prelude>
<include-coda>/depois.jspf</include-coda>
Os velhos includes topo e rodapé. Aquela mesma história... ter que ficar incluindo em todas as páginas. Mais praticidade pra sua vida novamente ;)
Então, para configurar essas opções basta incluir a listagem abaixo no seu arquivo web.xml
<jsp-config>
<jsp-property-group>
<display-name> todos os jsps</display-name>
<description> configuracoes de todos os jsps</description>
<url-pattern> *.jsp</url-pattern>
<scripting-invalid> true</scripting-invalid>
<el-ignored> false</el-ignored>
<page-encoding> UTF-8</page-encoding>
<include-prelude> /antes.jspf</include-prelude>
<include-coda> /depois.jspf</include-coda>
</jsp-property-group>
</jsp-config>
Observem que eu destaquei a parte <url-pattern> pra chamar a atenção que além de permitir que você faça essa configuração para todos os arquivos .jsp, você também pode configurar para um arquivo específico.
Bastante interessante, não acham?
Por agora é só.
Abraços.
FONTE: www.caelum.com.br, curso FJ21
- Desativar Scriptlets nas páginas jsp.
<scripting-invalid>true</scripting-invalid>
Ao conversar com um colega de trabalho sobre esta possibilidade ele comentou "que bom, assim acaba com a macarronada nos jsp". Macarronada é o termo que algumas pessoas utilizam para qualificar essa prática de incluir programação nas páginas JSP. Quando pensamos numa macarronada temos aquela visão de tudo misturado, enrolado um no outro sem saber onde começa um ou termina o outro. Se você pensar em um sistema que utiliza código na pagina JSP para fazer conexão com um banco de dados é mais ou menos a mesma coisa... o lugar que vc devia utilizar apenas para apresentação, vc colocar código, fica um tanto quanto dificil de um outro programador dê manutenção no seu código.
- Desativar Expression Language
<el-ignored>false</el-ignored> //O padrão é que venha habilitado para desabilitar set true
Não sei em que situação isso seria útil, eu por exemplo utilizo bastante expression Language. Talvez alguns frameworks permitam que utilizem outras formas.
- Determinar a codificação dos arquivos de maneira genérica
<page-encoding>UTF-8</page-encoding>
Imagine toda vez que você criar uma pagina jsp ter que definir a codificação da mesma. Isso é meio chato, essa solução eu achei bastante prática.
- Incluir arquivos estaticamente antes e depois de seus JSPs:
<include-prelude>/antes.jspf</include-prelude>
<include-coda>/depois.jspf</include-coda>
Os velhos includes topo e rodapé. Aquela mesma história... ter que ficar incluindo em todas as páginas. Mais praticidade pra sua vida novamente ;)
Então, para configurar essas opções basta incluir a listagem abaixo no seu arquivo web.xml
<jsp-config>
<jsp-property-group>
<display-name> todos os jsps</display-name>
<description> configuracoes de todos os jsps</description>
<url-pattern> *.jsp</url-pattern>
<scripting-invalid> true</scripting-invalid>
<el-ignored> false</el-ignored>
<page-encoding> UTF-8</page-encoding>
<include-prelude> /antes.jspf</include-prelude>
<include-coda> /depois.jspf</include-coda>
</jsp-property-group>
</jsp-config>
Observem que eu destaquei a parte <url-pattern> pra chamar a atenção que além de permitir que você faça essa configuração para todos os arquivos .jsp, você também pode configurar para um arquivo específico.
Bastante interessante, não acham?
Por agora é só.
Abraços.
FONTE: www.caelum.com.br, curso FJ21
sexta-feira, 15 de maio de 2009
Eclipse Demo camp
Chamada para o Eclipse DemoCamp.
If you would like to organize a DemoCamp, you choose the place, set the time, organize the venue (maybe a local pub, a company office or a university) and provide a screen and projector, and the Eclipse Foundation will cover the cost of food and beverage up to $500 USD (to a maximum of $20 per person attending). We also encourage organizers to find outside corporate sponsorship in addition to Eclipse funding. For any Eclipse member company that sponsors $250 or more, their logo will be posted on the DemoCamp’s wiki page and they will be acknowledged at the DemoCamp itself.
E-mail para mais informações ou para registrar o DemoCamp:
democamps@eclipse.org
Site:
http://www.eclipse.org/community/democamp/organizedemocamp.php
--
Basicamente, eles encorajam os interessados a organizar o evento Eclipse demo Camp. Voce se responsabiliza pelo local, projetor e tela e eles cobrem os custos de alimentação e bebida de até 500 dólares (máximo de 20 dólares por pessoa).
O pessoal do java bahia parece estar se mobilizando para organizar algo.
Vamos aguardar.
If you would like to organize a DemoCamp, you choose the place, set the time, organize the venue (maybe a local pub, a company office or a university) and provide a screen and projector, and the Eclipse Foundation will cover the cost of food and beverage up to $500 USD (to a maximum of $20 per person attending). We also encourage organizers to find outside corporate sponsorship in addition to Eclipse funding. For any Eclipse member company that sponsors $250 or more, their logo will be posted on the DemoCamp’s wiki page and they will be acknowledged at the DemoCamp itself.
E-mail para mais informações ou para registrar o DemoCamp:
democamps@eclipse.org
Site:
http://www.eclipse.org/community/democamp/organizedemocamp.php
--
Basicamente, eles encorajam os interessados a organizar o evento Eclipse demo Camp. Voce se responsabiliza pelo local, projetor e tela e eles cobrem os custos de alimentação e bebida de até 500 dólares (máximo de 20 dólares por pessoa).
O pessoal do java bahia parece estar se mobilizando para organizar algo.
Vamos aguardar.
Assinar:
Postagens (Atom)