Хобрук: Ваш путь к мастерству в программировании

Как исправить ошибку OpenJPA Query SQL CACHE?

Мы используем OPENJPA с Tomcat, работающим с устаревшим проприетарным пакетом org.apache.renamed.openjpa, подготовленным Elatic Path Software. Мы обнаружили, что для выполнения некоторых запросов необходимо отключить QuerySQLCache. Например, следующий довольно сложный запрос:

ВЫБЕРИТЕ t0.CARRIER, t0.CODE, t0.DEFAULT_COST, t0.ENABLED, t0.GUID, t0.LAST_MODIFIED_DATE, t1.UIDPK, t1.TYPE, t2.UIDPK, t2.GUID, t2.NAME, t2.REGION_STR, t3 .UIDPK, t4.UIDPK, t4.CATALOG_CODE, t4.DEFAULT_LOCALE, t4.MASTER, t4.NAME, t3.STORECODE, t3.CONTENT_ENCODING, t3.COUNTRY, t3.CREDIT_CARD_CVV2_ENABLED, t3.DEFAULT_CURRENCY, t3.DEFAULT_DERIPTION,DEFAULT_LOCALE , t3.DISPLAY_OUT_OF_STOCK, t3.EMAIL_SENDER_ADDRESS, t3.EMAIL_SENDER_NAME, t3.ENABLED, t3.NAME, t3.STORE_ADMIN_EMAIL, t3.STORE_FULL_CREDIT_CARDS, t3.STORE_STATE, t3.STORE_TYPE, t3.SUB_TIMEONE, t3.STORE_TYPE, t3.SUB_TIMEONE, t3.TIME .Object_uid, t5.uidpk, t5.type, t5.localized_property_key, t5.value от tshippingserviCelevel t0 левый внешний присоединение tshippingcostcalculationmethod t1 на t0.sccm_uid = t1.uidpk оставлена ​​внешняя присоединение tshipping_uid t2 на T0.shippect_region_uid TSTORE t3 ON t0.STORE_UID = t3.UIDPK LEFT OUTER JOIN TLOCALIZEDPROPERTIES t5 ON t0.UIDPK = t5.OBJECT_UID AND ? = t5.TYPE LEFT OUTER JOIN TCATALOG t4 ON t3.CATALOG_UID = t4.UIDPK ГДЕ t0.UIDPK = ?

приводит к ошибке:

org.apache.renamed.openjpa.persistence.PersistenceException: No value specified for parameter 2 

Ошибка не возникает, когда кеш отключен. Обратите внимание, что источником этого запроса являются сложные отношения выборки, написанные способом, характерным для OPENJPA.
Он начинается с поиска заказа, содержащего Группа выборки и отгрузки (интерфейс ShipOrder). Из реализации ShipOrder (PhysicalOrderShipmentImpl) мы получаем shippingServiceLevelInternal, что приводит к оператору выбора для TSHIPPINGSERVICELEVEL (см. код ниже).

@FetchGroup(name = FetchGroupConstants.ORDER_SEARCH, attributes = { 
            @FetchAttribute(name = "orderNumber"),
            @FetchAttribute(name = "shipments"),
...
@DataCache(enabled = false)
public class OrderImpl extends AbstractListenableEntityImpl
private List<OrderShipment> shipments = new ArrayList<OrderShipment>();


public interface PhysicalOrderShipment extends OrderShipment
...
ShippingServiceLevel getShippingServiceLevel();

@FetchGroup(name = FetchGroupConstants.ORDER_DEFAULT, attributes = {
    @FetchAttribute(name = "shipmentAddressInternal"),
    @FetchAttribute(name = "shippingServiceLevelInternal")
}, fetchGroups = { FetchGroupConstants.DEFAULT  }, postLoad = true)
})
@DataCache(enabled = false)
public class PhysicalOrderShipmentImpl extends AbstractOrderShipmentImpl implements PhysicalOrderShipment {
...
/**
 * Gets the shipping service level.
 *
 * @return ShippingServiceLevel the shipping service level
 */
ShippingServiceLevel getShippingServiceLevel();

Из журнала я также вижу некоторые проблемы с кэшем QuerySQL:

catalina.07080951.out:DEBUG Отсутствие кеша при поиске ключа "org.apache.renamed.openjpa.datacache.QueryKey@9202a145 [запрос: [ВЫБЕРИТЕ sr FROM ShippingRegionImpl sr ORDER BY sr.name], путь доступа: [com.elasticpath.domain.shipping.impl.ShippingRegionImpl],subs:true,ignoreChanges:false,startRange:0,endRange:9223372036854775807,timeout:1800000]". catalina.07080951.out:DEBUG Поместите ключ "org.apache.renamed.openjpa.datacache.QueryKey@9202a145[запрос: [ВЫБЕРИТЕ sr FROM ShippingRegionImpl sr ORDER BY sr.name], путь доступа: [com.elasticpath.domain.shipping .impl.ShippingRegionImpl],subs:true,ignoreChanges:false,startRange:0,endRange:9223372036854775807,timeout:1800000]" в кеш.

Есть ли способ исправить наше приложение, позволяющее включать QuerySQLCache в OpenJPA? Извините за не совсем понятный пример кода, весь код займет много места. Подсказки приветствуются.

21.07.2014

Ответы:


1

Есть ли способ исправить наше приложение, позволяющее нам включить QuerySQLCache в OpenJPA?

Краткий ответ, скорее всего, нет. В QuerySQLCache было исправлено множество ошибок. Поскольку вы используете переупакованную версию OpenJPA, я не думаю, что вы можете попробовать более новую версию OpenJPA, чтобы увидеть, была ли устранена проблема, с которой вы столкнулись? Если это решит вашу проблему, вам нужно будет работать с Elastic Path, чтобы обновить версию OpenJPA, которую они поставляют.

22.07.2014
Новые материалы

Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

Как настроить Selenium в проекте Angular
Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

Аргументы прогрессивного улучшения почти всегда упускают суть
В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

Введение в Джанго Фреймворк
Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

стройный-i18следующий
Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..