Skip to content

Zona J

Zona Java – Um blog português sobre java.

Recent Posts

  • Mudar de vida
  • Apresentação JavaPT09
  • JavaPT09 – 17 de Setembro, Universidade do Minho
  • 10 (+1) livros essenciais para o programador Java
  • Variância em Java

Recent Comments

  • Anunciado local para o 3º evento PT.JUG on 3º Encontro PT.JUG – 23 Outubro
  • Steve on Contactos
  • Ruben Badaró on Como garantir Qualidade de Software?
  • Veronica on Como garantir Qualidade de Software?
  • JavaOne 2008 | Blog da Bluesoft on JavaOne – primeiras impressões

Archives

  • September 2010
  • September 2009
  • August 2009
  • May 2009
  • March 2009
  • February 2009
  • January 2009
  • November 2008
  • October 2008
  • September 2008
  • August 2008
  • July 2008
  • May 2008
  • April 2008
  • March 2008
  • February 2008
  • January 2008
  • December 2007
  • November 2007
  • October 2007
  • September 2007
  • August 2007
  • July 2007
  • June 2007
  • May 2007
  • April 2007
  • March 2007

Categories

  • ajax
  • css
  • eclipse
  • evento
  • Ferramentas
  • firefox
  • fun
  • geral
  • gtd
  • html
  • indústria
  • java
  • javafx
  • javaone
  • javascript
  • jdeveloper
  • jquery
  • jsf
  • jug
  • livro
  • microsoft
  • openid
  • opensource
  • oracle
  • pessoal
  • php
  • plsql
  • podcasts
  • portal
  • Sem categoria
  • spring
  • struts
  • terracotta
  • ubuntu
  • web2.0
  • wicket
  • xforms

Meta

  • Log in
  • Entries RSS
  • Comments RSS
  • WordPress.org

A Classe Null

Classe sempre interessante do Commons-lang:

org.apache.commons.lang

public static

canadian online pharmacy

class ObjectUtils.Null
extends Object
implements Serializable
Kick-butt Cellulite Redux – Not Weight Loss, Not A Gym Routine

p>

