#eclipselink #stack-overflow #repeat
#eclipselink #переполнение стека #повторите
Вопрос:
У меня есть проект jsf, который уже много раз развертывался на сервере приложений Oracle, он использует eclipse link 2.2.0, в новой недавней установке сайт выходит из строя при загрузке данных из БД, поскольку он продолжает выполнять один и тот же запрос тысячу раз, а затем выдает исключение stackoverflow
Если я подключаюсь к той же новой установке из моего локального jdev, приложение запускается нормально, поэтому кажется, что проблема с конфигурацией сервера, а не проблема с кодированием. код, используемый для создания дескриптора объекта
public ClassDescriptor buildTLEntityPCDAODescriptor() {
RelationalDescriptor descriptor = new RelationalDescriptor();
descriptor.setJavaClass(com.its.tabs.tpc.layers.dal.entity.toplink.TLEntityPCDAO.class);
descriptor.addTableName("TPC_ENTITIES");
descriptor.addPrimaryKeyFieldName("TPC_ENTITIES.ENTITY_ID");
// Inheritance Properties.
// Descriptor Properties.
descriptor.useSoftCacheWeakIdentityMap();
descriptor.setIdentityMapSize(100);
descriptor.useRemoteSoftCacheWeakIdentityMap();
descriptor.setRemoteIdentityMapSize(100);
descriptor.setSequenceNumberFieldName("TPC_ENTITIES.ENTITY_ID");
descriptor.setSequenceNumberName("SEQ_ENTITIES");
descriptor.setAlias("TLEntityPCDAO");
// Cache Invalidation Policy
TimeToLiveCacheInvalidationPolicy policy = new TimeToLiveCacheInvalidationPolicy(1);
policy.setShouldUpdateReadTimeOnUpdate(false);
descriptor.setCacheInvalidationPolicy(policy);
// Query Manager.
descriptor.getQueryManager().checkCacheForDoesExist();
DirectToFieldMapping descriptionMapping = new DirectToFieldMapping();
descriptionMapping.setAttributeName("description");
descriptionMapping.setFieldName("TPC_ENTITIES.DESCRIPTION");
descriptor.addMapping(descriptionMapping);
DirectToFieldMapping serviceProviderCodeMapping = new DirectToFieldMapping();
serviceProviderCodeMapping.setAttributeName("serviceProviderCode");
serviceProviderCodeMapping.setFieldName("TPC_ENTITIES.SERVICE_PROVIDER_CODE");
descriptor.addMapping(serviceProviderCodeMapping);
DirectToFieldMapping entity_idMapping = new DirectToFieldMapping();
entity_idMapping.setAttributeName("entity_id");
entity_idMapping.setNullValue(new Long(0));
entity_idMapping.setFieldName("TPC_ENTITIES.ENTITY_ID");
descriptor.addMapping(entity_idMapping);
DirectToFieldMapping idMapping = new DirectToFieldMapping();
idMapping.setAttributeName("id");
idMapping.readOnly();
idMapping.setFieldName("TPC_ENTITIES.ENTITY_ID");
descriptor.addMapping(idMapping);
DirectToFieldMapping levelIdMapping = new DirectToFieldMapping();
levelIdMapping.setAttributeName("levelId");
levelIdMapping.setNullValue(new Long(0)); //changed from -1 to 0
levelIdMapping.setFieldName("TPC_ENTITIES.LEVEL_ID");
descriptor.addMapping(levelIdMapping);
DirectToFieldMapping lookupIdMapping = new DirectToFieldMapping();
lookupIdMapping.setAttributeName("lookupId");
lookupIdMapping.setNullValue(new Long(0)); //changed from -1 to 0
lookupIdMapping.setFieldName("TPC_ENTITIES.LOOKUP_ID");
descriptor.addMapping(lookupIdMapping);
DirectToFieldMapping levelDepthMapping = new DirectToFieldMapping();
levelDepthMapping.setAttributeName("levelDepth");
levelDepthMapping.setFieldName("TPC_ENTITIES.LEVEL_DEPTH");
descriptor.addMapping(levelDepthMapping);
DirectToFieldMapping entity_sequenceMapping = new DirectToFieldMapping();
entity_sequenceMapping.setAttributeName("entity_sequence");
entity_sequenceMapping.setNullValue(new Long(0));
entity_sequenceMapping.setFieldName("TPC_ENTITIES.ENTITY_SEQUENCE");
descriptor.addMapping(entity_sequenceMapping);
DirectToFieldMapping entity_typeMapping = new DirectToFieldMapping();
entity_typeMapping.setAttributeName("entity_type");
entity_typeMapping.setFieldName("TPC_ENTITIES.ENTITY_TYPE");
descriptor.addMapping(entity_typeMapping);
DirectToFieldMapping nameMapping = new DirectToFieldMapping();
nameMapping.setAttributeName("name");
nameMapping.setFieldName("TPC_ENTITIES.NAME");
descriptor.addMapping(nameMapping);
DirectToFieldMapping parent_entity_idMapping = new DirectToFieldMapping();
parent_entity_idMapping.setAttributeName("parent_entity_id");
parent_entity_idMapping.setNullValue(new Long(0)); //changed from -1 to 0
parent_entity_idMapping.setFieldName("TPC_ENTITIES.PARENT_ENTITY_ID");
descriptor.addMapping(parent_entity_idMapping);
AggregateObjectMapping auditFieldsMapping = new AggregateObjectMapping();
auditFieldsMapping.setAttributeName("auditFields");
auditFieldsMapping.setReferenceClass(com.its.tabs.architecture.dal.persistency.AuditFields.class);
auditFieldsMapping.setIsNullAllowed(false);
auditFieldsMapping.addFieldNameTranslation("TPC_ENTITIES.CREATED_BY", "createdBy->DIRECT");
auditFieldsMapping.addFieldNameTranslation("TPC_ENTITIES.MODIFIED_BY", "modifiedBy->DIRECT");
auditFieldsMapping.addFieldNameTranslation("TPC_ENTITIES.CREATED_DATE", "createdDate->DIRECT");
auditFieldsMapping.addFieldNameTranslation("TPC_ENTITIES.MODIFIED_DATE", "modifiedDate->DIRECT");
descriptor.addMapping(auditFieldsMapping);
OneToManyMapping entitesMapping = new OneToManyMapping();
entitesMapping.setAttributeName("entites");
entitesMapping.setReferenceClass(com.its.tabs.tpc.layers.dal.entity.toplink.TLEntityPCDAO.class);
entitesMapping.useTransparentCollection();
entitesMapping.useCollectionClass(org.eclipse.persistence.indirection.IndirectList.class);
entitesMapping.addTargetForeignKeyFieldName("TPC_ENTITIES.PARENT_ENTITY_ID", "TPC_ENTITIES.ENTITY_ID");
descriptor.addMapping(entitesMapping);
OneToManyMapping entityattributesMapping = new OneToManyMapping();
entityattributesMapping.setAttributeName("entityattributes");
entityattributesMapping.setReferenceClass(com.its.tabs.tpc.layers.dal.entityattributes.toplink.TLEntityAttributesDAO.class);
entityattributesMapping.useTransparentCollection();
entityattributesMapping.useCollectionClass(org.eclipse.persistence.indirection.IndirectList.class);
entityattributesMapping.addTargetForeignKeyFieldName("TPC_ENTITY_ATTRIBUTES.ENTITY_ID", "TPC_ENTITIES.ENTITY_ID");
descriptor.addMapping(entityattributesMapping);
OneToOneMapping entityLevelIdMapping = new OneToOneMapping();
entityLevelIdMapping.setAttributeName("levels");
entityLevelIdMapping.setReferenceClass(TLLevelsDAO.class);
entityLevelIdMapping.useProxyIndirection();
entityLevelIdMapping.readOnly();
entityLevelIdMapping.addForeignKeyFieldName("TPC_ENTITIES.LEVEL_ID", "TPC_LEVELS.LEVEL_ID");
descriptor.addMapping(entityLevelIdMapping);
OneToOneMapping entityLookupIdMapping = new OneToOneMapping();
entityLookupIdMapping.setAttributeName("lookups");
entityLookupIdMapping.setReferenceClass(TLLookupDAO.class);
entityLookupIdMapping.useProxyIndirection();
entityLookupIdMapping.readOnly();
entityLookupIdMapping.addForeignKeyFieldName("TPC_ENTITIES.LOOKUP_ID", "TPC_LOOKUP.LOOKUP_ID");
descriptor.addMapping(entityLookupIdMapping);
return descriptor;
}
код, используемый для чтения объектов
List<EntityPCEntity> entityList = new ArrayList<EntityPCEntity>();
entityList = (List<EntityPCEntity>)this.getTABSEntityManagerFinder().getEclipseLinkAdapter().readMultipleDAOs(TLEntityPCDAO.class);
return entityList;
исключение
14/06/17 13:03:36 Вызвано: java.lang.Ошибка StackOverflowError 14/06/17 13:03:36 в com.evermind.server.connector.ApplicationConnectionManager.getTransaction(ApplicationConnectionManager.java:1582) 06.04.17 13:03:36 на com.evermind.server.connector.ApplicationConnectionManager.getConnectionFromShareablePool(ApplicationConnectionManager.java:1652) 06.04.17 13:03:36 на com.evermind.server.connector.ApplicationConnectionManager.acquireConnectionContext(ApplicationConnectionManager.java:1497) 06.04.17 13:03:36 на com.evermind.server.connector.ApplicationConnectionManager.allocateConnection(ApplicationConnectionManager.java:1449) 06.04.17 13:03:36 в oracle.j2ee.connector.OracleConnectionManager.unprivileged_allocateConnection(OracleConnectionManager.java:238) 06.04.17 13:03:36 в oracle.j2ee.connector.OracleConnectionManager.allocateConnection(OracleConnectionManager.java: 192) 14/06/17 13:03:36 в oracle.oc4j.sql.ManagedDataSource.getConnection(ManagedDataSource.java:197) 14/06/17 13:03:36 в oracle.oc4j.sql.ManagedDataSource.getConnection(ManagedDataSource. java:142) 14/06/17 13:03:36 в oracle.oc4j.sql.ManagedDataSource.getConnection(ManagedDataSource.java: 127) 14/06/17 13:03:36 в org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:126) 06.04.17 13:03:36 в org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:94) 06.04.17 14:03:36 в org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:162) 06.04.17 13:03:36 в org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.connectInternal(DatasourceAccessor.java:330) 06.04.17 13:03:36 в org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.connectInternal(DatabaseAccessor.java:291) 06.04.17 13:03:36 в org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.reconnect(DatasourceAccessor.java:565) 06.04.17 13:03:36 в org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.reconnect(DatabaseAccessor.java:1434) 06.04.17 13:03:36 в org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.incrementCallCount(DatasourceAccessor.java:305) 06.04.17 13:03:36 в org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:570) 06.04.17 13:03:36 в org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:526) 06.04.17 13:03:36 в org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:1729) 06.04.17 13:03:36 в org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:566) 06.04.17 13:03:36 в org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:207) 06.04.17 13:03:36 в org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:193) 06.04.17 13:03:36 в org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.selectOneRow(DatasourceCallQueryMechanism.java:667) 06.04.17 13:03:36 в org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectOneRowFromTable(ExpressionQueryMechanism.java:2603) 06.04.17 13:03:36 в org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectOneRow(ExpressionQueryMechanism.java:2574) 06.04.17 13:03:36 в org.eclipse.persistence.запросы.ReadObjectQuery.executeObjectLevelReadQuery(ReadObjectQuery.java:444) 06.04.17 13:03:36 в org.eclipse.persistence.запросы.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:1080) 06.04.17 13:03:36 в org.eclipse.persistence.запросы.DatabaseQuery.execute(DatabaseQuery.java:808) 06.04.17 13:03:36 в org.eclipse.persistence.запросы.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1040) 06.04.17 13:03:36 в org.eclipse.persistence.запросы.ReadObjectQuery.execute(ReadObjectQuery.java:412) 06.04.17 13:03:36 в org.eclipse.persistence.запросы.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1126) 06.04.17 13:03:36 в org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2842) 06.04.17 13:03:36 в org.eclipse.persistence.internal.sessions.AbstractSession.ExecuteQuery(AbstractSession.java:1521) 06.04.17 13:03:36 в org.eclipse.persistence.internal.sessions.AbstractSession.ExecuteQuery(AbstractSession.java:1503) 06.04.17 14:03:36 в org.eclipse.persistence.internal.sessions.AbstractSession.ExecuteQuery(AbstractSession.java:1463) 06.04.17 13:03:36 в org.eclipse.persistence.internal.sessions.AbstractSession.checkAndRefreshInvalidObject(AbstractSession.java:1024) 06.04.17 13:03:36 в org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.cloneAndRegisterObject(UnitOfWorkImpl.java:960) 06.04.17 13:03:36 в org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildWorkingCopyCloneNormally(ObjectBuilder.java:628) 06.04.17 13:03:36 в org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObjectInUnitOfWork(ObjectBuilder.java:565) 06.04.17 13:03:36 в org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:497) 06.04.17 13:03:36 в org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:456) 06.04.17 13:03:36 в org.eclipse.persistence.запросы.ObjectLevelReadQuery.buildObject(ObjectLevelReadQuery.java:723) 06.04.17 13:03:36 в org.eclipse.persistence.запросы.ReadObjectQuery.registerResultInUnitOfWork(ReadObjectQuery.java:766) 06.04.17 13:03:36 в org.eclipse.persistence.запросы.ReadObjectQuery.executeObjectLevelReadQuery(ReadObjectQuery.java:451) 06.04.17 13:03:36 в org.eclipse.persistence.запросы.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:1080) 06.04.17 13:03:36 в org.eclipse.persistence.запросы.DatabaseQuery.execute(DatabaseQuery.java:808) 06.04.17 13:03:36 в org.eclipse.persistence.запросы.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1040) 06.04.17 13:03:36 в org.eclipse.persistence.запросы.ReadObjectQuery.execute(ReadObjectQuery.java:412) 06.04.17 13:03:36 в org.eclipse.persistence.запросы.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1126) 06.04.17 13:03:36 в org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2842) 06.04.17 13:03:36 в org.eclipse.persistence.internal.sessions.AbstractSession.ExecuteQuery(AbstractSession.java:1521) 06.04.17 13:03:36 в org.eclipse.persistence.internal.sessions.AbstractSession.ExecuteQuery(AbstractSession.java:1503) 06.04.17 14:03:36 в org.eclipse.persistence.internal.sessions.AbstractSession.ExecuteQuery(AbstractSession.java:1463) 06.04.17 13:03:36 в org.eclipse.persistence.internal.sessions.AbstractSession.checkAndRefreshInvalidObject(AbstractSession.java:1024) 06.04.17 13:03:36 в org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.cloneAndRegisterObject(UnitOfWorkImpl.java:960) 06.04.17 13:03:36 в org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildWorkingCopyCloneNormally(ObjectBuilder.java:628) 06.04.17 13:03:36 в org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObjectInUnitOfWork(ObjectBuilder.java:565) 06.04.17 13:03:36 в org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:497) 06.04.17 13:03:36 в org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:456) 06.04.17 13:03:36 в org.eclipse.persistence.запросы.ObjectLevelReadQuery.buildObject(ObjectLevelReadQuery.java:723) 06.04.17 13:03:36 в org.eclipse.persistence.запросы.ReadObjectQuery.registerResultInUnitOfWork(ReadObjectQuery.java:766) 06.04.17 13:03:36 в org.eclipse.persistence.запросы.ReadObjectQuery.executeObjectLevelReadQuery(ReadObjectQuery.java:451) 06.04.17 13:03:36 в org.eclipse.persistence.запросы.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:1080) 06.04.17 13:03:36 в org.eclipse.persistence.запросы.DatabaseQuery.execute(DatabaseQuery.java:808) 06.04.17 13:03:36 в org.eclipse.persistence.запросы.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1040) 06.04.17 13:03:36 в org.eclipse.persistence.запросы.ReadObjectQuery.execute(ReadObjectQuery.java:412) 06.04.17 13:03:36 в org.eclipse.persistence.запросы.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1126) 06.04.17 13:03:36 в org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2842) 06.04.17 13:03:36 в org.eclipse.persistence.internal.sessions.AbstractSession.ExecuteQuery(AbstractSession.java:1521) 06.04.17 13:03:36 в org.eclipse.persistence.internal.sessions.AbstractSession.ExecuteQuery(AbstractSession.java:1503) 06.04.17 14:03:36 в org.eclipse.persistence.internal.sessions.AbstractSession.ExecuteQuery(AbstractSession.java:1463) 06.04.17 13:03:36 в org.eclipse.persistence.internal.sessions.AbstractSession.checkAndRefreshInvalidObject(AbstractSession.java:1024) 06.04.17 13:03:36 в org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.cloneAndRegisterObject(UnitOfWorkImpl.java:960) 06.04.17 13:03:36 в org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildWorkingCopyCloneNormally(ObjectBuilder.java:628) 06.04.17 13:03:36 в org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObjectInUnitOfWork(ObjectBuilder.java:565) 06.04.17 13:03:36 в org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:497)
Комментарии:
1. Вы используете действительно странный способ чтения базы данных. Разве это не нормально для использования
EntityManager
?
Ответ №1:
Если вы посмотрите на свою политику недействительности:
TimeToLiveCacheInvalidationPolicy policy = new TimeToLiveCacheInvalidationPolicy(1);
policy.setShouldUpdateReadTimeOnUpdate(false);
descriptor.setCacheInvalidationPolicy(policy);
Вы сделали его недействительным в течение миллисекунды, вероятно, еще до того, как его можно будет прочитать. Хотя я не вижу больше информации о вашей объектной модели или выполняемых запросах, это, вероятно, вносит очень большой вклад в вашу проблему, поскольку это означает, что любые ссылки на этот объект почти всегда будут признаны недействительными и будут вынуждены запрашивать его снова.