<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1923291274578984358</id><updated>2012-02-16T04:21:36.462-02:00</updated><category term='mono db4o dao c#'/><category term='Especificações'/><category term='Native Queries'/><category term='digg db4o .net2.0'/><title type='text'>Db4o Brasil</title><subtitle type='html'>Db4o &amp; Java, Db4o &amp; mono, Db4o &amp; engenharia de software</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://db4obrasil.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1923291274578984358/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://db4obrasil.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>dux2</name><uri>http://www.blogger.com/profile/18332125907001366696</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1923291274578984358.post-7430905047185353514</id><published>2008-04-01T01:28:00.006-03:00</published><updated>2008-04-01T01:45:10.321-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='digg db4o .net2.0'/><title type='text'>Sistema de Notícias "Digg like" desenvolvido com db4o</title><content type='html'>Pessoal.&lt;br /&gt;Estou disponibilizando agora a projeto final de graduação desenvolvido pelo aluno Cléverton Silva, sob minha orientação, no curso de Ciência da Computação na Universidade Federal do Espírito Santo.&lt;br /&gt;&lt;br /&gt;Trata-se de um sistema de notícias no estilo "Digg", com uma espécia de rankeamento automatico das notícias, baseado em filtragem colaborativa.&lt;br /&gt;&lt;br /&gt;O projeto foi desenvolvido utilizando as tecnologias .NET 2.0 e db4o.&lt;br /&gt;&lt;object codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" id="embedded_flash_2413791_13y0wu_object" name="embedded_flash_2413791_13y0wu_object" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" align="middle" height="500" width="100%"&gt;        &lt;param name="movie" value="http://documents.scribd.com/ScribdViewer.swf?document_id=2413791&amp;amp;access_key=key-1nbcvefjvv1bp5tgg8z7&amp;amp;page=&amp;amp;version=1"&gt;         &lt;param name="quality" value="high"&gt;         &lt;param name="play" value="true"&gt;        &lt;param name="loop" value="true"&gt;         &lt;param name="scale" value="showall"&gt;        &lt;param name="wmode" value="opaque"&gt;         &lt;param name="devicefont" value="false"&gt;        &lt;param name="bgcolor" value="#ffffff"&gt;         &lt;param name="menu" value="true"&gt;        &lt;param name="allowFullScreen" value="true"&gt;         &lt;param name="allowScriptAccess" value="always"&gt;         &lt;param name="salign" value=""&gt;        &lt;embed src="http://documents.scribd.com/ScribdViewer.swf?document_id=2413791&amp;amp;access_key=key-1nbcvefjvv1bp5tgg8z7&amp;amp;page=&amp;amp;version=1" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" play="true" loop="true" scale="showall" wmode="opaque" devicefont="false" bgcolor="#ffffff" name="embedded_flash_2413791_13y0wu_object" menu="true" allowfullscreen="true" allowscriptaccess="always" salign="" type="application/x-shockwave-flash" align="middle" height="500" width="100%"&gt;&lt;/embed&gt;    &lt;/object&gt;&lt;div style="display:none"&gt; &lt;script type="text/javascript" src="'http://www.scribd.com/javascripts/view.js'"&gt;&lt;/script&gt;&lt;/div&gt;&lt;div id="'embedded_flash_2413791_13y0wu'" style="width:100%;height:100%"&gt;&lt;span style="display:none"&gt;Read this doc on Scribd: &lt;a href="http://www.scribd.com/doc/2413791/SIWEP-Digg-Like-com-Db4o"&gt;SIWEP - Digg Like com Db4o&lt;/a&gt;&lt;/span&gt;    &lt;/div&gt; &lt;div style="display:none"&gt;&lt;script type="text/javascript"&gt;     var scribd_doc = new scribd.Document(2413791, 'key-1nbcvefjvv1bp5tgg8z7');                         scribd_doc.write('embedded_flash_2413791_13y0wu');&lt;/script&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1923291274578984358-7430905047185353514?l=db4obrasil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://db4obrasil.blogspot.com/feeds/7430905047185353514/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1923291274578984358&amp;postID=7430905047185353514&amp;isPopup=true' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1923291274578984358/posts/default/7430905047185353514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1923291274578984358/posts/default/7430905047185353514'/><link rel='alternate' type='text/html' href='http://db4obrasil.blogspot.com/2008/04/sistema-de-notcias-digg-like.html' title='Sistema de Notícias &quot;Digg like&quot; desenvolvido com db4o'/><author><name>dux2</name><uri>http://www.blogger.com/profile/18332125907001366696</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1923291274578984358.post-8742724491779183934</id><published>2007-04-13T14:15:00.000-03:00</published><updated>2007-04-13T14:20:24.922-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Especificações'/><title type='text'>Especificações do DB4O</title><content type='html'>&lt;a href="http://bp1.blogger.com/_f_euj193fdw/Rh-7nsva4GI/AAAAAAAAACQ/alVVixTgBow/s1600-h/especificaÃ§Ã£o.01.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5052963597632331874" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp1.blogger.com/_f_euj193fdw/Rh-7nsva4GI/AAAAAAAAACQ/alVVixTgBow/s320/especifica%C3%A7%C3%A3o.01.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_f_euj193fdw/Rh-7n8va4HI/AAAAAAAAACY/v_yEw17ca8c/s1600-h/especificaÃ§Ã£o.02.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5052963601927299186" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp2.blogger.com/_f_euj193fdw/Rh-7n8va4HI/AAAAAAAAACY/v_yEw17ca8c/s320/especifica%C3%A7%C3%A3o.02.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_f_euj193fdw/Rh-7n8va4II/AAAAAAAAACg/jENboNThuuA/s1600-h/especificaÃ§Ã£o.03.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5052963601927299202" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp2.blogger.com/_f_euj193fdw/Rh-7n8va4II/AAAAAAAAACg/jENboNThuuA/s320/especifica%C3%A7%C3%A3o.03.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Especificações sobre o DB4O que podem ser encontradas na documentação&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1923291274578984358-8742724491779183934?l=db4obrasil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://db4obrasil.blogspot.com/feeds/8742724491779183934/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1923291274578984358&amp;postID=8742724491779183934&amp;isPopup=true' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1923291274578984358/posts/default/8742724491779183934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1923291274578984358/posts/default/8742724491779183934'/><link rel='alternate' type='text/html' href='http://db4obrasil.blogspot.com/2007/04/especificaes-do-db4o.html' title='Especificações do DB4O'/><author><name>QuintaFeira</name><uri>http://www.blogger.com/profile/11033215387864764659</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_f_euj193fdw/Rh-7nsva4GI/AAAAAAAAACQ/alVVixTgBow/s72-c/especifica%C3%A7%C3%A3o.01.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1923291274578984358.post-6119449678921753085</id><published>2007-04-12T17:01:00.000-03:00</published><updated>2007-04-13T14:20:58.578-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Native Queries'/><title type='text'>Native Queries</title><content type='html'>DB4O - Data Base For Objects&lt;br /&gt;&lt;br /&gt;Native Queries – Parte 1 (por Jeudí Prando)&lt;br /&gt;&lt;br /&gt;Antes de iniciar o artigo irei definir uma classe para servir de exemplo nos tópicos que serão apresentados.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;public class Pessoa&lt;br /&gt;{&lt;br /&gt;private string _nome;&lt;br /&gt;private string _sobreNome;&lt;br /&gt;private string _sexo;&lt;br /&gt;&lt;br /&gt;public Pessoa()&lt;br /&gt;{&lt;br /&gt;this._nome = “”;&lt;br /&gt;this._sobreNome = “”;&lt;br /&gt;this._sexo = “”;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public Pessoa(string nome, string sobreNome, string sexo)&lt;br /&gt;{&lt;br /&gt;this._nome = nome;&lt;br /&gt;this._sobreNome = sobreNome;&lt;br /&gt;this._sexo = sexo;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public string Nome&lt;br /&gt;{&lt;br /&gt;get{ return this._nome; }&lt;br /&gt;set{ this._nome = value; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public string SobreNome&lt;br /&gt;{&lt;br /&gt;get{ return this._sobreNome; }&lt;br /&gt;set{ this._sobreNome = value; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public string Sexo&lt;br /&gt;{&lt;br /&gt;get{ return this._sexo; }&lt;br /&gt;set{ this._sexo = value; }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Pronto agora que a nossa classe modelo esta definida vamos ao que interessa.&lt;br /&gt;&lt;br /&gt;DB4O nos fornece três tipos de pesquisa&lt;br /&gt;&lt;br /&gt;• Query-By-Example (QBE)&lt;br /&gt;• SODA API.&lt;br /&gt;• Native Queries (NQ)&lt;br /&gt;&lt;br /&gt;Como neste artigo o meu foco é o Native Querie não falarei sobre os outros tipos de pesquisa&lt;br /&gt;&lt;br /&gt;O tipo de pesquisa Native Queries (NQ) é o sistema de pesquisa principal do DB4O, recomendada para o uso geral.&lt;br /&gt;&lt;br /&gt;Não seria agradável se pudesse realizar pesquisas utilizando as regras da linguagem de programação que você esta utilizando?&lt;br /&gt;Não seria agradável se todas as suas pesquisas fossem fortemente tipadas?&lt;br /&gt;Não seria agradável se você pudesse utilizar todo o poder da Linguagem Orientada a Objeto para realizar as suas pesquisas?&lt;br /&gt;&lt;br /&gt;Utilize Native Queries(NQ)!&lt;br /&gt;&lt;br /&gt;Native Queries é a principal sistema de pesquisa do DB4O e é o sistema de pesquisa recomendado para utilizar em sua aplicação.&lt;br /&gt;As pesquisas em Native Querie utilizam a semântica da linguagem de programação que você esta utilizando, é uma escolha segura para o futuro.&lt;br /&gt;Native Queries (NQ) é fortemente tipado.&lt;br /&gt;Native Queries estão disponíveis para todas as plataformas suportadas por DB4O.&lt;br /&gt;&lt;br /&gt;Native Querie fornecem a habilidade de executar uma ou mais linhas de código de encontro a todos as instancias de um objeto em um repositório de objetos&lt;br /&gt;As expressões de Native Queries devem retornar verdadeiro para recuperar os objetos que esta sendo testado pela expressão.&lt;br /&gt;DB4O tentará otimizar as expressões de Native Queries e executá-la de encontro aos índices e a busca é otimizada de forma a instanciar de verdade&lt;br /&gt;somente os objetos que irão fazer parte da lista.&lt;br /&gt;&lt;br /&gt;Essas expressões são exatamente as mesmas que você utiliza em um "if", por exemplo, se retornar verdadeiro o objeto é adicionado a lista se retornar&lt;br /&gt;falso o objeto não é adicionado a lista.&lt;br /&gt;&lt;br /&gt;Um exemplo de Expressões de Native Queries:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;IList&lt;pessoa&gt; iLista = db.Query&lt;pessoa&gt;(delegate(Pessoa pessoa)&lt;br /&gt;{&lt;br /&gt;return (pessoa.Nome.Contains("a"));&lt;br /&gt;}&lt;br /&gt;);&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Esta é a expressão da nossa Native Querie utilizada neste exemplo:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;delegate(Pessoa pessoa)&lt;br /&gt;{&lt;br /&gt;return (pessoa.Nome.Contains("a"));&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Esta expressão juntamente com o metodo Query, esta dizendo que é para percorrer todos os objetos do tipo Pessoa "delegate(Pessoa pessoa)" dentro do nosso repositório de objetos.&lt;br /&gt;&lt;br /&gt;A cada objeto percorrido será instanciado no atributo pessoa dentro do delegate"delegate(Pessoa "pessoa")", e será testado conforme o código que vem da sua própria linguagem de programação,&lt;br /&gt;no nosso caso, procura por pessoas que contenham a letra "a" no nome "pessoa.Nome.Contains("a")", se o objeto pessoa atualmente instanciado em "pessoa" tiver a letra "a" no nome a expressão&lt;br /&gt;retornará verdadeiro, fazendo com que o atual objeto pessoa faça parte da lista que será montada ao termino do percorrer e validar todos os objetos do nosso repositório de objetos, no nosso&lt;br /&gt;caso os objetos do tipo pessoa, gerando assim o nosso famoso "Result Set".&lt;br /&gt;&lt;br /&gt;vamos ver alguns exemplos, utilizando nossa classe modelo:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;/// vamos instanciar algumas pessoas&lt;br /&gt;&lt;br /&gt;Pessoa fulano = new Pessoa();&lt;br /&gt;fulano.Nome = "Fulano";&lt;br /&gt;fulano.Sexo = "M";&lt;br /&gt;&lt;br /&gt;Pessoa beltrano = new Pessoa("Beltrano","","M");&lt;br /&gt;Pessoa ciclana = new Pessoa("Ciclana","","F");&lt;br /&gt;&lt;br /&gt;/// vamos iniciar a comunicação com o nosso repositório de objetos&lt;br /&gt;IObjectContainer db = Db4oFactory.OpenFile("dados.yap");&lt;br /&gt;&lt;br /&gt;/// persistindo as pessoas instanciadas&lt;br /&gt;db.set(fulano);&lt;br /&gt;db.set(beltrano);&lt;br /&gt;db.set(ciclana);&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;agora vamos recuperar todas as pessoas do sexo Feminino, utilizado Native Querie&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;IList&lt;pessoa&gt; lista = db.Query&lt;pessoa&gt;(delegate(Pessoa pessoa){ return pessoa.Sexo = "F"});&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;neste caso seria retornado somente o objeto Pessoa "ciclana"&lt;br /&gt;&lt;br /&gt;se eu quisesse utilizar o poder que se tem de uma linguagem orientada a objeto poderíamos fazer um Método que busque&lt;br /&gt;todas as pessoas de um sexo especificado. Ex:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;public List&lt;pessoa&gt; RecuperarListaPessoaDeterminadoSexo(string sexo)&lt;br /&gt;{&lt;br /&gt;/// vamos iniciar a comunicação com o nosso repositório de objetos&lt;br /&gt;IObjectContainer db = Db4oFactory.OpenFile("dados.yap");&lt;br /&gt;&lt;br /&gt;/// vamos recuperar as pessoas de um sexo especificado através do parâmetro "sexo"&lt;br /&gt;return new List&lt;pessoa&gt;(db.Query&lt;pessoa&gt;(delegate(Pessoa pessoa){ return pessoa.Sexo = sexo}));&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;agora ao executar o método&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;RecuperarListaPessoasDeterminadoSexo("M");&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;seria retornado uma lista contendo os objetos Pessoas: Fulano e Beltrano&lt;br /&gt;&lt;br /&gt;poderíamos estender este artigo realizando muitas variações de consulta utilizando Native Queries, mas esta variação&lt;br /&gt;é devida a liberdade que a linguagem orientada a objeto te dá...&lt;br /&gt;&lt;br /&gt;Por exemplo poderíamos utilizar a ordenação no List&lt;pessoa&gt;, buscar pessoas que iniciem ou não contenham sobre nome e assim&lt;br /&gt;por diante...&lt;br /&gt;&lt;br /&gt;Mas o meu objetivo neste artigo é passar um pouco de noção do que é Native Querie, como Utilizar, como montar expressões,&lt;br /&gt;como o mesmo funciona e não falar sobre orientação a objeto apesar do assunto esta contido em Native Queries&lt;br /&gt;&lt;br /&gt;espero ter ajudado alguém! rss&lt;br /&gt;&lt;br /&gt;Boa Sorte!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1923291274578984358-6119449678921753085?l=db4obrasil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://db4obrasil.blogspot.com/feeds/6119449678921753085/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1923291274578984358&amp;postID=6119449678921753085&amp;isPopup=true' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1923291274578984358/posts/default/6119449678921753085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1923291274578984358/posts/default/6119449678921753085'/><link rel='alternate' type='text/html' href='http://db4obrasil.blogspot.com/2007/04/db4o-data-base-for-objects-native.html' title='Native Queries'/><author><name>QuintaFeira</name><uri>http://www.blogger.com/profile/11033215387864764659</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1923291274578984358.post-6481247910459646075</id><published>2006-11-24T20:53:00.000-02:00</published><updated>2006-11-24T22:13:31.208-02:00</updated><title type='text'>Simples, mas prático</title><content type='html'>Galera, vou postar um exemplo bem simples de como realizar&lt;br /&gt;dois tipo diferentes de busca aproximada utilizando metodos&lt;br /&gt;nativos do DB4o, sem precisar fazer nada de novo.&lt;br /&gt;&lt;br /&gt;Nossa classe de dominio:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;public class Regra {&lt;br /&gt; private String padrao;&lt;br /&gt; private String tratamento;&lt;br /&gt; private String modulo;&lt;br /&gt; public String getModulo() {&lt;br /&gt;     return modulo;&lt;br /&gt; }&lt;br /&gt; public void setModulo(String modulo) {&lt;br /&gt;     this.modulo = modulo;&lt;br /&gt; }&lt;br /&gt; public String getPadrao() {&lt;br /&gt;     return padrao;&lt;br /&gt; }&lt;br /&gt; public void setPadrao(String padrao) {&lt;br /&gt;     this.padrao = padrao;&lt;br /&gt; }&lt;br /&gt; public String getTratamento() {&lt;br /&gt;     return tratamento;&lt;br /&gt; }&lt;br /&gt; public void setTratamento(String tratamento) {&lt;br /&gt;     this.tratamento = tratamento;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt; Parte 2: DAO &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Nossa classe DAO:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;import com.db4o.Db4o;&lt;br /&gt;import com.db4o.ObjectContainer;&lt;br /&gt;import com.db4o.ObjectSet;&lt;br /&gt;import com.db4o.query.Constraint;&lt;br /&gt;import com.db4o.query.Query;&lt;br /&gt;&lt;br /&gt;import dominio.Palavra;&lt;br /&gt;import dominio.Regra;&lt;br /&gt;&lt;br /&gt;public class DAORegra {&lt;br /&gt;&lt;br /&gt;   public ObjectContainer db;&lt;br /&gt; &lt;br /&gt;   public DAORegra(){&lt;br /&gt;     &lt;br /&gt;   }&lt;br /&gt; &lt;br /&gt;   public void open(String idioma){&lt;br /&gt;       this.db = Db4o.openFile("memoria/regras/"+idioma+".regras");&lt;br /&gt;   }&lt;br /&gt; &lt;br /&gt;   public void close(){&lt;br /&gt;       this.db.close();&lt;br /&gt;   }&lt;br /&gt; &lt;br /&gt;   public void store(String padrao, String tratamento,String modulo){&lt;br /&gt;       Regra regra = new Regra();&lt;br /&gt;&lt;br /&gt;       if(!padrao.equalsIgnoreCase("") &amp;&amp;amp; !tratamento.equalsIgnoreCase("")){&lt;br /&gt;&lt;br /&gt;         &lt;br /&gt;           regra.setPadrao(padrao.toUpperCase());&lt;br /&gt;         &lt;br /&gt;           ObjectSet result = db.get(regra);&lt;br /&gt;         &lt;br /&gt;           if(result.size() != 0){&lt;br /&gt;               regra = (Regra) result.next();&lt;br /&gt;           }&lt;br /&gt;         &lt;br /&gt;           regra.setModulo(modulo);&lt;br /&gt;           regra.setPadrao(padrao.toUpperCase());&lt;br /&gt;           regra.setTratamento(tratamento.toUpperCase());&lt;br /&gt;           db.set(regra);&lt;br /&gt;           db.commit();&lt;br /&gt;       }&lt;br /&gt;     &lt;br /&gt; &lt;br /&gt;   }&lt;br /&gt; &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;   public String[] getRegras(String padrao, String tratamento,String modulo){&lt;br /&gt;       Regra regra = new Regra();&lt;br /&gt;     &lt;br /&gt;       Query query=db.query();&lt;br /&gt;       query.constrain(Regra.class);&lt;br /&gt;     &lt;br /&gt;       Constraint constrPadrao=null,constrModulo=null,constrTratamento=null;&lt;br /&gt;     &lt;br /&gt;       constrPadrao=query.descend("modulo").constrain(modulo);&lt;br /&gt;     &lt;br /&gt;     &lt;br /&gt;       if(!padrao.equalsIgnoreCase("")){&lt;br /&gt;           constrPadrao=query.descend("padrao").constrain(padrao.toUpperCase()).startsWith(true);&lt;br /&gt;       }&lt;br /&gt;     &lt;br /&gt;       if(!tratamento.equalsIgnoreCase("")){&lt;br /&gt;           constrPadrao=query.descend("tratamento").constrain(tratamento.toUpperCase()).startsWith(true);&lt;br /&gt;       }&lt;br /&gt;     &lt;br /&gt;       ObjectSet result = query.execute();&lt;br /&gt;     &lt;br /&gt;     &lt;br /&gt;       String[] regras = new String[result.size()];&lt;br /&gt;     &lt;br /&gt;       if(result.size() == 0){&lt;br /&gt;           regras = new String[1];&lt;br /&gt;           regras[0] = "Nao Encontrada nenhuma ocorrência";&lt;br /&gt;       }else{&lt;br /&gt;           for(int i=0;i&lt;result.size();i++){&gt;&lt;br /&gt;           regra = (Regra) result.next();&lt;br /&gt;               regras[i] = regra.getPadrao()+" : "+regra.getTratamento();&lt;br /&gt;           }&lt;br /&gt;       }&lt;br /&gt;     &lt;br /&gt;       return regras;&lt;br /&gt;   }&lt;br /&gt; &lt;br /&gt;   public void delete(String padrao, String tratamento,String modulo){&lt;br /&gt;       Regra regra = new Regra();&lt;br /&gt;       regra.setModulo(modulo);&lt;br /&gt;     &lt;br /&gt;       if(!padrao.equalsIgnoreCase("") &amp;&amp;amp; !tratamento.equalsIgnoreCase("")){&lt;br /&gt;&lt;br /&gt;           regra.setPadrao(padrao.toUpperCase());&lt;br /&gt;           regra.setTratamento(tratamento.toUpperCase());&lt;br /&gt;         &lt;br /&gt;           ObjectSet result = db.get(regra);  &lt;br /&gt;         &lt;br /&gt;           if(result.size() != 0){&lt;br /&gt;               regra = (Regra) result.next();&lt;br /&gt;               db.delete(regra);&lt;br /&gt;               db.commit();&lt;br /&gt;           }&lt;br /&gt;       }&lt;br /&gt;     &lt;br /&gt;   }&lt;br /&gt; &lt;br /&gt;   public Regra existeRegraIgual(String padrao){&lt;br /&gt;       Regra regra = new Regra();&lt;br /&gt;     &lt;br /&gt;       Query query=db.query();&lt;br /&gt;       query.constrain(Regra.class);&lt;br /&gt;     &lt;br /&gt;       Constraint constr=null;&lt;br /&gt;       constr=query.descend("padrao").constrain(padrao);&lt;br /&gt;     &lt;br /&gt;       ObjectSet result = query.execute();&lt;br /&gt;     &lt;br /&gt;       regra = (Regra) result.next();&lt;br /&gt;     &lt;br /&gt;       return regra;&lt;br /&gt;   }&lt;br /&gt; &lt;br /&gt;   public int existeRegra(String padrao){&lt;br /&gt;       Regra regra = new Regra();&lt;br /&gt;     &lt;br /&gt;       Query query=db.query();&lt;br /&gt;       query.constrain(Regra.class);&lt;br /&gt;     &lt;br /&gt;       Constraint constr=null;&lt;br /&gt;       constr=query.descend("padrao").constrain(padrao.toUpperCase()).startsWith(true);&lt;br /&gt;     &lt;br /&gt;       ObjectSet result = query.execute();&lt;br /&gt;     &lt;br /&gt;     &lt;br /&gt;       return result.size();&lt;br /&gt;   }&lt;br /&gt; }&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Utilizando isso:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;frame.getPalavras() retorna &lt;/span&gt;&lt;span style="font-size:100%;"&gt;palavras é um vetor Palavra[], presumam isso):&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;public class aplicarRegras {&lt;br /&gt;   &lt;br /&gt;    public aplicarRegras(frameGeral frame){&lt;br /&gt;        Palavra palavraAtual;&lt;br /&gt;        Regra    regraAtual;&lt;br /&gt;        Palavra[] palavras = frame.getPalavras();&lt;br /&gt;        String bufferGlobal="",regra="", pilha="", candidataRegra="", idioma=frame.getIdiomaDeEntrada();&lt;br /&gt;        DAORegra    daoRegras    = new DAORegra();&lt;br /&gt;        daoRegras.open(idioma);&lt;br /&gt;        int i = 0;&lt;br /&gt;        while(i&lt;palavras.length){&lt;br /&gt;            palavraAtual = palavras[i];&lt;br /&gt;            if(regra.equals(""))    &lt;br /&gt;                candidataRegra  = palavraAtual.getClasseGramatical();&lt;br /&gt;            else                   &lt;br /&gt;                candidataRegra = regra+" "+palavraAtual.getClasseGramatical();&lt;br /&gt;            if((!palavraAtual.getClasseGramatical().equalsIgnoreCase("Nao Encontrada"))&lt;br /&gt;                &amp;&amp;amp;(daoRegras.existeRegra(candidataRegra)&gt;0)){&lt;br /&gt;                    regra = candidataRegra;&lt;br /&gt;                    if(pilha.equals(""))    &lt;br /&gt;                            pilha  = palavraAtual.getGrafia();&lt;br /&gt;                    else                   &lt;br /&gt;                            pilha += " "+palavraAtual.getGrafia();&lt;br /&gt;            }else{&lt;br /&gt;               &lt;br /&gt;                if(!pilha.equals("")){&lt;br /&gt;                    regraAtual = daoRegras.existeRegraIgual(regra);&lt;br /&gt;                    if(regraAtual != null){&lt;br /&gt;                        bufferGlobal+="&lt;"+regraAtual.getModulo()+"&gt;"+pilha+"&lt;/"+regraAtual.getModulo()+"&gt;";&lt;br /&gt;                    }else{&lt;br /&gt;                        bufferGlobal+=pilha+" ";&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;                bufferGlobal+=palavraAtual.getGrafia()+" ";&lt;br /&gt;                pilha="";&lt;br /&gt;                regra="";&lt;br /&gt;            }&lt;br /&gt;            i++;&lt;br /&gt;        }&lt;br /&gt;        daoRegras.close();&lt;br /&gt;        frame.setTextoMarcado(bufferGlobal);&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1923291274578984358-6481247910459646075?l=db4obrasil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://db4obrasil.blogspot.com/feeds/6481247910459646075/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1923291274578984358&amp;postID=6481247910459646075&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1923291274578984358/posts/default/6481247910459646075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1923291274578984358/posts/default/6481247910459646075'/><link rel='alternate' type='text/html' href='http://db4obrasil.blogspot.com/2006/11/simples-mas-pratico_24.html' title='Simples, mas prático'/><author><name>Marcello Novaes</name><uri>http://www.blogger.com/profile/11445546130561628970</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_KbGZ-3vODg0/R2JqLKE3zzI/AAAAAAAAAAM/mctXcOcNC8Q/S220/232561.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1923291274578984358.post-8010871759803599749</id><published>2006-11-17T10:08:00.000-02:00</published><updated>2006-11-17T17:06:25.561-02:00</updated><title type='text'>Erros Comuns - Parte 1</title><content type='html'>Neste meu primeiro post venho trazer a tona erros mais comuns entre usuários iniciantes. Nesta minha primeira semana de uso detectei alguns erros cumuns de desenvolvimento que cometi e me fez perder certo tempo, e como percibi que são normais de se cometer quando se aprende a usar uma nova tecnologia pretendo passar este conhecimento a usuários iniciantes para que estes ganhem tempo !!!&lt;br /&gt;&lt;br /&gt;Chamei de Erros mais Comuns - Parte 1 devido a minha pouca experiência neste momento e a poucas possíbilidades exploradaas ainda sobre o uso do db4o. Em breve acredito cometer novos erros que possam ser digno de um segundo post, e para no futuro condençar num artigo  mais completo e bem escrito.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;    Construtor não Vazio x Pesquisa FullObjects:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Chamo aqui de pesquisa FullObjects aquela que retorna todos os elementos de uma classe que se encontra armazenadas no db4o. (pode-se fazer uma analogia próxima ao &lt;span style="font-style: italic;"&gt;Select * from Tabela&lt;/span&gt; )&lt;br /&gt;&lt;br /&gt;Para se buscar todos os objetos da classe usando o método Get deve-se preencher todos os campos da classe com valores nulo.&lt;br /&gt;&lt;br /&gt;Erro Comum: O construtor de uma classe pode preencher um conjunto de atributos com informações padrões.&lt;br /&gt;&lt;br /&gt;Resultado deste Erro: O Db4o rretornará as informações somente dos objetos que não tiveram estes atributos alterados, deixando muitos objetos de fora.&lt;br /&gt;&lt;br /&gt;Correção Sugerida: O objeto deve possuir um Construtor (ou um método)     que seta nullo em todos os atributos não constantes do objeto.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Inserir x Alterar&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Quando agente quer inserir um objeto, agente cria um objeto vazio, preenche as inforções e salva. Quando agente pretende alterar devemos buscar o objeto no banco, editar suas informações e recoloca-lo no banco.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Erro Comum: &lt;/b&gt;&lt;br&gt;&lt;br /&gt;Quando agetne utilizava o SGBD relacional agente pegava o objeto que nos era passado por outra camada da aplicação, desmenbramos em um comando SQL e executamos. Quando agente recebe este objeto da camada de controle (ou outra dependedo da arquitetura) a ideia intuitiva é usar o metodo Set para salvar as alterações.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Resultado deste Erro: O objeto passado cria uma nova informação no db4o, em vez de alterar a existente como foi o desejado.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Correção Sugerida: Deve se usar o método Get para obter o objeto do banco que deseja se editar, alterar as informações que forem necessárias e usar o método Set para salvá-lonovamente no Banco.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Conclusão:&lt;/span&gt;&lt;br /&gt;São algumas sugestões que possam facilitar a vida de quem está iniciando, porém muitas delas possuem melhores soluções, Deixo então o convite para todos os interessados em estudar este novo paradigma que partipem do grupo db4oBrasil dando dicas e sugestões e efetuando críticas construtivistas.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; Abraços a Todos&lt;br /&gt;Bernard C. Pereira&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1923291274578984358-8010871759803599749?l=db4obrasil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://db4obrasil.blogspot.com/feeds/8010871759803599749/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1923291274578984358&amp;postID=8010871759803599749&amp;isPopup=true' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1923291274578984358/posts/default/8010871759803599749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1923291274578984358/posts/default/8010871759803599749'/><link rel='alternate' type='text/html' href='http://db4obrasil.blogspot.com/2006/11/1.html' title='Erros Comuns - Parte 1'/><author><name>Bernard Corrêa Pereira</name><uri>http://www.blogger.com/profile/11192187310789581921</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://200.159.236.207/users/00/28/82800/logo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1923291274578984358.post-7887731007892474881</id><published>2006-11-09T19:54:00.001-02:00</published><updated>2006-11-09T19:58:03.351-02:00</updated><title type='text'>Estamos no Imasters</title><content type='html'>Olá pessoal, a partir de hoje estamos representados no portal &lt;a href="http://www.imasters.com.br"&gt;imasters&lt;/a&gt;. O &lt;a href="http://www.imasters.com.br/artigo/5056/bancodedados/db4o_banco_oo"&gt;primeiro artigo&lt;/a&gt; que mandei nada mais é do que as informações fornecidadas no próprio site db4o resumidas. Espero receber sugestões de vocês para os próximos artigos.&lt;br /&gt;&lt;br /&gt;[]'s&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1923291274578984358-7887731007892474881?l=db4obrasil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://db4obrasil.blogspot.com/feeds/7887731007892474881/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1923291274578984358&amp;postID=7887731007892474881&amp;isPopup=true' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1923291274578984358/posts/default/7887731007892474881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1923291274578984358/posts/default/7887731007892474881'/><link rel='alternate' type='text/html' href='http://db4obrasil.blogspot.com/2006/11/estamos-no-imasters_5753.html' title='Estamos no Imasters'/><author><name>dux2</name><uri>http://www.blogger.com/profile/18332125907001366696</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1923291274578984358.post-7179098632337602210</id><published>2006-10-31T21:46:00.000-03:00</published><updated>2006-10-31T22:01:29.604-03:00</updated><title type='text'>Popularizando o DB4O</title><content type='html'>O Eduardo (EddieStone) apresentou uma idéia 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 discipĺina optativa de Tópicos Especiais em Banco de Dados abordando esse tema."&lt;br /&gt;&lt;br /&gt;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 idéia!!!&lt;br /&gt;&lt;br /&gt;Tomara que o resultado disso seja que muitos alunos nossos utilizem o DB4O em seus projetos de graduação!!!!!!!!!!!!!!!!!!&lt;br /&gt;&lt;comment&gt;&lt;/comment&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1923291274578984358-7179098632337602210?l=db4obrasil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://db4obrasil.blogspot.com/feeds/7179098632337602210/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1923291274578984358&amp;postID=7179098632337602210&amp;isPopup=true' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1923291274578984358/posts/default/7179098632337602210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1923291274578984358/posts/default/7179098632337602210'/><link rel='alternate' type='text/html' href='http://db4obrasil.blogspot.com/2006/10/popularizando-o-db4o.html' title='Popularizando o DB4O'/><author><name>Marcello Novaes</name><uri>http://www.blogger.com/profile/11445546130561628970</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_KbGZ-3vODg0/R2JqLKE3zzI/AAAAAAAAAAM/mctXcOcNC8Q/S220/232561.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1923291274578984358.post-6446278090902818648</id><published>2006-10-31T21:34:00.000-03:00</published><updated>2006-10-31T21:54:59.428-03:00</updated><title type='text'>DB4O Compartilhado</title><content type='html'>A UFES tem se mostrado um terreno fértil para o desenvolvimento&lt;br /&gt;de sistemas que utilizam o DB4O como unica base de dados,&lt;br /&gt;a pergunta que fica é "como vai ser quando quisermos integrar os dados?".&lt;br /&gt;&lt;br /&gt;Existe uma proposta para criar um portal, integrando varios sistemas&lt;br /&gt;web. Esses sistemas estão sendo construidos totalmente baseados no&lt;br /&gt;paradigma OO, logo, não existe motivo para que a abordagem mude&lt;br /&gt;quando chega a hora de tratar sobre a persistência.&lt;br /&gt;&lt;br /&gt;Um ponto que vem me preocupando um pouco é a questão de como&lt;br /&gt;vai ficar o desempenho quando precisarmos compartilhar as bases de dados.&lt;br /&gt;Será que vamos conseguir desenvolver as ferramentas que possibilitem&lt;br /&gt;que todas as aplicações utilizem um servidos DB4O da mesma forma que utilizariam um  SGDB relacional.&lt;br /&gt;&lt;br /&gt;Minha opinião é que o resultado será muito positivo, mas realmente&lt;br /&gt;vou ficar muito mais tranquilo quando fizermos os primeiros testes&lt;br /&gt;com varias aplicações diferentes acessando um unico servidor DB4O.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1923291274578984358-6446278090902818648?l=db4obrasil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://db4obrasil.blogspot.com/feeds/6446278090902818648/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1923291274578984358&amp;postID=6446278090902818648&amp;isPopup=true' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1923291274578984358/posts/default/6446278090902818648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1923291274578984358/posts/default/6446278090902818648'/><link rel='alternate' type='text/html' href='http://db4obrasil.blogspot.com/2006/10/db4o-compartilhado.html' title='DB4O Compartilhado'/><author><name>Marcello Novaes</name><uri>http://www.blogger.com/profile/11445546130561628970</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_KbGZ-3vODg0/R2JqLKE3zzI/AAAAAAAAAAM/mctXcOcNC8Q/S220/232561.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1923291274578984358.post-7215449771068831837</id><published>2006-10-31T14:21:00.000-03:00</published><updated>2006-10-31T16:36:14.654-03:00</updated><title type='text'>Data Access Objects com DB4O : Continuando</title><content type='html'>Primeiro gostaria de destacar o &lt;a href="http://db4obrasil.blogspot.com/2006/10/comeando.html"&gt;post de sri_canesh&lt;/a&gt; , pois quando nos deparamos com db4o e percebemos a sua importancia, queremos logo usá-lo em todo lugar, e esquecermos para sempre dos bancos relacionais, quando na verdade, não devemos fazer isso.&lt;br /&gt;&lt;br /&gt;Agora continuando &lt;a href="http://db4obrasil.blogspot.com/2006/10/data-access-objects-com-db4o.html"&gt;o post sobre o "pattern"  Data Access Objects com db4o&lt;/a&gt;, vamos ver como ficaria uma subclasse DAO (alguns chamam de classe sombra).&lt;br /&gt;&lt;br /&gt;Primeiro, vamos criar uma classe exemplo da camada de domínio:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;namespace Db4oBrasil.Dominio&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;public class Usuario&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private string _nome;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private string _email;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private string _senha;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;comment&gt;// ... getters e setters (Properties)&lt;/comment&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public override string ToString()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return _nome + " " + _email;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Agora, a classe UsuarioDAO, responsavel pela persistencia de objetos do tipo Usuario.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using com.db4o;&lt;br /&gt;using Db4oBrasil.Dominio;&lt;br /&gt;&lt;br /&gt;namespace Db4oBrasil.DAO&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;public class UsuarioDAO : DAO&amp;lt;Usuario&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;comment&gt;// Checa se todos os campos obrigatórios são "não nulos"&lt;/comment&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;protected override bool ChecarRestricaoCamposNaoNulos(Usuario usr)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(usr.Nome==null || usr.Email==null || usr.Senha==null)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else return true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;comment&gt;// Checa se o Usuario usr,  se inserido no bd, violaria a restricao de &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// chave primaria, no caso, o atributo email&lt;/comment&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;protected override bool ChecarRestricaoChavePrimaria(Usuario usr)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ObjectContainer db = Db4o.OpenFile(YAPFILE);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Usuario proto = new Usuario();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;proto.Email = usr.Email;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ObjectSet result = db.Get(proto);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (result.Count==0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return true;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return false;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;finally&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;db.Close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}               &lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;O código fonte, incluindo o arquivo de solução monodevelop (.mds) e a dll do db4o 5.5 para mono, pode ser baixado aqui: &lt;a href="http://www.geocities.com/pcinistro/Db4oBrasil.zip"&gt;Clique aqui&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ps: A versão do monodevelop testada foi 0.12, usando gmcs&lt;br /&gt;&lt;br /&gt;Dúvidas, sugestões e críticas, comentem...&lt;br /&gt;&lt;br /&gt;[]'s&lt;br /&gt;Eduardo Rocha Monteiro&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1923291274578984358-7215449771068831837?l=db4obrasil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://db4obrasil.blogspot.com/feeds/7215449771068831837/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1923291274578984358&amp;postID=7215449771068831837&amp;isPopup=true' title='10 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1923291274578984358/posts/default/7215449771068831837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1923291274578984358/posts/default/7215449771068831837'/><link rel='alternate' type='text/html' href='http://db4obrasil.blogspot.com/2006/10/data-access-objects-com-db4o_31.html' title='Data Access Objects com DB4O : Continuando'/><author><name>dux2</name><uri>http://www.blogger.com/profile/18332125907001366696</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1923291274578984358.post-9024416459038286951</id><published>2006-10-31T08:26:00.000-03:00</published><updated>2006-10-31T08:37:08.468-03:00</updated><title type='text'>Começando...</title><content type='html'>Olá, meu nome é Cássio e esse é o meu primeiro post nesse blog.&lt;br /&gt;Durante algum tempo fui o representante oficial do db4o aqui no Brasil. Tendo em vista projetos pessoais que assumi, acabei declinando do cargo, mas continuo adorando e recomendando o db4o.&lt;br /&gt;&lt;br /&gt;Para começar gostaria de fazer um comentário sobre uma dúvida que é freqüente que é encaminhada por email para mim.&lt;br /&gt;&lt;br /&gt;Muitos querem saber se pode colocar o db4o no lugar de banco relacional x,y o z. Minha resposta é:"na maioria das vezes, &lt;span style="font-weight: bold;"&gt;não&lt;/span&gt;"! O objetivo do db4o é ser o repositório de objetos em situações onde o banco de dados deve ficar o mais oculto possível (não requisitar um dba), em aplicações embutidas, em aplicações standalone ou como complemento de um banco relacional.&lt;br /&gt;&lt;br /&gt;Não pense em usar o db4o como substituto do banco relacional que você está acostumado a usar em seu ERP, CRM ou sistema de supply chain. Nessa situação ainda é melhor você manter o banco "jurassional" e para conversar com ele utilize algum framework OR/M  como o NHibernate(sou c-sharpeiro, por isso recomendo o hibernate com N maiúsculo !). &lt;br /&gt;Utilize o db4o nas pontas, como por exemplo aplicações que ficarão em um pda, ou ainda aplicações offline(como por exemplo, sistemas que ficam em notebooks de vendedores e no final do dia são sincronizados com o banco principal). Utilize-o ainda na linha de produção para ser o banco de dados de sistemas que controlam dispositivos.&lt;br /&gt;&lt;br /&gt;Saber utilizar e indicar a ferramenta certa para cada situação é o que diferencia o verdadeiro profissional. Não podemos nos mover pela paixão por alguma coisa, por mais espetacular que ela seja (como o db4o) e por em risco todo um sistema crítico para uma empresa.&lt;br /&gt;&lt;br /&gt;Abraços e contem comigo!&lt;br /&gt;&lt;br /&gt;Cássio Rogério Eskelsen&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1923291274578984358-9024416459038286951?l=db4obrasil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://db4obrasil.blogspot.com/feeds/9024416459038286951/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1923291274578984358&amp;postID=9024416459038286951&amp;isPopup=true' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1923291274578984358/posts/default/9024416459038286951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1923291274578984358/posts/default/9024416459038286951'/><link rel='alternate' type='text/html' href='http://db4obrasil.blogspot.com/2006/10/comeando.html' title='Começando...'/><author><name>Cassio Rogerio</name><uri>http://www.blogger.com/profile/09475985748167948512</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://farm4.static.flickr.com/3158/2498755074_5ddafd50df.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1923291274578984358.post-5508898509690548863</id><published>2006-10-26T12:30:00.000-03:00</published><updated>2006-10-26T17:41:38.065-03:00</updated><title type='text'>Nano Server</title><content type='html'>Esse é um exemplo de como se pode com poucas linhas&lt;br /&gt;implementar um servidor simples para databases DB4O.&lt;br /&gt;Claro que para aplicações mais sérias se deve implementar&lt;br /&gt;verificações e métodos de segurança.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;//JAVA&lt;br /&gt;&lt;br /&gt;import com.db4o.Db4o;&lt;br /&gt;import com.db4o.ObjectServer;&lt;br /&gt;&lt;br /&gt;public class NanoServer {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;public static void main(String[] args) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ObjectServer server=Db4o.openServer("DADOS.yap",1666);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;server.grantAccess("SeuLogin","SuaSenha");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1923291274578984358-5508898509690548863?l=db4obrasil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://db4obrasil.blogspot.com/feeds/5508898509690548863/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1923291274578984358&amp;postID=5508898509690548863&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1923291274578984358/posts/default/5508898509690548863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1923291274578984358/posts/default/5508898509690548863'/><link rel='alternate' type='text/html' href='http://db4obrasil.blogspot.com/2006/10/nano-server.html' title='Nano Server'/><author><name>Marcello Novaes</name><uri>http://www.blogger.com/profile/11445546130561628970</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp3.blogger.com/_KbGZ-3vODg0/R2JqLKE3zzI/AAAAAAAAAAM/mctXcOcNC8Q/S220/232561.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1923291274578984358.post-255813213118922836</id><published>2006-10-26T11:29:00.000-03:00</published><updated>2006-10-31T15:27:54.004-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mono db4o dao c#'/><title type='text'>Data Access Objects com DB4O</title><content type='html'>Implementar um sistema usando db4o eh definitivamente melhor do que usando qualquer banco relacional, usando hibernate ou não. Nao precisamos criar tabelas, configurar mapeamentos, configurar permissoes em arquivos, drivers etc...&lt;br /&gt;Porem, devemos pagar um pequeno preço ao usar db4o: devemos criar as protecoes sobre violacao de campos únicos (2 produtos com mesmo codigo por exemplo), violacao de campos nao nulos, e violação de integridade ao deletar um objeto. (Também temos desvantagens em relação a falta de recursos de monitoramento e administração do banco de dados, mas discutiremos isso futuramente)&lt;br /&gt;Podemos fazer isso na camada de acesso a Dados, usando o padrao DAO.&lt;br /&gt;Veja como ficaria a super classe DAO (escrito em C#):&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Declaracao da classe: devemos criar uma classe abstrata generica.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;public abstract class DAO&amp;lt;T&amp;gt; where T: new()&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Metodos que fazem a checagem de restricoes de integridade devem ser sobrescritos pelo DAO de cada classe, caso contrario, simplesmente nao havera checagem:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;protected virtual bool ChecarRestricaoChavePrimaria(T t){return true;}&lt;br /&gt;&lt;br /&gt;protected virtual bool ChecarRestricaoCamposNaoNulos(T t){return true;}&lt;br /&gt;&lt;br /&gt;protected virtual bool ChecarRestricaoDeDelecao(T t){return true;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Salvando um objeto, deveremos checar se ele viola a restricao de chave primaria, e a de campos nao nulos:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;public void Salvar(T obj)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;ObjectContainer db = Server.GetServer().OpenClient();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(!ChecarRestricaoChavePrimaria(obj))&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throw new PKException(typeof(T).ToString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(!ChecarRestricaoCamposNaoNulos(obj))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throw new FieldNotNullException(typeof(T).ToString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;db.Set(obj);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;finally&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;db.Close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Metodo Recuperar Todos:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;public List&amp;lt;T&amp;gt; RecuperarTodos()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;ObjectContainer db = Server.GetServer().OpenClient();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&lt;T&gt; list = new List&lt;T&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;T t = new T();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ObjectSet result = db.Get(t); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach(object item in result)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.Add((T)item);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;finally&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;db.Close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return list; &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Metodo Excluir: Devemos tomar cuidado com este metodo. Primeiro devemos definir se devemos operar com ou sem "Cascade". Segundo, devemos checar se, de acordo com as regras de negocio, se o objeto pode ser excluido. E por ultimo, devemos ter em mente que, para excluir o objeto desejado, devemos recuperalo antes, e passalo como parametro em db.Delete() - nao basta que seja um objeto complemente identico.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;public void Excluir(T obj)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;ObjectContainer db = Server.GetServer().OpenClient();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(!ChecarRestricaoDeDelecao(obj))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throw new Exception("Violacao de restricao de integridade ao deletar objeto");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;T found = (T)db.Get(obj).Next();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;db.Delete(found);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;finally&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;db.Close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}  &lt;br /&gt;} &lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Eh recomendado que cada subclasse DAO implemente o metodo recuperar por ID, que nao eh generico visto que o ID pode ser composto por um atributo, dois atributos e por ai vai. &lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;Talvez de para melhorar isso, se alguem tiver sugestoes, serao muito bem vindas! &lt;br /&gt;Em breve, uma subclasse DAO e um exemplo de uso.&lt;br /&gt;&lt;br /&gt;[]`s&lt;br /&gt;Eduardo Rocha Monteiro&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1923291274578984358-255813213118922836?l=db4obrasil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://db4obrasil.blogspot.com/feeds/255813213118922836/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1923291274578984358&amp;postID=255813213118922836&amp;isPopup=true' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1923291274578984358/posts/default/255813213118922836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1923291274578984358/posts/default/255813213118922836'/><link rel='alternate' type='text/html' href='http://db4obrasil.blogspot.com/2006/10/data-access-objects-com-db4o.html' title='Data Access Objects com DB4O'/><author><name>dux2</name><uri>http://www.blogger.com/profile/18332125907001366696</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1923291274578984358.post-6693971497621969672</id><published>2006-10-20T18:22:00.000-03:00</published><updated>2006-10-31T18:30:55.132-03:00</updated><title type='text'>Apresentação</title><content type='html'>Apresento-me como um mero usuário de mono e db4o, formando em Ciência da Computação pela Ufes, e ingressando no Mestrado em Informática pela mesma instituição. Criei este blog, juntamente com meus colegas de universidade, Marcello e Bernard, além de Cássio Eskelsen, que já me ajudou algumas vezes com o db4o e é uma das maiores autoridades no assunto db4o no Brasil.&lt;br /&gt;&lt;br /&gt;O principal objetivo do blog é trocar experiencias sobre o uso do db4o na fabricação de softwares de modo a buscar padrões ideais de desenvolvimento software usando banco orientado a objetos.&lt;br /&gt;&lt;br /&gt;[]'s&lt;br /&gt;Eduardo Rocha Monteiro&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1923291274578984358-6693971497621969672?l=db4obrasil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://db4obrasil.blogspot.com/feeds/6693971497621969672/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1923291274578984358&amp;postID=6693971497621969672&amp;isPopup=true' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1923291274578984358/posts/default/6693971497621969672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1923291274578984358/posts/default/6693971497621969672'/><link rel='alternate' type='text/html' href='http://db4obrasil.blogspot.com/2006/10/apresentao.html' title='Apresentação'/><author><name>dux2</name><uri>http://www.blogger.com/profile/18332125907001366696</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
