terça-feira, 26 de junho de 2012

Converter Array para java.util.List

Object[] arr = new Object[]{"x","y","z"};
java.util.List list = Arrays.asList(arr);

quarta-feira, 20 de junho de 2012

Eclipse instalação e actualização de plug-ins

Eclipse Update Manager

O Eclipse dispõem de um Update Manager que permite instalar ou actualizar componentes do software.
Componentes de software instalados são chamados de features que são compostas por plug-ins.
Para actualizar a instalação do Eclipse, seleccionar Help > Check for Updates. O sistema irá procurar por actualizações dos componentes já instalados.

Para instalar uma  nova funcionalidade, seleccionar Help > Install New Software.



Seleccionar no campo Work with o URL de que pretende instalar o novo software.
Para adicionar um novo update site, clicar em Add e introduzir o novo URL, assim como o nome para o novo site.
Por vezes é necessário desmarcar a opção Group items by category, porque nem todos os plug-ins estão categorizados.

Instalação manual de plug-ins

Se quiser instalar um plug-in que não está disponível em nenhum update site, pode utilizar a pasta dropins, que se encontrar na pasta de instalação do Eclipse.
Para adicionar um plug-in à instalação do Eclipse, basta colocar o ficheiro JAR do plug-in, na pasta dropins e reiniciar o Eclipse. O Eclipse deve detectar o novo ficheiro e instala-lo.

Eclipse Marketplace

Também é possível instalar novos plug-ins, através do Eclipse Marketplace. A vantagem deste método, é que é possível procurar por componentes, descobrir componentes populares e ver descrições e pontuações.
Para Abrir, seleccionar Help > Eclipse Marketplace.


Fonte: vogella

Ordenar array rapidamente

Existem vários algoritmos para ordenação de arrays, mas se precisarmos de uma forma rápida, podemos  recorrer à classe java.util.Arrays. Éste método é baseado no algoritmo Merge-sort. 
package com.blogspot.aefdev ;

import java.util.Arrays;

public class Teste {

    public static void main(String[] args) {
        String arr[] = {"A", "a", "1", "Zz"};
  
        Arrays.sort(arr, String.CASE_INSENSITIVE_ORDER);
        for(String str:arr) {
            System.out.println(str);
        }
    }
}
1
A
a
Zz

terça-feira, 19 de junho de 2012

Singleton Pattern

A singleton Pattern é um design pattern que restringe a instanciação de uma classe a um objecto. Isto é útil quando pretendemos que não sejam utilizada mais que uma instância do da mesma classe.

Todas as solução são Thread-Safe.

Inicialização Lazy

public class Singleton {
    private static Singleton instance = null;

    private Singleton() {
        //TODO Completar construtor
    }

    public synchronized static Singleton getInstance() {
        if(instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}


Inicialização Eager

Se o programa precisar sempre de uma instância ou se o custo de criação de uma instância não for muito elevado em termos tempo/recursos, pode utilizar a inicialização eager.

public class Singleton {
    private static final Singleton instance = new Singleton();

    private Singleton() {
        //TODO Completar construtor
    }

    public static Singleton getInstance() {
        return instance;
    }
}

Inicialização Static block

Esta solução permite algum pré-processamento, por exemplo, para verificação de erros.
public class Singleton {
    private static final Singleton instance;

    static {
        try {
            instance = new Singleton();
        } catch (IOException e) {
            throw new RuntimeException("Erro ão inicializar", e);
        }
    }

    private Singleton() {
        //TODO Completar construtor
    }

    public static Singleton getInstance() {
        return instance;
    }
}

"Double-checked locking"

Esta solução permite reduzir o uso do synchronized no método getInstance().
Utilizando "double-checked locking", verificamos se a instância já existe, se não, depois sincronizamos.

public class Singleton {
    private volatile static Singleton instance = null;

    private Singleton() {
        //TODO Completar construtor
    }

    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

Emun

Desde o Java 5.0, a forma mais simples de criar um Singleton é através do tipo Enum. Com esta abordagem tiramos partido da garantia do Java de que qualquer valor de um enum só é inicializado uma vez.


public Enum Singleton {
    INSTANCE;
    public void execute(String arg) {
        //TODO completar
    }
}
Exemplo:

Singleton.INSTANCE.execute("qualquer coisa");

Como criar um plug-in Eclipse a partir de um ficheiro JAR

Infelizmente nem todo código Java está estruturado como Eclipse plugins e por vezes é necessário utilizar código Java disponível em arquivos JAR (Padrão Java). Felizmente a integração dessas livrarias no Eclipse é razoavelmente simples. Este processo é normalmente designado de "bundling".
Para exemplificar vou utilizar o Driver para Java do MongoDB.

Primeiro efectuamos o download do ficheiro JAR, que no meu caso fui "mongo-2.8.0.jar".

Cria um novo projecto: File > New > Project... > Plug-in Development > Plug-in from existing JAR archives. Na pagina seguinte identificar os JARs que quer no plugin. Clicar em Add External... e seleccionar o ficheiro mongo-2.8.0.jar. Clicar Next para visualizar a seguinte pagina.



Preencher os campos Project name e plug-in Name. Quando o finalizar o Wizard, deve ter o mongodb java drive plug-in que será semelhante à seguinte figura.


Ao visualizar o MANIFEST.MF podemos ver que o cabeçalho Export-Package, lista os packages disponíveis para os outros plug-ins.

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Mongodb Driver
Bundle-SymbolicName: com.mongodb
Bundle-Version: 1.0.0
Bundle-ClassPath: .
Bundle-Vendor: mongodb.com
Export-Package: com.mongodb,
 com.mongodb.gridfs,
 com.mongodb.io,
 com.mongodb.util,
 org.bson,
 org.bson.io,
 org.bson.types,
 org.bson.util,
 org.bson.util.annotations
Bundle-RequiredExecutionEnvironment: JavaSE-1.6