DB4Objects na Prática – Parte IV

...Para a api do db4o não existe diferença entre transações executando de forma concorrente na mesma JVM ou transações executadas em um servidor remoto...

Aplicação Embedded Server

Para a api do db4o não existe diferença entre transações executando de forma concorrente na mesma JVM ou transações executadas em um servidor remoto. Para executar transações concorrentes em uma mesma JVM (conceito de Embedded) você deverá abrir o seu banco diretamente na porta 0, para identificar que não será necessário utilizar a rede. Exemplo:

 
package br.com.tutorial;

import com.db4o.Db4o;

import com.db4o.ObjectContainer;

import com.db4o.ObjectServer;

public class Main {

      public static void main(String[] args) {

            ObjectServer server = Db4o.openServer("arquivo.yap", 0);

            try {

                  ObjectContainer client = server.openClient();

                  client.close();             

 

            } finally {

                  server.close();

            }

      }

}
            

Aplicação Client/Server

Para trabalhar com o db4o via TCP é necessário escolher uma porta maior que 0 para instanciar um ObjectServer do tipo Client/Server. Segue o exemplo:

 
package br.com.tutorial;

import java.io.IOException;

import com.db4o.Db4o;

import com.db4o.ObjectContainer;

import com.db4o.ObjectServer;

public class Main {

      public static void main(String[] args) {

            Integer porta = 8000;

            String usuario= "user";

            String senha = "123";

            ObjectServer server=Db4o.openServer("banco.yap",porta);

            server.grantAccess(usuario,senha);

            ObjectContainer client = null;

            try {

                  client = server.openClient();

            } catch (Exception e) {

                  client.close();

                  e.printStackTrace();

            }

            finally {

            server.close();

            }

      }

}
            

O ObjectServer fornece instancias do ObjectContainer que será aberto por algum cliente. Definimos um usuário e uma senha para que o client possa abrir uma conexão com o banco, além de passarmos como parâmetro a porta do servidor. No parâmetro localhost poderia ser qualquer endereço TCP/IP válido.

Garantindo somente uma instância de Servidor

Para garantir que haja somente uma instância do ObjectServer, vamos utilizar o Pattern Singleton, evitando que a sua aplicação crie diversos ObjectServers sem necessidade.

A minha sugestão seria criar uma classe que forneça o mesmo ObjectServer para qualquer outra classe que a solicite. Vejamos o exemplo:

 
package br.com.tutorial;

import com.db4o.Db4o;

import com.db4o.ObjectServer;

public class MeuServer {

      private static ObjectServer server;

      private MeuServer(){

            this.server = Db4o.openServer("arquivo.yap", 8000);

            this.server.grantAccess("usuario", "senha");

      }

      public synchronized static ObjectServer getServer(){

            if (server==null){

                  server = Db4o.openServer("arquivo.yap", 0);                

            }
          
            return server;

      }

}
            

O método stático getServer() é o responsável por fornecer uma única instância de server, conforme o Pattern Singleton.

Segue o trecho de código utilizando a classe MeuServer:

 
package br.com.tutorial;

 

import com.db4o.ObjectContainer;

import com.db4o.ObjectServer;

 

public class Main {

      public static void main(String[] args) {

            ObjectServer server = MeuServer.getServer();

            ObjectContainer client = null;

            try {

                  client = server.openClient();

                  client.set(new Cliente(222,"Jaqueline"));

                  client.close();

            } catch (Exception e) {

                  client.close();

                  e.printStackTrace();

            } finally {

                  server.close();

            }

      }

}
            

Tunning

Leia também

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados