Comecei a fazer testes com o db4o, porém estou tendo problemas relacionados à utilização de sessões a partir do container principal.
Ocorre o erro Objects must not be updated in callback ao tentar efetuar commit da sessão.
ObjectContainer container = Db4oEmbedded.openFile(
configuracao(),
new StringBuilder(CAMINHO_BASE_LOCAL).append(base.nomeLocal()).toString()
);
ObjectContainer session = container.ext().openSession();
try {
if (session.query(IdEfd.class).size() == 0)
session.store(new IdEfd());
session.commit();
} catch (Exception e) {
session.rollback();
e.printStackTrace();
} finally {
container.close();
}
com.db4o.ext.Db4oIllegalStateException: Objects must not be updated in callback
at com.db4o.internal.ObjectContainerBase.assertNotInCallback(ObjectContainerBase.java:1722)
at com.db4o.internal.ObjectContainerBase.store2(ObjectContainerBase.java:1702)
at com.db4o.internal.ObjectContainerBase.storeAfterReplication(ObjectContainerBase.java:1618)
at com.db4o.internal.ObjectContainerBase$10.apply(ObjectContainerBase.java:1604)
at com.db4o.internal.ObjectContainerBase$10.apply(ObjectContainerBase.java:1602)
at com.db4o.internal.ObjectContainerBase.asTopLevelCall(ObjectContainerBase.java:427)
at com.db4o.internal.ObjectContainerBase.asTopLevelStore(ObjectContainerBase.java:413)
at com.db4o.internal.ObjectContainerBase.storeInternal(ObjectContainerBase.java:1602)
at com.db4o.internal.ObjectContainerBase.storeInternal(ObjectContainerBase.java:1594)
at com.db4o.internal.ClassMetadata.setStaticClass(ClassMetadata.java:1804)
at com.db4o.internal.ClassMetadata.updateStaticClass(ClassMetadata.java:1772)
at com.db4o.internal.ClassMetadata.storeStaticFieldValues(ClassMetadata.java:1735)
at com.db4o.internal.ClassMetadata.initOnUp(ClassMetadata.java:1165)
at com.db4o.internal.ClassMetadataRepository.initClassMetadataOnUp(ClassMetadataRepository.java:350)
at com.db4o.internal.ClassMetadataRepository.readClassMetadata(ClassMetadataRepository.java:469)
at com.db4o.internal.ClassMetadataRepository.readClassMetadata(ClassMetadataRepository.java:205)
at com.db4o.internal.ClassMetadataRepository.classMetadataForReflectClass(ClassMetadataRepository.java:197)
at com.db4o.internal.ObjectContainerBase.classMetadataForReflectClass(ObjectContainerBase.java:1003)
at com.db4o.constraints.UniqueFieldValueConstraint$1.classMetadata(UniqueFieldValueConstraint.java:84)
at com.db4o.constraints.UniqueFieldValueConstraint$1.isClassMetadataAvailable(UniqueFieldValueConstraint.java:72)
at com.db4o.constraints.UniqueFieldValueConstraint$1.onEvent(UniqueFieldValueConstraint.java:92)
at com.db4o.internal.events.Event4Impl.trigger(Event4Impl.java:78)
at com.db4o.internal.events.EventRegistryImpl$4.run(EventRegistryImpl.java:123)
at com.db4o.foundation.DynamicVariable.with(DynamicVariable.java:54)
at com.db4o.internal.InCallback.run(InCallback.java:24)
at com.db4o.internal.events.EventRegistryImpl.withExceptionHandlingInCallback(EventRegistryImpl.java:279)
at com.db4o.internal.events.EventRegistryImpl.commitOnStarted(EventRegistryImpl.java:121)
at com.db4o.internal.LocalTransaction.dispatchCommittingCallback(LocalTransaction.java:89)
at com.db4o.internal.LocalTransaction.commit(LocalTransaction.java:66)
at com.db4o.internal.LocalTransaction.commit(LocalTransaction.java:59)
at com.db4o.internal.LocalObjectContainer.commit1(LocalObjectContainer.java:104)
at com.db4o.internal.IoAdaptedObjectContainer.commit1(IoAdaptedObjectContainer.java:171)
at com.db4o.internal.ObjectContainerBase$3.apply(ObjectContainerBase.java:403)
at com.db4o.internal.ObjectContainerBase$3.apply(ObjectContainerBase.java:401)
at com.db4o.internal.ObjectContainerBase.asTopLevelCall(ObjectContainerBase.java:427)
at com.db4o.internal.ObjectContainerBase.commit(ObjectContainerBase.java:401)
at com.db4o.internal.ObjectContainerSession.commit(ObjectContainerSession.java:286)
at teste.processamento.DadosBaseLocal.inicializaSequencias(DadosBaseLocal.java:47)
at teste.processamento.DadosBaseLocal.main(DadosBaseLocal.java:16)