Forum Main Page > [Tutoriais] - Banco de Dados

Prevayler 2.0 - Migrando a persistência

Goto page 1 , 2  Next - >>

New Topic    Reply Message


  1. vfpamp
    Offline
    Posts: 6009

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44



    Esta página exibe apenas os comentários deste tutorial, para ler o artigo, clique aqui.






  1. takeda
    Offline
    Posts: 18

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    Fala, Vitor!!!

    seu tutorial estah muito bom!!! Eu li o primeiro (as duas partes) e agora terminei de ler esse e estou me aventurando no mundo da prevalencia.
    Mas agora, tenho umas duvidas. Mudei o seu exemplo pra nao permitir a inclusao de nomes repetidos. Basicamente, atiro uma excecao quando incluir o nome repetido.
    Mudei o metodo add de ListaPessoa para atirar uma excecao quando for incluido um nome que jah existe. Em seguida, faco o catch dessa excecao no executeOn da classe AdicionaPessoa.
    O problema eh que a excecao nao eh gerada. Ele simplesmente ignora e cadastra normalmente, como se nao houvesse tratamento. A outra duvida eh como fazer essa excecao passar para a aplicacao e tratar lah. O metodo executeOn nao permite atirar excecoes... Como eu faria para colocar um throws Exception lah?
    E a ultima duvida (estou abusando, neh?) eh que rodei o seu exemplo e quando eu digito FIM (ou seja, quando termina a execucao) apos imprimir os nomes, aparece a seguinte mensagem de erro:

    java.lang.InterruptedException: sleep interrupted
    at java.lang.Thread.sleep(Native Method)
    at SnapshotTimer.run(SnapshotTimer.java:17)

    Valeu pelas dicas (estou esperando uma continuacao desse tutorial!!! rs)




  1. jack_-_ganzha
    Offline
    Posts: 4133

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    takeda:
    O metodo executeOn nao permite atirar excecoes... Como eu faria para colocar um throws Exception lah?


    Use RuntimeException ou alguma outra unchecked.

    valeuz...
    _________________
    Marcos Silva Pereira
    http://marcospereira.wordpress.com
    Any fool can write code that a computer can understand. Good programmers write code that humans can understand. (Fowler)




  1. takeda
    Offline
    Posts: 18

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    Nao estou com o meu computador aqui, Jack, mas vou tentar quando chegar em casa! Valeu!!!




  1. Crash_overried
    Offline
    Posts: 11

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    Galera o Prevayler é um elefante branco. Os senhores que o desenvolveram guardam para si o conhecimento e não disponibilizam com os outros, por isso sugiro aos Senhores que continuem utilizando o MYSQL, HIBERNATE, ORACLE, etc...
    É difícil acreditar que em plena era da democratização do conhecimento isso continue a existir, então enquanto esse pensamento não for modificado o Prevayler continuará sendo um elefante "BRANCO".




  1. lcmetzger
    Offline
    Posts: 313

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44



    O fonte do prevayler está disponível, estude-o!


    _________________
    Luiz Carlos Metzger
    Blumenau - SC




  1. Crash_overried
    Offline
    Posts: 11

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    Porém o tutorial não dá dicas sobres os erros de execução.
    Já configurei o classpath de tudo quanto é jeito. As classes estão no mesmo diretório. O que falta mais? SORTE?

    Iniciando Prevayler...

    Instanciando Prevayler normal

    Digite o nome da pessoa ou FIM para sair: LEO

    java.lang.ClassNotFoundException: de.preclipse.AdicionaPessoa

    at java.net.URLClassLoader$1.run(URLClassLoader.java:199)

    at java.security.AccessController.doPrivileged(Native Method)

    at java.net.URLClassLoader.findClass(URLClassLoader.java:187)

    at java.lang.ClassLoader.loadClass(ClassLoader.java:289)

    at java.lang.ClassLoader.loadClass(ClassLoader.java:235)

    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)

    at java.lang.Class.forName0(Native Method)

    at java.lang.Class.forName(Class.java:219)

    at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:55

    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1513)

    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1435)

    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1626)

    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1274)

    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:324)

    at org.prevayler.implementation.snapshot.SnapshotManager.readSnapshot(SnapshotManager.java:114)

    at org.prevayler.implementation.snapshot.SnapshotManager.deepCopy(SnapshotManager.java:136)

    at org.prevayler.implementation.PrevaylerImpl.deepCopy(PrevaylerImpl.java:93)

    at org.prevayler.implementation.PrevaylerImpl.execute(PrevaylerImpl.java:5

    at de.preclipse.Main.main(Main.java:43)

    java.lang.RuntimeException: Unable to produce a deep copy of the transaction. Deep copies of transactions are executed instead of the transactions themselves so that the behaviour of the system during transaction execution is exactly the same as during transaction recovery from the log.

    at org.prevayler.implementation.snapshot.SnapshotManager.deepCopy(SnapshotManager.java:139)

    at org.prevayler.implementation.PrevaylerImpl.deepCopy(PrevaylerImpl.java:93)

    at org.prevayler.implementation.PrevaylerImpl.execute(PrevaylerImpl.java:5Pessoa armazenada.

    Digite o nome da pessoa ou FIM para sair:

    at de.preclipse.Main.main(Main.java:43)

    FIM

    Imprimindo pessoas persistidas.

    java.lang.InterruptedException: sleep interrupted

    at java.lang.Thread.sleep(Native Method)

    at de.preclipse.SnapshotTimer.run(SnapshotTimer.java:31)





  1. lcmetzger
    Offline
    Posts: 313

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    Quote:
    java.lang.ClassNotFoundException: de.preclipse.AdicionaPessoa



    Mas este não é um problema do Prevayler!

    A classe AdicionaPessoa não está sendo encontrada no CLASSPATH...
    revise sua aplicação...


    _________________
    Luiz Carlos Metzger
    Blumenau - SC




  1. Crash_overried
    Offline
    Posts: 11

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    Já fiz de tudo no classpath do XP - é mais fácil vc dar um control c no teu classpath e enviar para mim. Estou quase pirando!!!!!!!!
    Já li o tutorial e fiz exatamente igual mais não adiantou nada.




  1. lcmetzger
    Offline
    Posts: 313

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    Calma, não se desespere....

    A classe Adiciona pessoa está no package de.preclipse?
    Algo deve estar errado!

    Veja o item 3 do tutorial, a classe AdicionaPessoa não pertence a package algum. Procure revisar o tutorial com calma, de nada adiantaria
    eu lhe enviar um CLASSPATH que não corresponda com o que vc precisa.


    _________________
    Luiz Carlos Metzger
    Blumenau - SC




  1. Crash_overried
    Offline
    Posts: 11

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    Tentei executar em um terminal dos e apareceu esse mesmo erro que aparece no eclipse.
    Já li e reli o tutorial várias vezes. Note que quando compilo erro algum aparece, somente quando executo aparece o erro. Engraçado que chega executar porém quando vai instanciar AdicionaPessoa dá o erro, mas mesmo assim o programa continua.
    As classes estão no mesmo diretório, então o que devo fazer???

    Vc já executou esse exemplo do Vitor ( Migrando a persistencia - prevayler 2.0 )






  1. simu
    Offline
    Posts: 5424

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    Voce ja tentou apagar (ou mudar o nome) do diretorio onde o prevayler salva o snapshot? Me parece que o problema eh na hora que ele tenta ler um snapshot... mas nao tenho muita esperiencia com ele...




  1. Ironlynx
    Offline
    Posts: 23

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    Ótimo tutorial Vítor!
    Mas alguém jah teve um erro desses de Runtime:
    java.lang.RuntimeException:Unable to produce a deep copy of the transaction.
    Ele não salva as pessoas adicionadas(apesar de gerar o snapshot...)
    O Prevayler 1 roda redondo aqui,mas o 2...




  1. Crash_overried
    Offline
    Posts: 11

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    Beleza Vitor?

    Executei o teu exemplo de migrando a persistência e aparece o seguinte erro:

    Imprimindo pessoas persistidas.

    XXX
    java.lang.InterruptedException: sleep interrupted
    at java.lang.Thread.sleep(Native Method)
    at de.preclipse.SnapshotTimer.run(SnapshotTimer.java:35)
    Snapshot disparado as Sat Aug 28 14:55:13 BRT 2004...

    Outra pessoa no fórum está com o mesmo problema porém vc não respondeu.






  1. vfpamp
    Offline
    Posts: 6009

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    ops !!

    Você matou o processo???


    _________________
    Vitor Pamplona
    http://vitorpamplona.com
    http://twitter.com/vitorpamplona

    Não respondo dúvidas por e-mail, nem msn, nem via private message. Use o fórum para isso.




  1. JuniorSP
    Offline
    Posts: 9

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    Olá Vítor

    Estou aqui pra te encher de perguntas :twisted:
    Vamos por parte:

    1 - No caso do Prevayler 2, o lance do PrevaylerFactory, o objetivo é armazenar uma Factory de Objetos? Por exemplo, além de eu armazenar o ListaPessoas, eu posso adicionar ListaPessoas, ListaClientes, ListaProdutos, ou seja, todos que meu sistema for trabalhar? exemplo

    e no final, o Prevayler terá todos os objetos na sua Factory e vai saber com qual trabalhará? (como o SessionFactory do Hibernate)?.

    2 - Sobre geração de LOG e Snapshot. Os logs são gerados todas as vezes que ocorre modificação dos objetos e o Snapshot quando o programador ativa ele, certo? O que eu pude perceber em alguns testes, que o é gerado vários e vários arquivos de log, enquanto é apenas um de snapshot, significa que para fazer um backup, eu posso apenas salvar o Snapshot, certo?

    3 - Ainda sobre arquivos de log. O que eu percebi, que o arquivo é gerado após a finalização do processo (no caso gravar um novo Objeto). A nível de produção, o correto não seria abrir o PrevaylerFactory no inicio do sistema e só fechá-lo quando o sistema for fechado? (como que se faz ocm o Hibernate também). Nesse tempo que ele está aberto, não tem perigo de perder as informações com queda de energia? eu falo isso, pois vamos supor um sistema que o processo fica aberto o dia todo...

    4 - Poderia explicar melhor o que está sendo feita nessa linha?

    Inclusive eu até tinha me esquecido de por ela na programação.

    5 - As consultas são feitas pelo programador, ele que faz as regras. Significa que por exemplo, eu queria pegar todos os Clientes que possuem idade entre 10 e 30 anos (supondo que eu tenho um atributo idade do tipo int), eu terei que pegar a ListaClientes com todos os Clientes, rodar o ArrayList 1 por 1 e ir fazendo IF em cada um para testar, caso esteja no intervalo que eu queira, eu jogo para um outro ArrayList por exemplo? Isso não é muito mais trabalhoso em um sistema de grande porte, onde simples SQL (SQL para consulta, select...) não é mais simples.. Além do que, a maioria dos clientes precisam de valores na hora, onde um simples SQL e um Gerenciador de Banco de Dados mostre esses dados, enquanto com Prevayler vou ter que fazer isso manualmente.....

    6 - Pra terminar essa primeira parte (acredito que terá outras partes :roll: ), você mostrou como adicionar um novo objeto, mas como funciona o processo de Excluir e até mesmo Atualizar os Dados de um Objeto já gravado?

    Desculpa pelo caminhão de perguntas, mas no email você disse que eu poderia fazer :D

    Obrigado desde já
    _________________
    JavaFree.org




  1. vfpamp
    Offline
    Posts: 6009

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    Claro que pode :D

    JuniorSP:

    1 - No caso do Prevayler 2, o lance do PrevaylerFactory, o objetivo é armazenar uma Factory de Objetos? Por exemplo, além de eu armazenar o ListaPessoas, eu posso adicionar ListaPessoas, ListaClientes, ListaProdutos, ou seja, todos que meu sistema for trabalhar? e no final, o Prevayler terá todos os objetos na sua Factory e vai saber com qual trabalhará? (como o SessionFactory do Hibernate)?.



    Não! :D Você terá que criar uma classe para manter todas essas listas:



    JuniorSP:

    2 - Sobre geração de LOG e Snapshot. Os logs são gerados todas as vezes que ocorre modificação dos objetos e o Snapshot quando o programador ativa ele, certo? O que eu pude perceber em alguns testes, que o é gerado vários e vários arquivos de log, enquanto é apenas um de snapshot, significa que para fazer um backup, eu posso apenas salvar o Snapshot, certo?



    Certo. Certo, desde que você não tenha transações executadas depois do snapshot.

    JuniorSP:

    3 - Ainda sobre arquivos de log. O que eu percebi, que o arquivo é gerado após a finalização do processo (no caso gravar um novo Objeto). A nível de produção, o correto não seria abrir o PrevaylerFactory no inicio do sistema e só fechá-lo quando o sistema for fechado? (como que se faz ocm o Hibernate também). Nesse tempo que ele está aberto, não tem perigo de perder as informações com queda de energia? eu falo isso, pois vamos supor um sistema que o processo fica aberto o dia todo...



    O log é salvo no momento da Transação, e não depois de fechar o sistema. Você deixa o objeto criado pelo Prevayler Factory aberto até o final da execução do sistema


    JuniorSP:

    4 - Poderia explicar melhor o que está sendo feita nessa linha?
    Código:
    ((ListaPessoas)system).add(pessoas);



    Ela adiciona uma nova pessoa na sua lista de pessoas. Esta linha está no Transaction, pois ela será re-executada se o prevayler precisar recarregar os logs. Sacou? ela vai adicionar uma pessoa na sua lista.

    JuniorSP:

    5 - As consultas são feitas pelo programador, ele que faz as regras. Significa que por exemplo, eu queria pegar todos os Clientes que possuem idade entre 10 e 30 anos (supondo que eu tenho um atributo idade do tipo int), eu terei que pegar a ListaClientes com todos os Clientes, rodar o ArrayList 1 por 1 e ir fazendo IF em cada um para testar, caso esteja no intervalo que eu queira, eu jogo para um outro ArrayList por exemplo? Isso não é muito mais trabalhoso em um sistema de grande porte, onde simples SQL (SQL para consulta, select...) não é mais simples.. Além do que, a maioria dos clientes precisam de valores na hora, onde um simples SQL e um Gerenciador de Banco de Dados mostre esses dados, enquanto com Prevayler vou ter que fazer isso manualmente.....



    Vai ter que fazer isso sim. Existem alguns frameworks que filtram coleções de dados. Podes usar um deles também. :D Ou, faça um índice com o HashMap para essas consultas. Nesse caso o prevayler fica realmente mais complexo.

    JuniorSP:

    6 - Pra terminar essa primeira parte (acredito que terá outras partes Rolling Eyes ), você mostrou como adicionar um novo objeto, mas como funciona o processo de Excluir e até mesmo Atualizar os Dados de um Objeto já gravado?



    Você terá que criar uma transaction para cada uma das outras opções que você adicionar... :D

    Manda as outras !! :D

    []s
    _________________
    Vitor Pamplona
    http://vitorpamplona.com
    http://twitter.com/vitorpamplona

    Não respondo dúvidas por e-mail, nem msn, nem via private message. Use o fórum para isso.




  1. JuniorSP
    Offline
    Posts: 9

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    Legal Vítor, respondeu rápido hein

    Valeu pelas explicações, ficaram bem claras, mas vamos para alguns detalhes.

    Sobre a Pergunta 1, eu vou ter que criar uma classe que irá conter a lista das outras classes, no exemplo MinhaPersistencia. Então no PrevaylerFactory, invés de adicionar cada classe, eu adiciono a MinhaPersistencia? (será que viajei? poderia talves dar um exemplo com código?).

    Perguntas 2 até a 4 tranquilas

    A questão da 5, você indica alguma framework dessa para testar? Eu digo isso, pois a maioria dos meus sistemas, os clientes geralmente necessitam de informações no momento, e com SQL funciona legal. Hoje mesmo em um sistema de hospital, me pediram a quantidade de pacientes que estao em tratamento entre 14 e 29 anos separados por tipo de doença. com um simples SQL eu mostrei essas informações para o pessoal.

    Pergunta 6 ficou a dúvida na primeira vez que eu li. Eu até tinha percebido que iria ter que criar uma nova Transaction, mas não sabia como implementá-la.. pensando um pouco mais e fiz uns testes aqui e funcionou
    _________________
    JavaFree.org




  1. vfpamp
    Offline
    Posts: 6009

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    JuniorSP:
    Legal Vítor, respondeu rápido hein




    JuniorSP:

    Sobre a Pergunta 1, eu vou ter que criar uma classe que irá conter a lista das outras classes, no exemplo MinhaPersistencia. Então no PrevaylerFactory, invés de adicionar cada classe, eu adiciono a MinhaPersistencia? (será que viajei? poderia talves dar um exemplo com código?).



    Isso mesmo

    JuniorSP:

    A questão da 5, você indica alguma framework dessa para testar? Eu digo isso, pois a maioria dos meus sistemas, os clientes geralmente necessitam de informações no momento, e com SQL funciona legal. Hoje mesmo em um sistema de hospital, me pediram a quantidade de pacientes que estao em tratamento entre 14 e 29 anos separados por tipo de doença. com um simples SQL eu mostrei essas informações para o pessoal.



    Na mundo Java desse mes tem uma exelente aplicação para fazer isso chamada SAMBURÁ.

    JuniorSP:

    Pergunta 6 ficou a dúvida na primeira vez que eu li. Eu até tinha percebido que iria ter que criar uma nova Transaction, mas não sabia como implementá-la.. pensando um pouco mais e fiz uns testes aqui e funcionou



    Jóia!!


    _________________
    Vitor Pamplona
    http://vitorpamplona.com
    http://twitter.com/vitorpamplona

    Não respondo dúvidas por e-mail, nem msn, nem via private message. Use o fórum para isso.




  1. JuniorSP
    Offline
    Posts: 9

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    Eu ouvi falar sobre o SAMBURÁ, mas nem fazia idéia do que era, agora vou correr atrás de saber.

    Consegui fazer tudo o que queria inicialmente (Gravar, Excluir e Trazer Informações).

    Agora uma questão mais de arquitetura.
    Supondo que tenho meu Modelo Pessoas, para ela tenho minha ListaPessoas, agora para fazer a operação de gravação e exclusão, terei ter que criar 2 classes para Transações diferentes (ex. AdicionaPessoa, RemovePessoa)???? Se for assim, acho que um sistema com vários modelos, terá MUITA classe para controle.
    Talves uma dica de arquitetura é bem vinda..

    Agradeço novamente pela ajuda
    MUITO OBRIGADO
    _________________
    JavaFree.org




  1. vfpamp
    Offline
    Posts: 6009

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    JuniorSP:

    Agora uma questão mais de arquitetura.
    Supondo que tenho meu Modelo Pessoas, para ela tenho minha ListaPessoas, agora para fazer a operação de gravação e exclusão, terei ter que criar 2 classes para Transações diferentes (ex. AdicionaPessoa, http://www.javafree.com.br/forum/posting.php?mode=quote&p=62371RemovePessoa)???? Se for assim, acho que um sistema com vários modelos, terá MUITA classe para controle.
    Talves uma dica de arquitetura é bem vinda..



    Use DAOs e aglutine as Transações semelhantes em classes semelhantes. Lembre-se de separar as camadas de Persistência e view. Transaction e PrevaylerFactory são da persistência e nada mais.

    De uma olhada nos códigos do BabaXP (http://www.babaxp.org), lá está bem separado, inclusive com uma arquitetura que deixa a opção para utilizar Prevayler ou banco de dados via DAOs.

    Grato
    _________________
    Vitor Pamplona
    http://vitorpamplona.com
    http://twitter.com/vitorpamplona

    Não respondo dúvidas por e-mail, nem msn, nem via private message. Use o fórum para isso.




  1. JuniorSP
    Offline
    Posts: 9

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    Legal Vítor

    Eu vi alguns arquivos fontes do BabaXP e eu tive a idéia certa de como usar o DAO nesse caso.
    A única coisa chata que eu ainda achei, é o lance de criar várias classes de Transaction (la no projeto tb está assim, ou seja, tem o CreateCustomer, DeleteCustomer, UpdateCustomer) e o DAO que chama qual classe dependendo da ação.
    _________________
    JavaFree.org




  1. vfpamp
    Offline
    Posts: 6009

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    JuniorSP:
    Legal Vítor

    Eu vi alguns arquivos fontes do BabaXP e eu tive a idéia certa de como usar o DAO nesse caso.
    A única coisa chata que eu ainda achei, é o lance de criar várias classes de Transaction (la no projeto tb está assim, ou seja, tem o CreateCustomer, DeleteCustomer, UpdateCustomer) e o DAO que chama qual classe dependendo da ação.



    É necessário implementar cada um desses por causa do Log. E isso até é um Design Pattern (Vide: Command).
    _________________
    Vitor Pamplona
    http://vitorpamplona.com
    http://twitter.com/vitorpamplona

    Não respondo dúvidas por e-mail, nem msn, nem via private message. Use o fórum para isso.




  1. Crash_overried
    Offline
    Posts: 11

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    Galera como faço para excluir um objeto no prevayler, estou usando uma lista de objetos ja removi da lista atraves do comando
    ( ((Lista)prevayler.prevalentSystem).remove(cod));
    Funciona porem quando reinicio o programa, alteracao nehuma ocorreu, o objeto esta la novamente, como resolvo isso ?




  1. vfpamp
    Offline
    Posts: 6009

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    Crash_overried:
    Galera como faço para excluir um objeto no prevayler, estou usando uma lista de objetos ja removi da lista atraves do comando
    ( ((Lista)prevayler.prevalentSystem).remove(cod));
    Funciona porem quando reinicio o programa, alteracao nehuma ocorreu, o objeto esta la novamente, como resolvo isso ?



    Isto está numa transaction?
    _________________
    Vitor Pamplona
    http://vitorpamplona.com
    http://twitter.com/vitorpamplona

    Não respondo dúvidas por e-mail, nem msn, nem via private message. Use o fórum para isso.




  1. JuniorSP
    Offline
    Posts: 9

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    E ae Vítor, estou aqui denovo ops:

    Vou iniciar um pequeno projeto aqui internamente na empresa utilizando o Prevayler e Struts, eu e um amigo meu começamos a modelar os packages, classes e etc do Sistema.
    Gostaria de uma opinião sua, sobre os packages.
    Temos um package chamado dao, onde terá uma classe chamada DAO que terá o PrevaylerFactory apenas. No mesmo package, cada funcionalidade terá seu DAO, como por exemplo PessoasDAO que irá herdar do DAO tendo assim o PrevaylerFactory e mais métodos de insert, delete, update, etc etc etc..... ficou legal assim?

    Outra coisa, estavamos vendo aqui, e invés de usar um ArrayList para armazenar os modelos (como no exemplo do tutorial), seria legal usar um TreeMap, pois teriamos uma Key (que poderia ser o ID da pessoa que nunca se repete) além de estar sempre ordenado por essa ID, certo?
    _________________
    JavaFree.org




  1. vfpamp
    Offline
    Posts: 6009

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    JuniorSP:
    Vou iniciar um pequeno projeto aqui internamente na empresa utilizando o Prevayler e Struts, eu e um amigo meu começamos a modelar os packages, classes e etc do Sistema.
    Gostaria de uma opinião sua, sobre os packages.
    Temos um package chamado dao, onde terá uma classe chamada DAO que terá o PrevaylerFactory apenas. No mesmo package, cada funcionalidade terá seu DAO, como por exemplo PessoasDAO que irá herdar do DAO tendo assim o PrevaylerFactory e mais métodos de insert, delete, update, etc etc etc..... ficou legal assim?



    Arquitetura é muito "pessoal" do projeto. Mas acho que vai ficar legal.

    JuniorSP:

    Outra coisa, estavamos vendo aqui, e invés de usar um ArrayList para armazenar os modelos (como no exemplo do tutorial), seria legal usar um TreeMap, pois teriamos uma Key (que poderia ser o ID da pessoa que nunca se repete) além de estar sempre ordenado por essa ID, certo?



    Corretíssimo, TreeMap ou um HashMap você cria uma lista indexada otimizando, e muito, as consultas.
    _________________
    Vitor Pamplona
    http://vitorpamplona.com
    http://twitter.com/vitorpamplona

    Não respondo dúvidas por e-mail, nem msn, nem via private message. Use o fórum para isso.




  1. JuniorSP
    Offline
    Posts: 9

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    Olá Vítor

    Agora eu acho que é a última pergunta de todas

    Todos os exemplos que eu fiz, foi em aplicação standalone, ontem comecei uma aplicação para rodar com Struts no Tomcat. Eu configurei o método configureBaseSystem("Base"), pensando que na raiz do projeto seria criado um diretório Base e dentro ficaria os arquivos binários do Prevayler, mas para minha surpresa não.
    No Windows 2000 foi criado dentro do diretório WinNT/System32...., no Windows XP caiu dentro do diretório Eclipse, ou seja, cada SO ta colocando o base em um local diferente, hehehe.

    Gostaria que ficasse na raiz do meu projeto, mas não gostaria de por um caminho absoluto para isso, tem jeito ?

    Valeu e desculpa pelo encômodo ops:
    _________________
    JavaFree.org




  1. JuniorSP
    Offline
    Posts: 9

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44



    Teoricamente esse Código era pra remover a pessoa certo? (lembrando que o objeto pessoas está OK, pois o System.out.println está retornando o nome correto da pessoa.

    Obs: eu já fiz um delete e funcionou, esse aqui para apresentar pro meu chefe não funcionou :oops:
    _________________
    JavaFree.org




  1. vfpamp
    Offline
    Posts: 6009

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    Como você está executando ele?
    _________________
    Vitor Pamplona
    http://vitorpamplona.com
    http://twitter.com/vitorpamplona

    Não respondo dúvidas por e-mail, nem msn, nem via private message. Use o fórum para isso.




  1. JuniorSP
    Offline
    Posts: 9

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    vfpamp:
    Como você está executando ele?




    _________________
    JavaFree.org




  1. vfpamp
    Offline
    Posts: 6009

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    JuniorSP:

    vfpamp:
    Como você está executando ele?





    Eu hein... da uma analisada nas duas situações... alguma coisa de diferente deve ter...
    _________________
    Vitor Pamplona
    http://vitorpamplona.com
    http://twitter.com/vitorpamplona

    Não respondo dúvidas por e-mail, nem msn, nem via private message. Use o fórum para isso.




  1. JuniorSP
    Offline
    Posts: 9

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    Descobri

    o método remove(Object..) não estava removendo do Prevayler, agora se eu usar remove(int index), ae funciona normal.
    Esse talves foi meu último teste utilizando ArrayList, agora no sistema oficial, iremos utilizar HashMap ou TreeMap

    valeu pela ajuda
    _________________
    JavaFree.org




  1. hlfsousa
    Offline
    Posts: 0

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    A chamada snapshot.interrupt() vai lançar exceção quase sempre por causa do Thread.sleep(...). Para evitar isso, basta modificar o código do SnapshotTimer para que ele seja avisado formalmente de quando deve parar:



    e trocar a chamada de snapshot.interrupt() para snapshot.stopTimer(). Isso deve resolver o problema das exceções. Na verdade não é um problema, é que a exceção é tratada com e.printStackTrace(). Mas se você gosta de uma saída graciosa, está aí a sugestão.




  1. ablm
    Offline
    Posts: 0

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    Gostei bastante do tutorial, mto bom

    Fiquei tão impressionado com o prevayler que estou a pensar em migrar uma aplicacao existente de Visual Basic/Access para Java/Prevayler.

    E aqui se coloca o meu principal problema.

    Alguém sabe como posso converter a minha base de dados access para objectos java? E vice-versa (uma vez que posso precisar de voltar a usar a aplicação antiga, caso surja algum problema)?

    Basicamente, se conseguir arranjar uma solução para isto, passo logo a usar o Prevayler

    Cya




  1. arof
    Offline
    Posts: 0

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    Cya,

    sobre o seu problema acho que terá que montar um mapeamento entre a sua base atual e objetos de negócios para fazer a migração. mapear o modelo relacional da base para os objetos que você possui.

    Aproveitando a mensagem, peço ajuda:

    Estou querendo desenvolver um projeto de base de dados com conceitos de prevalencia aqui na empresa para acelerar o nosso tempo de resposta.

    A lógica de negócios é complexa e envolve dados financeiros com tratamento estatístico.

    Estou considerando trabalhar simultaneamente prevalencia e interface externa por webservices e eventualmente processamento distribuído.

    Estou procurando alguém que possa me ajudar neste projeto pois não sou especialista em nenhuma dessas duas tecnologias.

    Se alguém estiver interessado, por favor entre em contato em a.r.o.f@uol.com.br.




  1. vfpamp
    Offline
    Posts: 6009

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    WebServices não são a melhor saída se você quer velocidade. Entre outras coisas o parse do XML ainda é lentinho...

    Que tal RMI diretamente ou EJB?
    _________________
    Vitor Pamplona
    http://vitorpamplona.com
    http://twitter.com/vitorpamplona

    Não respondo dúvidas por e-mail, nem msn, nem via private message. Use o fórum para isso.




  1. nuba
    Offline
    Posts: 0

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    olá, peço desculpas pela minha ignorancia, mas fiz o download do prevayler 2.0 mas não estou conseguindo instalar o plug-in no Eclipse e nem no Gel, alguem pode me dar uma ajuda como faço isso?
    valeu!




  1. vfpamp
    Offline
    Posts: 6009

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    Olá Nuba,

    Não existe um plugin para download no site do Prevayler. Você está tentando instalar o Preclipse? Para fazer o prevayler funcionar é só baixar o jar e colocar no classpath da sua aplicação.

    []s
    _________________
    Vitor Pamplona
    http://vitorpamplona.com
    http://twitter.com/vitorpamplona

    Não respondo dúvidas por e-mail, nem msn, nem via private message. Use o fórum para isso.




  1. nuba
    Offline
    Posts: 0

    Comment Arrow

    Publicado em: 10/04/2009 00:18:44

    Opaaa, deu certo aqui hein Vitor, valeu pela ajuda!




  1. Relacionados





New Topic    Reply Message     Forum Main Page -> [Tutoriais] - Banco de Dados


Goto page 1 , 2  Next - >>