O Eduardo (EddieStone) apresentou uma ideia que eu imediatamente gostei: "Vamos criar um curso para ensinar a utilizar o DB4O". Ontem,em uma conversa com meu orientador do mestrado apresentamos a ideia, e o professor complementou com outra ideia interessante: "Vamos oferecer uma disciplina optativa de Topicos Especiais em Banco de Dados abordando esse tema."Bem, resumindo, provavelmente vamos no proximo semetre ter na Ufes uma disciplina onde poderemos apresentar o DB4O para os alunos interessados.. eu particularmente fiquei muito animado com a ideia!!!Tomara que o resultado disso seja que muitos alunos nossos utilizem o DB4O em seus projetos de graduacao!!!!!!!!!!!!!!!!!! Galera, vou postar um exemplo bem simples de como realizardois tipo diferentes de busca aproximada utilizando metodosnativos do DB4o, sem precisar fazer nada de novo.Nossa classe de dominio:public class Regra { private String padrao; private String tratamento; private String modulo; public String getModulo() { return modulo; } public void setModulo(String modulo) { this.modulo = modulo; } public String getPadrao() { return padrao; } public void setPadrao(String padrao) { this.padrao = padrao; } public String getTratamento() { return tratamento; } public void setTratamento(String tratamento) { this.tratamento = tratamento; }} Parte 2: DAO Nossa classe DAO:import com.db4o.Db4o;import com.db4o.ObjectContainer;import com.db4o.ObjectSet;import com.db4o.query.Constraint;import com.db4o.query.Query;import dominio.Palavra;import dominio.Regra;public class DAORegra { public ObjectContainer db; public DAORegra(){ } public void open(String idioma){ this.db = Db4o.openFile("memoria/regras/"+idioma+".regras"); } public void close(){ this.db.close(); } public void store(String padrao, String tratamento,String modulo){ Regra regra = new Regra(); if(!padrao.equalsIgnoreCase("") && !tratamento.equalsIgnoreCase("")){ regra.setPadrao(padrao.toUpperCase()); ObjectSet result = db.get(regra); if(result.size() != 0){ regra = (Regra) result.next(); } regra.setModulo(modulo); regra.setPadrao(padrao.toUpperCase()); regra.setTratamento(tratamento.toUpperCase()); db.set(regra); db.commit(); } } public String[] getRegras(String padrao, String tratamento,String modulo){ Regra regra = new Regra(); Query query=db.query(); query.constrain(Regra.class); Constraint constrPadrao=null,constrModulo=null,constrTratamento=null; constrPadrao=query.descend("modulo").constrain(modulo); if(!padrao.equalsIgnoreCase("")){ constrPadrao=query.descend("padrao").constrain(padrao.toUpperCase()).startsWith(true); } if(!tratamento.equalsIgnoreCase("")){ constrPadrao=query.descend("tratamento").constrain(tratamento.toUpperCase()).startsWith(true); } ObjectSet result = query.execute(); String[] regras = new String[result.size()]; if(result.size() == 0){ regras = new String[1]; regras[0] = "Nao Encontrada nenhuma ocorrencia"; }else{ for(int i=0;i regra = (Regra) result.next(); regras[i] = regra.getPadrao()+" : "+regra.getTratamento(); } } return regras; } public void delete(String padrao, String tratamento,String modulo){ Regra regra = new Regra(); regra.setModulo(modulo); if(!padrao.equalsIgnoreCase("") && !tratamento.equalsIgnoreCase("")){ regra.setPadrao(padrao.toUpperCase()); regra.setTratamento(tratamento.toUpperCase()); ObjectSet result = db.get(regra); if(result.size() != 0){ regra = (Regra) result.next(); db.delete(regra); db.commit(); } } } public Regra existeRegraIgual(String padrao){ Regra regra = new Regra(); Query query=db.query(); query.constrain(Regra.class); Constraint constr=null; constr=query.descend("padrao").constrain(padrao); ObjectSet result = query.execute(); regra = (Regra) result.next(); return regra; } public int existeRegra(String padrao){ Regra regra = new Regra(); Query query=db.query(); query.constrain(Regra.class); Constraint constr=null; constr=query.descend("padrao").constrain(padrao.toUpperCase()).startsWith(true); ObjectSet result = query.execute(); return result.size(); } }Utilizando isso:(frame.getPalavras() retorna palavras e um vetor Palavra[], presumam isso):public class aplicarRegras { public aplicarRegras(frameGeral frame){ Palavra palavraAtual; Regra regraAtual; Palavra[] palavras = frame.getPalavras(); String bufferGlobal="",regra="", pilha="", candidataRegra="", idioma=frame.getIdiomaDeEntrada(); DAORegra daoRegras = new DAORegra(); daoRegras.open(idioma); int i = 0; while(i palavraAtual = palavras[i]; if(regra.equals("")) candidataRegra = palavraAtual.getClasseGramatical(); else candidataRegra = regra+" "+palavraAtual.getClasseGramatical(); if((!palavraAtual.getClasseGramatical().equalsIgnoreCase("Nao Encontrada")) &&(daoRegras.existeRegra(candidataRegra)>0)){ regra = candidataRegra; if(pilha.equals("")) pilha = palavraAtual.getGrafia(); else pilha += " "+palavraAtual.getGrafia(); }else{ if(!pilha.equals("")){ regraAtual = daoRegras.existeRegraIgual(regra); if(regraAtual != null){ bufferGlobal+="<"+regraAtual.getModulo()+">"+pilha+""; }else{ bufferGlobal+=pilha+" "; } } bufferGlobal+=palavraAtual.getGrafia()+" "; pilha=""; regra=""; } i++; } daoRegras.close(); frame.setTextoMarcado(bufferGlobal); } } Especificacoes sobre o DB4O que podem ser encontradas na documentacao Pessoal.Estou disponibilizando agora a projeto final de graduacao