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=
Сообщение об ошибке одинаково для разных сценариев ошибок, поэтому в Интернете вы найдете множество решений, но ни одно из них не подходит.
2 ответа
Действительно, подсказка из класса сообщения об ошибке или пакета, который не найден, является правильной, хотя и не очень полезной, поскольку отсутствующее имя класса не сообщается.
В моем случае в моем файле persistence.xml был указан класс, который больше не существует.
Чтобы увидеть, откуда это сообщение об ошибке, посмотрите на Ejb3Configuration.addNamedAnnotatedClasses(...)
там вы найдете следующее:
throw new PersistenceException( getExceptionHeader() + "class or package not found", cnfe );
Таким образом, информация о том, какой класс не был найден, доступна в cnfe ClassNotFoundException
но, к сожалению, это не распространяется как-то в лог-файл.
Чтобы получить доступ к информации, просто установите точку отладки и осмотрите cnfe
объект.
Если кто-то снова сталкивается с этой проблемой, как в последнее время, я нашел довольно простой способ найти точную причину, однако довольно легко не заметить ее.
Точные журналы для этого исключения не отображаются в основных журналах 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.