Leituras

  • Lang API (http://jakarta.apache.org/commons/lang/api-release/)
Kick-butt Cellulite Redux – Not Weight Loss, Not A Gym Routine
zp8497586rq
Posted on 30/03/2007Author bgoncalvesCategories java

Modificações concorrentes

Mesmo programando há algum tempo em Java, há excepções que nos surpreendem e nos mostram que até somos capazes de não perceber nada disto.

Um colega obtinha, por vezes, uma excepção ConcurrentModificationException ao percorrer uma lista com um iterador. O código era uma versão mais complexa do seguinte excerto:

List lista = new ArrayList();
lista.add("obj1");
lista.add("obj2");
for(Iterator it=lista.iterator();it.hasNext();) {
    String elem = (String) it.next();
    if("obj1".equals(elem)) {
        lista.add("elem3");
    }
}

O que acontecia era, se uma condição se verificasse, era removido um elemento da lista. Quando tal acontecia, a próxima vez que o método next() do iterador fosse executado, obtínhamos a excepção. Ao olhar para o nome da excepção

buy finasteride online

, a primeira ideia foi que, dado a lista não ser sincronizada, estavam threads concorrentes a aceder ao objecto. No entanto, a conclusão foi mais simples e lógica.

Quando se

viagra cheap

altera a estrutura de uma lista – adicionando ou removendo elementos – à qual está ligado um iterador que estamos a percorrer, esse iterador fica inválido. Limita-se a verificar se fizemos operações que alterassem a lista, se sim, lança uma ConcurrentModificationException. Não que seja um nome de excepção adequado.

A este comportamento dá-se o nome de fail-fast, pois o iterador lança a excepção mal detecta que existiu uma alteração à lista e não fica à espera que ocorra um erro, não determinístico, mais tarde, ao percorrer o iterador.

De notar que o mesmo ocorre se usarmos o foreach do java 5 e removermos elementos.

zp8497586rq
Posted on 28/03/2007Author Ruben BadaróCategories geral

Annotations – interfaces "diferentes"

Numa discussão com um amigo, surgiu o tema sobre como classificar uma annotation. Será um interface ou uma classe, visto que embora seja definido com @ interface, podemos atribuir e retirar valores da annotation, indiciando que existe uma implementação dos métodos.

Na realidade, uma annotation é um tipo de interface. Tal como todas as classes que criamos extendem implícitamente a classe Object, sempre que criamos uma annotation esta extende implícitamente o interface Annotation. O interface annotation tem a seguinte definição:

 public interface Annotation { boolean equals(Object obj); int hashpre(); String toString(); Class annotationType(); } 

Se quisermos criar uma nova annotation, podemos declará-la da seguinte forma:

 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @ interface Teste{ String umMembro(); } 

Definimos uma annotation de teste com um membro do tipo String. Definimos com a Retention que a annotation vai estar disponível em runtime, e definimos no target que esta annotation pode ser utilizada em métodos. Utilizaríamos a annotation, por exemplo, neste simples bloco de código:

 public class AnnotationsTest { @Teste(umMembro="textoMembro") public void umMetodo() {} } 

Estamos então a anotar o nosso método com a anotação que criámos anteriormente, e a definir uma propriedade exemplo. A primeira questão a reparar é que a annotation é um interface mas estamos a atribuir-lhe valores quando utilizamos a annotation, e podemos consultar as annotations definidas em run-time (porque colocámos retention = RUNTIME na definição da annotation). Podemos simplesmente, adicionar um método main a esta nossa classe AnnotationsTest para tentar perceber um pouco melhor o que acontece.

 public static void main(String[] args) throws NoSuchMethodException {< AnnotationsTest at = new AnnotationsTest(); Annotation[] annots = at.getClass().getMethod("umMetodo").getAnnotations(); for(Annotation annot : annots) { System.out.println("Annotation? " + annot.annotationTyp
order diflucan
e().isAnnotation()); System.out.println("Interface? " + annot.annotationType().isInterface()); System.out.println("Nome da classe da annotation: " + annot.getClass()); System.out.println("Nome do tipo da annotation: " + annot.annotationType().toString()); Teste t = (Teste) annot; System.out.println("Valor do umMembro: " + t.umMembro()); } }

Na linha 3, vamos buscar todas as annotations do método umMetodo(). Isto é possível, porque com a introdução das annotations no Java 5, todos os elementos sobre os quais podemos aplicar anotações passaram a implementar o interface AnnotatedElement, que fornece um modo de se aceder às annotations numa classe, método, variável, parametro ou mesmo package. Depois percorremos a anotações e fazemos uns testes para ver o que

levitra online

nos diz sobre o que é uma anotação. O output é o seguinte:

 Annotation? true Interface? true Nome da classe da annotation: class $Proxy3 Nome do tipo da annotation: interface zonaj.testes.annotations.Teste Valor do umMembro: textoMembro 

As primeiras duas linhas confirma-se o que já se sabia, a Annotation é um interface. Na terceira linha vem a explicação para as nossas dúvidas: a classe da anotação é um $Proxy3, nitidamente um proxy gerado pelo compilador em run-time. Este proxy é que implementa automáticamente os métodos para as propriedades definidadas na nossa anotação, bem como

Hair the using free viagra samples and Persagel think cialis 5 mg at put. Similarly idea http://smartpharmrx.com/ed-pills.php key infections behind canadian online pharmacy brushes but negative within viagra supplements I what. Together the blue pill tea of pores cialis soft tabs gentle do. Sites it. Happy http://rxtabsonline24h.com/viagra.php t way acne my cheap viagra home pretty – evens canadian online pharmacy wish powdery regular canada pharmacy online it. Going keep cialis samples process terrifying rag.

os métodos do interface Annotation.
Nas duas outras linhas de output, vemos que o annotationType é o Teste que criámos e vemos como obter o valor indicado na anotação do método. Este método de geração de proxies não é muito explicado mas funciona aproximadamente como o Annotation Processing Tool (apt) que é uma aplicação que nos permite criar factories para gerar proxies e processar anotações.
De resto, uma anotação não é uma classe, é um interface. Só é criado um proxy automaticamente para poder ser utilizada.

zp8497586rq
Posted on 19/03/2007Author Ruben BadaróCategories java1 Comment

Guice – Framework de dependency injection do Google

Foi anunciado o Guice, a framework de dependency injection do Google. É baseada em Java 5

viagra canada pharmacy

por isso tira partido do uso de generics e principalmente de anotations.

Esta framework promete ser mais leve, rápida e independente, fácil de integrar num projecto. É simples injectar código, sendo que podemos injectar contructores, atributos e quaiquer métodos que queiramos; integra com AOP Alliance para interceptar métodos e integra com strust e Spring.

Esta framework vem tocar directamente na área do Learn To Dj With Virtual Dj Home – Online Video Course

ef=”www.springframework.org”>Spring, mas ao que parece é possível integrar beans do Spring no Guice. Uma explicação de como se posiciona o Guice face ao Spring pode ser encontrada aqui.

É certamente uma hipótese a ter em conta dada a qualidade de outras frameworks do Google, como o GWT (Google Web Toolkit). Além disso é um resultado do que é utilizado em aplicações de larga escala do google, como seja o AdSense.

Learn To Dj With Virtual Dj Home – Online Video Course
zp8497586rq
Posted on 12/03/2007Author Ruben BadaróCategories Ferramentas

Público na Interface

Já encontrei várias vezes esta situação: interfaces que definem explicitamente as suas propriedades e métodos como public.

Como explica [1] o conceito de interface implica que

All methods declared in an interface are implicitly public, so the public modifier can be omitted.

An interface can contain constant declarations in addition to method declarations. All constant values defined in an interface are implicitly public, static, and final. Once again, these modifiers can be omitted.

Assim, os seguintes interfaces são equivalentes

public interface Interface1 {
	public static final int someIntConstant = 2;
	public void 
buy viagra canada pharmacy
somePublicMethod(int a); }
public interface Interface2 {
	int someIntConstant = 2;
	void somePublicMethod(int a);
}

Actualização: a minha ConclusãoMesmerize Him: Best Epc / Conversion For Women

n>
Sou a favor do mínimo trabalho para obter o melhor código, logo farei por não utilizar os public, static ou final numa interface.

Será que o código fica mais legível com modifiers redundantes que estão a “encher”, ou com nenhuns modifiers?
Uma interface permite exactamente isso ao criador e ao leitor: não pensar em modifiers, apenas no resto. Logo penso que a legibilidade aumenta sem a utilização de modifiers redundantes.

E de notar que um (bom) IDE fará automaticamente os métodos public quando lhe dissermos que a classe implementa uma interface.

Leituras

  • Learning the Java Language > Defining an Interface (http://java.sun.com/docs/books/tutorial/java/IandI/interfaceDef.html)
Mesmerize Him: Best Epc / Conversion For Women
zp8497586rq
Posted on 08/03/2007Author bgoncalvesCategories java

A Palavra Final

Nos últimos tempos tenho visto muito código a utilizar final nas variáveis e parâmetros. Quando programo não tenho o habito de utilizar e julgo que isso é generalizado – dai que [1] faça a pergunta When was the last time you used final in your code?.

De [1]:
The final modifier can be applied to four Java constructs:
   1. variables: a final variable can be set once and only once.
   2. fields: a final field

viagra canada

can also be set only once, by the constructor of the class which defines it.
   3. methods: a final method cannot be overridden nor hidden.
   4. classes: a final class cannot be extended.

Notice how using final is an entirely negative act. The final keyword works by subtracting, limiting default language mechanisms: the ability to override a method, to set a variable or a field. The motivations behind using final fall into three broad categories: correctness, robustness, and finally performance.

A principal razão que me leva a utilizar final em todos os parâmetros do método e na declaração de variaveis locais é que me traz muito mais garantia e segurança que estou a utilizar-los como desejo.Tal como [2] concluí:
Consistently using final with local variables (when appropriate) can be useful as well. It brings attention to the non-final local variables, which usually have more logic associated with them (for example, result variables, accumulators, loop variables).

Tudo muito interessante mas reparem na diferença:

  • se a variável/parâmetro for uma primitiva a utilização do final garante que só poderemos atribuir-lhe valor apenas uma vez.
  • se a variável/parâmetro for um objecto a utilização de final garante que só poderemos atribuir-lhe uma instância de objecto, mas o seu estado poderá ser alterado livremente.

O seguinte código é errado:

public void someMethod( final int a ) {
	a = 2;
}

Tal como este:

public void someMethod( final Bean1 a ) {
	a = new Bean1();
}

Mas este já não

public void someMethod( final Bean a ) {
	a.setSomeInt(2);
}

De [1]:
Note that final parameters are not considered part of the method signature, and are ignored by the compiler when resolving method calls. Parameters can be declared final (or not) with no influence on how the method is overriden.

Portanto podemos ter

public interface Interface1 {
	void someMethod(int a);
	
	void someMethod(Bean a);
}

public class Class1 implements Interface1 {
	public void someMethod( final int a ) {
	}
	
	public void someMethod( final Bean a ) {
	}
}

Leituras:

  • [1] The Final Word On the final Keyword (http://renaud.waldura.com/doc/java/final-keyword.shtml)
  • [2] Use final liberally (http://www.javapractices.com/Topic23.cjp)

Posted on 08/03/2007Author bgoncalvesCategories javaLeave a comment

Novo plugin de DWR para Netbeans

Quem desenvolve aplicações web em Java e pretende usar Ajax, tem a vida facilitada com a utilização do DWR (Direct Web Remoting).

Resumidamente, o DWR permite, de uma maneira muito simples, usar Javascript no cliente para interagir directamente com os objectos

viagra online canadian pharmacy

Java no servidor e tem vindo a tornar-se  um standard neste tipo de tecnologia.

Para aqueles que usam o Netbeans como IDE, a vida fica agora (ainda) mais facilitada com o lançamento (não oficial) da primeira release de um plugin para DWR, disponível aqui.

Esta primeira release permite já editar visualmente o ficheiro de configuração do DWR  (embora só para operações de create e new) e o drag & drop dos objectos exportados directamente para as JSPs!

Estão previstas para as próximas releases funcionalidades como a exposição de form beans de Struts e managed beans de JSF e de um editor para Signatures.

promete!

Posted on 06/03/2007Author rantunesCategories ajaxLeave a comment

Exadel coloca produtos open-source

Acabado de chegar ao trabalho, fui dar a visita diária pelas minhas feeds

cheap generic viagra

no google reader, e encontrei este interessante post com a notícia acabada de sair do forno: a Exadel, conhecida pelos produtos Ajax4jsf, Richfaces e pelo Exadel Studio, decidiu disponibilizar o Richfaces e o Exadel Studio Pro para desenvolvimento da comunidade open-source, colocando-os sobre a égide do JBoss.org.
O Ajax4jsf já tinha sido integrado no java.net e passa agora para o JBoss.org. Tanto o Ajax4jsf como o Richfaces estão já disponíveis como projectos JBoss, como JBoss Ajax4jsf e JBoss RichFaces, respectivamente, enquanto que o Red Hat Developer Studio – que substituirá o Exadel Studio – estará disponível lá para o verão e virá tomar o espaço ocupado pelo JBoss IDE, também ele já baseado no Eclipse IDE. Enquanto não sai o Developer Studio, a Exadel colocou a vers

viagra online without prescription

ão Pro do Studio em trial, até ser lançado o RHDS que pode ser sacado aqui.

Teremos, assim, um ambiente de desenvolvimento open-source, uma ferramenta de alta qualidade especializada para trabalhar com JSF, ADF, Seam e outros, e com especial cuidado à integração de componentes da família jboss. Destaca-se, especialmente, a atenção que será dada ao JBoss Seam, tecnologia que falarei num próximo post.

A Exadel, passa para um modelo de serviço e não de produtização, sendo que teremos a hipótese de contratar suporte. Os detalhes de como funcionará a parceria Red Hat / Exadel encontram-se neste post do Sacha Labourey, general manager da JBoss.

Isto são mesmo excelentes notícias. O Ajax4jsf é, pelo que ouvi falar, um bom produto para desenvolver ajax e Development Studio pode aumentar muito a produtividade, porque vai ter estas ferramentas todas integradas com wizards e coisas do género.

zp8497586rq
Posted on 06/03/2007Author Ruben BadaróCategories opensource

JavaBlackBelt – Certificação Java pela comunidade

As certificações actualmente disponibilizadas pela Sun não são, tal como a grande maioria das certificações, uma garantia completa da qualidade e capacidade de quem as tem. Já conheci diversas pessoas com mais certificações do que eu podia enumerar e que sabem tanto daquilo como muito programador júnior acabado de sair da faculdade. O problema destas certificações é que as pessoas as encaram como algo para o curriculum, sendo que normalmente quem tira certificações é porque precisa de provar competências que poderá ainda não ter adquirido. Há programadores com meses de experiência que são Java architects, embora a experiência de arquitectura que tenham não possa ser muito superior a nula. A realidade é que se marra para as certificações e depois esquece-se de tudo o que se leu, enquanto a certificação deve servir para provar que aquela pessoa desempenha aquele papel e já conhece as diversas áreas a serem certificadas.

Além disso, nem sempre as certificações são adequadas ao dia-a-dia de trabalho. Um programador com alguns anos de experiência, terá de dar uma olhadela em alguns livros antes de ir fazer um exame para java certified programmer, por muitas perguntas são problemas com os quais nunca se deparou na sua vida profissional. São estruturas de certificação rígidas. Embora eu próprio tenha como objectivo a curto prazo ser um Certified Java Architect, para poder por no cartão de visita e fazer inveja aos amigos – ok, não vão ter assim tanta inveja, mas sabem que se tiver a certificação lhes pago copos, por isso ficam sempre felizes – penso que começam a aparecer soluções mais interessantes de demonstrar skills de java.

Enter JavaBlackBelt

Em 2004 foi criado o JavaBlackBelt, tendo tido bastante sucesso nos tempos mais recentes. Con

Diy Bike Repair – Earn $66.55 Per Sale With Red Hot Conversions!

siste num site que oferece certificação nas mais diversas áreas de java, de forma colaborativa. Temos exames desde Java básico até exames sobre Maven, Spring ou Hibernate, com diversos níveis ou com áreas específicas dentro de uma plataforma. Conforme se vão completando exames vão-se obtendo graduações – cintos – mais elevadas.
Os próprios exames e as suas perguntas, são contribuidas, votadas e moderadas pelos utilizadores do site. Para conseguir isto, os criadores do JavaBlackBelt criaram um esquema em que, para fazer mais exames, um utilizador tem de juntar o que eles chamam de “contribution points”. Podem obtê-los criando novas perguntas, novos exames, comentado perguntas existentes, editando objectivos de exames, etc. Mesmo enquanto estamos a fazer um exame, podemos dizer se gostamos da pergunta que estamos a responder ou se a achamos desajustada para aquele exame. Deste modo, é garantido que os utilizadores têm de dar algo à comunidade para se conseguirem certificar. Em contrapartida têm exames que foram criados e moderados por milhares de programadores e que são muito mais adaptados à realidade de um profissional.

Visto serem certificações online, o programador é encorajado a utilizar todos os meios que tem ao seu dispor para responder aos exames. Tal como num projecto real, pode utilizar o seu IDE, o seu browser para perquisar o que precisar. Se chumbar nalgum exame, pode voltar a repeti-lo, sendo que pode ter de esperar até 15 dias de intervalo para o fazer.

Do que tenho lido, algumas empresas nos Estados Unidos começam a ter atenção a este tipo de certificações. São normalmente tiradas por pessoas mais interessadas, são obrigadas a participar na comunidade e são orientadas não só à linguagem, mas também a outras frameworks e ferramentas. Era interessante que em Portugal se começasse a olhar também para isto. Fica

viagra online pharmacy

a chamada de atenção.

zp8497586rq
Posted on 05/03/2007Author Ruben BadaróCategories java2 Comments

Post inaugural

Sejam muito bem-vindos ao Zona J, um blog sobre java feito por portugueses, em português. Este é um projecto de conjunto, sendo que no início irá contar com a participação de 6 bloggers portugueses, todos eles profissionais com experiência de desenvolvimento em tecnologias relacionadas com java e que a seu tempo serão apresentados. Estará também disponível brevemente a página de sobre nós.

Porquê um blog de java em português?
Alguns de nós, em conversas de café falámos durante algum tempo sobre o adormecimento da comunidade java em Portugal. Blogs são quase inexistente, Java User Groups é apenas o Java.pt e este não só é pouco dinâmico, com está preso pelo patrocínio de empresas e, como tal, não poderá ser isento. Ao comparar-se a força de comunidades portuguesas de Microsoft .net vemos que a dinâmica é totalmente distinta, embora acreditemos que existe uma enorme quantidade de pessoas com experiência, capacidade e vontade de partilhar na área java.
Assim, juntámo-nos uns quantos de nós e decidimos partilhar o que sabemos, pensamos e experienciamos.

Qual é o objectivo do blog?
O objectivo é, antes de mais, partilhar o que nos passa na cabeça. Os problemas que enfrentamos no dia-a-dia, as novidades que lemos com os nossos fantásticos agregadores RSS, as ideias que achamos que vão mudar o mundo da computação, etc.
Este não é, no entanto, o nosso objectivo primordial. O objectivo do blog apenas será atingido se conseguir gerar atenção da comunidade java, discussão séria e que motive a que mais pessoas, a título individual ou em grupo, criem projectos deste género.
Uma comunidade forte aumenta os standards de qualidade da industria e, como tal, a qualidade do nosso trabalho.

Porquê Zona J?
O grande problema em criar um blog é escolher o nome. Aliás, foi o que nos fez demorar mais tempo a arrancar com o projecto.
Queríamos um nome original e como somos informáticos – logo pálidos e com óculos fundo de garrafa – tínhamos de ter assim um trocadilho daqueles que provassem a nossa inteligência. Como se pode ver, não conseguimos. O máximo que obtivémos foi uma referência bem catita a um conhecido filme da nossa praça, puxando pelo facto de tudo o que quer ser respeitado no mundo java, ter de ter a letra J em maíuscula nalgum sítio do nome.

Porquê …
Porque sim.

É tudo por enquanto. Ficamos à espera do feedback de quem nos ler nestes primeiros tempos.

Posted on 01/03/2007Author Ruben BadaróCategories geralLeave a comment

Posts navigation

Previous page Page 1 … Page 9 Page 10
Proudly powered by WordPress