Dae rapaziada,
volta e meia tenho problema com o dataGrid do prime utilizando o lazy,
tenho 10 registros no total.
Na primeira pagina com 5 registros ok, qndo tento mudar para a segunda pagina
ocorre o erro
10:47:37,757 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (http-localhost-127.0.0.1-8080-1) SQL Error: 0, SQLState: 24000
10:47:37,758 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (http-localhost-127.0.0.1-8080-1) ResultSet may only be accessed in a forward direction.
10:47:37,760 ERROR [org.jboss.as.ejb3.tx.CMTTxInterceptor] (http-localhost-127.0.0.1-8080-1) javax.ejb.EJBTransactionRolledbackException: org.hibernate.exception.GenericJDBCException: ResultSet may only be accessed in a forward direction.
alguém já teve esse problema? alguém usa e funciona corretamente?
ResultSet may only be accessed in a forward direction.
Vc ta paginando isso direto do hibernate?
na implementação do método load do lazydatamodel
faço assim
listEntity = ejb.findAllLimit(nomeEntity, startResults, maxPerPage);
@Override
public List<Entity> findAllLimit(String nomeEntity, Integer startResults, Integer maxPerPage) throws Exception{
Query query = getEntityManager().createQuery("select x from "+nomeEntity+" x");
query.setFirstResult(startResults);
query.setMaxResults(maxPerPage);
List resultList = query.getResultList();
return resultList;
}
É cara, ta estranho pacas.
O que tem no método: getEntityManager()?
Outra coisa, você colocou o atributo do datatable lazy=“true” ?
[quote=Hebert Coelho]É cara, ta estranho pacas.
O que tem no método: getEntityManager()?
r:
public class ProjetoEJBImpl extends BaseEJBImpl implements ProjetoEJB {
@EJB
private PersistenceSetup jpaSetup;
@Override
public EntityManager getEntityManager() {
return jpaSetup.createEntityManager();
}
}
onde esse PersistenceSetup vai me dar um entity manager de acordo com a base que o usuário fez o login.
Outra coisa, você colocou o atributo do datatable lazy=“true” ?[/quote]
r: Sim
E o que tem aqui?
return jpaSetup.createEntityManager();
[quote=Hebert Coelho]E o que tem aqui?
return jpaSetup.createEntityManager(); [/quote]Esse cara é injetado? Você cria na mão? Pq vc ta fazendo isso e não usando a injeção do EJB?
o mais estranho é que essa implementação é usada em outro projeto, "exatamente igual"
e não da esse problema.
aqui o conteudo do PersistenceSetup
@Stateless
@Startup
@LocalBean
@BaseType
@SuppressWarnings("all")
public class PersistenceSetup {
@Resource(mappedName = "java:comp/TransactionSynchronizationRegistry")
private TransactionSynchronizationRegistry registry;
private Map<String, EntityManagerFactory> factories = new HashMap<String, EntityManagerFactory>();
@PostConstruct
public void startup() throws Exception {
String pastaConfig="configuracoes";
String arquivoConfig = "persistence.properties";
String separator = System.getProperty("file.separator");
String jbossHome = System.getProperty("jboss.home.dir");
String file = jbossHome+separator+pastaConfig+separator+arquivoConfig;
InputStream is = new FileInputStream(file);
Properties properties = new Properties();
properties.load(is);
Integer jpaInstances = new Integer(properties.getProperty("jpa.instances"));
String jpaUnitName = properties.getProperty("jpa.persistence.unit.name");
for (int i = 1; i <= jpaInstances; i++) {
HashMap<String, String> jpaProperties = new HashMap<String, String>();
for (Object obj : properties.keySet()) {
String key = (String) obj;
if (key.startsWith(String.valueOf(i))) {
jpaProperties.put(key.replaceAll(i + ".", ""), properties.getProperty(key));
}
}
String persistenceName = properties.getProperty(i + "." + PERSISTENCE_NAME);
EntityManagerFactory factory = Persistence.createEntityManagerFactory(jpaUnitName, jpaProperties);
factories.put(persistenceName, factory);
}
}
@PreDestroy
public void shutdown() throws Exception {
for (EntityManagerFactory factory : factories.values()) {
if (factory.isOpen()) {
factory.close();
}
}
}
public Set<String> getPersistenceNames() {
return factories.keySet();
}
public EntityManager createEntityManager(String persistenceName) {
EntityManager manager = (EntityManager) registry.getResource(ENTITY_MANAGER_KEY);
if (manager == null) {
EntityManagerFactory factory = factories.get(persistenceName);
manager = factory.createEntityManager();
registry.putResource(ENTITY_MANAGER_KEY, manager);
registry.registerInterposedSynchronization(new TransactionSynchronization(manager));
}
return manager;
}
public EntityManager createEntityManager() {
String persistenceName = (String) registry.getResource(PERSISTENCE_NAME);
EntityManager manager = createEntityManager(persistenceName);
return manager;
}
class TransactionSynchronization implements Synchronization {
EntityManager manager;
public TransactionSynchronization(EntityManager manager) {
this.manager = manager;
}
@Override
public void afterCompletion(int status) {
manager.close();
}
@Override
public void beforeCompletion() {}
}
}
É cara, vou deixar outra pessoa te ajudar. Você com EJB está fazendo controle manual do EntityManager, algo que não vejo por que.
Não é só pq é o mesmo utilizado em outro projeto que não venha a dar problema aí, um controle tão delicado como esse que vc está usando depende de várias variáveis.
Até mais.
[quote=Hebert Coelho]É cara, vou deixar outra pessoa te ajudar. Você com EJB está fazendo controle manual do EntityManager, algo que não vejo por que.
Não é só pq é o mesmo utilizado em outro projeto que não venha a dar problema aí, um controle tão delicado como esse que vc está usando depende de várias variáveis.
Até mais.[/quote]
você tem alguma sugestão de fazer com que exista múltiplas bases, e que nenhuma delas
seja subida automaticamente com o servidor no momento do start?
[quote=kleberdamasco][quote=Hebert Coelho]É cara, vou deixar outra pessoa te ajudar. Você com EJB está fazendo controle manual do EntityManager, algo que não vejo por que.
Não é só pq é o mesmo utilizado em outro projeto que não venha a dar problema aí, um controle tão delicado como esse que vc está usando depende de várias variáveis.
Até mais.[/quote]
você tem alguma sugestão de fazer com que exista múltiplas bases, e que nenhuma delas
seja subida automaticamente com o servidor no momento do start?[/quote]Não. [=
Até hoje nunca precisei fazer, ou ouvi sobre tal requisito. Caso eu fique sabendo de algo e posto aqui novamente. [=
Já ouviu falar do Hibernate Shards? Pode ser que te ajude (eu não sei quanto à base não subir automaticamente).
http://www.hibernate.org/subprojects/shards.html
[quote=Rodrigo Sasaki]Já ouviu falar do Hibernate Shards? Pode ser que te ajude (eu não sei quanto à base não subir automaticamente).
http://www.hibernate.org/subprojects/shards.html[/quote]
vou dar uma olhada,
vc já utilizou e/ou tem conhecimento?
Resolvido com essa propriedade
<property name="hibernate.jdbc.use_scrollable_resultset"
value="false" />