Estou com o seguinte problema em um projeto web:
Tenho um objeto Titulo que possui uma collection de objetos TaxaManutencao.
Então, entro em uma tela e consulto um objeto Titulo e exibo em uma table sua collection de objetos TaxaManutencao.
Porém, tenho uma outra tela onde gero taxas de manutenções para todos o titulos baseado em um dado mês (uma rotina mensal para gerar TaxaManutencao para todos os Titulo).
O problema é que se eu gerar as taxas e voltar na consulta de titulo o JPA não esta trazendo as TaxaManutencoa que foram geradas.
No Banco de Dados verifiquei e estão geradas normalmente.
Deve ser problema de cache do JPA, pois se eu parar o servidor e entrar novamente as consultas funcionam corretamente.
Alguém sabe o que eu tenho que configurar no JPA, para que ele atualize o cache quando forem gerados objetos em telas diferentes do mesmo sistema.
Vc não está usando JPA2. O seu persistence.xml está declarado como JPA 1.0. Tem certeza q é Glassfish v3.1, pq essa versão do Glassfish ainda não saiu, não a versão final ao menos!
Poste o restando do seu persistence.xml p/ q eu possa analisa-lo. E lembre-se de colocar o seu código entre tags [code] p/ ajudar na leitura.
O seu arquivo persistence.xml ainda está na versão 1.0 como vc pode ver pelo atributo version e pelo xsi:schemaLocation. Se possível testa a versão 1.0 p/ ver se o problema persiste. Senão dê uma olhada na documentação do EclipseLink. Eu ouvi dizer q alguns providers habilitam o cache compartilhado por padrão no JPA2. Veja se esse é o seu caso. De qualquer forma o cache compartilhado do JPA devia funcionar se quem estiver atualizando as entidades TaxaManutencao for o mesmo aplicativo, usando JPA e usando o mesmo persistence-unit.
D
demys
Vou verificar, pois tenho 5 projetos em contextos diferentes que utilizam a mesma base de dados e as alterações refletem imediatamente em qualquer projeto, só que estão rodando com toplink-essentials-1.0 e não estou usando injeção de dependencia.
Vou verificar se não der certo vou ter que voltar na arquitetura antiga.
Obrigado.
qualquer duvida volto a postar.
dev.rafael
Quando vc possui diferentes projetos acessando a mesma base de dados vc precisa ser mais cauteloso com o cache compartilhado do JPA pois esse cache só é compartilhado dentro de uma unica aplicação. Se outra aplicação modificar os dados da base podem acabar com copias desatualizadas das entidades nos seus respectivos caches. Se for o caso do EclipseLink de ativar por padrão o cache compartilhado, então a sua solução seria simplesmente desativa-lo no persistence.xml ou configurar suas queries p/ não consultar o cache compartilhado.
D
demys
Voltei a utilizar o toplink, pois estava dando certo.
Agora esta funcionando da seguinte forma:
Mas gostaria de saber se existe uma forma mais simples de fazer e se é possivel usar o eclipselink-2.0 no glassfish 2.1.
dev.rafael
Até onde eu sei não existe limitação nenhuma quanto a usar o JPA2 no Glassfishv2.1. Quanto a um modo mais simples, essa eu ficar te devendo pois eu não uso o toplink. Aqui no trampo nós usamos o hibernate como provider do JPA2. A propósito, se vc estiver usando o JPA vc pode simplesmente habilitar o cache seletivo ou desabilitar por completo o cache compartilhado.
<?xml version="1.0" encoding="UTF-8"?><persistenceversion="1.0"xmlns="http://java.sun.com/xml/ns/persistence"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"><persistence-unitname="bns_financeiroPU"transaction-type="JTA"><provider>oracle.toplink.essentials.PersistenceProvider</provider><jta-data-source>jdbc/bns_sys</jta-data-source><jar-file>bns_sys_jpa.jar</jar-file><shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode><!-- ou simplesmente NONE --><exclude-unlisted-classes>false</exclude-unlisted-classes><properties>...
</properties></persistence-unit></persistence>