Olá.

A alguns dias escrevi um post sobre PHP + MongoDB e recebi um feedback muito positivo
então resolvi repetir a dose e mostrar um pouco da integração entre Java e MongoDB.

Na minha opinião essa é uma das principais vantagens do MongoDB em relação a outros bancos de dados NoSQL,
O MongoDB e extremamente fácil de se integrar com a maioria das linguagens.

Neste Post vou falar um pouco sobre o MongoDB e a integração com o java utilizando o Spring Data.
O MongoDB fornece o mongo-java-driver que atualmente esta na versão 2.6.X é uma API completa para acessar o MongoDB.
O Spring Data é um projeto recente, lançado em 2010, ele oferecer suporte a novas tecnologias não relacionais, suporte a extensões específicas a bancos de dados relacionais. Spring Data trabalha como uma camada intermediária entre seus POJOs e o MongoDB.

Nesse exemplo estou usando o maven para gerencias as dependências do projeto
Então alem das dependências habituais do projeto: Spring, JUnit e etc.. vamos precisar adiciona ao pow.xml as dependências do MongoDB e Spring Data

pow.xml

Feito isso as dependências do projeto estão configuradas e podemos partir para a configuração do spring.
A configuração é bem simples, nesse exemplo existem apenas 2 beans que configuram o MongoDB e Spring Data mongoTemplate e mongo

applicationContext.xml

O Spring Data oferece uma serie de anotações que permitem mapear o POJO de forma bem similar ao Hibernate/JPA
Contact.java

 
@Document(collection="contacts")
public class Contact {
    @Id
    private ObjectId id;
    private String name;
    private String email;
 
  //getter and setter methods 
  ...
}

E é através do mongoTemplate que vamos interagir com o MongoDB por exemplo :

 
@Autowired
MongoTemplate template;
 
// insere um novo registro		
template.insert("contacts", contact);
 
// insere/altera um registro
template.save("contacts", contact);
 
// remove um registro
template.remove(contact);
 
// lista todos os registros
List list = template.getCollection(collectionName, Contact.class);

Apesar do Spring Data suportar o JPA repository fiz uma implementação genérica para um repositório usando o Spring Data.

GenericRepositoryWithMongo.java – Repositório genérico

public abstract class GenericRepositoryWithMongo {
 
  @Autowired
  protected MongoTemplate template;
  protected Class targetClass;
  protected String collectionName;
 
  @SuppressWarnings("unchecked")
  public GenericRepositoryWithMongo() {
     this.targetClass = (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
  }
 
  @PostConstruct
  public void initCollection() {
    if(this.targetClass.isAnnotationPresent(Document.class)){
      Document document   = this.targetClass.getAnnotation(Document.class);
      this.collectionName = document.collection();
    }
    else{
      this.collectionName = this.targetClass.getSimpleName().toLowerCase();
    }
  }
 
  public List getCollection() {
    return template.getCollection(collectionName, targetClass);
  }
 
  public void persist(T entity) {
    template.insert(collectionName, entity);
  }
 
  public void merge(T entity) {
    template.save(collectionName, entity);
  }
 
  public void remove(T entity) {
    template.remove(entity);
  }
 
  public List findAll() {
    return getCollection();
  }
 
  public long count() {
    return getCollection().size();
  }
}

E então a interface do repositório e sua implementação

ContactRepository.java – Repositório de contatos

public interface ContactRepository {
 
    public Contact findByEmail(String email);
 
    public void persist(Contact entity);
 
    public void merge(Contact entity);
 
    public void remove(Contact entity);
 
    public List findAll();
}

ContactRepositoryImpl.java – Implementação do repositório de contatos

@Service("contactRepository")
@Repository
public class ContactRepositoryImpl extends GenericRepositoryWithMongo implements ContactRepository{
 
	public Contact findByEmail(String email) {
	   Criteria criteria	 = Criteria.where("email").is(email);
	   Query query 	         = new Query(criteria);
	   return template.findOne(query, targetClass);
	}	
}

Realmente me surpreendi com a facilidade da integração usando o Spring Data
é um exemplo bem simples da integração porem mais da o caminho das pedras para quem esta se aventurando no mundo NoSQL.
Espero que seja util..

Para quem tiver o interesse deixei app no git
https://github.com/FabioBatSilva/spring-mongodb

Abraço e até a próxima….

Click aqui para ver o post Original
Fábio B. Silva
Fabio B. Silva
http://www.flexria.com.br

E ae pessoal…



Gostaria de registrar aqui uma dica para todos que estão a procura de material para estudarem sobre Flex, BlazeDS, Spring e Hibernate. O nosso amigo Rodrigo disponibilizou dois artigos interessantíssimos sobre o assunto.

O Ministério da saúde adverte: Não ler esses artigos pode lhe acarretar sérias dores de cabeça se tentar reinventar a roda.

Segue os links:

Parte 1
Parte 2

Valew Digows

Abraços a todos…

janeiro 22nd, 2008Material Spring

 

logospring

Após conversar com alguns amigos que desenvolvem Flex com Java, vi que estavam usando quase a mesma arquitetura, Spring com Hibernate – BlazeDS – Flex, alguns usam annotations no spring e no hibernate, outros usam GraniteDS ao invés de BlazeDS, mas enfim é quase tudo a mesma coisa.

Então resolvi também adotar essa arquitetura, e como início dos estudos resolvi dar uma olhada no spring, então vou passar para vocês alguns links e materiais que consegui até agora, caso tenham outros links por favor colaborem nos passando nos comentários.

Site oficial do framework (em inglês)
http://www.springframework.org/

Um material muito interessante que chegou até mim através do meu amigo Digow, se trata de um pdf com uma explicação muito boa sobre o assunto

apostila-spring.pdf ( Autor: Phillip Calçado )

Página com material sobre uso de annotations (em inglês)
http://sannotations.sourceforge.net/

Dica do meu amigo Mário Junior

http://blog.interface21.com/main/2006/11/28/a-java-configuration-option-for-spring/

Ótimo artigo de Martin Fowler 
http://martinfowler.com/articles/injection.html (em inglês)
http://www.javafree.org/content/view.jf?idContent=1 (traduzido por Ronald Tetsuo Miura )

Acredito que você deva primeiro ler a apostila escrita, e muito bem escrita por sinal, pelo Philip, leia também os artigos relacionados no fim do documento. Logo depois parta para os outros links.

Bom pessoal, espero que com esse material ja de pra começar.

Abraços…


© 2008 Softwares para Automação Comercial e Desenvolvimento de Software Personalizado | iKon Wordpress Theme by TextNData | Powered by Wordpress | rakCha web directory Clicky Web Analytics