Se você estiver no espaço JEE e quiser uma camada de gerenciamento de dados moderna para o seu Aplicativos NoSqlvocê poderá se ver rapidamente limitado. Há alguns projetos interessantes, como Hibernar OGM ou Deltaspikemas nenhum deles oferece suporte ao Couchbase e é tão avançado quanto o Spring Data.
Mas está tudo bem porque os projetos do Spring Data têm extensões CDI. Isso significa que você pode usá-los em contêineres JEE. Trazer outra estrutura de DI como o Spring traz alguma sobrecarga, uma vez que o CDI já está aqui, mas vale a pena a sobrecarga quando você obtém todas as vantagens que vêm do Spring Data.
Então, vamos ver como isso funciona. Usarei o exemplo do hibernate5 disponível nos guias de início rápido do wildfly e substituirei o Hibernate Core por Dados do Spring Couchbase. O código original pode ser encontrado aqui e o código final migrado aqui.
Conectar-se ao Couchbase com CDI
A primeira coisa que você deseja configurar é uma conexão com um cluster do Couchbase. Como você está usando CDI, pode criar um @Producer. Não entrarei em detalhes sobre como você pode externalizar propriedades para o endereço IP, o nome do bucket, o login e a senha do administrador. Usarei os padrões. Se você não fornecer nenhum endereço ou nome de bucket, o SDK presumirá que você tem o Couchbase Server em execução no localhost com um bucket chamado default.
|
1 2 3 4 5 6 7 8 |
@Produz público CouchbaseOperations createCouchbaseTemplate() lançamentos UnknownHostException, CouchbaseException { CouchbaseCluster agrupamento = CouchbaseCluster.criar(); Balde balde = agrupamento.openBucket(); ClusterInfo clusterInfo = agrupamento.gerenciador de cluster("default","").informações(); retorno novo CouchbaseTemplate(clusterInfo, balde); } |
Isso deve lhe dar tudo o que você precisa para ter repositórios do Couchbase funcionando. No entanto, esteja ciente de que há um bug na versão mais recente do Solda. Portanto, você pode ter problemas. Uma solução rápida pode ser encontrada aqui. Basicamente, o problema é que o Weld mudou a forma de armazenar qualificadores, o que não é mais compatível com o método de pesquisa Bean (baseado em qualificadores). Portanto, resolvi o problema temporariamente alterando a forma como as anotações são processadas diretamente na extensão CDI. O código de exemplo tem a seguinte aparência:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
vazio processBean(@Observa ProcessBean processBean) { Feijão feijão = processBean.getBean(); para (Tipo tipo : feijão.getTypes()) { se (tipo instância de Classe<?> &lificador;&lificador; CouchbaseOperations.classe.isAssignableFrom((Classe<?>) tipo)) { Conjunto qualificadores = feijão.getQualifiers().fluxo() .classificado((e1, e2) -> Inteiro.comparar(e1.hashCode(), e2.hashCode())).coletar(Colecionadores.toSet()); couchbaseOperationsMap.colocar(qualificadores, ((Feijão) feijão)); } } } |
É mais provável que você encontre esse bug se usar o Wildfly 10 ou o Jboss EAP 7.
Integrar o repositório do Spring
Depois de ter seu produtor para a classe CouchbaseOperations, você pode começar a criar repositórios. Você não precisa implementar nada, o que faz parte da beleza do Spring Data. Basta criar uma interface que estenda a classe CouchbasePagingAndSortingRepository especificando a classe de entidade que você deseja gerenciar, bem como o tipo da chave. No exemplo, é . O que significa que o repositório armazena entidades Members usando uma chave Longo como chave.
Apenas adicionarei um método chamado findAll que recebe um Classificar como parâmetro.
|
1 2 3 4 |
público interface MemberRepository se estende CouchbasePagingAndSortingRepository { Iterável findAll(Classificar classificar); } |
Isso requer uma alteração no MemberListProducer para usar esse método específico. A Classificar permite que você defina o objeto Classificar bem como os campos a serem usados para a direção Classificar.
|
1 2 3 4 5 |
@PostConstruct público vazio retrieveAllMembersOrderedByName() { membros = memberRepository.findAll(novo Classificar(Classificar.Direção.ASC, "name" (nome))); } |
Agora você deve estar pronto para implantar esse projeto no seu contêiner JEE. Se você usar o Wildfly e o código neste repositório do github, você pode executar mvn wildfly:implementar e acesse o seguinte URL: http://localhost:8080/wildfly-springdata.
Informe-nos se encontrar algum problema ou tiver alguma sugestão na seção de comentários abaixo!