CWWJP0015E Ошибка при создании фабрики диспетчера сущностей для единицы сохраняемости

Я столкнулся со следующей ошибкой при запуске моего приложения EJB в IBM WebSphere Application Server WAS 7.

JPAPUnitInfo E CWWJP0015E: Произошла ошибка в поставщике сохраняемости org.hibernate.ejb.HibernatePersistence при попытке создать фабрику диспетчера сущностей контейнера для единицы сохраняемости *YOUR_PERSISTENCE_UNIT*. Произошла следующая ошибка: [PersistenceUnit: *YOUR_PERSISTENCE_UNIT*] класс или пакет не найден

Хотя это сообщение об ошибке может остаться незамеченным во время запуска, самое позднее, когда вы попытаетесь получить диспетчер сущностей, вы увидите эту ошибку:

javax.ejb.EJBException: ошибка внедрения; вложенное исключение: java.lang.IllegalStateException: EntityManagerFactory не был создан для PU: PuId=

Сообщение об ошибке одинаково для разных сценариев ошибок, поэтому вы найдете множество решений в Интернете, но ни одно из них может не подойти.


person Peter Wippermann    schedule 22.05.2013    source источник


Ответы (2)


Действительно, подсказка из сообщения об ошибке класс или пакет не найден верна, хотя и не очень полезна, поскольку имя отсутствующего класса не сообщается.

В моем случае у меня был класс, указанный в моем persistence.xml, которого больше не существовало.

Чтобы узнать, откуда появилось это сообщение об ошибке, взгляните на Ejb3Configuration.addNamedAnnotatedClasses(...), там вы найдете следующее:

throw new PersistenceException( getExceptionHeader() +  "class or package not found", cnfe );

Таким образом, информация о том, какой класс не был найден, доступна в cnfe ClassNotFoundException, но, к сожалению, она каким-то образом не передается в файл журнала.

Чтобы получить доступ к информации, просто поставьте там точку останова отладки и проверьте объект cnfe.

person Peter Wippermann    schedule 22.05.2013
comment
Отсутствующее распространение информации CNFException может быть связано с конфигурацией уровня журнала. - person Peter Wippermann; 23.05.2013

Если кто-то снова столкнется с этой проблемой, как недавно, у меня есть довольно простой способ найти точную причину, однако ее довольно легко не заметить.

Точные журналы для этого исключения не отображаются в основных журналах SystemOut/Err WebSphere. Однако его можно найти в журналах ffdc (например, %APP_PROGILE_PATH%\logs\ffdc).

Найдите такие записи, как

[2/18/15 1:49:25:547 UTC] 0000004e FfdcProvider W com.ibm.ws.ffdc.impl.FfdcProvider logIncident FFDC1003I: FFDC Incident emitted on \IBM\AppSrv\logs\ffdc\server1_6d42a5e6_15.02.18_01.49.25.1322237127215208595734.txt com.ibm.ws.jpa.management.JPAPUnitInfo.createEMFactory 759

перед исключением CWWJP0015E в SystemOut.log, чтобы узнать точное имя файла для вашего инцидента.

Если для этого исключения нет записи, попробуйте дополнительно установить более высокий уровень журнала. Однако это не должно требоваться для настроек WebSphere по умолчанию. 1. Выберите: Консоль администрирования WebSphere > Устранение неполадок > Журналы и трассировка > Сервер > Диагностическая трассировка > Изменить уровни детализации журнала 2. Установите уровень ведения журнала для "com.ibm.ws.jpa.*" на "Все сообщения и трассировки" 3 , Перезапустите WebSphere

person TouDick    schedule 18.02.2015