У меня возникла проблема с ресурсами Hibernate, которые не найдены при развертывании в файле jar
на сервере приложений Oracle.Спящие сопоставления не найдены при развертывании на сервере приложений Oracle?
У меня есть несколько файлов отображения Hibernate, определенные в LocalSessionFactoryBean
следующим образом:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mappingLocations">
<list>
<value>classpath:/mapping/*.hbm.xml</value>
</list>
</property>
...
</bean>
Этот компонент находится в файле applicationContext.xml
.
В Hibernate отображений, классы, на которые ссылаются эти отображения, и файл applicationContext.xml
расположены в модуле foo
, который генерирует артефакт foo.jar
.
Я создал .ear
, который ссылается на foo.jar
и использует тот же файл applicationContext.xml
. Когда я раскрываю, что .ear
на сервере приложений Oracle я вижу следующее сообщение об ошибке:
java.io.FileNotFoundException: class path resource [mapping/] cannot be resolved to absolute file path because it does not reside in the file system: code-source:/.../oas10.1.3/j2ee/.../applications/.../WEB-INF/lib/foo.jar!mapping/
Когда я анализирую /WEB-INF/lib/foo.jar
я могу видеть mappings
каталог с файлами отображения Hibernate, как ожидалось.
В проверке разумности я создал простой проект с зависимостью от foo
и которая проходит следующий тест:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
public class AppTest {
@Autowired SessionFactory sessionFactory;
@Test
public void loadObjects() {
Session session = sessionFactory.openSession();
List<Foo> results = session.createQuery("from Foo").list();
System.out.println("found " + results.size() + " results");
}
}
Это работает, как ожидалось: пробеги запросов HQL и я получаю обратно правильное количество Foo объекты из базы данных.
Так почему же это простое приложение, ссылающееся на ресурсы сопоставления в foo.jar
, работает, но делать то же самое на сервере приложений Oracle приводит к тому, что ресурсы не найдены?
редактировать: Я попытался с помощью mappingJarLocations
вместо mappingLocations
:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mappingJarLocations">
<list>
<value>WEB-INF/lib/foo.jar</value>
</list>
</property>
...
</bean>
и получил FileNotFoundException
.
редактировать: Я вернулся к использованию mappingLocations
вместо mappingJarLocations
(как в моем первом примере), но на этот раз я скопировал *.hbm.xml
файлы непосредственно в WEB-INF/classes
каталог .war
файла.
Не удивительно, это сработало:
setMappingLocations() - file:/.../oas10.1.3/j2ee/.../applications/.../raps-site-9.0/WEB-INF/classes/mapping/Address.hbm.xml
Я попробую коммунальные банки, как предложено, но в качестве временной меры, я изменю свою pom.xml
скопировать отображения непосредственно в WEB-INF/classes
.
Спасибо за ответ. В настоящее время 'foo.jar' существует в файле' bar.war', который затем помещается в '.ear'. При развертывании существует файл 'WEB-INF/lib/foo.jar'. Требуется ли создание утилиты? –
AFAIK в банке утилиты должен находиться в корне '.ear' и указан манифест' bar.war' см. Http://stackoverflow.com/questions/15828781/architecture-of-a-java-ee- проект или http://www.coderanch.com/t/309491/EJB-JEE/java/utility-JAR-EAR-WAR – Gab
Фактически я указал свойство 'mappingJarLocations' с' file: **/foo.jar' и это похоже на трюк. Но теперь я получаю исключения «неизвестной сущности». Два шага вперед, один шаг назад ... –