Nano Hash - криптовалюты, майнинг, программирование

JPA 2.1 не загружается в Resin 3.1.9

Я использую Resin 3.1.9 для запуска веб-приложения Java с JPA 2.1. Я поместил библиотеки (JAR) в свою папку WEB-INF/lib и включил их в Resin.conf следующим образом:

<class-loader>
    <tree-loader path="${resin.root}/webapps/myapp/WEB-INF/lib"/>
</class-loader>

Если бы я не включил его в Resin.conf, я бы увидел исключение о том, что некоторые классы не удалось загрузить (даже при первой загрузке на домашней странице). Хорошо, теперь при загрузке домашней страницы это не проблема, но мне интересно, когда я пытаюсь добавить какую-либо запись (через форму CRUD), она говорит:

java.lang.NoClassDefFoundError: javax/persistence/spi/PersistenceProvider

На самом деле класс javax.persistence.spi.PersistenceProvider абсолютно существует в «WEB-INF/lib», который находится в файле «hibernate-jpa-2.1-api-1.0.0.Final.jar».

Есть ли какой-либо шаг отладки, как проверить загруженные библиотеки во время запуска Resin? Или у меня что-то не так в Resin.conf?

14.10.2014

Ответы:


1

EDIT После некоторых расследований мое предположение о проблеме SPI кажется неверным: двойные реализации JPA, объявленные неправильно, вызывают PersistenceException.

This is probably not a class loading problem but rather an SPI problem. Have you checked the provider element for hibernate in your persistence.xml ? This should be something like this :

<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

Perhaps you should also mention an SPI declaration, but you should only do so if you have multiple implementations available. This is probably the case because of the JPA implementation of your Java EE web profile server. In such a case, you should add a

services
folder in your
META-INF
folder and create a
javax.persistence.spi.PersistenceProvider
text file inside.

В этом файле должны быть перечислены две реализации поставщика постоянства (спящий режим и тот, который включен в Resin, я не нашел его в документации).

14.10.2014
  • Вы уверены, что дело не в загрузке классов? Потому что в исключении также сказано java.lang.ClassNotFoundException: javax.persistence.spi.PersistenceProvider 14.10.2014
  • Я не уверен, наверное: вы говорите, что интерфейс доступен для загрузки классов. Чтобы проверить, действительно ли класс доступен, вы должны сделать это самостоятельно, а не полагаться на платформу [Class.forName(javax.persistence.spi.PersistenceProvider)]. Если класс загружается правильно, вот он: SPI имеет особый способ загрузки классов, и в случае, когда у вас есть несколько реализаций, необходимо выполнить некоторую настройку. 14.10.2014
  • Моя подсказка неверна, это, вероятно, настоящая проблема ClassLoader: я попробовал решение с несколькими реализациями JPA без объявления и получил PersistenceException, а не ClassNotFoundException. Пожалуйста, дайте мне знать о результате Class#forName... 14.10.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..