<?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-1294768084195142497</id><updated>2011-07-07T17:04:40.539-07:00</updated><category term='Zip'/><category term='Banco de Dados'/><category term='SGBD'/><category term='SQL'/><category term='Apache Derby'/><category term='Java'/><category term='Senha'/><category term='Compactar'/><category term='Arquivos'/><category term='Embedded'/><title type='text'>Java em Pó - Blog para assuntos Java</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://javaempo.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294768084195142497/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://javaempo.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>dantas.</name><uri>http://www.blogger.com/profile/15701497241512582463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_HYntGgeFL0c/S6YcUmO5UHI/AAAAAAAAACY/uIGrnsVrOdE/S220/rd4nt4s.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>5</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1294768084195142497.post-8647689400970971818</id><published>2010-04-17T18:06:00.000-07:00</published><updated>2010-04-18T05:49:22.552-07:00</updated><title type='text'>Gravar estado de objetos em arquivo binário.</title><content type='html'>Olá pessoal! Hoje vou mostrar como gravar objetos em arquivo binário  usando Java. Com isso é possível salvar o estado do objeto preservando o  valor de seus atributos independente do tipo de dado.&lt;br /&gt;A algum tempo atrás, quando comecei a desenvolver aplicações para Desktop tive a necessidade de armazenar configurações do servidor de banco de dados, foi então que eu descobri que era possível guardar o estado de um objeto em arquivo binário. Isso foi muito útil.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;So, Let's Go Kids!&lt;/h4&gt;&lt;br /&gt;Para isso, vamos usar a API de &lt;code&gt;java.io&lt;/code&gt;, uma classe de configuração simples,  e o método que irá gravar nosso objeto.&lt;br /&gt;Abaixo segue a nossa classe de configuração.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_HYntGgeFL0c/S8prRnxCKXI/AAAAAAAAAC4/3xd4iuTsxps/s1600/Screen+shot+2010-04-17+at+10.57.26+PM.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 185px;" src="http://1.bp.blogspot.com/_HYntGgeFL0c/S8prRnxCKXI/AAAAAAAAAC4/3xd4iuTsxps/s400/Screen+shot+2010-04-17+at+10.57.26+PM.png" alt="" id="BLOGGER_PHOTO_ID_5461295448616741234" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Na classe acima, temos um modelo simplificado de uma configuração. Coloquei apenas atributos com tipo simples de dados, mas poderia ter usado qualquer tipo de dado, ou classe.&lt;br /&gt;&lt;br /&gt;Agora a classe com o método que irá gerar nosso arquivo.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_HYntGgeFL0c/S8pzDQjbfTI/AAAAAAAAADA/R3Kv6C5QA40/s1600/Screen+shot+2010-04-17+at+11.44.23+PM.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 356px;" src="http://1.bp.blogspot.com/_HYntGgeFL0c/S8pzDQjbfTI/AAAAAAAAADA/R3Kv6C5QA40/s400/Screen+shot+2010-04-17+at+11.44.23+PM.png" alt="" id="BLOGGER_PHOTO_ID_5461303997960518962" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Acima, na linha 21, instancio o File onde será salvo o  arquivo de configuração. O nome do arquivo e a extensão são irrelevantes  pois independente disso, o conteúdo do arquivo é binário e não pode  editado, caso isso seja feito o arquivo será corrompido e não será  possível a recuperação. No entanto, é possível ler o valor dos atributos  do tipo String, então, se for colocar a senha do banco no arquivo, use  um array de char, pois assim, não será legível.&lt;br /&gt;&lt;br /&gt;Nas linhas 23 e  24, criamos respectivamente um FileOutputStream e um ObjectOutputStream,  que nos possibilitam gravar o objeto em arquivo. Na linha 26, gravamos  efetivamente o estado do objeto no arquivo. Importante ressaltar que  podemos gravar N objetos no mesmo arquivo. Após isso, descarregamos, e fechamos os Stream`s.&lt;br /&gt;Mais abaixo na linha 36 instanciamos nosso objeto de configuração, e na linha 38 o método que grava o arquivo.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Lendo o arquivo e recuperando o objeto&lt;br /&gt;&lt;/h4&gt;&lt;br /&gt;Então pessoal, assim como precisamos salvar o estado do objeto, também precisamos lê-lo. Observem a figura abaixo.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_HYntGgeFL0c/S8r0rA6bdUI/AAAAAAAAADI/BLFReZ0MOBY/s1600/Screen+shot+2010-04-18+at+8.59.13+AM.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 211px;" src="http://4.bp.blogspot.com/_HYntGgeFL0c/S8r0rA6bdUI/AAAAAAAAADI/BLFReZ0MOBY/s400/Screen+shot+2010-04-18+at+8.59.13+AM.png" alt="" id="BLOGGER_PHOTO_ID_5461446517956769090" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Na linha 48 temos o método que fará a leitura do arquivo e resgatará nosso objeto. Nas linhas 51 e 52 temos respectivamente o FileInputStream e ObjectInputStream, e na linha 54 a leitura do arquivo e recuperação do objeto.&lt;br /&gt;Voltando ao método &lt;code&gt;main&lt;/code&gt;, fiz algumas modificações apenas ler o arquivo e imprimir a informação no console. Na linha 36, instancio o &lt;code&gt;File&lt;/code&gt; informando o arquivo onde salvei o objeto, depois na linha 38 é só chamar o método que irá recuperar o objeto.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;The Real Life!&lt;/h4&gt;&lt;br /&gt;Como eu já disse antes, você pode gerar um arquivo com um único objeto para salvar a configuração do banco de dados da aplicação. Além disso, outro uso interessante, é que você pode usar para armazenar tabelas que serão pré-carregadas na aplicação no ato da instalação do software, assim, não é necessário criar script`s de carga, e mandá-los com a instalação, o que deixaria exposto sua estrutura.&lt;br /&gt;&lt;br /&gt;Grande abraço.&lt;br /&gt;&lt;br /&gt;Referências:&lt;br /&gt;&lt;br /&gt;http://java.sun.com/j2se/1.4.2/docs/api/java/io/FileOutputStream.html&lt;br /&gt;http://java.sun.com/j2se/1.4.2/docs/api/java/io/ObjectOutputStream.html&lt;br /&gt;http://java.sun.com/j2se/1.4.2/docs/api/java/io/FileInputStream.html&lt;br /&gt;http://java.sun.com/j2se/1.4.2/docs/api/java/io/ObjectInputStream.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1294768084195142497-8647689400970971818?l=javaempo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javaempo.blogspot.com/feeds/8647689400970971818/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://javaempo.blogspot.com/2010/04/gravar-estado-de-objetos-em-arquivo.html#comment-form' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294768084195142497/posts/default/8647689400970971818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294768084195142497/posts/default/8647689400970971818'/><link rel='alternate' type='text/html' href='http://javaempo.blogspot.com/2010/04/gravar-estado-de-objetos-em-arquivo.html' title='Gravar estado de objetos em arquivo binário.'/><author><name>dantas.</name><uri>http://www.blogger.com/profile/15701497241512582463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_HYntGgeFL0c/S6YcUmO5UHI/AAAAAAAAACY/uIGrnsVrOdE/S220/rd4nt4s.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_HYntGgeFL0c/S8prRnxCKXI/AAAAAAAAAC4/3xd4iuTsxps/s72-c/Screen+shot+2010-04-17+at+10.57.26+PM.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294768084195142497.post-2145631771413228800</id><published>2010-03-21T05:23:00.000-07:00</published><updated>2010-03-21T06:14:06.543-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Senha'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Arquivos'/><category scheme='http://www.blogger.com/atom/ns#' term='Compactar'/><category scheme='http://www.blogger.com/atom/ns#' term='Zip'/><title type='text'>Compactar arquivos com senha em Java!</title><content type='html'>&lt;p&gt;Salve pessoal! Hoje vou falar sobre como compactar um arquivo com senha usando Java. Embora isso pareça trivial, é menos comum do que se pensa, pois isso depende da implementação de um algoritmo de criptografia, que no nosso caso, foi usado o algoritmo &lt;a href="http://pt.wikipedia.org/wiki/Advanced_Encryption_Standard"&gt;AES&lt;/a&gt;. É importante citar também que as rotinas de criptografia são disponibilizadas por http://www.bouncycastle.org/.&lt;br /&gt;&lt;/p&gt;Bom, para fazer nosso trabalho vamos usar uma biblioteca chamada WinZipAES disponibilizada em http://code.google.com/p/winzipaes/ sob a licença da Apache versão 2.0. Desta vez, vamos usar o Eclipse pois vamos fazer um checkout do projeto, que é um projeto Eclipse. Acesse a página indicada acima, clique na aba 'Source' e observe as  instruções para fazer o checkout como usuário anônimo através da url http://winzipaes.googlecode.com/svn/trunk/winzipaes/ . Para isso é importante que você tenha instalado no seu Eclipse o plugin para SVN, caso não tenha, veja como instalar aqui (http://www.eclipse.org/subversive/downloads.php).&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;So, Let's Go Kids!&lt;br /&gt;&lt;/h4&gt;Abra o Eclipse, eu estou usando o Galileo, mas fiquem a vontade para usar versões anteriores, ou se preferirem podem usar ainda o Netbeans, daí basta instalar o plugin para abrir projetos Eclipse. Abra a Perspectiva Svn, e clique em New -&gt; Repository Location, na janela que abriu adicione a url citada na página do projeto WinZipAES, como na imagem abaixo.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_HYntGgeFL0c/S6YS4ChlfJI/AAAAAAAAACA/O4Kvch80Ebc/s1600-h/imagem1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 386px;" src="http://2.bp.blogspot.com/_HYntGgeFL0c/S6YS4ChlfJI/AAAAAAAAACA/O4Kvch80Ebc/s400/imagem1.png" alt="" id="BLOGGER_PHOTO_ID_5451065152938278034" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;Observe que o campo User, e Password estão vazios, o que indica que faremos acesso como usuário anônimo, e por isso, com permissão apenas de leitura. Clique em Finish,e depois com o botão direito do mouse sobre o repositório que apareceu na aba "SVN Repositories" do Eclipse e faça o checkout.&lt;/p&gt;Troque de Perspectiva, e observe que apareceu agora um projeto chamado "winzipaes". Vá em src, e no pacote de.idyl.crypto.zip haverá duas classes exemplificando como compactar e descompactar arquivos usando senha.&lt;br /&gt;&lt;p&gt;Abra primeiro a classe AesZipFileEncrypter, vá no método "main", lá temos duas linhas de código como na figura abaixo.&lt;/p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_HYntGgeFL0c/S6YTK4mIudI/AAAAAAAAACI/BFtrR-id-tQ/s1600-h/imagem2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 52px;" src="http://4.bp.blogspot.com/_HYntGgeFL0c/S6YTK4mIudI/AAAAAAAAACI/BFtrR-id-tQ/s400/imagem2.png" alt="" id="BLOGGER_PHOTO_ID_5451065476690524626" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;Como podem observar na imagem acima, este já é o exemplo e teste da implementação. Na primeira linha do método estamos instanciando um objeto de AesZipFileEncrypter que recebe como parametro de entrada o caminho com o nome para o arquivo zip que terá a senha. Na segunda linha temos a chamada para o método "zipAndEncrypt", que compacta o arquivo e insere a senha passada no outro parametro.&lt;br /&gt;&lt;/p&gt;Indo no diretório indicado na instancia do nosso objeto, você encontrará dois arquivos compactados, um com senha, e outro sem a senha. Isso acontece porque a implementação de exemplo contida nesta classe, cria um arquivo zip comum, e compacta-o em outro colocando a senha. Em um caso de uso real, você poderia passar para ser compactado um arquivo zip comum contendo vários outros arquivos, e passá-lo como parametro no lugar o arquivo txt.&lt;br /&gt;&lt;p&gt;Para descompactar, abra a classe AesZipFileDecrypter.java contida no mesmo pacote. O código esta como na figura abaixo.&lt;/p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_HYntGgeFL0c/S6YTgIMuzcI/AAAAAAAAACQ/D6uf1FupRmg/s1600-h/imagem3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 62px;" src="http://3.bp.blogspot.com/_HYntGgeFL0c/S6YTgIMuzcI/AAAAAAAAACQ/D6uf1FupRmg/s400/imagem3.png" alt="" id="BLOGGER_PHOTO_ID_5451065841656188354" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;Para descompactar o exemplo instancia um objeto da classe AesZipFileDecrypter que recebe como parametro o caminho para o nosso arquivo compactado com senha, e chama o metodo "extractEntry" na 3ª linha passando a entrada para o arquivo que se quer descompactar, o File destino deste arquivo, e a senha.&lt;/p&gt;&lt;br /&gt;&lt;h4&gt;The Real Life!&lt;br /&gt;&lt;/h4&gt;Bom, daí vocês me perguntam, "Eu tenho o fonte, e como usar na minha aplicação?". Simples, por questão de segurança, comentem os métodos "main" das duas classes de exemplo, criem um .jar, e adicionem no classpath do seu projeto, seja ele em NetBeans, Eclipse, ou outra IDE qualquer. Ah! Aconselho criar dois métodos estáticos, um compactando, e outro descompactando, em alguma classe utilitária da sua aplicação.&lt;br /&gt;&lt;p&gt;Para quem se interessar, e quiser aprofundar no assunto, recomendo a leitura dos link's da referência.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Espero que tenham gostado. Grande abraço.&lt;br /&gt;&lt;/p&gt;Thank you so much!&lt;br /&gt;&lt;p&gt;Referência:&lt;br /&gt;&lt;/p&gt;http://www.bouncycastle.org/&lt;br /&gt;http://www.winzip.com/aes_info.htm&lt;br /&gt;http://www.eclipse.org/subversive/downloads.php&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1294768084195142497-2145631771413228800?l=javaempo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javaempo.blogspot.com/feeds/2145631771413228800/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://javaempo.blogspot.com/2010/03/compactar-arquivos-com-senha-em-java.html#comment-form' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294768084195142497/posts/default/2145631771413228800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294768084195142497/posts/default/2145631771413228800'/><link rel='alternate' type='text/html' href='http://javaempo.blogspot.com/2010/03/compactar-arquivos-com-senha-em-java.html' title='Compactar arquivos com senha em Java!'/><author><name>dantas.</name><uri>http://www.blogger.com/profile/15701497241512582463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_HYntGgeFL0c/S6YcUmO5UHI/AAAAAAAAACY/uIGrnsVrOdE/S220/rd4nt4s.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_HYntGgeFL0c/S6YS4ChlfJI/AAAAAAAAACA/O4Kvch80Ebc/s72-c/imagem1.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294768084195142497.post-6885732362832890339</id><published>2010-02-13T03:13:00.000-08:00</published><updated>2010-03-06T05:54:32.479-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Banco de Dados'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache Derby'/><category scheme='http://www.blogger.com/atom/ns#' term='Embedded'/><title type='text'>Explorando o Derby! Parte II</title><content type='html'>&lt;h4&gt;Mãos na massa&lt;/h4&gt;&lt;p&gt;Na primeira parte vimos como instalar e configurar o Derby. Hoje vou mostrar como usar o Derby de forma embutida, ou, se preferirem, Embedded.&lt;/p&gt;&lt;p&gt;Vamos criar um cadastro simples de pessoas em que o banco de dados ficará embutido junto com a aplicação, e o usuário não precisará instalar nada além da própria aplicação.&lt;/p&gt;&lt;h4&gt;Configurando o Ambiente&lt;/h4&gt;&lt;p&gt;Para nosso exemplo, vou usar o NetBeans 6.8, que pode ser baixado em http://netbeans.org, e como provedor de persistência, o Hibernate, que já vem na instalação do NetBeans. Entretanto, para quem preferir o Eclipse, fique a vontade, pois não farei nada no Netbeans que não possa ser feito com o Eclipse.&lt;/p&gt;&lt;h4&gt;Hora da prática&lt;/h4&gt;&lt;p&gt;No Netbeans, vá em File &gt; New Project, e escolha a Categoria 'Java', e o Projeto 'Java Application', clique em 'Next', e dê ao projeto o nome 'PostDerby'. Desmarque a opção de 'Create Main Class' e clique em 'Finish'.&lt;/p&gt;&lt;p&gt;Clique com o botão direito sobre a raiz do projeto e vá em Propriedades. Clique em Libraries, e depois no botão 'Add Library'. Selecione a opção 'Hibernate JPA', caso esta opção não esteja na lista, clique em 'Import', e selecione a outra janela que abrirá. Também adicione o arquivo derby.jar presente na pasta lib na sua instalação do Derby. Feche as propriedades clicando em 'OK'.&lt;/p&gt;&lt;p&gt;Agora, crie o pacote br.blog.javaempo.entidades, e nele a classe Pessoa.java como na figura abaixo:&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_HYntGgeFL0c/S5GnxjWmX3I/AAAAAAAAAA4/KPHi49qvESk/s1600-h/imagen1DerbyII.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 242px;" src="http://4.bp.blogspot.com/_HYntGgeFL0c/S5GnxjWmX3I/AAAAAAAAAA4/KPHi49qvESk/s320/imagen1DerbyII.png" alt="" id="BLOGGER_PHOTO_ID_5445317894213099378" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Após criada a classe, vamos criar a nossa unidade de persistência. Siga os passos abaixo:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Clique com o botão direito do mouse em 'Source Packages',&lt;/li&gt;&lt;li&gt;acesse a opção New &gt; Other,&lt;/li&gt;&lt;li&gt;na janela que abriu vá na Categoria 'Other' e no Tipo de Arquivo, escolha 'Folder',&lt;/li&gt;&lt;li&gt;clique em 'Next', e dê o nome de 'META-INF', e clique em 'Finish'.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Vamos agora criar o arquivo persistence.xml. Para isso, clique na pasta 'META-INF' e siga basicamente os passos anteriores, com a diferença que você deve criar um arquivo da Categoria 'XML', e escolher o tipo 'XML Document', clique em 'Next' e dê o nome de persistence.xml, clique em 'Next' e deixe a opção default selecionada que indica apenas que você vai escrever um documento xml comum.&lt;/p&gt;&lt;p&gt;Abra o arquivo persistence.xml, e preencha como na figura abaixo:&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_HYntGgeFL0c/S5Gpor1Rk6I/AAAAAAAAABI/jh-Ui2VmxCU/s1600-h/imagen2DerbyII.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 117px;" src="http://3.bp.blogspot.com/_HYntGgeFL0c/S5Gpor1Rk6I/AAAAAAAAABI/jh-Ui2VmxCU/s400/imagen2DerbyII.png" alt="" id="BLOGGER_PHOTO_ID_5445319940893676450" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Observem na imagem acima, na linha 12, que no valor da propriedade "hibernate.connection.url", após o prefixo "jdbc:derby:" temos o diretório local onde está o banco de dados, e não o IP do servidor com a porta, como é de costume.&lt;br/&gt;Além disso, logo após o endereço, temos o parametro "create=true", isto indica ao Derby, que ao conectar, ele deve criar o banco no endereço indicado caso não exista. Isso garante transparência à aplicação, ao usar o banco. Para mais informações sobre a passagem de parametros na url, veja a seção "Working with the database connection URL attributes" do Guia do Desenvolvedor Derby presente no diretorio docs/pdf/devguide dentro do diretório da instalação do Derby, conforme vimos na primeira parte deste Post.&lt;/p&gt;&lt;p&gt;Outra propriedade importante é a "hibernate.hbm2ddl.auto" com o valor "update". Desta forma, quando conectar pela primeira vez, o Hibernate criará automaticamente as tabelas, e caso você altere, ou crie alguma entidade, ao levantar a aplicação na próxima vez, estas alterações já serão refletidas no banco.&lt;/p&gt;&lt;p&gt;Vamos criar a interface gráfica. Crie um pacote chamado br.blog.javaempo.gui, e nele crie um JFrame chamado CadPessoa.java.&lt;p/&gt;&lt;p&gt;Bom pessoal, como nosso objetivo aqui, é o Derby, então vamos pedir licença aos Design Pattern's, e criar todo o controle da aplicação neste JFrame, que deve ficar como na figura abaixo.&lt;p/&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_HYntGgeFL0c/S5Gsxw6spCI/AAAAAAAAABQ/j53s96ezpxI/s1600-h/imagen3DerbyII.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 367px; height: 209px;" src="http://3.bp.blogspot.com/_HYntGgeFL0c/S5Gsxw6spCI/AAAAAAAAABQ/j53s96ezpxI/s400/imagen3DerbyII.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5445323395412304930" /&gt;&lt;/a&gt;&lt;p&gt;Na próxima imagem temos alguns atributos para uso geral do cadastro e também o construtor da classe.&lt;/p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_HYntGgeFL0c/S5JPhYGZVzI/AAAAAAAAABY/AjKFLGi9WyQ/s1600-h/imagem4DerbyII.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 174px;" src="http://3.bp.blogspot.com/_HYntGgeFL0c/S5JPhYGZVzI/AAAAAAAAABY/AjKFLGi9WyQ/s400/imagem4DerbyII.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5445502334267905842" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;Nas linhas 16 e 17 criamos um &lt;code&gt;entityManagerFactory&lt;/code&gt; usando a unidade de persistência presente no arquivo &lt;code&gt;persistence.xml&lt;/code&gt;. Neste momento, o banco de dados é criado no diretório indicado. Logo abaixo, obtemos uma instância da classe EntityManager para nossas operações de persistência, fazemos uma consulta para obter uma lista de pessoas cadastradas, e caso esta não esteja vazia, setamos a primeira pessoa da lista na tela.&lt;/p&gt;&lt;p&gt;Na imagem abaixo segue alguns métodos utilitários para uso na nossa aplicação. Apenas um get, um set e um método para limpar a tela.&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_HYntGgeFL0c/S5JSTEpWEnI/AAAAAAAAABg/pxrHLZ4utoI/s1600-h/imagem5DerbyII.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 186px;" src="http://3.bp.blogspot.com/_HYntGgeFL0c/S5JSTEpWEnI/AAAAAAAAABg/pxrHLZ4utoI/s400/imagem5DerbyII.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5445505387062497906" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;Abaixo segue a implementação dos botões 'Novo', 'Excluir' e 'Salvar'.&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_HYntGgeFL0c/S5JUuhpavDI/AAAAAAAAABo/KI7iqrWmhQ4/s1600-h/imagem6DerbyII.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 248px;" src="http://1.bp.blogspot.com/_HYntGgeFL0c/S5JUuhpavDI/AAAAAAAAABo/KI7iqrWmhQ4/s400/imagem6DerbyII.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5445508057727155250" /&gt;&lt;/a&gt;&lt;p&gt;Na próxima imagem, segue a implementação dos botões de navegação, controlados pelo atributo &lt;code&gt;'posicao'&lt;/code&gt;.&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_HYntGgeFL0c/S5JW2xvjUbI/AAAAAAAAABw/8vHdeDx6cHs/s1600-h/imagem7DerbyII.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 137px;" src="http://3.bp.blogspot.com/_HYntGgeFL0c/S5JW2xvjUbI/AAAAAAAAABw/8vHdeDx6cHs/s400/imagem7DerbyII.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5445510398510059954" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;Agora é só executar a aplicação. Observe que na primeira execução o sistema irá demorar mais a levantar que nas vezes subsequentes, e após isso será criado um diretório com os dados como pode ser observado na imagem abaixo.&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_HYntGgeFL0c/S5Jaf5aZAJI/AAAAAAAAAB4/9nrDTafLSbM/s1600-h/imagem8DerbyII.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 332px;" src="http://1.bp.blogspot.com/_HYntGgeFL0c/S5Jaf5aZAJI/AAAAAAAAAB4/9nrDTafLSbM/s400/imagem8DerbyII.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5445514403478306962" /&gt;&lt;/a&gt;&lt;p&gt;Bom, com isso concluímos nossa segunda parte. Espero que tenham gostado. Até o próximo post, abraços.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1294768084195142497-6885732362832890339?l=javaempo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javaempo.blogspot.com/feeds/6885732362832890339/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://javaempo.blogspot.com/2010/02/explorando-o-derby-parte-ii.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294768084195142497/posts/default/6885732362832890339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294768084195142497/posts/default/6885732362832890339'/><link rel='alternate' type='text/html' href='http://javaempo.blogspot.com/2010/02/explorando-o-derby-parte-ii.html' title='Explorando o Derby! Parte II'/><author><name>dantas.</name><uri>http://www.blogger.com/profile/15701497241512582463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_HYntGgeFL0c/S6YcUmO5UHI/AAAAAAAAACY/uIGrnsVrOdE/S220/rd4nt4s.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_HYntGgeFL0c/S5GnxjWmX3I/AAAAAAAAAA4/KPHi49qvESk/s72-c/imagen1DerbyII.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294768084195142497.post-7038741579521822762</id><published>2010-02-07T09:46:00.000-08:00</published><updated>2010-02-07T10:55:37.726-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='SGBD'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache Derby'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Explorando o Derby! Parte I</title><content type='html'>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Derby, um subprojeto de Apache DB Project, é um banco de dados relacional, open source e totalmente implementado em Java e está disponível sob a licença Apache, Versão 2.0.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;O Derby pode ser implementado de várias maneiras diferentes.       As opções de implementação incluem:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Incorporado a um aplicativo Java de um único usuário. O Derby pode ficar praticamente invisível ao usuário final, porque não requer administração e executa na mesma máquina virtual Java (JVM) que o aplicativo.&lt;/li&gt;&lt;li&gt;Incorporado a um aplicativo multiusuário como um servidor Web, um servidor de aplicativos, ou um ambiente de desenvolvimento compartilhado.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Incorporado a uma estrutura de servidor. Pode ser utilizado o Network Server com o driver de cliente da rede, ou um servidor de livre escolha.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;O Derby pode ser baixado em &lt;a href="http://db.apache.org/derby/derby_downloads.html"&gt;http://db.apache.org/derby/derby_downloads.html&lt;/a&gt;, que além da instalação trás consigo rica documentação em português além de exemplos envolvendo as formas de implementação descritas acima. A versão usada neste post é a versão 10.5.3.0.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Instalando e Configurando o Derby.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Após fazer o download, descompacte a instalação em um diretório de sua preferência. O próximo passo é configurar o PATH para o diretório da instalação do Derby.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;No Linux Ubuntu, edite o arquivo /etc/profile (como root) e adicione as seguintes linhas:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;# /opt/Derby é o diretório onde está instalado na minha máquina. #Substitua pelo diretório da sua instalação.&lt;/span&gt; &lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;br /&gt;DERBY_INSTALL=/opt/Derby&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;export CLASSPATH=$DERBY_INSTALL/lib/derby.jar:$DERBY_INSTALL/lib/derbytools.jar:.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;No Windows, acesse as propriedades de "Meu Computador" e na aba "Avançado", clique no botão "Variáveis de Ambiente". Na lista de Variáveis do Sistema, clique em "Nova", crie a variável de nome DERBY_INSTALL, e no valor, coloque o diretório onde está instalado o Derby. Por exemplo: C:\Arquivos de Programas\Derby&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Depois procure na lista a variável PATH, e adicione o valor ;%DERBY_INSTALL%\bin;%DERBY_INSTALL%\lib\derby.jar;%DERBY_INSTALL%\lib\derbytools.jar&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Para testar, vamos abrir o IJ que é uma ferramenta distribuida juntamente com o Derby. Abra o shell, ou o prompt do MS-DOS e digite:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;java org.apache.derby.tools.ij&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Aparecerá como na imagem abaixo.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_HYntGgeFL0c/S27-n_WCFnI/AAAAAAAAAAw/Lt2Fd1PST9k/s1600-h/testeShell.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 126px;" src="http://2.bp.blogspot.com/_HYntGgeFL0c/S27-n_WCFnI/AAAAAAAAAAw/Lt2Fd1PST9k/s320/testeShell.png" alt="" id="BLOGGER_PHOTO_ID_5435561763254965874" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Para conectar digite: &lt;br/&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;connect 'jdbc:derby:/opt/Derby/demo/databases/toursdb';&lt;br/&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Observe que onde está escrito /opt/Derby, você deve substituir pelo diretório da instalação do Derby na sua máquina.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Segundo o manual de referência, o Derby implementa um subconjunto do núcleo do SQL-92, assim como algumas funcionalidades do SQL-99.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Então, uma vez conectado, é só usar e abusar da ferramenta.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Para desconectar, digite: disconnect;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Para sair do IJ, digite: exit;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Pronto! O derby está instalado e configurado. Bom pessoal, vou ficando por aqui, na segunda parte, vamos deixar de conversa, e partiremos para a prática com uma aplicação em que pretendo explorar o uso do Derby embutido (Embedded).&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Grande abraço, muito obrigado.&lt;br /&gt;&lt;br /&gt;Referências:&lt;br /&gt;1. http://db.apache.org/derby/&lt;br /&gt;2. Manual de Referência presente no diretório "docs/pdf/pt_BR/ref" da instalação do Derby.&lt;br /&gt;3. Guia do Servidor e Administração do Derby presente no diretório "docs/pdf/pt_BR/adminguide" da instalação do Derby.&lt;br /&gt;4. Derby Developer's Guide presente no diretório "docs/pdf/devguide" da instalação do Derby.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1294768084195142497-7038741579521822762?l=javaempo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javaempo.blogspot.com/feeds/7038741579521822762/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://javaempo.blogspot.com/2010/02/explorando-o-derby-parte-i.html#comment-form' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294768084195142497/posts/default/7038741579521822762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294768084195142497/posts/default/7038741579521822762'/><link rel='alternate' type='text/html' href='http://javaempo.blogspot.com/2010/02/explorando-o-derby-parte-i.html' title='Explorando o Derby! Parte I'/><author><name>dantas.</name><uri>http://www.blogger.com/profile/15701497241512582463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_HYntGgeFL0c/S6YcUmO5UHI/AAAAAAAAACY/uIGrnsVrOdE/S220/rd4nt4s.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_HYntGgeFL0c/S27-n_WCFnI/AAAAAAAAAAw/Lt2Fd1PST9k/s72-c/testeShell.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294768084195142497.post-2493192733393908986</id><published>2010-02-02T13:34:00.000-08:00</published><updated>2010-02-02T15:21:39.048-08:00</updated><title type='text'>Boas Vindas!!</title><content type='html'>Boa noite pessoal,&lt;br /&gt;&lt;br /&gt;   Sejam bem vindos! Em breve começarei a postar aqui conteúdo Java, e de outras tecnologias relacionadas que são de uso frequente em meu cotidiano profissional. Aguardem!&lt;br /&gt;&lt;br /&gt;Abraços,&lt;br /&gt;&lt;br /&gt;dantas.&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1294768084195142497-2493192733393908986?l=javaempo.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294768084195142497/posts/default/2493192733393908986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294768084195142497/posts/default/2493192733393908986'/><link rel='alternate' type='text/html' href='http://javaempo.blogspot.com/2010/02/boas-vindas.html' title='Boas Vindas!!'/><author><name>dantas.</name><uri>http://www.blogger.com/profile/15701497241512582463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_HYntGgeFL0c/S6YcUmO5UHI/AAAAAAAAACY/uIGrnsVrOdE/S220/rd4nt4s.jpg'/></author></entry></feed>
