Обнаружено исправление проблемы, по крайней мере, с тем, с чем я работаю: IBM WebSphere 7 и MyEclipse Blue (Spring) или Bling, ver. 10.6. Я создал приложение, которое зависит от других проектов, один из которых использует Hibernate 3.6.3, требующий JPA 2.0. IBM WS загружает JPA 1.0, чтобы поддерживать себя впереди JPA 2.0, и разрешает все ссылки на JPA до версии. 1,0. В случае IBM WS это вызывает ошибку, указанную выше. Единственное исправление, с которым я столкнулся с тех пор, включает добавление JPA 2.0 в качестве разделяемой библиотеки, а затем настройку сервера для загрузки этой библиотеки перед ее собственными классами, аналогично методу, обсуждаемому здесь:
http://www.mkyong.com/websphere/websphere-7-javaxpersistenceonetomany-orphanremoval-error/
Но наши администраторы сервера не допустят изменений в общесерверной политике загрузчика классов. Поэтому мне все еще нужно было найти способ заставить мой проект использовать JPA 2.0, а не 1.0. Я много чего перепробовал, но в конце концов выбрал «Радуйся, Мария», и это сработало.
Исправление состоит в том, чтобы добавить файл JPA 2.0 .jar в ваши проекты .war и .ear, а затем отредактировать строку Class-Path в файле манифеста в ваших проектах .war и .ear, указав на файлы .jar. , Кажется, что они должны быть в обоих, иначе подход не будет работать, поэтому JPA 2.0 .jar должен быть как в .war, так и в .ear.
В вашем приложении (проект .war) добавьте hibernate-jpa-2.0-api-1.0.0.Final.jar в корневой каталог проекта. MyEclipse Blue отобразит его в виде файла в этом месте, а также в списке «Библиотеки ссылок» в представлении Package Explorer. Затем откройте файл манифеста в /WebRoot/META-INF/MANIFEST.MF и убедитесь, что в строке Class-Path указано:
Class-Path: /hibernate-jpa-2.0-api-1.0.0.Final.jar
В вашем проекте .ear добавьте hibernate-jpa-2.0-api-1.0.0.Final.jar в папку 'lib' в корневом каталоге вашего проекта. Если там нет папки 'lib', создайте ее. Затем в /META-INF/MANIFEST.MF убедитесь, что в строке Class-Path указано:
Class-Path: /lib/hibernate-jpa-2.0-api-1.0.0.Final.jar
Убедитесь, что все файлы сохранены, и выполните чистую сборку. Затем экспортируйте .ear и разверните его как обычно с помощью консоли Integrated Solutions Console. Но есть еще одна вещь, которую вы должны сделать, прежде чем изменения сработают; это требует изменения политики загрузки классов для приложения, но не для сервера. У вас гораздо больше шансов заставить администратора WAS пойти на это, чем изменить политику загрузчика классов для всего сервера. Чтобы внести необходимые изменения, после установки .ear-файла, следуйте левой навигационной панели, щелкните по следу "Applications\Application Types\Websphere enterprise applications"
и нажмите на название вашего приложения, затем нажмите «Загрузка классов и update detection"
. Затем выберите "Classes loaded with local class loader first (parent last)"
в разделе "Class loader order"
, затем нажмите Apply
, а затем Save
. Теперь вернитесь к следу клика "Applications\Application Types\Websphere enterprise applications"
, либо запустите, либо перезапустите приложение. Протестируйте свое приложение и, надеюсь, у вас все получится.
Последнее замечание: Каждый раз, когда вы повторно развертываете свой .ear-файл, вам нужно будет установить опцию загрузчика классов, которую я только что обсуждал. Предпочтение не сохраняется между развертываниями.