Проблема с постоянным провайдером в проекте jpa и Struts - PullRequest
0 голосов
/ 03 января 2019

Я разрабатываю приложение Java ee, используя jpa для управления базой данных mysql и распорками.К сожалению, когда я запускаю проект на сервере tomcat, я получаю эту ошибку.

javax.persistence.PersistenceException: No Persistence provider for EntityManager named prova
    javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:56)
    javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:34)
    test.testing.initEntityManager(testing.java:37)
    test.testing.add(testing.java:16)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    java.lang.reflect.Method.invoke(Unknown Source)
    com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440)
    com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:279)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    com.googlecode.s2hibernate.struts2.plugin.s2hibernatevalidator.interceptor.HibernateValidatorInterceptor.intercept(HibernateValidatorInterceptor.java:38)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:128)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468)
    org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:76)

Я уже искал решение в Интернете, но ничего не решило мою проблему.Вот файлы:

src / test / Libro.java

enter image description here

src /test / testing.java

enter image description here

src / META-INF / persistence.xml

enter image description here

src / struts.xml

enter image description here

WebContent / WEB-INF / web.xml

enter image description here

WebContent / index.xml

enter image description here

Проект

Вид:

enter image description here

Lib:

enter image description here

Спасибо за помощь:)

1 Ответ

0 голосов
/ 11 января 2019

Основной выпуск

На скриншоте Lib видно, что у вас очень "смешанная" комбинация библиотек. Здесь кроется проблема! Вы не можете смешивать разные уровни API JPA. Вы смешали очень старую / раннюю версию 1.x с самым последним вариантом JPA 2.2 .

Вы помещаете persistence-api-1.0.2.jar и javax.persistence-api-2.2.jar в каталог lib в WEB-INF проекта. Это вызывает конфликты во время выполнения.

Таким образом:

  • Удалите устаревшую persistence-api-1.0.2.jar из папки и проверьте, разрешает ли это обнаруженное исключение. Если возникают другие исключения, во время выполнения возникает больше несоответствий с вашей настройкой.

Другие комментарии и изменения

Вы неправильно используете концепцию обработки транзакций в классе testing в методе createPlaces(). Ваш код:

em.persist();
em.getTransaction().begin();
em.getTransaction().commit();

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

EntityTransaction tx = null;
try {
    tx = em.getTransaction();
    tx.begin();
    // Only within a tx to prevent inconsistent states in the DB if sth fails here!
    em.persist(); 
    tx.commit();
} catch(RuntimeException) {
    if(if(tx != null && tx.isActive()) {
        tx.rollback();
    }   
}

Для получения более подробной информации, проверьте еще один ответ по обработке транзакций Я однажды написал. Это относится к JPA 2.2 и дает вам дополнительную глубину по этой теме.

Надеюсь, это поможет.

...